This document explains how OSA handles versioning, releases, and changelog management.
OSA follows Semantic Versioning:
- Major (X.0.0): Breaking changes, incompatible API changes
- Minor (x.Y.0): New features, backwards-compatible additions
- Patch (x.y.Z): Bug fixes, backwards-compatible fixes
Releases are automatically triggered when a PR is merged with specific labels:
Add one of these labels to your PR before merging:
release:major- Triggers major version bump (e.g., 1.2.3 → 2.0.0)release:minor- Triggers minor version bump (e.g., 1.2.3 → 1.3.0)
No label = No automatic release. You can manually trigger a release later.
When a PR with release:major or release:minor is merged:
- ✅ Version is bumped in
package.json - ✅ Comprehensive changelog is generated from commits
- ✅
CHANGELOG.mdis updated with categorized changes - ✅ Git tag is created (e.g.,
v1.3.0) - ✅ GitHub Release is published with full release notes
- ✅ Changes are committed back to
main
You can also trigger releases manually via GitHub Actions:
- Go to Actions → Release workflow
- Click Run workflow
- Select:
- version_type:
major,minor, orpatch - generate_changelog:
truefor comprehensive notes
- version_type:
- Click Run workflow
This is useful for:
- Patch releases (bug fixes only)
- Emergency releases
- Releases without an associated PR
Major and minor releases get detailed, categorized changelogs:
## Release 1.3.0
### 📦 Changes since v1.2.0
#### ✨ Features & Enhancements
- Added secure credential management (abc123)
- Introduced secret scanning CLI commands (def456)
#### 🐛 Bug Fixes
- Fixed symlink cleanup script (ghi789)
#### 🔒 Security
- Pre-commit hook blocks secret commits (jkl012)
#### 📚 Documentation
- Updated SETUP-GUIDE.md (mno345)
#### 🔧 Chores & Maintenance
- Standardized file extensions to .zsh (pqr678)
#### 👥 Contributors
- @FrederickEngelhardt
- @contributor2
**Full Changelog**: https://github.com/.../compare/v1.2.0...v1.3.0Patch releases get a simpler format:
## Release 1.2.1
### 📦 Changes since v1.2.0
#### Changes:
- Fixed bug in secret scanner (abc123)
- Updated documentation typo (def456)To ensure changelogs are accurate, use conventional commit prefixes:
feat:orfeature:- New featuresfix:orbug:- Bug fixessecurity:- Security improvementsdocs:ordoc:- Documentation changeschore:orrefactor:- Maintenance tasks
Examples:
git commit -m "feat: add support for GNOME Keyring"
git commit -m "fix: secret scanner false positive for URLs"
git commit -m "security: block AWS credentials in pre-commit hook"
git commit -m "docs: update README with secret management guide"The CHANGELOG.md file in the repo root is the single source of truth for all releases.
# Changelog
All notable changes to OSA will be documented in this file.
---
## Unreleased
(Changes not yet released go here)
---
## [1.3.0] - 2025-11-02
(Full release notes)
---
## [1.2.0] - 2025-10-15
(Full release notes)The GitHub Actions workflow automatically:
- Generates changelog entry from git commits
- Prepends it to
CHANGELOG.md - Commits the updated file
- Tags and releases
You should manually update the "Unreleased" section as you work on features.
# 1. Create feature branch
git checkout -b feat/secret-management
# 2. Make changes with conventional commits
git commit -m "feat: add osa-secret-set helper"
git commit -m "feat: add secret scanning CLI command"
git commit -m "docs: document secret management"
# 3. Create PR
gh pr create --title "Add secure credential management"
# 4. Add release label
gh pr edit --add-label "release:minor"
# 5. Merge PR
# ✅ Auto-release triggered: v1.2.0 → v1.3.0# 1. Create fix branch
git checkout -b fix/typo
# 2. Make changes
git commit -m "fix: correct typo in help text"
# 3. Create and merge PR (no release label)
gh pr create --title "Fix typo in help"
# 4. Merge PR
# ❌ No auto-release (can release manually later)# 1. Create breaking change branch
git checkout -b breaking/new-api
# 2. Make changes
git commit -m "feat!: redesign constructor API"
git commit -m "docs: update migration guide"
# 3. Create PR and add major label
gh pr create --title "BREAKING: New constructor API"
gh pr edit --add-label "release:major"
# 4. Merge PR
# ✅ Auto-release triggered: v1.3.0 → v2.0.0Before merging a PR with a release label:
- All tests pass (
./tests/run-tests.zsh) - No hardcoded secrets (
./osa-cli.zsh --scan-secrets) - Documentation is updated
- Commit messages follow conventions
- Appropriate release label is added (
release:majororrelease:minor) - PR description explains the changes clearly
Check GitHub Actions logs for:
- Git tag conflicts (tag already exists)
- Permission issues (GITHUB_TOKEN)
- Syntax errors in commit messages
If CHANGELOG.md has conflicts after a release:
- Pull latest main:
git pull origin main - Resolve conflicts manually
- Keep the chronological order (newest releases first)
If a release was published incorrectly:
- Delete the tag:
git tag -d v1.3.0 && git push origin :refs/tags/v1.3.0 - Delete the GitHub Release from the web UI
- Revert the version bump commit
- Re-trigger the release workflow with correct version
- Read: Keep a Changelog
- Read: Semantic Versioning
- Check: GitHub Actions logs in the Actions tab