-
Notifications
You must be signed in to change notification settings - Fork 1.2k
ci: migrate primary CI jobs to ARM runners #7232
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -112,26 +112,28 @@ jobs: | |
| runs-on-amd64: ${{ needs.check-skip.outputs['runner-amd64'] }} | ||
| runs-on-arm64: ${{ needs.check-skip.outputs['runner-arm64'] }} | ||
|
|
||
| depends-aarch64-linux: | ||
| name: aarch64-linux-gnu | ||
| depends-linux64: | ||
| name: linux64 (native) | ||
| uses: ./.github/workflows/build-depends.yml | ||
| needs: [check-skip, container, cache-sources] | ||
| if: ${{ vars.SKIP_ARM_LINUX == '' }} | ||
| if: | | ||
| vars.SKIP_LINUX64 == '' || | ||
| vars.SKIP_LINUX64_FUZZ == '' || | ||
| vars.SKIP_LINUX64_SQLITE == '' | ||
| with: | ||
| build-target: aarch64-linux | ||
| build-target: linux64 | ||
| container-path: ${{ needs.container.outputs.path }} | ||
| base-image-digest: ${{ needs.check-skip.outputs.base-image-digest }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }} | ||
| effective-runs-on: ${{ needs.check-skip.outputs['runner-arm64'] }} | ||
|
|
||
| depends-linux64: | ||
| name: x86_64-pc-linux-gnu | ||
| depends-linux64-x86: | ||
| name: linux64 (x86 canary) | ||
| uses: ./.github/workflows/build-depends.yml | ||
| needs: [check-skip, container, cache-sources] | ||
| if: | | ||
| vars.SKIP_LINUX64 == '' || | ||
| vars.SKIP_LINUX64_FUZZ == '' || | ||
| vars.SKIP_LINUX64_SQLITE == '' || | ||
| vars.SKIP_LINUX64_UBSAN == '' | ||
| vars.SKIP_LINUX64_UBSAN == '' || | ||
| vars.SKIP_LINUX64_X86CANARY == '' | ||
| with: | ||
| build-target: linux64 | ||
| container-path: ${{ needs.container.outputs.path }} | ||
|
|
@@ -142,17 +144,26 @@ jobs: | |
| name: linux64_multiprocess | ||
| uses: ./.github/workflows/build-depends.yml | ||
| needs: [check-skip, container, cache-sources] | ||
| if: | | ||
| vars.SKIP_LINUX64_MULTIPROCESS == '' || | ||
| vars.SKIP_LINUX64_TSAN == '' | ||
| if: ${{ vars.SKIP_LINUX64_TSAN == '' }} | ||
| with: | ||
| build-target: linux64_multiprocess | ||
| container-path: ${{ needs.container.outputs.path }} | ||
| base-image-digest: ${{ needs.check-skip.outputs.base-image-digest }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-arm64'] }} | ||
|
|
||
| depends-linux64_multiprocess-x86: | ||
| name: linux64_multiprocess (x86) | ||
| uses: ./.github/workflows/build-depends.yml | ||
| needs: [check-skip, container, cache-sources] | ||
| if: ${{ vars.SKIP_LINUX64_MULTIPROCESS == '' }} | ||
| with: | ||
| build-target: linux64_multiprocess | ||
| container-path: ${{ needs.container.outputs.path }} | ||
| base-image-digest: ${{ needs.check-skip.outputs.base-image-digest }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }} | ||
|
|
||
| depends-linux64_nowallet: | ||
| name: x86_64-pc-linux-gnu_nowallet | ||
| name: linux64_nowallet (native) | ||
| uses: ./.github/workflows/build-depends.yml | ||
| needs: [check-skip, container, cache-sources] | ||
| if: ${{ vars.SKIP_LINUX64_NOWALLET == '' }} | ||
|
|
@@ -192,18 +203,6 @@ jobs: | |
| container-path: ${{ needs.container-slim.outputs.path }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }} | ||
|
|
||
| src-aarch64-linux: | ||
| name: aarch64-linux-build | ||
| uses: ./.github/workflows/build-src.yml | ||
| needs: [check-skip, container, depends-aarch64-linux] | ||
| with: | ||
| build-target: aarch64-linux | ||
| container-path: ${{ needs.container.outputs.path }} | ||
| depends-key: ${{ needs.depends-aarch64-linux.outputs.key }} | ||
| depends-host: ${{ needs.depends-aarch64-linux.outputs.host }} | ||
| depends-dep-opts: ${{ needs.depends-aarch64-linux.outputs.dep-opts }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }} | ||
|
|
||
| src-linux64: | ||
| name: linux64-build | ||
| uses: ./.github/workflows/build-src.yml | ||
|
|
@@ -215,7 +214,7 @@ jobs: | |
| depends-key: ${{ needs.depends-linux64.outputs.key }} | ||
| depends-host: ${{ needs.depends-linux64.outputs.host }} | ||
| depends-dep-opts: ${{ needs.depends-linux64.outputs.dep-opts }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-arm64'] }} | ||
|
|
||
| src-linux64_fuzz: | ||
| name: linux64_fuzz-build | ||
|
|
@@ -228,20 +227,20 @@ jobs: | |
| depends-key: ${{ needs.depends-linux64.outputs.key }} | ||
| depends-host: ${{ needs.depends-linux64.outputs.host }} | ||
| depends-dep-opts: ${{ needs.depends-linux64.outputs.dep-opts }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-arm64'] }} | ||
|
|
||
| src-linux64_multiprocess: | ||
| name: linux64_multiprocess-build | ||
| uses: ./.github/workflows/build-src.yml | ||
| needs: [check-skip, container, depends-linux64_multiprocess, lint] | ||
| needs: [check-skip, container, depends-linux64_multiprocess-x86, lint] | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Now that Useful? React with 👍 / 👎. |
||
| if: ${{ vars.SKIP_LINUX64_MULTIPROCESS == '' }} | ||
| with: | ||
| build-target: linux64_multiprocess | ||
| container-path: ${{ needs.container.outputs.path }} | ||
| depends-key: ${{ needs.depends-linux64_multiprocess.outputs.key }} | ||
| depends-host: ${{ needs.depends-linux64_multiprocess.outputs.host }} | ||
| depends-dep-opts: ${{ needs.depends-linux64_multiprocess.outputs.dep-opts }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-arm64'] }} | ||
| depends-key: ${{ needs.depends-linux64_multiprocess-x86.outputs.key }} | ||
| depends-host: ${{ needs.depends-linux64_multiprocess-x86.outputs.host }} | ||
| depends-dep-opts: ${{ needs.depends-linux64_multiprocess-x86.outputs.dep-opts }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }} | ||
|
|
||
| src-linux64_nowallet: | ||
| name: linux64_nowallet-build | ||
|
|
@@ -266,7 +265,7 @@ jobs: | |
| depends-key: ${{ needs.depends-linux64.outputs.key }} | ||
| depends-host: ${{ needs.depends-linux64.outputs.host }} | ||
| depends-dep-opts: ${{ needs.depends-linux64.outputs.dep-opts }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-arm64'] }} | ||
|
|
||
| src-linux64_tsan: | ||
| name: linux64_tsan-build | ||
|
|
@@ -284,14 +283,27 @@ jobs: | |
| src-linux64_ubsan: | ||
| name: linux64_ubsan-build | ||
| uses: ./.github/workflows/build-src.yml | ||
| needs: [check-skip, container, depends-linux64] | ||
| needs: [check-skip, container, depends-linux64-x86] | ||
| if: ${{ vars.SKIP_LINUX64_UBSAN == '' }} | ||
| with: | ||
| build-target: linux64_ubsan | ||
| container-path: ${{ needs.container.outputs.path }} | ||
| depends-key: ${{ needs.depends-linux64.outputs.key }} | ||
| depends-host: ${{ needs.depends-linux64.outputs.host }} | ||
| depends-dep-opts: ${{ needs.depends-linux64.outputs.dep-opts }} | ||
| depends-key: ${{ needs.depends-linux64-x86.outputs.key }} | ||
| depends-host: ${{ needs.depends-linux64-x86.outputs.host }} | ||
| depends-dep-opts: ${{ needs.depends-linux64-x86.outputs.dep-opts }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }} | ||
|
|
||
| src-linux64_x86canary: | ||
| name: linux64_x86canary-build | ||
| uses: ./.github/workflows/build-src.yml | ||
| needs: [check-skip, container, depends-linux64-x86] | ||
| if: ${{ vars.SKIP_LINUX64_X86CANARY == '' }} | ||
| with: | ||
| build-target: linux64_x86canary | ||
| container-path: ${{ needs.container.outputs.path }} | ||
| depends-key: ${{ needs.depends-linux64-x86.outputs.key }} | ||
| depends-host: ${{ needs.depends-linux64-x86.outputs.host }} | ||
| depends-dep-opts: ${{ needs.depends-linux64-x86.outputs.dep-opts }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }} | ||
|
|
||
| src-mac: | ||
|
|
@@ -326,7 +338,7 @@ jobs: | |
| bundle-key: ${{ needs.src-linux64.outputs.key }} | ||
| build-target: linux64 | ||
| container-path: ${{ needs.container-slim.outputs.path }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-arm64'] }} | ||
|
|
||
| test-linux64_multiprocess: | ||
| name: linux64_multiprocess-test | ||
|
|
@@ -336,7 +348,7 @@ jobs: | |
| bundle-key: ${{ needs.src-linux64_multiprocess.outputs.key }} | ||
| build-target: linux64_multiprocess | ||
| container-path: ${{ needs.container-slim.outputs.path }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-arm64'] }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }} | ||
|
Comment on lines
232
to
+351
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🟡 Suggestion: multiprocess lane moved from ARM to x86 — contradicts PR description and drops ARM coverage
source: ['claude', 'codex'] 🤖 Fix this with AI agents |
||
|
|
||
| test-linux64_nowallet: | ||
| name: linux64_nowallet-test | ||
|
|
@@ -356,7 +368,7 @@ jobs: | |
| bundle-key: ${{ needs.src-linux64_sqlite.outputs.key }} | ||
| build-target: linux64_sqlite | ||
| container-path: ${{ needs.container-slim.outputs.path }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-arm64'] }} | ||
|
|
||
| test-linux64_tsan: | ||
| name: linux64_tsan-test | ||
|
|
@@ -377,3 +389,14 @@ jobs: | |
| build-target: linux64_ubsan | ||
| container-path: ${{ needs.container-slim.outputs.path }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }} | ||
|
|
||
| test-linux64_x86canary: | ||
| name: linux64_x86canary-test | ||
| uses: ./.github/workflows/test-src.yml | ||
| needs: [check-skip, container-slim, src-linux64_x86canary, lint] | ||
| with: | ||
| bundle-key: ${{ needs.src-linux64_x86canary.outputs.key }} | ||
| build-target: linux64_x86canary | ||
| container-path: ${{ needs.container-slim.outputs.path }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }} | ||
| integration-tests-args: "--exclude feature_pruning,feature_dbcrash" | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -19,9 +19,14 @@ on: | |
| description: "Runner label to use (e.g., ubuntu-24.04 or ubuntu-24.04-arm)" | ||
| required: true | ||
| type: string | ||
| integration-tests-args: | ||
| description: "Override for INTEGRATION_TESTS_ARGS passed to test_integrationtests.sh" | ||
| required: false | ||
| type: string | ||
| default: "--extended --exclude feature_pruning,feature_dbcrash" | ||
|
|
||
| env: | ||
| INTEGRATION_TESTS_ARGS: "--extended --exclude feature_pruning,feature_dbcrash" | ||
| INTEGRATION_TESTS_ARGS: ${{ inputs.integration-tests-args }} | ||
| CI_FAILFAST_TEST_LEAVE_DANGLING: 1 # GHA does not care about dangling processes and setting this variable avoids killing the CI script itself on error | ||
|
|
||
| jobs: | ||
|
|
@@ -49,7 +54,7 @@ jobs: | |
| with: | ||
| path: | | ||
| releases | ||
| key: releases-${{ hashFiles('ci/test/00_setup_env_native_qt5.sh', 'test/get_previous_releases.py') }} | ||
| key: releases-${{ runner.arch }}-${{ hashFiles('ci/test/00_setup_env_native_qt5.sh', 'test/get_previous_releases.py') }} | ||
|
Comment on lines
54
to
+57
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 💬 Nitpick: Releases cache keyed by The cache step correctly includes source: ['claude'] |
||
|
|
||
| - name: Run functional tests | ||
| id: test | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -23,7 +23,7 @@ export LD_LIBRARY_PATH=$DEPENDS_DIR/$HOST/lib | |
| if [ "$DOWNLOAD_PREVIOUS_RELEASES" = "true" ]; then | ||
| echo "Downloading previous releases..." | ||
| # shellcheck disable=SC2086 | ||
| ./test/get_previous_releases.py -b -t "$PREVIOUS_RELEASES_DIR" | ||
| ./test/get_previous_releases.py -b -t "$PREVIOUS_RELEASES_DIR" ${PREVIOUS_RELEASES_TAGS:-} | ||
| fi | ||
|
|
||
| cd "build-ci/dashcore-$BUILD_TARGET" | ||
|
|
@@ -44,7 +44,7 @@ EXTRA_ARGS="--dashd-arg=-socketevents=$SOCKETEVENTS" | |
|
|
||
| set +e | ||
| # shellcheck disable=SC2086 | ||
| LD_LIBRARY_PATH="$DEPENDS_DIR/$HOST/lib" ./test/functional/test_runner.py --ci --attempts=3 --ansi --combinedlogslen=4000 --timeout-factor="${TEST_RUNNER_TIMEOUT_FACTOR}" ${TEST_RUNNER_EXTRA} --failfast --nocleanup --tmpdir="$(pwd)/testdatadirs" $PASS_ARGS $EXTRA_ARGS | ||
| LD_LIBRARY_PATH="$DEPENDS_DIR/$HOST/lib" ./test/functional/test_runner.py --ci --attempts=3 --ansi --combinedlogslen=4000 --timeout-factor="${TEST_RUNNER_TIMEOUT_FACTOR}" $PASS_ARGS ${TEST_RUNNER_EXTRA} --failfast --nocleanup --tmpdir="$(pwd)/testdatadirs" $EXTRA_ARGS | ||
|
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🟡 Suggestion: PASS_ARGS / TEST_RUNNER_EXTRA order swapped — silently flips precedence for all CI targets The diff swaps the order from source: ['claude'] 🤖 Fix this with AI agents |
||
| RESULT=$? | ||
| set -e | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -31,8 +31,31 @@ export MAKEJOBS=${MAKEJOBS:--j$(nproc)} | |
| export BASE_SCRATCH_DIR=${BASE_SCRATCH_DIR:-$BASE_ROOT_DIR/ci/scratch} | ||
| # What host to compile for. See also ./depends/README.md | ||
| # Tests that need cross-compilation export the appropriate HOST. | ||
| # Tests that run natively guess the host | ||
| export HOST=${HOST:-$("$BASE_ROOT_DIR/depends/config.guess")} | ||
| # Tests that run natively detect the host based on architecture. | ||
| # We use explicit triplets rather than config.guess to ensure they match | ||
| # the triplets used by depends (e.g. aarch64-linux-gnu, not aarch64-unknown-linux-gnu). | ||
| if [ -z "$HOST" ]; then | ||
| case "$(uname -m)" in | ||
| aarch64) | ||
| export HOST=aarch64-linux-gnu | ||
| ;; | ||
| x86_64) | ||
| export HOST=x86_64-pc-linux-gnu | ||
| ;; | ||
| *) | ||
| if command -v dpkg >/dev/null 2>&1; then | ||
| arch="$(dpkg --print-architecture)" | ||
| if [ "${arch}" = "arm64" ]; then | ||
| export HOST=aarch64-linux-gnu | ||
| elif [ "${arch}" = "amd64" ]; then | ||
| export HOST=x86_64-pc-linux-gnu | ||
| fi | ||
| fi | ||
| # Final fallback to config.guess | ||
| export HOST=${HOST:-$("$BASE_ROOT_DIR/depends/config.guess")} | ||
| ;; | ||
| esac | ||
| fi | ||
|
Comment on lines
+34
to
+58
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 💬 Nitpick: Catch-all branch may fall back to In the source: ['claude'] |
||
| # Whether to prefer BusyBox over GNU utilities | ||
| export USE_BUSY_BOX=${USE_BUSY_BOX:-false} | ||
|
|
||
|
|
||
This file was deleted.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💬 Nitpick:
runs-onis dead wheneffective-runs-onis also supplied on depends-linux64depends-linux64passes bothruns-on: runner-amd64andeffective-runs-on: runner-arm64. In build-depends.yml every consumer (check-cache.runs-onat line 40,build.runs-onat line 106, and the cache-key prefix at line 74) readsinputs.effective-runs-on || inputs.runs-on, so therunner-amd64value is never actually used — the job executes on ARM and the cache key containsrunner-arm64. The call site reads as if the fallback matters, which it doesn't. Either dropruns-onhere and set the ARM runner directly, or add a comment explaining whatruns-onmeans wheneffective-runs-onis also set (logical target vs physical runner).💡 Suggested change
source: ['claude']