2929 use-blacksmith : ${{ steps.select-runner.outputs.use_blacksmith }}
3030 backlog-count : ${{ steps.select-runner.outputs.backlog_count }}
3131 decision-reason : ${{ steps.select-runner.outputs.decision_reason }}
32+ base-image-digest : ${{ steps.base-image.outputs.digest }}
3233 steps :
3334 - name : Check skip environment variables
3435 id : skip-check
4546
4647 - name : Checkout code
4748 if : ${{ steps.skip-check.outputs.skip == 'false' }}
48- uses : actions/checkout@v4
49+ uses : actions/checkout@v6
4950
5051 - name : Select runners
5152 id : select-runner
5859 run : |
5960 python3 .github/workflows/select_dynamic_runner.py
6061
62+ - name : Get base image digest
63+ id : base-image
64+ if : ${{ steps.skip-check.outputs.skip == 'false' }}
65+ run : |
66+ # Fetch the canonical manifest digest for ubuntu:noble so the
67+ # depends cache key changes when Canonical pushes base image
68+ # updates (which may bump compiler versions).
69+ # Falls back to "unknown" on failure so CI is not blocked.
70+ TOKEN="$(curl -fsSL --max-time 10 \
71+ 'https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/ubuntu:pull' \
72+ | jq -r '.token')" || true
73+ if [ -n "$TOKEN" ] && [ "$TOKEN" != "null" ]; then
74+ DIGEST="$(curl -fsSL --max-time 10 \
75+ -H "Authorization: Bearer $TOKEN" \
76+ -H 'Accept: application/vnd.docker.distribution.manifest.list.v2+json' \
77+ 'https://registry-1.docker.io/v2/library/ubuntu/manifests/noble' \
78+ -o /dev/null -D - | grep -i docker-content-digest | awk '{print $2}' | tr -d '\r' | sed 's/^sha256://')" || true
79+ fi
80+ echo "digest=${DIGEST:-unknown}" >> "$GITHUB_OUTPUT"
81+
6182 cache-sources :
6283 name : Cache depends sources
6384 needs : [check-skip]
@@ -94,14 +115,15 @@ jobs:
94115 name : aarch64-linux-gnu
95116 uses : ./.github/workflows/build-depends.yml
96117 needs : [check-skip, container, cache-sources]
97- if : ${{ vars.SKIP_ARM_LINUX == '' }}
118+ if : ${{ false && vars.SKIP_ARM_LINUX == '' }}
98119 with :
99120 build-target : aarch64-linux
100121 container-path : ${{ needs.container.outputs.path }}
122+ base-image-digest : ${{ needs.check-skip.outputs.base-image-digest }}
101123 runs-on : ${{ needs.check-skip.outputs['runner-amd64'] }}
102124
103125 depends-linux64 :
104- name : x86_64-pc-linux-gnu
126+ name : linux64 (native)
105127 uses : ./.github/workflows/build-depends.yml
106128 needs : [check-skip, container, cache-sources]
107129 if : |
@@ -112,7 +134,9 @@ jobs:
112134 with :
113135 build-target : linux64
114136 container-path : ${{ needs.container.outputs.path }}
137+ base-image-digest : ${{ needs.check-skip.outputs.base-image-digest }}
115138 runs-on : ${{ needs.check-skip.outputs['runner-amd64'] }}
139+ effective-runs-on : ${{ needs.check-skip.outputs['runner-arm64'] }}
116140
117141 depends-linux64_multiprocess :
118142 name : linux64_multiprocess
@@ -124,6 +148,7 @@ jobs:
124148 with :
125149 build-target : linux64_multiprocess
126150 container-path : ${{ needs.container.outputs.path }}
151+ base-image-digest : ${{ needs.check-skip.outputs.base-image-digest }}
127152 runs-on : ${{ needs.check-skip.outputs['runner-arm64'] }}
128153
129154 depends-linux64_nowallet :
@@ -134,6 +159,7 @@ jobs:
134159 with :
135160 build-target : linux64_nowallet
136161 container-path : ${{ needs.container.outputs.path }}
162+ base-image-digest : ${{ needs.check-skip.outputs.base-image-digest }}
137163 runs-on : ${{ needs.check-skip.outputs['runner-amd64'] }}
138164
139165 depends-mac :
@@ -144,6 +170,7 @@ jobs:
144170 with :
145171 build-target : mac
146172 container-path : ${{ needs.container.outputs.path }}
173+ base-image-digest : ${{ needs.check-skip.outputs.base-image-digest }}
147174 runs-on : ${{ needs.check-skip.outputs['runner-amd64'] }}
148175
149176 depends-win64 :
@@ -154,6 +181,7 @@ jobs:
154181 with :
155182 build-target : win64
156183 container-path : ${{ needs.container.outputs.path }}
184+ base-image-digest : ${{ needs.check-skip.outputs.base-image-digest }}
157185 runs-on : ${{ needs.check-skip.outputs['runner-amd64'] }}
158186
159187 lint :
@@ -166,6 +194,7 @@ jobs:
166194
167195 src-aarch64-linux :
168196 name : aarch64-linux-build
197+ if : ${{ false }}
169198 uses : ./.github/workflows/build-src.yml
170199 needs : [check-skip, container, depends-aarch64-linux]
171200 with :
@@ -187,7 +216,7 @@ jobs:
187216 depends-key : ${{ needs.depends-linux64.outputs.key }}
188217 depends-host : ${{ needs.depends-linux64.outputs.host }}
189218 depends-dep-opts : ${{ needs.depends-linux64.outputs.dep-opts }}
190- runs-on : ${{ needs.check-skip.outputs['runner-amd64 '] }}
219+ runs-on : ${{ needs.check-skip.outputs['runner-arm64 '] }}
191220
192221 src-linux64_fuzz :
193222 name : linux64_fuzz-build
@@ -200,7 +229,7 @@ jobs:
200229 depends-key : ${{ needs.depends-linux64.outputs.key }}
201230 depends-host : ${{ needs.depends-linux64.outputs.host }}
202231 depends-dep-opts : ${{ needs.depends-linux64.outputs.dep-opts }}
203- runs-on : ${{ needs.check-skip.outputs['runner-amd64 '] }}
232+ runs-on : ${{ needs.check-skip.outputs['runner-arm64 '] }}
204233
205234 src-linux64_multiprocess :
206235 name : linux64_multiprocess-build
@@ -238,7 +267,7 @@ jobs:
238267 depends-key : ${{ needs.depends-linux64.outputs.key }}
239268 depends-host : ${{ needs.depends-linux64.outputs.host }}
240269 depends-dep-opts : ${{ needs.depends-linux64.outputs.dep-opts }}
241- runs-on : ${{ needs.check-skip.outputs['runner-amd64 '] }}
270+ runs-on : ${{ needs.check-skip.outputs['runner-arm64 '] }}
242271
243272 src-linux64_tsan :
244273 name : linux64_tsan-build
@@ -264,7 +293,7 @@ jobs:
264293 depends-key : ${{ needs.depends-linux64.outputs.key }}
265294 depends-host : ${{ needs.depends-linux64.outputs.host }}
266295 depends-dep-opts : ${{ needs.depends-linux64.outputs.dep-opts }}
267- runs-on : ${{ needs.check-skip.outputs['runner-amd64 '] }}
296+ runs-on : ${{ needs.check-skip.outputs['runner-arm64 '] }}
268297
269298 src-mac :
270299 name : mac-build
@@ -298,7 +327,7 @@ jobs:
298327 bundle-key : ${{ needs.src-linux64.outputs.key }}
299328 build-target : linux64
300329 container-path : ${{ needs.container-slim.outputs.path }}
301- runs-on : ${{ needs.check-skip.outputs['runner-amd64 '] }}
330+ runs-on : ${{ needs.check-skip.outputs['runner-arm64 '] }}
302331
303332 test-linux64_multiprocess :
304333 name : linux64_multiprocess-test
@@ -328,7 +357,7 @@ jobs:
328357 bundle-key : ${{ needs.src-linux64_sqlite.outputs.key }}
329358 build-target : linux64_sqlite
330359 container-path : ${{ needs.container-slim.outputs.path }}
331- runs-on : ${{ needs.check-skip.outputs['runner-amd64 '] }}
360+ runs-on : ${{ needs.check-skip.outputs['runner-arm64 '] }}
332361
333362 test-linux64_tsan :
334363 name : linux64_tsan-test
@@ -348,4 +377,4 @@ jobs:
348377 bundle-key : ${{ needs.src-linux64_ubsan.outputs.key }}
349378 build-target : linux64_ubsan
350379 container-path : ${{ needs.container-slim.outputs.path }}
351- runs-on : ${{ needs.check-skip.outputs['runner-amd64 '] }}
380+ runs-on : ${{ needs.check-skip.outputs['runner-arm64 '] }}
0 commit comments