Thoth uses automated release management via GitHub Actions and cargo-release.
- Navigate to the repository on GitHub
- Click on the Actions tab
- Select Create Release workflow from the left sidebar
- Click Run workflow button
Choose the type of release based on semantic versioning:
- Patch (0.2.4 → 0.2.5): Bug fixes, minor improvements, no breaking changes
- Minor (0.2.4 → 0.3.0): New features, backward compatible
- Major (0.2.4 → 1.0.0): Breaking changes, major overhaul
Check the Dry run checkbox to preview what will happen without making any changes:
- Shows what the new version will be
- Displays what files will be modified
- No commits, tags, or releases are created
Uncheck Dry run and click Run workflow to create the actual release.
Before using the automated release workflow, you need to set up a Personal Access Token:
- Go to GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic)
- Generate new token with
repoandworkflowpermissions - Copy the token
- Go to repository → Settings → Secrets and variables → Actions
- Create new secret named
RELEASE_TOKENwith your PAT
This allows the workflow to bypass branch protection rules and push directly to main.
When you trigger the workflow, the following happens automatically:
1. Checkout code
2. Install cargo-release
3. Run: cargo release {type} --no-publish --execute
- Updates version in Cargo.toml (package and packager metadata)
- Updates Cargo.lock
- Creates commit: "chore: release v0.2.5"
- Creates git tag: v0.2.5
- Pushes tag to GitHub
1. Detects new tag (v*)
2. Installs cargo-packager (production-ready cross-platform bundler)
3. Builds binaries for all platforms:
- Windows (x64) - MSI installer (via WiX) + portable EXE
- macOS (Intel) - DMG installer + .app bundle
- macOS (Apple Silicon) - DMG installer + .app bundle
- Linux (x64) - DEB package + portable binary
4. Generates changelog from git commits
5. Creates GitHub Release with all artifacts
6. Uploads installers and archives
If you need to create a release locally for testing:
cargo install cargo-release# See what would happen without making changes
cargo release patch --dry-run
cargo release minor --dry-run
cargo release major --dry-run# Patch release (0.2.4 → 0.2.5)
cargo release patch --no-publish --execute
# Minor release (0.2.4 → 0.3.0)
cargo release minor --no-publish --execute
# Major release (0.2.4 → 1.0.0)
cargo release major --no-publish --executeThis will:
- Bump version in Cargo.toml
- Update Cargo.lock
- Create commit and tag
- Push to GitHub
- Trigger the release workflow
- Bug fixes
- Performance improvements
- Documentation updates
- Internal refactoring
- Dependency updates (non-breaking)
- New features
- New settings/options
- UI improvements
- Enhanced functionality
- Backward-compatible changes
- Breaking changes
- Complete redesigns
- Removed features
- Changed APIs
- Migration required
- Check that version bumping is valid
- Ensure no uncommitted changes exist
- Verify git is properly configured
- Delete the tag locally:
git tag -d v0.2.5 - Delete remote tag:
git push origin :refs/tags/v0.2.5 - Run the workflow again
- Check that the tag follows pattern
v*.*.* - Verify the tag was pushed to GitHub
- Check GitHub Actions is enabled for the repo
- Check the build logs in the release.yml workflow
- Verify all platforms are building correctly
- Test builds locally first if needed
If you need to rollback a release:
-
Delete the GitHub Release:
- Go to Releases on GitHub
- Click the release
- Click "Delete release"
-
Delete the Git Tag:
git tag -d v0.2.5 git push origin :refs/tags/v0.2.5
-
Revert the Version Commit:
git revert HEAD git push origin main
Before creating a release, ensure:
- All tests pass (
cargo test) - Code compiles without warnings (
cargo clippy) - Documentation is up to date
- CHANGELOG entries are meaningful
- Breaking changes are documented
- Version bump type is correct (major/minor/patch)
- Consider running a dry run first
Release settings are configured in Cargo.toml:
[package.metadata.release]
publish = false # Don't publish to crates.io
push = true # Push tags after creation
tag-prefix = "v" # Tag format: v0.2.5
pre-release-commit-message = "chore: release v{{version}}"
[package.metadata.packager]
product_name = "Thoth"
identifier = "com.thoth.app"
category = "DeveloperTool"
# ... additional packager configurationWorkflow files:
.github/workflows/create-release.yml- Manual release trigger.github/workflows/release.yml- Build and publish release artifacts
Thoth uses cargo-packager for creating installers across all platforms:
- Windows: MSI installer using WiX Toolset v3 (automatically installed in CI)
- macOS: DMG disk images with native .app bundles
- Linux: DEB packages for Debian/Ubuntu
cargo-packager is a production-ready tool that evolved from Tauri's bundler and provides stable, reliable packaging for all platforms. It replaced the experimental cargo-bundle to fix MSI corruption issues on Windows.