Releases are triggered by pushing a git tag. GitHub Actions handles the rest: it runs tests, cross-compiles binaries for all platforms, and publishes a GitHub Release with the binaries attached.
git tag v0.9.1
git push origin v0.9.1The tag name determines the version string baked into the binaries (v0.9.1 → bs --version reports 0.9.1).
- CI runs
go test ./...— if tests fail, the release is aborted - Four binaries are built:
bs-linux-amd64bs-windows-amd64.exebs-darwin-arm64(Apple Silicon)bs-darwin-amd64(Intel Mac)
- A GitHub Release named
v0.9.1is created with all four binaries attached and auto-generated release notes
Use semantic versioning: vMAJOR.MINOR.PATCH
PATCH— bug fixes, no new features (v0.9.0→v0.9.1)MINOR— new features, backwards compatible (v0.9.1→v0.10.0)MAJOR— breaking changes (v0.x.x→v1.0.0)
Ordinary commits and PRs to main run CI (tests only) but do not produce a release. Only tagged commits trigger a release build.
Add [skip ci] anywhere in the commit message to suppress all workflow runs for that push:
git commit -m "Fix typo in README [skip ci]"Useful for trivial changes where you've already tested locally. Note: this only suppresses push-triggered runs — it does not affect PR workflow runs.