A real Go service, versioned and shipped by big-release on every merge to main. The version on the right isn't a screenshot — it's this app reading its own VERSION file, right now.
big-release runs in CI after tests pass. It reads your commits, decides the next version, and ships it — no manual tagging, no changelog edits.
Someone merges feat: add /healthz endpoint to main. That prefix is the only versioning input.
feat means a minor bump. It reads the last git tag and calculates the next semantic version automatically.
Pushes the git tag, creates the GitHub Release with notes, bumps VERSION — and this page redeploys.
Straight from this canary — nothing hidden, nothing generated on the fly.
# big-release configuration
tagFormat: "v${version}"
initialVersion: "0.1.0"
plugins:
- changelog
- git
- github
release:
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
needs: [build]
permissions: { contents: write }
steps:
- uses: actions/checkout@v7
with: { fetch-depth: 0 }
- name: Install big-release
run: |
curl -sL https://github.com/danielvm-git/big-release/releases/latest/download/big-release-linux-amd64 -o big-release
chmod +x big-release && sudo mv big-release /usr/local/bin/
- name: Run big-release
run: big-release release --verbose
env: { GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" }
module github.com/danielvm-git/bigbase-canary-go
go 1.22
No Node, no npm install, no plugins to wire. One static binary in CI.
# preview the next release without publishing
big-release --dry-run
Use feat: / fix: prefixes. That's the whole contract.
.big-release.ymlSet tagFormat and pick your plugins. Copy the block on the left.
Install the binary, run big-release release after your tests.
mainbig-release does the rest — tag, GitHub Release, changelog, deploy.
big-release maps Conventional Commit types to semantic-version bumps. That's the entire rule set.
A new feature bumps the middle digit — 0.3.1 → 0.4.0.
A bug fix bumps the last digit — 0.3.1 → 0.3.2.
A breaking change bumps the first digit — 0.3.1 → 1.0.0.