2121 secrets :
2222 datadog_api_key :
2323 required : false
24+ SCCACHE_GCS_KEY_MAC :
25+ required : false
2426
2527concurrency :
2628 # Cancel existing jobs on the same workflow, platform, and branch (or sha if merged).
8385 set -x
8486 platforms=$(cat ${GITHUB_WORKSPACE}/.github/config/${{ inputs.platform }}.json | jq -c '.platforms')
8587 echo "platforms=${platforms}" >> $GITHUB_OUTPUT
88+ - name : Select build runners
89+ id : set-build-runners
90+ shell : bash
91+ run : |
92+ set -x
93+ build_runners=$(cat ${GITHUB_WORKSPACE}/.github/config/${{ inputs.platform }}.json | jq -c '.build_runners // ["self-hosted", "chrobalt-linux-runner"]' )
94+ echo "build_runners=${build_runners}" >> $GITHUB_OUTPUT
8695 - name : Set build targets
8796 id : set-targets
8897 shell : bash
@@ -211,6 +220,13 @@ jobs:
211220 # Create a zero-indexed list of shards for use by matrix, e.g. [0,1,2,3,4,5].
212221 gtest_shards="[$(seq -s, 0 1 $((${num_gtest_shards} - 1)))]"
213222 echo "gtest_shards=${gtest_shards}" >> $GITHUB_OUTPUT
223+ - name : Set number Docker Requirement
224+ id : set-docker-required
225+ shell : bash
226+ run : |
227+ set -x
228+ docker_required=$(cat ${GITHUB_WORKSPACE}/.github/config/${{ inputs.platform }}.json | jq -rc '.docker_required')
229+ echo "docker_required=${docker_required}" >> $GITHUB_OUTPUT
214230 - name : Set Docker files checksum
215231 id : set-docker-hash
216232 shell : bash
@@ -220,6 +236,7 @@ jobs:
220236 echo "docker_content_sha=${docker_content_sha}" >> $GITHUB_OUTPUT
221237 outputs :
222238 platforms : ${{ steps.set-platforms.outputs.platforms }}
239+ build_runners : ${{ steps.set-build-runners.outputs.build_runners }}
223240 targets : ${{ steps.set-targets.outputs.targets }}
224241 build_configs : ${{ steps.set-build-configs.outputs.build_configs }}
225242 includes : ${{ steps.set-includes.outputs.includes }}
@@ -239,10 +256,12 @@ jobs:
239256 test_dimensions : ${{ steps.set-test-dimensions.outputs.test_dimensions }}
240257 test_attempts : ${{ steps.set-test-attempts.outputs.test_attempts }}
241258 num_gtest_shards : ${{ steps.set-gtest-shards.outputs.num_gtest_shards }}
259+ docker_required : ${{ steps.set-docker-required.outputs.docker_required }}
242260
243261 # Builds, tags, and pushes Cobalt docker build images to ghr.
244262 docker-build-image :
245263 needs : [initialize]
264+ if : needs.initialize.outputs.docker_required == 'true'
246265 runs-on : [self-hosted, chrobalt-linux-runner]
247266 steps :
248267 - name : Restore CI Essentials
@@ -262,7 +281,7 @@ jobs:
262281
263282 # Builds, tags, and pushes Cobalt unit test image to ghr.
264283 docker-unittest-image :
265- if : needs.initialize.outputs.test_on_host == 'true'
284+ if : needs.initialize.outputs.test_on_host == 'true' && needs.initialize.outputs.docker_required == 'true'
266285 needs : [initialize]
267286 runs-on : [self-hosted, chrobalt-linux-runner]
268287 steps :
@@ -283,7 +302,7 @@ jobs:
283302
284303 # Builds, tags, and pushes Cobalt web test image to ghr.
285304 docker-webtest-image :
286- if : needs.initialize.outputs.web_tests == 'true'
305+ if : needs.initialize.outputs.web_tests == 'true' && needs.initialize.outputs.docker_required == 'true'
287306 needs : [initialize]
288307 runs-on : [self-hosted, chrobalt-linux-runner]
289308 steps :
@@ -302,10 +321,37 @@ jobs:
302321 outputs :
303322 docker_tag : ${{ steps.build-docker-image.outputs.docker_tag }}
304323
305- build :
324+ build-ready :
306325 needs : [initialize, docker-build-image]
307- permissions : {}
308326 runs-on : [self-hosted, chrobalt-linux-runner]
327+ if : always()
328+ steps :
329+ - name : Build ready check
330+ id : build-ready
331+ env :
332+ DOCKER_BUILD_IMAGE_RESULT : ${{ needs.docker-build-image.result }}
333+ INITIALIZE_RESULT : ${{ needs.initialize.result }}
334+ DOCKER_REQUIRED : ${{ needs.initialize.outputs.docker_required }}
335+ run : |
336+ # Skip entirely if initialize failed
337+ if [ $INITIALIZE_RESULT != "success" ]; then
338+ echo "success=false" >> $GITHUB_OUTPUT
339+ exit 0
340+ fi
341+ # Skip if requires docker by docker-build-image failed
342+ if [ $DOCKER_REQUIRED == "true" && $DOCKER_BUILD_IMAGE_RESULT != "success" ]; then
343+ echo "success=false" >> $GITHUB_OUTPUT
344+ exit 0
345+ fi
346+ echo "success=true" >> $GITHUB_OUTPUT
347+ outputs :
348+ success : ${{ steps.build-ready.outputs.success }}
349+
350+ build :
351+ needs : [initialize, docker-build-image, build-ready]
352+ if : always() && needs.build-ready.outputs.success == 'true'
353+ permissions : {}
354+ runs-on : ${{ fromJSON(needs.initialize.outputs.build_runners) }}
309355 name : ${{ matrix.name }}_${{ matrix.config }}
310356 strategy :
311357 fail-fast : false
0 commit comments