This document describes the release process for the gw project.
- Ensure all changes are merged to main
- Update CHANGELOG.md with all changes under [Unreleased]
- Ensure all tests pass:
make check - Ensure dependencies are up to date:
go mod tidy - Ensure GoReleaser is installed:
go install github.com/goreleaser/goreleaser@latest
Move all entries from [Unreleased] to a new version section:
## [Unreleased]
## [0.4.0] - 2025-01-31
### Added
- (move items here)
### Changed
- (move items here)
### Fixed
- (move items here)git add CHANGELOG.md
git commit -m "chore: prepare for v0.4.0 release"
git push origin maingit tag -a v0.4.0 -m "Release v0.4.0"
git push origin v0.4.0The GitHub Actions workflow will automatically:
- Run tests
- Build binaries for all platforms
- Create a GitHub release with:
- Automatically generated changelog from commit messages
- Binary artifacts
- Installation instructions
After successful release:
- Check the releases page
- Verify all artifacts are uploaded
- Test installation:
go install github.com/sotarok/gw@latest
We follow Semantic Versioning:
- MAJOR version for incompatible API changes
- MINOR version for new functionality in a backwards compatible manner
- PATCH version for backwards compatible bug fixes
Use Conventional Commits:
feat:for new features (triggers MINOR version bump)fix:for bug fixes (triggers PATCH version bump)feat!:orfix!:for breaking changes (triggers MAJOR version bump)refactor:for code refactoringperf:for performance improvementsdocs:for documentation onlytest:for test additions/changeschore:for maintenance tasksci:for CI/CD changes
GoReleaser automatically generates a changelog based on commit messages since the last tag. The changelog groups commits by type:
- Features (feat)
- Bug Fixes (fix)
- Performance (perf)
- Refactors (refactor)
Commits with docs:, test:, chore:, and ci: prefixes are excluded from the release notes.
Before creating an actual release, you can test the process:
# Test the release process without pushing
make release-dryThis will:
- Build all binaries
- Generate the changelog
- Create release artifacts locally
- Show what would be released
- Check GitHub Actions logs
- Ensure the tag follows the
v*pattern - Verify GitHub Actions has proper permissions
- Check
.goreleaser.yamlconfiguration - Ensure all target platforms are included
- Check for build errors in logs
- Wait a few minutes for proxy.golang.org to update
- Check availability:
curl https://proxy.golang.org/github.com/sotarok/gw/@v/list - Clear local module cache:
go clean -modcache