From 1a574aebc0e3fb1e3247ecd02a022b4204204aa6 Mon Sep 17 00:00:00 2001 From: Conrad Date: Wed, 2 Sep 2026 11:37:24 -0400 Subject: [PATCH] ci: Pin the sigstore action to a hash-locked dependency closure A commit-SHA pin fixes the action's revision, not the dependency closure that revision installs. At the pinned revision the action resolves its Python environment from a requirements file constraining only sigstore ~= 3.0 and requests ~= 2.28, without hashes, so the transitive closure is recomputed against the package index on every invocation. Pinning more strictly does not narrow it, because the unconstrained resolution is a property of the pinned code rather than of the reference that selects it. securesystemslib 1.5.0 declares its cryptography 48 requirement through an extra that the tuf to sigstore chain does not select, so the resolver admits that release alongside an earlier cryptography. Signature verification degrades without raising, and the TUF trust root verifies against 0 of 3 keys. The failure is confined to the signing step and precedes any artifact read, so the surrounding jobs complete: distributions build, the GitHub release is created, and the PyPI upload succeeds. A release reaches both channels carrying no sigstore bundles, and no job reports a failure. Revision v3.5.0 installs from a requirements file pinning 31 distributions by exact version under sha256 hashes, among them sigstore 4.5.0, cryptography 49.0.0, securesystemslib 1.4.0 and tuf 7.0.0. The closure is fixed at the revision rather than at the index, so no subsequent upload can perturb it. The interface is unchanged. v3.5.0 declares a strict superset of v3.0.0's inputs and removes none, and the single input this action passes is identical. --- .github/actions/publish-github-release/action.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/publish-github-release/action.yaml b/.github/actions/publish-github-release/action.yaml index 1e031c7..60bfee6 100644 --- a/.github/actions/publish-github-release/action.yaml +++ b/.github/actions/publish-github-release/action.yaml @@ -16,7 +16,7 @@ runs: path: dist-${{ inputs.version }}/ - name: Sign the artifacts with Sigstore - uses: sigstore/gh-action-sigstore-python@f514d46b907ebcd5bedc05145c03b69c1edd8b46 # v3.0.0 + uses: sigstore/gh-action-sigstore-python@790bc6befb9d733738f18d8f895854b453640ec9 # v3.5.0 with: inputs: ./dist-${{ inputs.version }}/*.tar.gz ./dist-${{ inputs.version }}/*.whl