Skip to content

feat(release): finish M2 distribution via GoReleaser - #10

Merged
jessn-dev merged 3 commits into
developfrom
feat/m2-distribution
Jun 29, 2026
Merged

feat(release): finish M2 distribution via GoReleaser#10
jessn-dev merged 3 commits into
developfrom
feat/m2-distribution

Conversation

@jessn-dev

@jessn-dev jessn-dev commented Jun 29, 2026

Copy link
Copy Markdown
Owner

What

Finishes Milestone 2's "Ship" item: a complete, automated release pipeline via
GoReleaser. A version tag now produces cross-platform binaries, native Linux
packages, checksums, an SBOM, auto-generated release notes, and a Homebrew cask —
no manual steps. Targets develop (git-flow).

Channels

Channel Coverage External setup
GitHub Release binaries (.tar.gz/.zip) every OS, amd64/arm64 none
.deb / .rpm / .apk (nfpm) Debian/Ubuntu/Kali, Fedora/RHEL, Alpine none
Homebrew cask macOS / Linux tap repo + HOMEBREW_TAP_TOKEN (done)
go install any (today) none
AUR Arch disabled — see below

The binary is a single static CGO_ENABLED=0 build, so it runs on any distro
regardless of packaging.

Release notes — automated

The GitHub Release body is generated from Conventional Commits: grouped
Features / Fixes, scope-aware excludes (drops chore(deps), docs, ci, …),
wrapped in a templated header (tagline) and footer (install + checksum-verify +
the show-before-fire safety note). prerelease: auto flags -rc/-beta tags.
Zero manual editing per release.

Security / supply chain

  • Artifacts are checksummed (checksums.txt) and ship a CycloneDX SBOM.
  • Builds are CGO_ENABLED=0 -trimpath, version/commit/date stamped via ldflags.
  • The Homebrew cask strips the macOS quarantine attribute (unsigned binary) so the
    first run isn't blocked by Gatekeeper.
  • AUR disabled: the AUR froze new-account signups (Jun 2026, malicious-commit
    wave), so nock-bin can't be registered yet. The aurs: block is commented with
    a re-enable note — a third-party channel going unavailable must never block a
    release.

Tooling

  • RELEASING.md — the standing release runbook (checked into the repo).
  • make release-check / make release-snapshot; goreleaser check added to the
    make verify local gate (living gate, tracks CI).
  • docs/install.md documents every install path; README links RELEASING.md.

Validation

  • goreleaser check clean; goreleaser release --snapshot builds all 6 archives +
    .deb/.rpm/.apk + cask; release notes rendered from a throwaway tag.
  • Built binary smoke-tested (nock version stamp correct).
  • make verify green (cross-build + cross-lint all target OSes, race tests,
    govulncheck); actionlint clean on release.yml.

Out of scope

GitHub Discussions (deliberately deferred to the public v1 launch). Package GPG
signing is a later hardening fast-follow. AUR re-enables when signups reopen.

After merge

Merge develop -> main, then git tag v0.1.0-rc1 && git push --tags to validate
the full pipeline end-to-end before tagging v0.1.0.

Summary by CodeRabbit

  • New Features
    • Added GoReleaser-generated Linux packages (deb/rpm/apk) and improved Homebrew cask publishing, including macOS quarantine handling.
    • Release artifacts now ship with integrity checksums and SBOMs, with consistent install/release-note formatting.
    • Added local release commands: make release-check and make release-snapshot.
  • Documentation
    • Updated install instructions for all platforms, including checksum verification and package-specific install steps.
    • Added RELEASING.md covering the end-to-end release process and post-release verification.
  • Chores
    • Development checks now validate release configuration when tooling is available (otherwise defers to CI).

  Static binaries (linux/darwin/windows x amd64/arm64) + checksums + SBOM,
  .deb/.rpm/.apk via nfpm (Debian/Ubuntu/Kali, Fedora/RHEL, Alpine), Homebrew cask.
  Fully automated, grouped release notes from Conventional Commits with a templated
  install/verify header+footer. go install works today.

  Add RELEASING.md runbook, make release-check/snapshot, and a goreleaser check step
  to the local gate; document install paths; check M2 ship boxes. AUR (nock-bin)
  wired but disabled (signups frozen Jun 2026). Homebrew uses the HOMEBREW_TAP_TOKEN
  secret + jessn-dev/homebrew-tap; Releases and Linux packages need no setup.
@coderabbitai

coderabbitai Bot commented Jun 29, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: e83d7d48-18a4-4260-af47-4ac465210f95

📥 Commits

Reviewing files that changed from the base of the PR and between ec66911 and 0e24aef.

📒 Files selected for processing (2)
  • CONTRIBUTING.md
  • docs/install.md

📝 Walkthrough

Walkthrough

Adds a GoReleaser release pipeline with Linux packages, Homebrew cask publishing, release-note templating, validation hooks, and updated release/install documentation.

Changes

Release Pipeline Setup

Layer / File(s) Summary
GoReleaser packaging and metadata
.goreleaser.yaml
Adds Linux package generation, updates changelog filtering, and defines release note templating plus Homebrew cask and AUR release configuration.
Release workflow and validation hooks
.github/workflows/release.yml, Makefile, scripts/dev-check.sh, .coderabbit.yaml
Adds the Homebrew tap token to the release workflow, changes the CodeRabbit review profile, adds release-check and release-snapshot targets, and runs goreleaser check from the dev-check script when available.
Release and install documentation
RELEASING.md, docs/install.md, ROADMAP.md, README.md, CONTRIBUTING.md
Adds RELEASING.md, links it from README.md, and updates install and roadmap guidance for release artifacts, package installation, Homebrew behavior, AUR status, milestone completion, and review profile wording.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • jessn-dev/nock#9: Touches the same scripts/dev-check.sh validation path that this PR extends with goreleaser check.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: completing Milestone 2 release distribution work with GoReleaser.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/m2-distribution

Comment @coderabbitai help to get the list of available commands.

@jessn-dev jessn-dev added feature Distinct user-facing functionality or characteristic github_actions Pull requests that update GitHub Actions code labels Jun 29, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/install.md`:
- Around line 6-8: The status banner in the install docs overstates what the
release pipeline ships by mentioning AUR even though it is disabled elsewhere in
this change. Update the banner text to keep the release-pipeline summary
accurate, and ensure the wording around the GoReleaser-based publishing only
names the destinations that are actually enabled today.
- Around line 27-38: The install example in the Release binaries section
verifies the archive only after it has already been extracted, which should be
reversed. Update the `docs/install.md` example to run checksum validation with
`checksums.txt` before any `tar xzf` extraction, and keep the guidance aligned
with the release-binary download flow so users validate the
`nock_*_linux_amd64.tar.gz` archive first and extract only after it passes
verification.
- Around line 59-66: The Homebrew install command is using formula syntax for a
package that is actually a cask. Update the documented install command to use
the cask form in both the install guide and RELEASING.md, keeping the
surrounding Homebrew section and the nock package reference unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 25591501-3dc3-446b-a39c-cc44cc22380e

📥 Commits

Reviewing files that changed from the base of the PR and between 8f63b12 and 544e43a.

📒 Files selected for processing (8)
  • .github/workflows/release.yml
  • .goreleaser.yaml
  • Makefile
  • README.md
  • RELEASING.md
  • ROADMAP.md
  • docs/install.md
  • scripts/dev-check.sh

Comment thread docs/install.md Outdated
Comment thread docs/install.md
Comment thread docs/install.md
  - install.md: drop AUR from status banner (it's disabled); verify checksum before
    extracting; use 'brew install --cask' (it's a cask, not a formula)
  - mirror the --cask fix in RELEASING.md and the goreleaser release-notes footer
  - .coderabbit.yaml: profile chill -> assertive (solo, security-sensitive project)

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.coderabbit.yaml:
- Around line 11-14: The contributor documentation is out of sync with the
configured review profile in the repo settings. Update the review-profile
wording in CONTRIBUTING.md so it matches the current assertive profile used in
the configuration, and make sure any references to CHILL are replaced with the
new profile name where the review behavior is described.

In `@docs/install.md`:
- Line 35: The install guide example is Linux-only, so make the checksum
verification snippet in the install docs explicitly labeled as a Linux example.
Update the section around the sha256sum/tar flow to reference the Linux archive
path or add equivalent verification steps for macOS and Windows so the
platform-specific nature is clear and the instructions remain actionable. Use
the existing install section and the checksum verification snippet as the anchor
when editing.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 9bb0f98d-c886-4b1f-8f75-c8d98d8839f5

📥 Commits

Reviewing files that changed from the base of the PR and between 544e43a and ec66911.

📒 Files selected for processing (4)
  • .coderabbit.yaml
  • .goreleaser.yaml
  • RELEASING.md
  • docs/install.md

Comment thread .coderabbit.yaml
Comment thread docs/install.md Outdated
  - install.md: label the checksum example as Linux; add macOS (shasum) and Windows
    (CertUtil) verification equivalents
  - CONTRIBUTING.md: sync review-profile wording chill -> assertive
@jessn-dev jessn-dev self-assigned this Jun 29, 2026
@jessn-dev
jessn-dev merged commit 25580e9 into develop Jun 29, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature Distinct user-facing functionality or characteristic github_actions Pull requests that update GitHub Actions code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants