4747 required : false
4848 default : " "
4949 type : string
50+ allow_frozen_target_scenario_omissions :
51+ description : Trusted opt-in to omit survivor scenarios absent from a canonical frozen target
52+ required : false
53+ default : false
54+ type : boolean
5055 shared_image_policy :
5156 description : Shared Docker image transport
5257 required : true
185190 required : false
186191 default : " "
187192 type : string
193+ allow_frozen_target_scenario_omissions :
194+ description : Trusted opt-in to omit survivor scenarios absent from a canonical frozen target
195+ required : false
196+ default : false
197+ type : boolean
188198 package_artifact_name :
189199 description : Existing workflow artifact containing openclaw-current.tgz; blank packs the selected ref
190200 required : false
389399 FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 : " true"
390400 NODE_VERSION : " 24.15.0"
391401 OPENCLAW_DOCKER_E2E_ALLOW_UNRELEASED_CHANGELOG : ${{ inputs.allow_unreleased_changelog }}
402+ OPENCLAW_ALLOW_FROZEN_TARGET_SCENARIO_OMISSIONS : ${{ inputs.allow_frozen_target_scenario_omissions && '1' || '0' }}
392403 OPENCLAW_UPGRADE_SURVIVOR_TARGET_ROOT : ${{ github.workspace }}
393404
394405jobs :
@@ -2263,15 +2274,6 @@ jobs:
22632274 fetch-depth : 1
22642275 persist-credentials : false
22652276
2266- - name : Checkout trusted release harness
2267- if : inputs.shared_image_policy == 'no-push-artifact'
2268- uses : actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
2269- with :
2270- repository : ${{ needs.validate_selected_ref.outputs.workflow_repository }}
2271- ref : ${{ needs.validate_selected_ref.outputs.workflow_sha }}
2272- path : .release-harness
2273- persist-credentials : false
2274-
22752277 - name : Resolve shared live-test image tag
22762278 id : image
22772279 shell : bash
@@ -2341,6 +2343,17 @@ jobs:
23412343 load : true
23422344 push : false
23432345
2346+ # Keep trusted tooling outside the target's Docker build context. A frozen
2347+ # target must not accidentally package the current checkout into its image.
2348+ - name : Checkout trusted release harness
2349+ if : inputs.shared_image_policy == 'no-push-artifact'
2350+ uses : actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
2351+ with :
2352+ repository : ${{ needs.validate_selected_ref.outputs.workflow_repository }}
2353+ ref : ${{ needs.validate_selected_ref.outputs.workflow_sha }}
2354+ path : .release-harness
2355+ persist-credentials : false
2356+
23442357 - name : Pack live-test image artifact
23452358 id : image_artifact
23462359 if : inputs.shared_image_policy == 'no-push-artifact'
@@ -3332,8 +3345,18 @@ jobs:
33323345 path : .release-harness
33333346 persist-credentials : false
33343347
3348+ - name : Resolve frozen Codex live compatibility
3349+ id : codex_compat
3350+ if : contains(matrix.profiles, inputs.release_test_profile) && (inputs.live_suite_filter == '' || inputs.live_suite_filter == matrix.suite_id || inputs.live_suite_filter == matrix.suite_group)
3351+ env :
3352+ OPENCLAW_FROZEN_CODEX_SUITE_ID : ${{ matrix.suite_id }}
3353+ OPENCLAW_FROZEN_TARGET_ROOT : ${{ github.workspace }}
3354+ OPENCLAW_SELECTED_SHA : ${{ needs.validate_selected_ref.outputs.selected_sha }}
3355+ OPENCLAW_WORKFLOW_SHA : ${{ needs.validate_selected_ref.outputs.workflow_sha }}
3356+ run : node .release-harness/scripts/resolve-frozen-codex-live-suite.mjs
3357+
33353358 - name : Validate live-test image artifact binding
3336- if : contains(matrix.profiles, inputs.release_test_profile) && (inputs.live_suite_filter == '' || inputs.live_suite_filter == matrix.suite_id || inputs.live_suite_filter == matrix.suite_group) && inputs.shared_image_policy == 'no-push-artifact'
3359+ if : steps.codex_compat.outputs.run_lane != 'false' && contains(matrix.profiles, inputs.release_test_profile) && (inputs.live_suite_filter == '' || inputs.live_suite_filter == matrix.suite_id || inputs.live_suite_filter == matrix.suite_group) && inputs.shared_image_policy == 'no-push-artifact'
33373360 env :
33383361 ARTIFACT_DIGEST : ${{ needs.prepare_live_test_image.outputs.image_artifact_digest }}
33393362 ARTIFACT_ID : ${{ needs.prepare_live_test_image.outputs.image_artifact_id }}
@@ -3350,7 +3373,7 @@ jobs:
33503373 "$ARTIFACT_RUN_ID" "$ARTIFACT_RUN_ATTEMPT"
33513374
33523375 - name : Download live-test image artifact
3353- if : contains(matrix.profiles, inputs.release_test_profile) && (inputs.live_suite_filter == '' || inputs.live_suite_filter == matrix.suite_id || inputs.live_suite_filter == matrix.suite_group) && inputs.shared_image_policy == 'no-push-artifact'
3376+ if : steps.codex_compat.outputs.run_lane != 'false' && contains(matrix.profiles, inputs.release_test_profile) && (inputs.live_suite_filter == '' || inputs.live_suite_filter == matrix.suite_id || inputs.live_suite_filter == matrix.suite_group) && inputs.shared_image_policy == 'no-push-artifact'
33543377 uses : actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
33553378 with :
33563379 artifact-ids : ${{ needs.prepare_live_test_image.outputs.image_artifact_id }}
@@ -3359,7 +3382,7 @@ jobs:
33593382 github-token : ${{ github.token }}
33603383
33613384 - name : Verify and load live-test image artifact
3362- if : contains(matrix.profiles, inputs.release_test_profile) && (inputs.live_suite_filter == '' || inputs.live_suite_filter == matrix.suite_id || inputs.live_suite_filter == matrix.suite_group) && inputs.shared_image_policy == 'no-push-artifact'
3385+ if : steps.codex_compat.outputs.run_lane != 'false' && contains(matrix.profiles, inputs.release_test_profile) && (inputs.live_suite_filter == '' || inputs.live_suite_filter == matrix.suite_id || inputs.live_suite_filter == matrix.suite_group) && inputs.shared_image_policy == 'no-push-artifact'
33633386 env :
33643387 ARCHIVE_SHA256 : ${{ needs.prepare_live_test_image.outputs.image_archive_sha256 }}
33653388 LIVE_IMAGE : ${{ needs.prepare_live_test_image.outputs.live_image }}
@@ -3375,25 +3398,25 @@ jobs:
33753398 load .artifacts/live-test-image live-test "$TARGET_SHA" "$WORKFLOW_SHA" "$LIVE_IMAGE"
33763399
33773400 - name : Setup Node environment
3378- if : contains(matrix.profiles, inputs.release_test_profile) && (inputs.live_suite_filter == '' || inputs.live_suite_filter == matrix.suite_id || inputs.live_suite_filter == matrix.suite_group)
3401+ if : steps.codex_compat.outputs.run_lane != 'false' && contains(matrix.profiles, inputs.release_test_profile) && (inputs.live_suite_filter == '' || inputs.live_suite_filter == matrix.suite_id || inputs.live_suite_filter == matrix.suite_group)
33793402 uses : ./.github/actions/setup-node-env
33803403 with :
33813404 node-version : ${{ env.NODE_VERSION }}
33823405 install-bun : " true"
33833406
33843407 - name : Hydrate live auth/profile inputs
3385- if : contains(matrix.profiles, inputs.release_test_profile) && (inputs.live_suite_filter == '' || inputs.live_suite_filter == matrix.suite_id || inputs.live_suite_filter == matrix.suite_group)
3408+ if : steps.codex_compat.outputs.run_lane != 'false' && contains(matrix.profiles, inputs.release_test_profile) && (inputs.live_suite_filter == '' || inputs.live_suite_filter == matrix.suite_id || inputs.live_suite_filter == matrix.suite_group)
33863409 run : bash scripts/ci-hydrate-live-auth.sh
33873410
33883411 - name : Log in to GHCR
3389- if : contains(matrix.profiles, inputs.release_test_profile) && (inputs.live_suite_filter == '' || inputs.live_suite_filter == matrix.suite_id || inputs.live_suite_filter == matrix.suite_group) && inputs.shared_image_policy != 'no-push-artifact'
3412+ if : steps.codex_compat.outputs.run_lane != 'false' && contains(matrix.profiles, inputs.release_test_profile) && (inputs.live_suite_filter == '' || inputs.live_suite_filter == matrix.suite_id || inputs.live_suite_filter == matrix.suite_group) && inputs.shared_image_policy != 'no-push-artifact'
33903413 run : bash .release-harness/scripts/ci-docker-login-ghcr.sh
33913414 env :
33923415 GHCR_USERNAME : ${{ github.actor }}
33933416 GITHUB_TOKEN : ${{ github.token }}
33943417
33953418 - name : Configure suite-specific env
3396- if : contains(matrix.profiles, inputs.release_test_profile) && (inputs.live_suite_filter == '' || inputs.live_suite_filter == matrix.suite_id || inputs.live_suite_filter == matrix.suite_group)
3419+ if : steps.codex_compat.outputs.run_lane != 'false' && contains(matrix.profiles, inputs.release_test_profile) && (inputs.live_suite_filter == '' || inputs.live_suite_filter == matrix.suite_id || inputs.live_suite_filter == matrix.suite_group)
33973420 shell : bash
33983421 run : |
33993422 set -euo pipefail
@@ -3433,7 +3456,7 @@ jobs:
34333456 esac
34343457
34353458 - name : Run ${{ matrix.label }}
3436- if : contains(matrix.profiles, inputs.release_test_profile) && (inputs.live_suite_filter == '' || inputs.live_suite_filter == matrix.suite_id || inputs.live_suite_filter == matrix.suite_group)
3459+ if : steps.codex_compat.outputs.run_lane != 'false' && contains(matrix.profiles, inputs.release_test_profile) && (inputs.live_suite_filter == '' || inputs.live_suite_filter == matrix.suite_id || inputs.live_suite_filter == matrix.suite_group)
34373460 env :
34383461 OPENCLAW_LIVE_COMMAND : ${{ matrix.command }}
34393462 OPENCLAW_LIVE_SUITE_ADVISORY : ${{ matrix.advisory }}
0 commit comments