Skip to content

release.sh ships unsigned when the cosign env is absent — make signing refuse, not opt out #960

Description

@VijitSingh97

The v1.18.0 cut ran in a non-login shell without COSIGN_KEY/COSIGN_PASSWORD, and release.sh warned "Release signing OFF (#376 is opt-in)" and published anyway. Because release assets are immutable, the missing pithead.tar.gz.sig could not be attached afterwards; signed installs fail closed on the unsigned bundle, so v1.18.0 had to be withdrawn and re-cut as v1.18.1.

release-server.md already promises the stricter behaviour: "The release preflight refuses to run without cosign, COSIGN_KEY, and cosign.pub all in place" — the code just doesn't implement it.

Fix, per the doc's own contract:

  • Preflight (stage 1) aborts when cosign.pub exists at the repo root and any of {cosign binary, COSIGN_KEY, COSIGN_PASSWORD} is missing. An explicit --unsigned flag can keep the old escape hatch for experiments.
  • Preflight should also sanity-check the cosign version against the pinned install: the box had drifted to cosign v3.1.2, which rejects the --tlog-upload=false flags release.sh uses — a cut with signing correctly configured would still have died at stage 7 (the pinned v2.6.3 has been restored on bench-host).

Two failures, one shape: the pipeline trusts its environment instead of proving it before the irreversible stages.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinginfraDeployment, packaging, releasessecuritySecurity-sensitive issue or hardening

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions