Skip to content

Commit b9a4e86

Browse files
fix(release): require deterministic stack gate
Require stable package dispatches to run make release-gate, add a stack-consistency check for matched runtime refs and builder image identity, pin workflow actions by SHA, attest release packages, and refresh GPU docs/handoffs around the Apple virtio-gpu runtime shape. Release-Highlight: Stable releases now require make release-gate, which runs full CI plus Docker Compose parity before package dispatch. Release-Highlight: Records the matched container b1917fb, containerization 41252f2, and builder-shim dbe6de4 stack refs, including the digest-pinned builder image. Release-Highlight: Documents Compose gpus as Apple virtio-gpu support with runtime-discovered guest DRM projection, not Metal/CUDA/vendor passthrough. Upstream references: apple/container#1511, apple/containerization#480, apple/containerization#569, apple/container-builder-shim#87. Refs: apple/container#1511, apple/containerization#480, apple/containerization#569, apple/container-builder-shim#87
1 parent 0abcd75 commit b9a4e86

21 files changed

Lines changed: 316 additions & 100 deletions

.github/workflows/ci.yml

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ jobs:
4848
steps:
4949
- name: Checkout for push diff
5050
if: github.event_name == 'push'
51-
uses: actions/checkout@v7
51+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
5252
with:
5353
fetch-depth: 0
5454

@@ -103,13 +103,32 @@ jobs:
103103
runs-on: ubuntu-latest
104104
steps:
105105
- name: Checkout container-compose
106-
uses: actions/checkout@v7
106+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
107107
with:
108108
path: container-compose
109109
fetch-depth: 0
110110

111+
- name: Resolve container ref
112+
id: container-ref
113+
shell: bash
114+
run: |
115+
set -euo pipefail
116+
ref="$(python3 container-compose/Tools/release/resolve-container-ref.py)"
117+
if [[ -z "$ref" ]]; then
118+
printf 'container ref is empty\n' >&2
119+
exit 1
120+
fi
121+
printf 'ref=%s\n' "$ref" >> "$GITHUB_OUTPUT"
122+
123+
- name: Checkout container dependency
124+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
125+
with:
126+
repository: stephenlclarke/container
127+
path: container
128+
ref: ${{ steps.container-ref.outputs.ref }}
129+
111130
- name: Set up Go
112-
uses: actions/setup-go@v6
131+
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6
113132
with:
114133
go-version-file: container-compose/Tools/compose-normalizer/go.mod
115134
cache-dependency-path: container-compose/Tools/compose-normalizer/go.sum
@@ -118,7 +137,7 @@ jobs:
118137
run: npm install --global markdownlint-cli@0.48.0
119138

120139
- name: Cache local repo tools
121-
uses: actions/cache@v6
140+
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6
122141
with:
123142
path: container-compose/.local/bin
124143
key: ${{ runner.os }}-${{ runner.arch }}-local-tools-hawkeye-v6.5.1
@@ -138,7 +157,7 @@ jobs:
138157
timeout-minutes: 75
139158
steps:
140159
- name: Checkout container-compose
141-
uses: actions/checkout@v7
160+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
142161
with:
143162
path: container-compose
144163
fetch-depth: 0
@@ -176,15 +195,15 @@ jobs:
176195
printf 'ref=%s\n' "$ref" >> "$GITHUB_OUTPUT"
177196
178197
- name: Checkout container dependency
179-
uses: actions/checkout@v7
198+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
180199
with:
181200
repository: stephenlclarke/container
182201
path: container
183202
ref: ${{ steps.container-ref.outputs.ref }}
184203

185204
- name: Checkout containerization dependency
186205
if: steps.stack-refs.outputs.containerization_ref != ''
187-
uses: actions/checkout@v7
206+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
188207
with:
189208
repository: stephenlclarke/containerization
190209
path: containerization
@@ -231,7 +250,7 @@ jobs:
231250
} | shasum -a 256 | awk '{ printf "fingerprint=%s\n", $1 }' >> "$GITHUB_OUTPUT"
232251
233252
- name: Cache SwiftPM build artifacts
234-
uses: actions/cache@v6
253+
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6
235254
with:
236255
path: |
237256
container-compose/.build
@@ -247,7 +266,7 @@ jobs:
247266
working-directory: container-compose
248267

249268
- name: Set up Go
250-
uses: actions/setup-go@v6
269+
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6
251270
with:
252271
go-version-file: container-compose/Tools/compose-normalizer/go.mod
253272
cache-dependency-path: container-compose/Tools/compose-normalizer/go.sum
@@ -289,7 +308,7 @@ jobs:
289308

290309
- name: Cache SonarQube packages
291310
if: github.ref == 'refs/heads/main'
292-
uses: actions/cache@v6
311+
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6
293312
with:
294313
path: ~/.sonar/cache
295314
key: ${{ runner.os }}-sonar
@@ -389,7 +408,7 @@ jobs:
389408
runs-on: ubuntu-latest
390409
steps:
391410
- name: Checkout container-compose
392-
uses: actions/checkout@v7
411+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
393412

394413
- name: Install Markdown lint
395414
run: npm install --global markdownlint-cli@0.48.0

.github/workflows/codeql.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ jobs:
5050
steps:
5151
- name: Checkout for push diff
5252
if: github.event_name == 'push'
53-
uses: actions/checkout@v7
53+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
5454
with:
5555
fetch-depth: 0
5656

@@ -103,18 +103,18 @@ jobs:
103103
timeout-minutes: 20
104104
steps:
105105
- name: Checkout container-compose
106-
uses: actions/checkout@v7
106+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
107107
with:
108108
fetch-depth: 0
109109

110110
- name: Set up Go
111-
uses: actions/setup-go@v6
111+
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6
112112
with:
113113
go-version-file: Tools/compose-normalizer/go.mod
114114
cache-dependency-path: Tools/compose-normalizer/go.sum
115115

116116
- name: Initialize CodeQL
117-
uses: github/codeql-action/init@v4
117+
uses: github/codeql-action/init@1ad29ea4a422cce9a242a9fae469541dcd08addc # v4
118118
with:
119119
languages: go
120120
build-mode: manual
@@ -125,7 +125,7 @@ jobs:
125125
run: make go-build
126126

127127
- name: Analyze
128-
uses: github/codeql-action/analyze@v4
128+
uses: github/codeql-action/analyze@1ad29ea4a422cce9a242a9fae469541dcd08addc # v4
129129
with:
130130
category: "/language:go"
131131

.github/workflows/homebrew.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ jobs:
4848
runs-on: macos-26
4949
steps:
5050
- name: Checkout container-compose
51-
uses: actions/checkout@v7
51+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
5252

5353
- name: Validate Ruby syntax
5454
shell: bash

.github/workflows/prebuilt-binaries.yml

Lines changed: 20 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ on:
3131

3232
permissions:
3333
actions: read
34+
attestations: write
3435
contents: write
36+
id-token: write
3537

3638
concurrency:
3739
group: prebuilt-binaries-${{ github.event.workflow_run.head_branch || inputs.ref || github.ref_name }}
@@ -165,7 +167,7 @@ jobs:
165167
runs-on: macos-26
166168
steps:
167169
- name: Checkout container-compose
168-
uses: actions/checkout@v7
170+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
169171
with:
170172
path: container-compose
171173
fetch-depth: 0
@@ -286,7 +288,7 @@ jobs:
286288
287289
- name: Checkout container-builder-shim dependency
288290
if: steps.stack-refs.outputs.container_builder_shim_ref != ''
289-
uses: actions/checkout@v7
291+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
290292
with:
291293
repository: stephenlclarke/container-builder-shim
292294
path: container-builder-shim
@@ -295,15 +297,15 @@ jobs:
295297

296298
- name: Checkout containerization dependency
297299
if: steps.stack-refs.outputs.containerization_ref != ''
298-
uses: actions/checkout@v7
300+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
299301
with:
300302
repository: stephenlclarke/containerization
301303
path: containerization
302304
fetch-depth: 0
303305
ref: ${{ steps.stack-refs.outputs.containerization_ref }}
304306

305307
- name: Checkout container dependency
306-
uses: actions/checkout@v7
308+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
307309
with:
308310
repository: stephenlclarke/container
309311
path: container
@@ -339,39 +341,26 @@ jobs:
339341
working-directory: container-compose
340342

341343
- name: Set up Go
342-
uses: actions/setup-go@v6
344+
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6
343345
with:
344346
go-version-file: container-compose/Tools/compose-normalizer/go.mod
345347
cache-dependency-path: container-compose/Tools/compose-normalizer/go.sum
346348

347-
- name: Wait for CI result
348-
id: ci-result
349-
if: github.event_name == 'workflow_dispatch'
350-
env:
351-
GH_TOKEN: ${{ github.token }}
352-
run: |
353-
python3 container-compose/Tools/ci/wait-for-workflow-success.py \
354-
--repo "${GITHUB_REPOSITORY}" \
355-
--workflow ci.yml \
356-
--sha "${{ needs.resolve-publish-context.outputs.sha }}" \
357-
--timeout-seconds 900 \
358-
--poll-seconds 15
359-
360349
- name: Install Markdown lint
361-
if: github.event_name == 'workflow_dispatch' && steps.ci-result.outputs.passed != 'true'
350+
if: github.event_name == 'workflow_dispatch'
362351
run: npm install --global markdownlint-cli@0.48.0
363352

364353
- name: Cache local repo tools
365-
if: github.event_name == 'workflow_dispatch' && steps.ci-result.outputs.passed != 'true'
366-
uses: actions/cache@v6
354+
if: github.event_name == 'workflow_dispatch'
355+
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6
367356
with:
368357
path: container-compose/.local/bin
369358
key: ${{ runner.os }}-${{ runner.arch }}-local-tools-hawkeye-v6.5.1
370359

371360
- name: Run release validation
372-
if: github.event_name == 'workflow_dispatch' && steps.ci-result.outputs.passed != 'true'
373-
timeout-minutes: 45
374-
run: make ci
361+
if: github.event_name == 'workflow_dispatch'
362+
timeout-minutes: 90
363+
run: make release-gate
375364
working-directory: container-compose
376365
env:
377366
HAWKEYE_AUTO_INSTALL: "1"
@@ -384,8 +373,13 @@ jobs:
384373
CONTAINER_COMPOSE_COMMIT: ${{ needs.resolve-publish-context.outputs.sha }}
385374
CONTAINER_COMPOSE_LANE: ${{ steps.lane.outputs.package_lane }}
386375

376+
- name: Attest release package
377+
uses: actions/attest-build-provenance@43d14bc2b83dec42d39ecae14e916627a18bb661 # v3
378+
with:
379+
subject-path: ${{ runner.temp }}/${{ steps.lane.outputs.asset }}
380+
387381
- name: Upload workflow artifact
388-
uses: actions/upload-artifact@v7
382+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
389383
with:
390384
name: ${{ steps.lane.outputs.asset }}
391385
path: |
@@ -515,7 +509,7 @@ jobs:
515509
516510
- name: Checkout Homebrew tap
517511
if: steps.lane.outputs.update_tap == 'true' && steps.tap-token.outputs.available == 'true'
518-
uses: actions/checkout@v7
512+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
519513
with:
520514
repository: stephenlclarke/homebrew-tap
521515
path: homebrew-tap

.github/workflows/quality.yml

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ jobs:
6565
steps:
6666
- name: Checkout for push diff
6767
if: github.event_name == 'push'
68-
uses: actions/checkout@v7
68+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
6969
with:
7070
fetch-depth: 0
7171

@@ -128,7 +128,7 @@ jobs:
128128
timeout-minutes: 45
129129
steps:
130130
- name: Checkout container-compose
131-
uses: actions/checkout@v7
131+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
132132
with:
133133
path: container-compose
134134
fetch-depth: 0
@@ -166,15 +166,15 @@ jobs:
166166
printf 'ref=%s\n' "$ref" >> "$GITHUB_OUTPUT"
167167
168168
- name: Checkout container dependency
169-
uses: actions/checkout@v7
169+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
170170
with:
171171
repository: stephenlclarke/container
172172
path: container
173173
ref: ${{ steps.apple-container-ref.outputs.ref }}
174174

175175
- name: Checkout containerization dependency
176176
if: steps.stack-refs.outputs.containerization_ref != ''
177-
uses: actions/checkout@v7
177+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
178178
with:
179179
repository: stephenlclarke/containerization
180180
path: containerization
@@ -220,7 +220,7 @@ jobs:
220220
} | shasum -a 256 | awk '{ printf "fingerprint=%s\n", $1 }' >> "$GITHUB_OUTPUT"
221221
222222
- name: Cache SwiftPM ASan artifacts
223-
uses: actions/cache@v6
223+
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6
224224
with:
225225
path: |
226226
container-compose/.build
@@ -241,7 +241,7 @@ jobs:
241241
xcodebuild -version
242242
243243
- name: Set up Go
244-
uses: actions/setup-go@v6
244+
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6
245245
with:
246246
go-version-file: container-compose/Tools/compose-normalizer/go.mod
247247
cache-dependency-path: container-compose/Tools/compose-normalizer/go.sum
@@ -261,7 +261,7 @@ jobs:
261261
timeout-minutes: 60
262262
steps:
263263
- name: Checkout container-compose
264-
uses: actions/checkout@v7
264+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
265265
with:
266266
path: container-compose
267267
fetch-depth: 0
@@ -299,15 +299,15 @@ jobs:
299299
printf 'ref=%s\n' "$ref" >> "$GITHUB_OUTPUT"
300300
301301
- name: Checkout container dependency
302-
uses: actions/checkout@v7
302+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
303303
with:
304304
repository: stephenlclarke/container
305305
path: container
306306
ref: ${{ steps.apple-container-ref.outputs.ref }}
307307

308308
- name: Checkout containerization dependency
309309
if: steps.stack-refs.outputs.containerization_ref != ''
310-
uses: actions/checkout@v7
310+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
311311
with:
312312
repository: stephenlclarke/containerization
313313
path: containerization
@@ -353,7 +353,7 @@ jobs:
353353
} | shasum -a 256 | awk '{ printf "fingerprint=%s\n", $1 }' >> "$GITHUB_OUTPUT"
354354
355355
- name: Cache SwiftPM TSan artifacts
356-
uses: actions/cache@v6
356+
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6
357357
with:
358358
path: |
359359
container-compose/.build
@@ -374,7 +374,7 @@ jobs:
374374
xcodebuild -version
375375
376376
- name: Set up Go
377-
uses: actions/setup-go@v6
377+
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6
378378
with:
379379
go-version-file: container-compose/Tools/compose-normalizer/go.mod
380380
cache-dependency-path: container-compose/Tools/compose-normalizer/go.sum
@@ -394,7 +394,7 @@ jobs:
394394
timeout-minutes: 30
395395
steps:
396396
- name: Checkout container-compose
397-
uses: actions/checkout@v7
397+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
398398
with:
399399
fetch-depth: 0
400400

0 commit comments

Comments
 (0)