Understand Apache Superset's release process, versioning strategy, and how to participate.
Superset follows Semantic Versioning:
MAJOR.MINOR.PATCH ↓ ↓ ↓ │ │ └── Bug fixes, security patches │ └────── New features, backwards compatible └──────────── Breaking changes
3.0.0: Major release with breaking changes3.1.0: Minor release with new features3.1.1: Patch release with bug fixes# Create release branch git checkout -b release-X.Y git push upstream release-X.Y # Update version # Edit setup.py and package.json VERSION = "X.Y.0rc1"
# Apache Superset X.Y.0 ## 🎉 Highlights - Major feature 1 - Major feature 2 ## 🚀 New Features - Feature 1 (#PR) - Feature 2 (#PR) ## 🐛 Bug Fixes - Fix 1 (#PR) - Fix 2 (#PR) ## ⚠️ Breaking Changes - Breaking change 1 - Migration required for X ## 📝 Documentation - Doc update 1 (#PR) ## 🙏 Thank You Thanks to all contributors!
# Tag release candidate git tag -a vX.Y.Zrc1 -m "Apache Superset X.Y.Z RC1" git push upstream vX.Y.Zrc1 # Build source distribution python setup.py sdist # Build wheel python setup.py bdist_wheel # Sign artifacts gpg --armor --detach-sig dist/apache-superset-X.Y.Zrc1.tar.gz
# Upload to Apache staging svn co https://dist.apache.org/repos/dist/dev/superset cd superset mkdir X.Y.Zrc1 cp /path/to/dist/* X.Y.Zrc1/ svn add X.Y.Zrc1 svn commit -m "Add Apache Superset X.Y.Z RC1"
Send to dev@superset.apache.org:
Subject: [VOTE] Release Apache Superset X.Y.Z RC1 Hi all, I'd like to call a vote to release Apache Superset version X.Y.Z RC1. The release candidate: - Git tag: vX.Y.Zrc1 - Git hash: abc123def456 - Source: https://dist.apache.org/repos/dist/dev/superset/X.Y.Zrc1/ Resources: - Release notes: [link] - CHANGELOG: [link] - PR list: [link] The vote will be open for at least 72 hours. [ ] +1 approve [ ] +0 no opinion [ ] -1 disapprove (and reason why) Thanks, [Your name]
- [ ] Source builds successfully - [ ] Docker image builds - [ ] Basic functionality works - [ ] No critical bugs - [ ] License check passes - [ ] Security scan clean
Subject: [RESULT][VOTE] Release Apache Superset X.Y.Z RC1 The vote to release Apache Superset X.Y.Z RC1 has passed. +1 votes (binding): - PMC Member 1 - PMC Member 2 - PMC Member 3 +1 votes (non-binding): - Contributor 1 - Contributor 2 0 votes: - None -1 votes: - None Thank you to everyone who tested and voted!
# Tag final release git tag -a vX.Y.Z -m "Apache Superset X.Y.Z" git push upstream vX.Y.Z # Move from dev to release svn mv https://dist.apache.org/repos/dist/dev/superset/X.Y.Zrc1 \ https://dist.apache.org/repos/dist/release/superset/X.Y.Z
# Upload to PyPI python -m twine upload dist/*X.Y.Z*
# Build and push Docker images docker build -t apache/superset:X.Y.Z . docker push apache/superset:X.Y.Z docker tag apache/superset:X.Y.Z apache/superset:latest docker push apache/superset:latest
# Update docs version cd docs # Update docusaurus.config.js with new version npm run build
Send to announce@apache.org, dev@superset.apache.org:
Subject: [ANNOUNCE] Apache Superset X.Y.Z Released The Apache Superset team is pleased to announce the release of Apache Superset X.Y.Z. Apache Superset is a modern data exploration and visualization platform. This release includes [number] commits from [number] contributors. Highlights: - Feature 1 - Feature 2 - Bug fixes and improvements Download: https://superset.apache.org/docs/installation/ Release Notes: https://github.com/apache/superset/releases/tag/vX.Y.Z PyPI: https://pypi.org/project/apache-superset/ Docker: docker pull apache/superset:X.Y.Z Thanks to all contributors who made this release possible! The Apache Superset Team
# Create GitHub release gh release create vX.Y.Z \ --title "Apache Superset X.Y.Z" \ --notes-file RELEASE_NOTES.md
# Install RC from staging pip install https://dist.apache.org/repos/dist/dev/superset/X.Y.Zrc1/apache-superset-X.Y.Zrc1.tar.gz # Or use Docker docker pull apache/superset:X.Y.Zrc1
Found issue in RC1: - Description: [what's wrong] - Steps to reproduce: [how to trigger] - Impact: [blocker/major/minor] - Suggested fix: [if known]
## X.Y.Z (YYYY-MM-DD) ### Features - feat: Description (#PR_NUMBER) ### Fixes - fix: Description (#PR_NUMBER) ### Breaking Changes - BREAKING: Description (#PR_NUMBER) Migration: Steps to migrate
# Use git log to generate initial list git log --oneline vX.Y-1.Z..vX.Y.Z | grep -E "^[a-f0-9]+ (feat|fix|perf|refactor|docs)" # Group by type and format
# X.Y.Z ## Breaking Change: [Title] ### Description What changed and why. ### Before ```python # Old way old_function(param1, param2)
# New way new_function(param1, param2, param3)
### Deprecation Process 1. **Version N**: Mark as deprecated ```python @deprecated(version="3.0.0", remove_in="4.0.0") def old_function(): warnings.warn("Use new_function instead", DeprecationWarning)
Version N+1: Keep deprecated with warnings
Version N+2: Remove completely
CVE-YYYY-XXXXX: [Title] Severity: [Critical/High/Medium/Low] Affected Versions: < X.Y.Z Fixed Version: X.Y.Z Description: [Vulnerability description] Mitigation: [How to fix or work around] Credit: [Reporter name/organization]
Next: Return to Contributing Overview