What
Every operator's release workflow tracks the action's default branch:
- name: Setup Cosign
uses: sigstore/cosign-installer@main
All 15 repositories. It is the only unpinned action in these workflows —
every other one is pinned to a release:
actions/checkout@v6 docker/login-action@v4
actions/setup-go@v6 docker/setup-buildx-action@v4
actions/setup-python@v6 docker/setup-qemu-action@v4
azure/setup-helm@v5 golangci/golangci-lint-action@v9
helm/chart-testing-action@v2.8.0 helm/kind-action@v1.14.0
sigstore/cosign-installer@main ← the exception
Why it matters — a concrete example
The signature storage format changed underneath the release process without
anyone noticing.
Older cosign published signatures as a separate sha256-<digest>.sig tag.
Current cosign attaches them as OCI referrers instead:
GET /v2/zncdatadev/doris-operator/referrers/sha256:0cad44c0...
→ application/vnd.dev.sigstore.bundle.v0.3+json
commons-operator's registry still shows nine .sig tags, the newest dated
2025-10-06. That date is not when signing stopped — it is when the tooling
silently switched schemes, because @main picked up a new major version between
releases.
Signing works correctly today; all 15 0.4.0 images pass cosign verify. But
the behaviour change was invisible until someone went looking, and it did briefly
lead to a false "signatures are missing" report during 0.4.0 verification.
The general risk: an unpinned action in a release path means a third party's
merge to main can alter what a tagged, signed release produces — with no diff
in this org to review, and no way to reproduce an old release's exact behaviour.
Suggested change
Pin like everything else. Latest release is v4.1.2 (2026-05-07):
- name: Setup Cosign
uses: sigstore/cosign-installer@v4
Worth applying across all 15 repos in one pass, alongside dependabot coverage so
upgrades arrive as reviewable PRs rather than silently.
Context
Found while verifying 0.4.0 release artifacts. Not a defect in the current
release — the images are signed and verify correctly.
🤖 Generated with Claude Code
What
Every operator's release workflow tracks the action's default branch:
All 15 repositories. It is the only unpinned action in these workflows —
every other one is pinned to a release:
Why it matters — a concrete example
The signature storage format changed underneath the release process without
anyone noticing.
Older cosign published signatures as a separate
sha256-<digest>.sigtag.Current cosign attaches them as OCI referrers instead:
commons-operator's registry still shows nine
.sigtags, the newest dated2025-10-06. That date is not when signing stopped — it is when the tooling
silently switched schemes, because
@mainpicked up a new major version betweenreleases.
Signing works correctly today; all 15
0.4.0images passcosign verify. Butthe behaviour change was invisible until someone went looking, and it did briefly
lead to a false "signatures are missing" report during 0.4.0 verification.
The general risk: an unpinned action in a release path means a third party's
merge to
maincan alter what a tagged, signed release produces — with no diffin this org to review, and no way to reproduce an old release's exact behaviour.
Suggested change
Pin like everything else. Latest release is
v4.1.2(2026-05-07):Worth applying across all 15 repos in one pass, alongside dependabot coverage so
upgrades arrive as reviewable PRs rather than silently.
Context
Found while verifying 0.4.0 release artifacts. Not a defect in the current
release — the images are signed and verify correctly.
🤖 Generated with Claude Code