-
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,27 @@ 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'] }} | ||
| 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,25 +143,34 @@ 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 == '' }} | ||
| with: | ||
| build-target: linux64_nowallet | ||
| container-path: ${{ needs.container.outputs.path }} | ||
| base-image-digest: ${{ needs.check-skip.outputs.base-image-digest }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-arm64'] }} | ||
|
|
||
| depends-mac: | ||
| name: x86_64-apple-darwin | ||
|
|
@@ -192,18 +202,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 +213,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 +226,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] | ||
|
thepastaclaw marked this conversation as resolved.
|
||
| 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 | ||
|
|
@@ -253,7 +251,7 @@ jobs: | |
| depends-key: ${{ needs.depends-linux64_nowallet.outputs.key }} | ||
| depends-host: ${{ needs.depends-linux64_nowallet.outputs.host }} | ||
| depends-dep-opts: ${{ needs.depends-linux64_nowallet.outputs.dep-opts }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-arm64'] }} | ||
|
|
||
| src-linux64_sqlite: | ||
| name: linux64_sqlite-build | ||
|
|
@@ -266,7 +264,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 +282,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 +337,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 +347,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
231
to
+350
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
Comment on lines
153
to
+350
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: The regular multiprocess lane was moved off ARM, leaving no non-TSAN arm64 coverage for that configuration This change introduces source: ['claude', 'codex'] 🤖 Fix this with AI agents
Comment on lines
347
to
+350
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: Non-TSAN multiprocess lane no longer has native ARM coverage After this migration, source: ['codex'] 🤖 Fix this with AI agents |
||
|
|
||
| test-linux64_nowallet: | ||
| name: linux64_nowallet-test | ||
|
|
@@ -346,7 +357,7 @@ jobs: | |
| bundle-key: ${{ needs.src-linux64_nowallet.outputs.key }} | ||
| build-target: linux64_nowallet | ||
| 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_sqlite: | ||
| name: linux64_sqlite-test | ||
|
|
@@ -356,7 +367,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 +388,14 @@ jobs: | |
| build-target: linux64_ubsan | ||
| container-path: ${{ needs.container-slim.outputs.path }} | ||
| runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }} | ||
|
Comment on lines
129
to
390
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: UBSAN was not actually migrated to arm64
source: ['codex'] 🤖 Fix this with AI agents |
||
|
|
||
| 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" | ||
|
|
@@ -43,8 +43,9 @@ echo "Using socketevents mode: $SOCKETEVENTS" | |
| EXTRA_ARGS="--dashd-arg=-socketevents=$SOCKETEVENTS" | ||
|
|
||
| set +e | ||
| # Keep PASS_ARGS before TEST_RUNNER_EXTRA so per-target flags can override workflow defaults. | ||
| # 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} | ||
|
|
||
|
|
||
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:
effective-runs-oninput is no longer used by any callerAfter this PR's cleanup, every call site of build-depends.yml in build.yml passes only
runs-on:and nevereffective-runs-on:(depends-linux64 was the last user and was switched to runner-arm64 directly). Theeffective-runs-oninput here, plus the three${{ inputs.effective-runs-on || inputs.runs-on }}resolutions at lines 40, 74, and 106, are now dead code and just leave room for future drift between the runner label and the cache-key prefix. Since the indirection no longer serves a purpose, the input and the threeeffective-runs-on || runs-onresolutions can be collapsed back to plaininputs.runs-on. Not a correctness issue at this head — flagging only as cleanup follow-up.source: ['claude']