Ferroscope uses automated semantic versioning and publishing to crates.io based on conventional commit messages.
Use these commit message formats to trigger automatic releases:
fix: resolve clippy warnings in CI
fix(debugger): handle LLDB timeout correctlyfeat: add GDB support for Linux debugging
feat(eval): support complex expression evaluationfeat!: redesign MCP protocol interface
fix!: change breakpoint API (BREAKING CHANGE)
BREAKING CHANGE: The debug_break API now requires location type specificationYou can also trigger releases manually via GitHub Actions:
- Go to GitHub Actions → "Release and Publish"
- Click "Run workflow"
- Select version type:
patch,minor,major, or specific version like1.2.3
- Trigger Detection: Commit messages are scanned for conventional commit patterns
- Full Test Suite: All tests, clippy, and formatting checks must pass
- Version Bump:
cargo-releaseupdates version in Cargo.toml and tags the commit - Publish: Package is published to crates.io automatically
- GitHub Release: Release notes are generated and published
- Notification: Success/failure status is reported
# Work on a feature
git checkout -b feature/new-debugging-tool
# Make changes with conventional commits
git commit -m "feat: add memory inspection tool"
git commit -m "fix: handle invalid memory addresses"
git commit -m "docs: update tool usage examples"
# Push and create PR
git push origin feature/new-debugging-tool
# After PR merge to master, automatic release will trigger if commits warrant itBefore any release is published:
- ✅ All tests must pass on Linux and macOS
- ✅ Code must pass
cargo fmt --check - ✅ Code must pass
cargo clippywith no warnings - ✅ Examples must build successfully
- ✅
cargo publish --dry-runmust succeed
The following GitHub secrets must be configured for automated publishing:
CARGO_REGISTRY_TOKEN: Token from crates.io for publishing packages
Ferroscope follows Semantic Versioning:
- MAJOR version when you make incompatible API changes
- MINOR version when you add functionality in a backwards compatible manner
- PATCH version when you make backwards compatible bug fixes
# Patch releases
git commit -m "fix: resolve memory leak in debugger session cleanup"
git commit -m "fix(ci): update Rust version to match local environment"
# Minor releases
git commit -m "feat: add support for conditional breakpoints"
git commit -m "feat(eval): implement variable watching functionality"
# Major releases
git commit -m "feat!: redesign tool interface for MCP 2.0"
git commit -m "fix!: change tool names for consistency
BREAKING CHANGE: All tool names now use snake_case instead of camelCase"
# Non-release commits (no version bump)
git commit -m "docs: update README with new installation instructions"
git commit -m "chore: update dependencies"
git commit -m "test: add integration tests for error handling"
git commit -m "refactor: simplify session management code"To test the release process without publishing:
- Create a branch from master
- Make a commit with conventional format
- Push to GitHub and observe the workflow in Actions tab
- The workflow will run all checks but won't actually publish since it's not on master
Release not triggering:
- Check commit message follows conventional commit format exactly
- Ensure push is to
masterbranch - Check GitHub Actions logs for workflow execution
Publish fails:
- Verify
CARGO_REGISTRY_TOKENsecret is set correctly - Check if version already exists on crates.io
- Review crates.io API limits and status
Tests fail:
- All tests must pass before release
- Check CI logs for specific test failures
- Fix issues and push new commits to trigger re-release