Release Process¶
How depkeeper releases are created and published.
Overview¶
depkeeper follows Semantic Versioning:
- MAJOR: Breaking changes
- MINOR: New features (backward compatible)
- PATCH: Bug fixes (backward compatible)
Version Numbering¶
Current Version¶
The version is defined in depkeeper/__version__.py:
Version Format¶
| Component | Required | Description |
|---|---|---|
| MAJOR | Yes | Breaking changes |
| MINOR | Yes | New features (backward compatible) |
| PATCH | Yes | Bug fixes (backward compatible) |
| PRERELEASE | Optional | Alpha, beta, or release candidate (e.g., -alpha.1, -rc.1) |
| BUILD | Optional | Build metadata (e.g., +20260209) |
Examples:
0.1.0- Initial development release1.0.0- First stable release1.2.3- Stable release2.0.0-alpha.1- Pre-release2.0.0-rc.1- Release candidate
Release Checklist¶
1. Prepare the Release¶
Verify these requirements:
- All tests passing on main branch
- Documentation updated
- CHANGELOG.md updated
- Version number bumped
2. Update Version¶
Edit depkeeper/__version__.py:
3. Update CHANGELOG¶
Add a new section to CHANGELOG.md:
## [0.2.0] - 2026-02-08
### Added
- New feature X
- Support for Y
### Changed
- Improved Z performance
### Fixed
- Bug in parser (#123)
### Security
- Updated httpx to fix CVE-XXXX
4. Create Release Commit¶
Commit the version changes:
5. Tag the Release¶
Create and push the version tag:
6. Build and Publish¶
Build and upload to PyPI:
# Clean previous builds
rm -rf dist/
# Build
python -m build
# Upload to PyPI
python -m twine upload dist/*
7. Create GitHub Release¶
Publish the release on GitHub:
- Go to Releases
- Click "Draft a new release"
- Select the tag
- Copy changelog entries to description
- Attach built distributions
- Publish release
CHANGELOG Format¶
Follow the Keep a Changelog format:
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Added
- Feature in development
## [0.2.0] - 2026-02-08
### Added
- Lock file generation
- Health scoring
### Changed
- Improved dependency resolution
### Fixed
- Parser edge case (#123)
## [0.1.0] - 2026-01-15
### Added
- Initial release
- Check command
- Update command
Change Categories¶
| Category | Description |
|---|---|
| Added | New features |
| Changed | Changes in existing functionality |
| Deprecated | Soon-to-be removed features |
| Removed | Removed features |
| Fixed | Bug fixes |
| Security | Security fixes |
Hotfix Process¶
Apply urgent fixes to released versions:
-
Create hotfix branch from tag:
-
Apply fix and commit
-
Bump patch version:
-
Update CHANGELOG
-
Tag and release:
-
Merge back to main:
PyPI Publishing¶
Manual Publishing¶
# Build
python -m build
# Check package
twine check dist/*
# Upload to TestPyPI first
twine upload --repository testpypi dist/*
# Test installation
pip install --index-url https://test.pypi.org/simple/ depkeeper
# Upload to PyPI
twine upload dist/*
PyPI Token¶
Store your PyPI token securely as GitHub secret PYPI_TOKEN.
Generate tokens at: https://pypi.org/manage/account/token/
Post-Release¶
Complete these tasks after releasing:
- Announce - Post on social media and mailing lists
- Monitor - Watch for issue reports
- Document - Update any outdated documentation
- Plan - Start planning the next release
Emergency Rollback¶
Handle critical issues in releases:
-
Yank from PyPI - Hide the problematic release:
-
Notify users - Update GitHub release notes
-
Fix and re-release - Follow hotfix process
See Also¶
- Development Setup -- Set up your development environment
- Testing -- Learn testing guidelines
- Code Style -- Follow coding standards