Release Process
Understand Apache Superset's release process, versioning strategy, and how to participate.
Release Cadence
Schedule
- Major releases (X.0.0): Annually (approximately)
- Minor releases (X.Y.0): Quarterly
- Patch releases (X.Y.Z): As needed for critical fixes
Version Numbering
Superset follows Semantic Versioning:
MAJOR.MINOR.PATCH
↓ ↓ ↓
│ │ └── Bug fixes, security patches
│ └────── New features, backwards compatible
└──────────── Breaking changes
Examples
3.0.0
: Major release with breaking changes3.1.0
: Minor release with new features3.1.1
: Patch release with bug fixes
Release Types
Major Releases (X.0.0)
Includes
- Breaking API changes
- Deprecated feature removals
- Major architectural changes
- Database migration requirements
Process
- 2-3 month preparation period
- Multiple release candidates (RC)
- Extensive testing period
- Migration guides required
Minor Releases (X.Y.0)
Includes
- New features
- Performance improvements
- Non-breaking API additions
- Minor UI/UX updates
Process
- 1 month preparation
- 1-2 release candidates
- Standard testing period
Patch Releases (X.Y.Z)
Includes
- Bug fixes
- Security patches
- Documentation fixes
- Dependency updates (security)
Process
- Fast track for critical issues
- May skip RC for urgent security fixes
- Minimal testing requirements
Release Process (For Release Managers)
1. Pre-Release Preparation
Feature Freeze
# 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"
Update Documentation
- CHANGELOG.md
- UPDATING.md (for breaking changes)
- Documentation version
Release Notes Template
# 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!
2. Create Release Candidate
Build RC
# 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 staging
# 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"
3. Voting Process
Call for Vote Email
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]
Voting Rules
- Duration: Minimum 72 hours
- Required: 3 +1 votes from PMC members
- Veto: Any -1 vote must be addressed
Testing Checklist
- [ ] Source builds successfully
- [ ] Docker image builds
- [ ] Basic functionality works
- [ ] No critical bugs
- [ ] License check passes
- [ ] Security scan clean
4. Release Approval
Tally Votes
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!
5. Perform Release
Promote RC to Release
# 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
Publish to PyPI
# Upload to PyPI
python -m twine upload dist/*X.Y.Z*
Build Docker Images
# 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
6. Post-Release Tasks
Update Documentation
# Update docs version
cd docs
# Update docusaurus.config.js with new version
npm run build
Announcement Email
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
Update GitHub Release
# Create GitHub release
gh release create vX.Y.Z \
--title "Apache Superset X.Y.Z" \
--notes-file RELEASE_NOTES.md
For Contributors
During Feature Freeze
What's Allowed
- ✅ Bug fixes
- ✅ Documentation updates
- ✅ Test improvements
- ✅ Security fixes
What's Not Allowed
- ❌ New features
- ❌ Major refactoring
- ❌ Breaking changes
- ❌ Risky changes
Testing RCs
How to Test
# 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
What to Test
- Your use cases
- New features mentioned in release notes
- Upgrade from previous version
- Database migrations
- Critical workflows
Reporting Issues
Found issue in RC1:
- Description: [what's wrong]
- Steps to reproduce: [how to trigger]
- Impact: [blocker/major/minor]
- Suggested fix: [if known]
CHANGELOG Maintenance
Format
## 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
Generating CHANGELOG
# 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
Breaking Changes Process
Documentation Required
UPDATING.md Entry
# X.Y.Z
## Breaking Change: [Title]
### Description
What changed and why.
### Before
```python
# Old way
old_function(param1, param2)
After
# New way
new_function(param1, param2, param3)
Migration Steps
- Update your code to...
- Run migration script...
- Test that...
### 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
Security Releases
Expedited Process
- No RC required for critical security fixes
- Coordinate with security@apache.org
- Embargo period may apply
- CVE assignment through ASF security team
Security Advisory Template
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]
Resources
Internal
Tools
Next: Return to Contributing Overview