This document describes the release process for the Vapi CLI.
The Vapi CLI uses:
- Semantic Versioning (v1.2.3)
- GitHub Releases for binary distribution
- GoReleaser for automated cross-platform builds
- GitHub Actions for CI/CD
To create a new release:
# Make sure you're on main and up to date
git checkout main
git pull origin main
# Create and push a new tag
git tag -a v1.2.3 -m "Release v1.2.3"
git push origin v1.2.3This will trigger the automated release process.
Before releasing:
- All tests pass (
make test) - No linting issues (
make lint) - README.md is up to date
- CHANGELOG.md is updated (if maintaining one)
- Version number follows semver
We follow Semantic Versioning:
- MAJOR (v2.0.0): Breaking changes
- MINOR (v1.3.0): New features, backwards compatible
- PATCH (v1.2.4): Bug fixes, backwards compatible
For testing releases:
git tag -a v1.2.3-beta.1 -m "Beta release v1.2.3-beta.1"Users can download pre-built binaries from GitHub Releases:
- macOS (Intel & Apple Silicon)
- Linux (x86_64, ARM)
- Windows (x86_64)
Setup Required:
- Create
VapiAI/homebrew-taprepository - Update
.goreleaser.yamlto setskip_upload: false - Users install with:
brew tap VapiAI/homebrew-tap brew install vapi-cli
Setup Required:
- Create
VapiAI/scoop-bucketrepository - Update
.goreleaser.yamlto setskip_upload: false - Users install with:
scoop bucket add vapi https://github.com/VapiAI/scoop-bucket scoop install vapi-cli
Consider adding support for:
- apt/deb (Debian/Ubuntu)
- yum/rpm (RHEL/CentOS)
- AUR (Arch Linux)
- Chocolatey (Windows)
- npm/yarn (Cross-platform via Node.js wrapper)
Create a universal install script:
curl -sSL https://vapi.ai/install.sh | bashWhen you push a tag:
- GitHub Actions triggers the release workflow
- Tests run on all platforms
- GoReleaser builds binaries for all platforms
- Archives are created with proper naming
- Checksums are generated for security
- GitHub Release is created with:
- Pre-built binaries
- Installation instructions
- Changelog from commits
- Optional: Updates Homebrew/Scoop formulas
If automation fails:
# Install GoReleaser locally
brew install goreleaser
# Create release manually
goreleaser release --clean
# Or create a snapshot (no tag required)
goreleaser release --snapshot --clean- Simple, memorable name (
vapinotvapi-cli) - Consistent across platforms
vapi --version
# Output: vapi version 1.2.3 (commit: abc123, built: 2024-01-01)Consider adding self-update capability:
vapi updateProvide multiple options:
- Direct download
- Package managers
- Install script
- Docker image
- Build from source
Essential platforms:
- macOS (Intel + Apple Silicon)
- Linux (x86_64 + ARM)
- Windows (x86_64)
- Sign binaries (code signing certificates)
- Provide checksums
- Use HTTPS for all downloads
- Consider notarization for macOS
- Clear installation instructions per platform
- Troubleshooting guide
- Uninstall instructions
- Maintain config file compatibility
- Provide migration tools
- Clear deprecation warnings
- Create
VapiAI/homebrew-taprepository - GoReleaser will auto-update the formula
- Test installation:
brew tap VapiAI/homebrew-tap brew install vapi-cli brew test vapi-cli
For Node.js users, create a wrapper:
{
"name": "@vapi/cli",
"version": "1.2.3",
"bin": {
"vapi": "./bin/vapi"
},
"scripts": {
"postinstall": "node install.js"
}
}Already configured in .goreleaser.yaml. Enable when ready:
docker run -it ghcr.io/vapiai/cli:latest## What's Changed
### ✨ Features
- Feature 1 (#123)
- Feature 2 (#124)
### 🐛 Bug Fixes
- Fix 1 (#125)
- Fix 2 (#126)
### 📚 Documentation
- Updated README (#127)
### 🔧 Maintenance
- Dependency updates (#128)
**Full Changelog**: https://github.com/VapiAI/cli/compare/v1.2.2...v1.2.3Track adoption through:
- GitHub Release download counts
- Homebrew analytics (
brew info vapi-cli) - Error reporting/telemetry (with user consent)
Common issues:
git tag -d v1.2.3
git push origin :v1.2.3Check:
- Git is clean (
git status) - Tag is pushed to origin
- GitHub token has correct permissions
Test locally:
goreleaser build --single-target --snapshot