SESS uses GitHub Actions to automatically build and release binaries for multiple platforms. When you push a version tag, the workflow automatically:
- Builds binaries for 6 platforms (Linux, macOS, Windows - amd64 & arm64)
- Creates compressed archives (.tar.gz for Unix, .zip for Windows)
- Generates SHA256 checksums
- Publishes an
install.shasset for one-line installs - Creates a GitHub Release with all artifacts
- Includes installation instructions in the release notes
The release workflow builds for:
- Linux: amd64, arm64
- macOS: amd64 (Intel), arm64 (Apple Silicon)
- Windows: amd64, arm64
All builds use pure Go (no CGO), so they work without additional dependencies.
Make sure all changes are committed and pushed to the main branch:
git checkout main
git pull origin mainUpdate any release-facing docs that changed materially:
README.mddocs/README.md- user-facing install or workflow docs under
docs/ - milestone or roadmap docs when a phase boundary changes
# Create a tag (following semantic versioning)
git tag -a v0.3.1 -m "Release v0.3.1"
# Push the tag to GitHub
git push origin v0.3.1Tag Format: v<major>.<minor>.<patch>
- Example:
v0.3.0,v1.0.0,v1.2.3
- Go to Actions tab in GitHub:
https://github.com/Orctatech-Engineering-Team/sess-cli/actions - Click on the "Release" workflow run
- Watch the build process (~3-5 minutes)
Once complete:
- Go to Releases:
https://github.com/Orctatech-Engineering-Team/sess-cli/releases - Verify all 6 binaries are present:
sess-linux-amd64.tar.gzsess-linux-arm64.tar.gzsess-darwin-amd64.tar.gzsess-darwin-arm64.tar.gzsess-windows-amd64.zipsess-windows-arm64.zip
- Verify
checksums.txtis present - Verify
install.shis present - Check that release notes are generated
Download and test the binary for your platform:
# Example for Linux/macOS
curl -fsSL https://github.com/Orctatech-Engineering-Team/sess-cli/releases/download/v0.3.0/install.sh | sudo bash
sess --version
# Should output: SESS v0.3.0We follow Semantic Versioning:
MAJOR (0.x.x → 1.x.x):
- Incompatible API changes
- Breaking changes to command interface
- Database schema changes requiring migration
MINOR (0.0.x → 0.1.x):
- New features (backward compatible)
- New commands
- Major enhancements
PATCH (0.0.0 → 0.0.1):
- Bug fixes
- Performance improvements
- Documentation updates
- Minor tweaks
- v0.1.0 - Initial release with basic session start
- v0.2.0 - MVP1 - Database persistence, pause/resume, projects listing
- v0.3.0 - Phase 3 -
sess endcommand, PR creation - v1.0.0 - (Future) Production-ready, stable API
For testing releases before official launch:
# Create a pre-release tag
git tag -a v0.3.1-rc1 -m "Release candidate 1 for v0.3.1"
git push origin v0.3.1-rc1Pre-release tags (with -rc, -beta, -alpha) will trigger the same workflow.
Mark the release as "pre-release" in GitHub UI if needed.
For urgent bug fixes:
-
Create a hotfix branch from the tag:
git checkout -b hotfix/v0.3.1 v0.3.0
-
Fix the bug and commit:
git commit -m "Fix critical bug in pause command" -
Create a new patch version tag:
git tag -a v0.3.1 -m "Hotfix: Fix pause command bug" git push origin v0.3.1 -
Merge back to main:
git checkout main git merge hotfix/v0.3.1 git push origin main
Triggers on: Push to tags matching v*.*.*
Steps:
- Checkout code
- Setup Go 1.25
- Build binaries for all platforms
- Create archives (.tar.gz/.zip)
- Generate SHA256 checksums
- Attach
install.shalongside release artifacts - Create GitHub Release with artifacts
Build flags:
go build -ldflags="-s -w"-s -w- Strip debug info (smaller binaries)- Version info automatically injected via
github.com/earthboundkid/versioninfo/v2from git tags and commits
Triggers on: Push to main/dev, Pull Requests
Purpose: Continuous integration - verify builds work
Steps:
- Build on Linux, macOS, Windows
- Run
go vet - Run tests (if present)
- Upload artifacts for Linux build
If you need to create a release manually:
# Ensure you're on the tagged commit
git checkout v0.3.0
# Build for a specific platform
GOOS=linux GOARCH=amd64 go build \
-ldflags="-s -w" \
-o sess \
./cmd/sess
# Verify version
./sess --version
# Create archive
tar czf sess-linux-amd64.tar.gz sess
# Generate checksum
sha256sum sess-linux-amd64.tar.gz > checksums.txtThen manually create the release on GitHub and upload the files.
Note: The versioninfo package automatically reads version from git tags and commits, so you don't need to manually inject version strings.
After a release, users can install with:
curl -fsSL https://github.com/Orctatech-Engineering-Team/sess-cli/releases/latest/download/install.sh | sudo bashThis installs to /usr/local/bin/sess by default.
The installer supports Linux and macOS.
To install into /usr/bin instead:
curl -fsSL https://github.com/Orctatech-Engineering-Team/sess-cli/releases/latest/download/install.sh | sudo env SESS_INSTALL_DIR=/usr/bin bashTo install a specific version:
curl -fsSL https://github.com/Orctatech-Engineering-Team/sess-cli/releases/latest/download/install.sh | sudo env SESS_VERSION=v0.3.0 bashcurl -fsSL https://github.com/Orctatech-Engineering-Team/sess-cli/releases/latest/download/sess-linux-amd64.tar.gz | tar xz
sudo install -m 0755 sess /usr/local/bin/sessOnce we have more releases, create a Homebrew tap:
brew tap Orctatech-Engineering-Team/sess
brew install sess$version = "0.3.0"
Invoke-WebRequest -Uri "https://github.com/Orctatech-Engineering-Team/sess-cli/releases/download/v$version/sess-windows-amd64.zip" -OutFile "sess.zip"
Expand-Archive sess.zip -DestinationPath $env:USERPROFILE\bin
# Add $env:USERPROFILE\bin to PATHscoop bucket add orctatech https://github.com/Orctatech-Engineering-Team/scoop-bucket
scoop install sessUsers should verify downloads using checksums:
# Download checksum file
curl -L https://github.com/Orctatech-Engineering-Team/sess-cli/releases/download/v0.3.0/checksums.txt -o checksums.txt
# Verify (Linux/macOS)
sha256sum -c checksums.txt --ignore-missing
# Verify (Windows)
Get-FileHash sess-windows-amd64.zip -Algorithm SHA256
# Compare with checksums.txt manuallyCheck Go version:
- Workflow uses Go 1.25
- Ensure go.mod requires the correct version
Check dependencies:
go mod tidy
go mod verifyCheck tag format:
- Must match
v*.*.*(e.g.,v0.3.0) - Not
0.3.0orversion-0.3.0
Check permissions:
- Workflow needs
contents: writepermission - This is already set in the workflow file
Binaries are ~15MB due to embedded SQLite. This is normal.
To reduce size further:
- Use UPX compression (risky, can trigger antivirus)
- Remove unused features (not recommended)
-
Homebrew Tap
- Create formula for easy installation
- Auto-update on new releases
-
Scoop Manifest (Windows)
- Add to scoop bucket
- Easy Windows installation
-
APT/YUM Repositories (Linux)
- Debian/Ubuntu packages
- RedHat/Fedora packages
-
Auto-update Feature
- Built-in
sess upgradecommand - Check for new versions automatically
- Built-in
-
Snapcraft (Linux)
- Universal Linux package
- Auto-updates via snap store
-
Docker Image
- Container for CI/CD environments
- Multi-platform support
Before creating a release:
- All features tested locally
- Documentation updated (README, ARCHITECTURE, etc.)
- CHANGELOG updated (if you create one)
- Version bumped in all necessary places
- All tests passing (when tests exist)
- No open critical bugs
- Release notes drafted
- Tag created with proper format (
v*.*.*) - Tag pushed to GitHub
- Release workflow completed successfully
- Binaries verified on at least one platform
- Announce release (if applicable)
If you encounter issues with the release process:
- Check GitHub Actions logs for error messages
- Verify tag format is correct
- Ensure repository permissions are set
- Open an issue if problems persist
Next Release: TBD
Target Date: TBD
Features: conflict recovery, auth/config work, or other post-v0.3.0 priorities