This document describes the release process for Pocket maintainers.
- Push access to the repository
HOMEBREW_TAP_TOKENsecret configured in GitHub (for automatic Homebrew updates)- GoReleaser installed locally (for testing):
go install github.com/goreleaser/goreleaser@latest
- Ensure all PRs for the release are merged
- Update the version in any documentation if needed
- Run tests to ensure everything is working:
make test-all make lint
Before creating a real release, test the build process:
make release-testThis will:
- Build binaries for all platforms
- Create archives
- Generate checksums
- Test the GoReleaser configuration
Check the dist/ directory to verify the artifacts look correct.
Create and push a version tag:
# For a new release
make release VERSION=v1.2.3
# For a pre-release
make release VERSION=v1.2.3-beta.1This will:
- Create an annotated git tag
- Push the tag to GitHub
- Trigger the GitHub Actions release workflow
- Go to the Actions tab
- Watch the "Release" workflow
- The workflow will:
- Run tests
- Build binaries for all platforms
- Create a GitHub release with:
- Pre-built binaries for all platforms
- Source code archives
- SHA256 checksums
- Auto-generated changelog
- Update the Homebrew formula with bottle support (for stable releases only)
- GoReleaser will automatically:
- Update version and checksums
- Add bottle definitions for each platform
- Commit to homebrew-tap repository
Once the workflow completes:
- Check the releases page
- Verify all artifacts are present
- Test installation methods:
# Test Homebrew bottle install (default - pre-built binary) brew update brew install agentstation/tap/pocket # Test Homebrew source build brew install --build-from-source agentstation/tap/pocket # Test install script curl -sSL https://raw.githubusercontent.com/agentstation/pocket/master/install.sh | bash # Test direct download curl -L https://github.com/agentstation/pocket/releases/latest/download/pocket-darwin-arm64.tar.gz -o test.tar.gz
- Close the milestone for this release
- Create a new milestone for the next release
- Update the roadmap if needed
- Announce the release (optional):
- Twitter/X
- Discord/Slack communities
- Blog post for major releases
We follow Semantic Versioning:
vMAJOR.MINOR.PATCHfor stable releasesvMAJOR.MINOR.PATCH-TAG.Nfor pre-releases
Examples:
v1.0.0- First stable releasev1.0.1- Patch release (bug fixes)v1.1.0- Minor release (new features, backward compatible)v2.0.0- Major release (breaking changes)v1.1.0-beta.1- Beta releasev1.1.0-rc.1- Release candidate
- Check the Actions logs
- Common issues:
- Tests failing: Fix the tests before releasing
- GoReleaser errors: Test locally with
make release-test - Homebrew update fails: Check the
HOMEBREW_TAP_TOKENsecret
The Homebrew formula is only updated for stable releases (not pre-releases). If it's not updating:
- Check that the
HOMEBREW_TAP_TOKENhas write access toagentstation/homebrew-tap - Verify the release workflow completed successfully
- Check the homebrew-tap repository for the commit
- GoReleaser should create a commit with message "Update pocket to vX.Y.Z"
The formula supports both installation methods:
- Bottles (default): Pre-built binaries for faster installation
- Source:
brew install --build-from-source agentstation/tap/pocket
If bottles aren't working:
- Check that GoReleaser created the bottle block in the formula
- Verify the binary URLs in the formula are correct
- Test with
--build-from-sourceas a fallback
If you need to remove a release:
- Delete the release on GitHub
- Delete the tag:
git push origin :refs/tags/vX.Y.Z - Fix the issue
- Create a new release with a new version number
- All tests passing
- Changelog updated (if manual changes needed)
- Documentation updated
- Version tag created and pushed
- GitHub Actions workflow successful
- Release artifacts verified
- Homebrew formula updated (for stable releases)
- Installation methods tested
- Release announced (if applicable)