fix(release): align release automation with shared pipeline guide - #34
Conversation
Correct four contract deviations against the chinmina/.github release
pipeline onboarding guide (verified-actions), matching the relic example:
- callers: set workflow-level `permissions: {}` and grant the GITHUB_TOKEN
ceiling on the calling job (secure-by-default shape) in both
release-please.yml and release.yml; octo-sts path keeps no `secrets:`
- goreleaser: add `release.mode: keep-existing` to complete the draft trio
(draft + keep-existing + use_existing_draft) so goreleaser fills the
release-please draft instead of creating a duplicate release
- goreleaser: add `skip_upload: auto` to the homebrew cask so it is not
pushed on prerelease tags, and align the quarantine-xattr hook to the
guide's canonical `system "xattr" ...` form
- mise: use `rename_exe` for binstaller (the github: backend field), not
the ubi-only `exe`, per the Declaring binstaller contract
Validated with actionlint (clean) and goreleaser check. zizmor run via its
container image: the native arm64 build aborts on this host's 16K page size.
|
Warning Review limit reached
Next review available in: 53 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (3)
📝 WalkthroughWalkthroughThis PR hardens GitHub Actions workflow permissions by defaulting to ChangesCI Permission Hardening and Release Tooling
Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
- npm package.json: license was MIT but the repo is Apache-2.0; align the published package metadata to the actual LICENSE - ci.yml: bump hash-pinned third-party actions to current releases — actions/checkout v6.0.3->v7.0.0, actions/setup-go v6.4.0->v6.5.0, jdx/mise-action v4.1.0->v4.2.0 - pr-title.yml: hash-pin the jamestelfer/.github reusable workflow (was a floating @main ref) to its current commit, clearing the zizmor unpinned-uses finding chinmina reusable workflows intentionally remain on @verified-actions per the release pipeline contract.
Purpose
Keep imds-broker's release automation compliant with the shared
chinmina/.githubrelease pipeline, so that a release actually fires and publishes provenance-attested artifacts on the first run rather than stalling or silently publishing before attestation.An audit against the canonical onboarding guide (
docs/adopting-the-release-pipeline.mdonverified-actions) and therelicworked example found the repo had drifted from several pipeline contracts after guide updates. Each deviation is a latent release failure:GITHUB_TOKENceiling at the workflow level instead of the secure-by-default shape (workflowpermissions: {}, grant on the calling job). This is the drift the guide flags as most common and highest-risk, keeping the token off every job that does not need it. The keyless octo-sts token source is preserved and correctly passes no secrets.release.mode: keep-existing, breaking the draft trio. Without all three ofdraft/keep-existing/use_existing_draft, goreleaser creates a duplicate release and bypasses the attest-before-publish gate — the wrapper preflights this and refuses to run.skip_upload: auto, so a prerelease/RC tag would wrongly publish the cask (the release-levelprerelease: autodoes not gate the cask push). The quarantine-xattr hook is also aligned to the guide's canonical form.mise.tomlused the ubi-onlyexefield for binstaller instead ofrename_exerequired by thegithub:backend, which would leave thebinstCLI offPATHduring release.Context
chinmina/.github→docs/adopting-the-release-pipeline.mdanddocs/release-workflows.md(verified-actionsbranch), cross-checked against the liverelease-please.yml/goreleaser-release.ymlreusable-workflow contracts and thedocs/examples/relic/worked example.actionlintclean;goreleaser checkvalid;just verifypasses.zizmorwas run via its container image (ghcr.io/zizmorcore/zizmor:1.25.2) because the native arm64 binary aborts on this host's 16K memory page size — nosecrets-inheritfindings and no findings introduced by these changes; the only errors areunpinned-useson the@verified-actionsrefs, which are inherent to the guide's prescribed shape (therelicexample produces the identical finding).