Boatman Ecosystem documentation is live!
BoatmanMode CLI
Releasing

Releasing

BoatmanMode uses automatic versioning. Releases are created automatically when you push to main.

How Automatic Versioning Works

When you push to main, the auto-version workflow:

  1. Reads your latest commit message
  2. Determines the version bump type:
    • breaking: or major:Major version bump (v2.0.0)
    • feat: or feature: or minor:Minor version bump (v1.1.0)
    • Everything else → Patch version bump (v1.0.1)
  3. Creates and pushes a new git tag
  4. The tag triggers the release workflow
  5. Binaries are built and released automatically

Examples

# Patch bump → v1.0.1
git commit -m "fix: correct error handling in executor"
git push origin main
 
# Minor bump → v1.1.0
git commit -m "feat: add support for file-based prompts"
git push origin main
 
# Major bump → v2.0.0
git commit -m "breaking: change public API interface"
git push origin main

What Gets Released

For each version tag, GitHub Actions will:

  1. Run tests to ensure everything passes
  2. Build binaries for multiple platforms
  3. Create SHA256 checksums
  4. Generate a changelog from commit messages
  5. Create a GitHub release with all artifacts

Built Platforms

OSArchitecture
Linuxamd64, arm64
macOS (Darwin)amd64 (Intel), arm64 (Apple Silicon)
Windowsamd64

Automatic Release (Recommended)

Simply push to main:

git add .
git commit -m "feat: add new feature"
git push origin main

The workflow handles everything automatically.


Manual Release

If you prefer manual control:

VERSION="v1.0.0"
git tag -a $VERSION -m "Release $VERSION"
git push origin $VERSION

Pre-releases

git tag -a v1.0.0-beta.1 -m "Beta release v1.0.0-beta.1"
git push origin v1.0.0-beta.1

GoReleaser marks releases containing -alpha, -beta, or -rc as pre-releases.


Changelog Generation

Changelogs are auto-generated using Conventional Commits (opens in a new tab):

PrefixChangelog Section
feat:New Features
fix:Bug Fixes
perf:Performance Improvements
refactor:Refactors
OtherOther Changes

Skipping CI

To push without creating a release:

git commit -m "docs: update README [skip ci]"

Testing Locally

# Install GoReleaser
brew install goreleaser/tap/goreleaser
 
# Dry run (doesn't publish)
goreleaser release --snapshot --clean
 
# Check output
ls -lh dist/

Deploy Documentation

The documentation site (docs/) is hosted on Vercel. After any release that includes documentation changes, deploy the updated site:

# Production deploy
cd docs
npm install
npx vercel --prod

For preview deployments (e.g., before merging a docs PR):

cd docs
npx vercel

The Vercel project is already linked via docs/.vercel/project.json. If prompted, use the existing project settings.


Configuration Files

FilePurpose
.github/workflows/auto-version.ymlAuto-version workflow
.github/workflows/release.ymlRelease build workflow
.github/workflows/test.ymlTest workflow
.goreleaser.ymlGoReleaser configuration
cmd/boatman/main.goVersion variable definitions
internal/cli/version.goVersion command implementation
docs/.vercel/project.jsonVercel project configuration