Releases are built by a GitHub Actions workflow and published as draft GitHub Releases.
- Push access to
main - A changelog entry for the version being released (stable releases only)
Move items from ## Unreleased into a new version section in CHANGELOG.md:
## v0.1.0
### Added
- ...Commit this to main and push.
Go to Actions > Release > Run workflow on GitHub and enter the version. Accepted formats:
v0.1.0— stable release (requires changelog entry)v0.1.0-alpha.1,v0.1.0-rc.1— pre-release (changelog not required)
The workflow will:
- Validate the version format
- Verify a matching changelog entry exists (stable releases only)
- Extract release notes from the changelog, or generate a placeholder for pre-releases
- Create and push a git tag
- Build binaries for Linux and Windows (amd64 + arm64) via GoReleaser
- Collect third-party dependency licenses via
go-licenses - Create a draft GitHub Release with the binaries and license notices
GoReleaser automatically marks releases with pre-release suffixes (e.g. -alpha.1) as pre-releases on GitHub.
The release is created as a draft. Review the release notes and attached archives on the Releases page, then click Publish.
Each release archive contains:
cctotebinary (orcctote.exeon Windows)LICENSE(project license, 0BSD)third_party_licenses/directory with license files for all dependencies
To test the release build locally:
# Collect licenses (requires go-licenses)
go install github.com/google/go-licenses@latest
mise run licenses
# Dry-run GoReleaser
goreleaser release --snapshot --clean