This document outlines the release process and conventions for the Glin-Profanity monorepo.
| Channel | Description | npm Tag | PyPI Classifier | Use Case |
|---|---|---|---|---|
| latest | Stable releases for production | latest |
Production/Stable |
Production deployments |
| beta | Pre-release testing | beta |
Development Status :: 4 - Beta |
Testing & feedback |
| alpha | Early development | alpha |
Development Status :: 3 - Alpha |
Development testing |
We follow Semantic Versioning (SemVer):
MAJOR.MINOR.PATCH[-PRERELEASE]
- MAJOR: Breaking changes
- MINOR: New features (backward compatible)
- PATCH: Bug fixes (backward compatible)
- PRERELEASE:
alpha.N,beta.N,rc.N
Use these exact commit message prefixes to trigger automatic releases:
# Patch release (1.0.0 -> 1.0.1)
git commit -m "release: patch fix for profanity detection"
# Minor release (1.0.0 -> 1.1.0)
git commit -m "release: minor add new language support"
# Major release (1.0.0 -> 2.0.0)
git commit -m "release: major breaking API changes"# Beta patch (1.0.0 -> 1.0.1-beta.1)
git commit -m "release: beta-patch experimental fix"
# Beta minor (1.0.0 -> 1.1.0-beta.1)
git commit -m "release: beta-minor new experimental feature"
# Beta major (1.0.0 -> 2.0.0-beta.1)
git commit -m "release: beta-major breaking changes testing"# Alpha releases (1.0.0 -> 1.0.1-alpha.1)
git commit -m "release: alpha-patch early development fix"
git commit -m "release: alpha-minor early feature testing"
git commit -m "release: alpha-major early breaking changes"These commits will NOT trigger releases:
# Regular development
git commit -m "feat: add new feature"
git commit -m "fix: resolve bug in filter"
git commit -m "docs: update README"
git commit -m "test: add unit tests"
git commit -m "chore: update dependencies"
git commit -m "refactor: improve code structure"-
Develop & Test
git checkout -b feature/my-feature # Make your changes git commit -m "feat: add amazing feature" git push origin feature/my-feature
-
Create PR & Merge
- Create PR to
mainbranch - Pass all CI checks
- Get code review approval
- Merge to
main
- Create PR to
-
Trigger Release
git checkout main git pull origin main # For stable release git commit -m "release: minor add amazing feature" --allow-empty git push origin main # For beta testing git commit -m "release: beta-minor test amazing feature" --allow-empty git push origin main
-
Automatic CI/CD
- ✅ Detects release commit
- ✅ Bumps version in both packages
- ✅ Runs comprehensive tests
- ✅ Builds both packages
- ✅ Publishes to npm with correct tag
- ✅ Publishes to PyPI with correct classifier
- ✅ Creates GitHub release with changelog
- ✅ Syncs versions across packages
# Emergency hotfix release
npm run release:patch
# or
npm run release:minor
# or
npm run release:major
# Beta release
npm run release:beta
# Alpha release
npm run release:alpha| Tag | Command | Description |
|---|---|---|
latest |
npm install glin-profanity |
Latest stable version |
beta |
npm install glin-profanity@beta |
Beta version for testing |
alpha |
npm install glin-profanity@alpha |
Alpha version for early testing |
| Classifier | Command | Description |
|---|---|---|
| Stable | pip install glin-profanity |
Latest stable version |
| Beta | pip install glin-profanity --pre |
Beta version for testing |
| Alpha | pip install glin-profanity --pre |
Alpha version for early testing |
main: Production-ready code, all releases come from heredevelop: Integration branch for features (optional)
feature/xxx → main → release (triggered by commit message)
hotfix/xxx → main → release: patch hotfix description
Changelogs are automatically generated based on commit messages:
feat:→ ✨ Featuresfix:→ 🐛 Bug Fixesdocs:→ 📚 Documentationtest:→ 🧪 Testschore:→ 🔧 Maintenancerefactor:→ ♻️ Code Refactoringperf:→ ⚡ Performancestyle:→ 💄 Styling
git commit -m "feat!: breaking change in API
BREAKING CHANGE: The filter configuration now uses different property names"# Unpublish from npm (within 24 hours)
npm unpublish [email protected]
# Revert git tag
git tag -d v1.2.3
git push origin :refs/tags/v1.2.3git commit -m "fix: urgent fix [skip ci]"- Patch: As needed for critical fixes
- Minor: Bi-weekly for new features
- Major: Quarterly for breaking changes
- Weekly: For testing new features
- Pre-release: 1 week before stable release
- Daily: For development testing
- Experimental: For trying new concepts
- All tests passing in CI
- Documentation updated
- CHANGELOG.md reviewed
- Breaking changes documented
- Version numbers synchronized
- Release notes prepared
- npm package published correctly
- PyPI package published correctly
- GitHub release created
- Documentation deployed
- Community notified
- Social media updates
- Use the correct commit message format
- Ensure cross-language parity
- Update documentation
- Test in both environments
- Follow security best practices
- Focus on feature development
- Don't use release commit messages
- Let maintainers handle releases
- Report any version sync issues
- 🐛 Issues: GitHub Issues
- 💬 Discussions: GitHub Discussions
- 📧 Email: [email protected]
Last updated: $(date +'%Y-%m-%d')