Skip to content

ci: sign + ship release binaries (cosign keyless)#34

Merged
aksOps merged 1 commit intomainfrom
ci-signed-releases
Apr 23, 2026
Merged

ci: sign + ship release binaries (cosign keyless)#34
aksOps merged 1 commit intomainfrom
ci-signed-releases

Conversation

@aksOps
Copy link
Copy Markdown
Contributor

@aksOps aksOps commented Apr 23, 2026

Summary

Extends release.yml to actually ship signed, cross-platform binaries instead of just creating empty tag entries. Fixes Scorecard's Signed-Releases check (N/A → 10).

What changes

  • Split into 4 jobs: tag / ui / build (matrix) / release
  • Matrix builds `docsiq` with CGO + sqlite_fts5 tag:
    • `linux-amd64` on `ubuntu-latest`
    • `darwin-amd64` on `macos-13`
    • `darwin-arm64` on `macos-latest`
  • Version ldflags injected: `cmd.Version`, `cmd.Commit`, `cmd.Date`
  • `-trimpath -s -w` for reproducibility + small binaries
  • cosign keyless signs every binary + SHA256SUMS; `.sig` + `.pem` + checksums uploaded

Branch-protection `strict` was just relaxed out-of-band, so this PR's auto-merge won't cause queue churn.

Trade-offs

  • CI time per release: 30s → ~4-5 min (3 parallel builds + sign step). Acceptable given release cadence is one per main merge.
  • Windows skipped (CGO + sqlite-vec is painful there); can add later.
  • macOS binaries are not Apple-Developer-ID signed — Sigstore signing addresses supply-chain, not OS trust. Users will need to right-click Open on first run (standard for OSS).

Test plan

  • CI passes
  • First release after merge produces binary + .sig + .pem + SHA256SUMS on GitHub Releases
  • Local `cosign verify-blob` succeeds against a downloaded binary

Extends the release workflow to build cross-platform binaries and sign
them with cosign using Sigstore's keyless OIDC flow — no keys to rotate.

Changes:
- Split into 4 jobs: tag / ui / build matrix / release
- Matrix builds docsiq for linux-amd64, darwin-amd64, darwin-arm64 with
  CGO (sqlite-vec + mattn/go-sqlite3 with FTS5) and version ldflags
- release job runs cosign sign-blob on every binary + on SHA256SUMS,
  producing .sig and .pem per asset
- All assets uploaded to the auto-cut prerelease

Scorecard impact: Signed-Releases N/A → 10 once scorecard re-scans.

Verification for users (will add to README):
  cosign verify-blob \
    --certificate-identity-regexp 'https://github.com/RandomCodeSpace/docsiq/\.github/workflows/release\.yml.*' \
    --certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
    --certificate docsiq-<tag>-linux-amd64.pem \
    --signature docsiq-<tag>-linux-amd64.sig \
    docsiq-<tag>-linux-amd64

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@aksOps aksOps enabled auto-merge (squash) April 23, 2026 01:02
@aksOps aksOps merged commit 74a5a35 into main Apr 23, 2026
11 checks passed
@aksOps aksOps deleted the ci-signed-releases branch April 23, 2026 01:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant