| name | release-and-versioning |
| description | Cuts a new release with semantic versioning and GoReleaser. Use when the user wants to release a new version, tag a release, or understand release workflow. |
Release and Versioning
Semantic Versioning
- Tags use the form vMAJOR.MINOR.PATCH (e.g.
v0.1.0, v1.0.0).
- The
v prefix is required for the release workflow.
Release Steps
- Ensure main is green – CI (test, lint) must pass on the branch you will tag.
- Create and push the tag:
git tag vX.Y.Z
git push origin vX.Y.Z
- Let CI run –
.github/workflows/release.yml runs on tag push. GoReleaser creates the GitHub Release with three Lambda zip archives (webhook.zip, scaleup.zip, scaledown.zip), raw binaries, checksums, and release notes. The release body is generated by GitHub (changelog.use: github-native) and categorized by .github/release.yml and PR labels.
- Do not run destructive commands (e.g.
git push or creating tags) without user confirmation.
GoReleaser
- .goreleaser.yml: Builds three Lambda binaries (
webhook, scaleup, scaledown) from lambda/cmd/*/. Each is packaged as a zip archive (e.g. webhook.zip) for AWS Lambda deployment. With changelog.use: github-native, the release body is generated by GitHub and categorized via .github/release.yml and PR labels. Release footer links to full changelog.
- release.yml: Uses
goreleaser/goreleaser-action with release --clean and contents: write permission. Runs on self-hosted medium runner.
Breaking changes and changelog
With github-native changelog, release-note sections are determined by PR labels and .github/release.yml, not by commit subject. Apply the breaking-change label to PRs that introduce breaking changes so they appear under "Breaking Changes" in the generated release notes. Maintainers should apply the appropriate label (e.g. breaking-change, enhancement, bug) when merging so the next release is correctly categorized.
If the user only wants to understand the workflow, explain the steps and point to .goreleaser.yml, .github/release.yml, and .github/workflows/release.yml without running any commands.