This document describes the process for releasing new versions of Claude Task Master to PyPI.
- Maintainer access to the PyPI project
- Write access to the GitHub repository
- Up-to-date main branch with all changes committed
Update the version and changelog:
# Bump version (choose one):
python scripts/bump_version.py patch # 0.1.0 -> 0.1.1 (bug fixes)
python scripts/bump_version.py minor # 0.1.0 -> 0.2.0 (new features)
python scripts/bump_version.py major # 0.1.0 -> 1.0.0 (breaking changes)
# Or set a specific version:
python scripts/bump_version.py --set 1.2.3This will automatically update:
pyproject.tomlsrc/claude_task_master/__init__.pyCHANGELOG.md(adds new version section)
# Check what changed
git diff
# Verify version consistency
grep -r "0.1.0" pyproject.toml src/claude_task_master/__init__.pyEdit CHANGELOG.md to add release notes under the new version section:
## [X.Y.Z] - YYYY-MM-DD
### Added
- New features
### Changed
- Changes to existing functionality
### Fixed
- Bug fixes
### Security
- Security improvements# Commit the version bump
git add pyproject.toml src/claude_task_master/__init__.py CHANGELOG.md
git commit -m "chore: bump version to X.Y.Z"
# Create and push tag
git tag vX.Y.Z
git push origin main
git push origin vX.Y.ZImportant: Push the tag AFTER the commit is merged to main.
When you push a tag matching v*.*.*, GitHub Actions will automatically:
-
✅ Verify version consistency - Checks that versions match in:
- Git tag
pyproject.tomlsrc/claude_task_master/__init__.py
-
✅ Run tests - Full test suite with coverage
-
✅ Build package - Creates sdist and wheel distributions
-
✅ Create GitHub Release - With changelog and artifacts
-
✅ Publish to PyPI - Using trusted publishing (no API token needed)
Check the GitHub Actions workflow:
# View workflow status
gh run watch
# Or visit: https://github.com/developerz-ai/claude-task-master/actionsThe workflow must complete successfully for the package to be published.
After the workflow completes:
# Check PyPI (may take a few minutes to appear)
# Visit: https://pypi.org/project/claude-task-master/
# Test installation
pip install --upgrade claude-task-master
claudetm --version # Should show new versionIf the release workflow fails with version mismatch:
# Check all version locations
grep -r "version" pyproject.toml
grep -r "__version__" src/claude_task_master/__init__.py
# Fix manually or re-run bump_version.pyIf tests fail during release:
# Run tests locally first
pytest --cov=claude_task_master --cov-report=term-missing
# Fix issues and create a new patch versionIf PyPI publishing fails:
- Check that the package name is available (first release only)
- Verify trusted publishing is configured in PyPI project settings
- Check the workflow logs for specific errors
If you need to rollback:
# Delete the tag locally
git tag -d vX.Y.Z
# Delete the tag remotely
git push origin :refs/tags/vX.Y.Z
# Note: You cannot delete a PyPI release, but you can "yank" it
# Visit: https://pypi.org/manage/project/claude-task-master/releases/For major releases, you can test on TestPyPI first:
# Build the package
python -m build
# Install twine
pip install twine
# Upload to TestPyPI (requires TestPyPI account)
twine upload --repository testpypi dist/*
# Test installation from TestPyPI
pip install --index-url https://test.pypi.org/simple/ claude-task-master# Build and install locally
python -m build
pip install dist/claude_task_master-X.Y.Z-py3-none-any.whl
# Test the CLI
claudetm --help
claudetm doctorBefore releasing, ensure:
- All tests pass locally (
pytest) - Linting passes (
ruff check . && ruff format --check .) - Type checking passes (
mypy .) - Version bumped in all locations
- CHANGELOG.md updated with release notes
- Changes committed to main branch
- Git tag created and pushed
- GitHub Actions workflow completes successfully
- Package appears on PyPI
- Installation works:
pip install claude-task-master - GitHub release created with notes
This project uses PyPI's trusted publishing (no manual tokens needed).
-
Create the project on PyPI (maintainer only):
- Visit https://pypi.org/manage/account/
- Create new project:
claude-task-master
-
Configure trusted publishing:
- Go to project settings
- Add trusted publisher:
- Owner:
sebyx07 - Repository:
claude-task-master - Workflow:
release.yml - Environment:
release
- Owner:
-
The
release.ymlworkflow is already configured with:permissions: id-token: write # Required for trusted publishing environment: release # Required for security
After a successful release:
-
Announce the release (if applicable):
- GitHub Discussions
- Social media
- User mailing list
-
Monitor for issues:
- Check GitHub Issues
- Monitor PyPI download stats
-
Update documentation if needed
We follow Semantic Versioning:
- MAJOR (X.0.0): Breaking changes
- MINOR (0.X.0): New features, backward compatible
- PATCH (0.0.X): Bug fixes, backward compatible
Pre-release versions:
- Alpha:
X.Y.Z-alpha.N - Beta:
X.Y.Z-beta.N - RC:
X.Y.Z-rc.N