diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index fd644020..ab12bb93 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -130,7 +130,6 @@ jobs: runs-on: ${{ inputs.ARCH == 'x64' && 'ubuntu-22.04' || inputs.ARCH }} timeout-minutes: ${{ inputs.BUILD_TIMEOUT || (inputs.ARCH == 'x64' && 340 || 2880) }} name: build debs - continue-on-error: true outputs: LATEST_PACKAGE: ${{ steps.build.outputs.LATEST_PACKAGE }} diff --git a/.github/workflows/interactive.yaml b/.github/workflows/interactive.yaml index 7d73b865..245f2d75 100644 --- a/.github/workflows/interactive.yaml +++ b/.github/workflows/interactive.yaml @@ -86,6 +86,7 @@ jobs: stage-2: needs: stage-1 + if: needs.stage-1.result == 'success' || ${{ inputs.CONTINUE_ON_ERROR }} uses: ubi-agni/ros-builder-action/.github/workflows/build.yaml@main with: DEB_DISTRO: ${{ inputs.DEB_DISTRO || vars.DEB_DISTRO }} @@ -109,6 +110,7 @@ jobs: stage-3: needs: stage-2 + if: needs.stage-2.result == 'success' || ${{ inputs.CONTINUE_ON_ERROR }} uses: ubi-agni/ros-builder-action/.github/workflows/build.yaml@main with: DEB_DISTRO: ${{ inputs.DEB_DISTRO || vars.DEB_DISTRO }} @@ -131,7 +133,7 @@ jobs: INSTALL_TO_CHROOT: ${{ inputs.INSTALL_TO_CHROOT || vars.INSTALL_TO_CHROOT || false }} deploy: - needs: stage-3 + needs: [stage-1, stage-2, stage-3] if: success() && vars.DEPLOY_URL timeout-minutes: 15 runs-on: ubuntu-latest diff --git a/.github/workflows/scheduled.yaml b/.github/workflows/scheduled.yaml index 11b851e6..59531fa2 100644 --- a/.github/workflows/scheduled.yaml +++ b/.github/workflows/scheduled.yaml @@ -1,6 +1,7 @@ name: scheduled on: + workflow_dispatch: schedule: # 8 PM UTC every day - cron: "0 20 * * *" @@ -30,7 +31,7 @@ jobs: deploy: needs: build - if: success() && vars.DEPLOY_URL + if: always() && vars.DEPLOY_URL timeout-minutes: 15 runs-on: ubuntu-latest concurrency: diff --git a/ros-one.repos b/ros-one.repos index b23efda3..1599e755 100644 --- a/ros-one.repos +++ b/ros-one.repos @@ -1060,3 +1060,11 @@ sbuild_options: eigenpy: amd64: --jobs=2 arm64: --jobs=1 + +known_failures: + all: + - jsk_3rdparty/* + jammy: + noble: + - librealsense2 + - gazebo_ros_pkgs/gazebo_dev diff --git a/src/build.sh b/src/build.sh index ed638754..fd0f45b6 100644 --- a/src/build.sh +++ b/src/build.sh @@ -292,6 +292,19 @@ function build_python_pkg { ici_label update_repo } +function known_to_fail { + local pkg_path=$1 + for key in all "$DEB_DISTRO"; do + while IFS= read -r failure; do + # shellcheck disable=SC2053 + if [[ "$pkg_path" == $failure ]]; then + return 0 + fi + done < <(yq ".known_failures.${key}[]" "$WS_SOURCE" 2> /dev/null) + done + return 1 +} + function build_source { local old_path=$PWD local ws_path="$PWD/ws" @@ -339,7 +352,9 @@ function build_source { *) msg_prefix="unnamed step failed ($exit_code)" ;; esac - if [ "$CONTINUE_ON_ERROR" = false ]; then + if known_to_fail "${PKG_FOLDERS[$idx]}"; then + gha_warning "$msg_prefix on $pkg_desc." + elif [ "$CONTINUE_ON_ERROR" = false ]; then # exit with custom error message ici_exit "$exit_code" gha_error "$msg_prefix on $pkg_desc." else