@@ -142,11 +142,14 @@ jobs:
142142
143143 - name : package metadata matches the manifest
144144 run : |
145- # Pinned: check-nfpm.py reads .goreleaser.yaml, so the parser it
146- # uses is part of the check. Bump it here by hand.
147- python3 -m pip install --quiet --disable-pip-version-check pyyaml==6.0.3
148145 go mod download github.com/tui-tools/tui-kit
149146 kit=$(go list -m -f '{{.Dir}}' github.com/tui-tools/tui-kit)
147+ # check-nfpm.py reads .goreleaser.yaml, so the parser it uses is
148+ # part of the check. The kit pins it by version and by the hash of
149+ # every wheel of that version (tools/requirements.txt), and pip
150+ # refuses anything that does not match.
151+ python3 -m pip install --quiet --disable-pip-version-check \
152+ --require-hashes -r "$kit/tools/requirements.txt"
150153 python3 "$kit/tools/check-nfpm.py" --manifest tool.json \
151154 --config .goreleaser.yaml
152155
@@ -257,6 +260,7 @@ jobs:
257260 # produced each file. `gh attestation verify <file> -R tui-tools/tui-firewall`
258261 # checks a download against it without any key to distribute.
259262 - name : attest build provenance
263+ id : attest
260264 uses : actions/attest-build-provenance@4d101475d8b20a2381f78447822ac1eab6504dd8 # v4.2.2
261265 with :
262266 subject-path : |
@@ -265,3 +269,14 @@ jobs:
265269 dist/*.rpm
266270 dist/*.pkg.tar.zst
267271 dist/checksums.txt
272+
273+ # The attestation lives in GitHub's store, which `gh attestation verify`
274+ # reads; Scorecard's Signed-Releases check reads the release's assets
275+ # instead, and looks for a `*.intoto.jsonl`. The same bundle, attached
276+ # under that name, satisfies both readers.
277+ - name : attach the provenance bundle to the release
278+ env :
279+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
280+ run : |
281+ cp "${{ steps.attest.outputs.bundle-path }}" dist/provenance.intoto.jsonl
282+ gh release upload "$GITHUB_REF_NAME" dist/provenance.intoto.jsonl --clobber
0 commit comments