Version Management¶
This project uses bumpver for automated version management to ensure consistency across all files and streamline the release process.
Quick Start¶
# Install development dependencies (includes bumpver)
pip install -e .[dev]
# Test version management (dry run)
bumpver update --dry --patch
# Bump version for a patch release
bumpver update --patch
# Update CHANGELOG.md manually (see below)
# Push the new tag to trigger CI/CD
git push origin main --tags
Configuration¶
Version management is configured in .bumpver.toml
and automatically updates:
pyproject.toml
- Package versionwf2wf/__init__.py
- Python module version.bumpver.toml
- Configuration file itself
Note: CHANGELOG.md updates are currently manual due to the complexity of the Keep a Changelog format. This ensures accuracy and allows for proper release notes.
Usage¶
Install bumpver¶
pip install -e .[dev] # Installs bumpver with other dev dependencies
Bump Version¶
Use semantic versioning commands:
# Patch release (1.0.0 → 1.0.1) - Bug fixes
bumpver update --patch
# Minor release (1.0.0 → 1.1.0) - New features, backward compatible
bumpver update --minor
# Major release (1.0.0 → 2.0.0) - Breaking changes
bumpver update --major
Update CHANGELOG.md¶
After running bumpver update
, manually update the CHANGELOG.md:
Add a new section for the version:
## [Unreleased] ## [1.0.1] – 2024-01-15 ### Fixed - Bug fixes and improvements
Update the links at the bottom:
[Unreleased]: https://github.com/csmcal/wf2wf/compare/v1.0.1...HEAD [1.0.1]: https://github.com/csmcal/wf2wf/compare/v1.0.0...v1.0.1
Test Before Release¶
Always test the version bump with --dry
first:
bumpver update --dry --patch # Shows what would change
bumpver update --patch # Actually makes the changes
Release Process¶
Bump version:
bumpver update --patch|minor|major
Update CHANGELOG.md: Add release notes manually
Commit changes:
git add CHANGELOG.md && git commit -m "Update changelog for v1.0.1"
Push with tags:
git push origin main --tags
CI/CD triggers: Automated testing and PyPI publication
Configuration Details¶
The .bumpver.toml
file contains:
[bumpver]
current_version = "1.0.0"
version_pattern = "MAJOR.MINOR.PATCH"
commit_message = "bump version {old_version} → {new_version}"
commit = true
tag = true
push = false # Manual push for safety
[bumpver.file_patterns]
"pyproject.toml" = [
'version = "{version}"',
]
"wf2wf/__init__.py" = [
'__version__ = "{version}"',
]
Benefits¶
Consistency: All version numbers stay in sync
Automation: One command updates all files
Safety: Dry-run mode prevents mistakes
Git Integration: Automatic commits and tags
Semantic Versioning: Clear version progression
Reproducibility: Essential for scientific software
Version Pattern¶
We follow Semantic Versioning:
MAJOR version when you make incompatible API changes
MINOR version when you add functionality in a backward compatible manner
PATCH version when you make backward compatible bug fixes
Manual Override¶
If you need to set a specific version:
bumpver update --set-version 2.0.0-rc1
Troubleshooting¶
Version Mismatch¶
If versions get out of sync, update .bumpver.toml
with the correct current version and run:
bumpver update --patch # This will sync all files
Failed Commit¶
If bumpver fails to commit, check that all files are staged and there are no merge conflicts.
CI/CD Issues¶
The release workflow requires:
All tests passing
Valid tag format (
v*
)PyPI API token configured in repository secrets