This document guides the automated release process. When the user says "release", follow these steps in order.
CRITICAL FIRST STEP - Before doing anything else:
- Get commits since last release:
git log $(git describe --tags --abbrev=0)..HEAD --oneline-
Analyze if commits are user-facing changes:
- ✅ Release these: Bug fixes, new features, enhancements, performance improvements, UI/UX changes
- ❌ DO NOT release these:
- Changes to
RELEASE_PROCESS.mdor.github/directory - Changes to
create-release-tarball.shor CI/CD scripts - Documentation about the release process itself
- Internal tooling or meta changes
- Changes to
-
If no user-facing changes exist:
- Respond: "Nothing to release. No user-facing changes since [last version]."
- STOP - do not proceed with release steps
-
Only if user-facing changes exist:
- Proceed to Pre-Release Checklist
- Ensure all changes are committed
- Run syntax checks on modified shell scripts
- Verify no uncommitted changes remain
- Read current version from
project_version.json - Analyze git commits since last release to determine version bump type
- Follow Semantic Versioning (MAJOR.MINOR.PATCH):
MAJOR version (vX.0.0) - Increment when:
- Breaking changes that require user action
- Incompatible API changes
- Major architectural changes
- Removal of deprecated features
- Changes that break existing workflows
MINOR version (v2.X.0) - Increment when:
- New features added in backwards compatible manner
- New commands or subcommands added
- New configuration options added
- Significant enhancements that don't break existing functionality
- New OS distribution support
PATCH version (v2.0.X) - Increment when:
- Bug fixes only
- Small enhancements to existing features
- Documentation updates
- Performance improvements
- Code refactoring without behavior changes
- UI/UX improvements (like menu display fixes)
Analysis Method:
# Review commits since last release
git log $(git describe --tags --abbrev=0)..HEAD --oneline
# Look for keywords:
# - "breaking", "incompatible", "removed" → MAJOR
# - "add", "new feature", "enhancement" → MINOR (if significant)
# - "fix", "bug", "improve" → PATCH# Update project_version.json with new version
# Format: v2.0.Xgit add project_version.json
git commit -m "Bump version to vX.Y.Z"bash create-release-tarball.shgit add latest-release/tux2lab.tar.gz
git commit -m "Release vX.Y.Z tarball"git push
# Note: Do NOT push tags - user creates GitHub release manuallyFetch previous release from GitHub to match format:
https://github.com/Muthukumar-Subramaniam/tux2lab/releases
Format (strictly follow this structure):
## 📢 Release Notes - vX.Y.Z
Released: [Date in format: Month DD, YYYY]
### 🐛 Bug Fixes
• [Description of bug fix]
• [Another bug fix]
### ✨ Enhancements
• [Description of enhancement]
• [Another enhancement]
### 🔧 Technical Details
• [Technical implementation details]
• [Code changes explanation]
• [Configuration updates]- Display the release notes in markdown format in chat
- User will manually create GitHub release with these notes
- User handles git tag creation via GitHub release UI
- GitHub will automatically generate Full Changelog link
- Never push git tags - user creates them via GitHub release
- Always check GitHub for previous release format before generating notes
- Keep technical details section comprehensive
- Use bullet points consistently (• not -)
- GitHub automatically generates Full Changelog link, don't include it in notes