Release Process
This document describes the release process for the Rin project.
Overview
Rin uses Semantic Versioning and follows a structured release workflow to ensure stability and consistency.
Key Features:
- 🤖 Automated Release Notes: Generated from conventional commit messages
- 📝 Detailed Changelog: Maintained in
CHANGELOG.mdwith migration guides - ✅ Automated Validation: CI checks version consistency and runs tests
- 🚀 Automated Deployment: Deploys to Cloudflare on version tags
Version Format
Versions follow the format MAJOR.MINOR.PATCH:
- MAJOR: Incompatible API changes
- MINOR: New functionality (backward compatible)
- PATCH: Bug fixes (backward compatible)
Pre-release versions can be tagged with a hyphen, e.g., v1.0.0-beta.1.
Commit Message Convention
We follow the Conventional Commits specification. This allows us to automatically generate release notes.
Quick Reference
See Commit Convention for detailed guidelines.
Release Workflow
1. Ensure All Changes Are Ready
- All features/fixes merged to
main - All commits follow conventional commit format
- Tests passing (
bun run typecheck,bun run build)
2. Run the Release Script
The script will:
- ✅ Run pre-release checks (typecheck, build, version consistency)
- 📝 Update version in all
package.jsonfiles - 📝 Generate CHANGELOG.md template with commit list
- 🏷️ Create git commit and tag
Important: The script generates a CHANGELOG template. You should review and edit it before pushing!
3. Review and Edit CHANGELOG
After running the release script:
4. Dry Run (Optional)
To preview changes without applying them:
5. Push the Release
6. Automated Release Process
Once the tag is pushed, GitHub Actions automatically:
-
🔍 Validation (
release.yml)- Validates version consistency
- Runs typecheck and build
-
📝 Release Notes Generation (
release.yml)- Categorizes commits by type (features, fixes, etc.)
- Extracts detailed notes from CHANGELOG.md
- Creates GitHub Release with formatted notes
-
🚀 Deployment (
deploy.yml)- Validates deployment version
- Deploys to Cloudflare Workers
- Runs database migrations
Release Notes Structure
GitHub Releases will contain:
For Fork Users
Option 1: Sync Fork (Recommended)
- Go to your forked repository on GitHub
- Click "Sync fork" button
- Review the CHANGELOG.md for migration steps
- Update environment variables if needed
- The deployment will run automatically if configured
Option 2: Manual Update
Release Checklist
Before creating a release:
- All tests pass (
bun run typecheck,bun run build) - All commits follow conventional format
- CHANGELOG.md template generated and edited
- Migration guide included (for breaking changes)
- Documentation updated (if needed)
After pushing the tag:
- GitHub Release created successfully
- Release notes look correct
- Deployment completed successfully
Emergency Releases
For critical bugs requiring immediate release:
Troubleshooting
Version Mismatch Error
Problem: CI shows "Version mismatch" error
Solution:
- Ensure git tag matches
package.jsonversion - The release script handles this automatically
- For manual releases, ensure:
git tag v1.0.0matches"version": "1.0.0"in package.json
Empty Release Notes
Problem: GitHub Release has no changes listed
Solution:
- Ensure commits follow conventional format (
feat:,fix:, etc.) - Check that commits exist between tags:
git log v0.1.0..v0.2.0 --oneline - Non-conventional commits won't appear in categorized lists
Failed Deployment
Problem: Deployment fails after release
Solution:
- Check GitHub Actions logs for specific errors
- Verify all required secrets are configured
- Check Cloudflare dashboard for deployment errors
- Manually trigger deployment from Actions tab if needed
CHANGELOG.md Conflicts
Problem: Merge conflicts in CHANGELOG.md
Solution:
- Keep both sections
- Reorder chronologically (newest first)
- Remove duplicate entries
Best Practices
Writing Good Commits
✅ Good:
❌ Bad:
Maintaining CHANGELOG
- Keep [Unreleased] section updated during development
- Write migration guides for breaking changes
- Include code examples in migration sections
- Credit contributors when applicable
Version Bumping
- Patch (0.0.1): Bug fixes only
- Minor (0.1.0): New features, backward compatible
- Major (1.0.0): Breaking changes
When in doubt, use minor for new features.
Questions?
- 📖 Read Commit Convention for commit guidelines
- 🐛 Report issues: GitHub Issues
- 💬 Join discussions in our community