ci(release): adopt central go-release.yml + add GoReleaser config - #104
Conversation
Reproduces julius's current cross-compile (linux/darwin/windows amd64+arm64, windows amd64 only) for consumption by the shared go-release.yml caller.
Replaces the bespoke tag-triggered release.yml with the shared go-release.yml caller (matches augustus/pius/nerva). Every merge to main auto-creates a clean semver tag via the version-bumper App + builds via the new local .goreleaser.yaml. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Gemini ReviewNo critical issues. The migration to a centralized GoReleaser workflow is well-configured and securely pins the reusable workflow to a specific commit hash. Critical IssuesNone. SecurityNo security concerns flagged. SuggestionsNo suggestions. Reviewed by Gemini (gemini-3.1-pro-preview) |
Claude ReviewNo critical issues — LGTM pending human review. Critical issuesNone. Security
Test coverageN/A — CI/release config only, no production Go code changed. |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
WalkthroughThe PR replaces the inline GitHub Actions release job with a call to an external reusable go-release workflow triggered on pushes to main (with job-level permissions and VERSION_BUMPER secrets forwarded). It also adds a .goreleaser.yaml that specifies the julius build matrix, static build flags, archive formats (tar.gz/zip), checksum and SBOM generation, Cosign signing of the checksum artifact, and changelog sorting/exclusion filters. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 880122912b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| checksum: | ||
| name_template: "checksums.txt" |
There was a problem hiding this comment.
Configure or disable supply-chain outputs
On every main-branch release through the pinned reusable workflow, the defaults enable SBOM generation and checksum signing, but that workflow only installs Syft/cosign; GoReleaser emits those artifacts only when the local config contains sboms: and signs: entries. With only the checksum block here, releases will still publish archives and checksums but no SBOMs or cosign signatures, so the central workflow's supply-chain hardening is silently skipped; add the GoReleaser sboms/cosign signs config or pass the inputs as false explicitly.
Useful? React with 👍 / 👎.
…r config Addresses Codex P2: the central go-release.yml defaults enable-sbom/enable-sign true and installs Syft+cosign, but GoReleaser only emits SBOMs/signatures when the local config declares sboms:/signs: blocks. Without them the supply-chain hardening was silently skipped (verified: nerva v1.4.1 / augustus v0.0.10 shipped no .sbom/.sig/.pem). Adds: - sboms: artifacts: archive (Syft SBOM per archive) - signs: cosign sign-blob --yes on checksums (keyless OIDC; id-token already granted) goreleaser check validated (v2.16.0). cosign v2 keyless needs no COSIGN_EXPERIMENTAL. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Good catch — verified and fixed in ca041bd. Confirmed valid: the central Fix: added to sboms:
- artifacts: archive # Syft SBOM per archive
signs:
- cmd: cosign # keyless OIDC signing of checksums.txt
certificate: "${artifact}.pem"
args: [sign-blob, --output-certificate=${certificate}, --output-signature=${signature}, ${artifact}, --yes]
artifacts: checksum
output: trueValidated with This will be backfilled to augustus/pius/nerva so the whole capability fleet emits SBOMs + cosign signatures consistently — verifying on this release first. |
What
Converges julius onto the shared
go-release.yml+ local.goreleaser.yamlrelease model (the augustus/pius/nerva pattern). Two changes:.goreleaser.yaml— reproduces julius's current cross-compile (linux/darwin/windows, amd64+arm64; windows amd64 only), faithful-s -wldflags. This is the local build manifest.release.ymlswapped to the byte-identical central caller — every merge to main auto-creates a cleanvN.N.Nsemver tag (pushed as the version-bumper App to bypass the org tag ruleset) and builds via the config above.Why
julius is imported as a Go module by guard-core (
julius v1.2.0) — the goal is consistent, automatic semver tags for module consumers. Nothing references release-binary names, so the artifact-name change (julius-linux-amd64raw →julius_<ver>_linux_amd64.tar.gz) is safe.The old
on: push: tagstrigger is removed so the App-pushed tag doesn't double-fire a build.Proof this works
Identical conversion just verified on nerva (PR #280): run green, App token minted,
v1.4.1tag + release created,go get nerva@v1.4.1resolves.Verify after merge
Run green ·
Generate app tokensuccess · newv1.2.1tag + release via App ·go get github.com/praetorian-inc/julius@v1.2.1resolves.Prereq
Secrets already set on the repo. julius is likely already in the version-bumper App install (nerva was); if the run's token step 404s, add julius at org settings → installations → 124346828.
🤖 Generated with Claude Code