This document explains the automated release process for faff-cli.
Every push to main that passes CI automatically publishes a dev build to PyPI.
Versioning:
- Base version in
pyproject.toml:0.1.0 - Published dev versions:
0.1.0.dev1,0.1.0.dev2,0.1.0.dev3, etc. - Dev number increments with each build using GitHub Actions run number
Installation:
# Get latest dev build
pip install --pre faff-cli
# Or specific dev version
pip install faff-cli==0.1.0.dev5What happens:
- Push to
main - CI workflow runs (tests, linting)
- If CI passes → Publish Dev Build workflow triggers
- Builds source distribution and wheel
- Publishes to PyPI with dev version number
When you're ready to release a stable version, create and push a git tag:
# Release version 0.1.0
git tag v0.1.0
git push origin v0.1.0What happens:
- Release workflow triggers on tag
- Extracts version from tag (strips
vprefix) - Updates
pyproject.tomlwith release version0.1.0 - Commits version update to
main - Builds package
- Publishes to PyPI (no
.devsuffix) - Creates GitHub Release with artifacts
- Bumps
pyproject.tomlto next patch version0.1.1for future dev builds
Installation:
# Get latest stable release (no --pre flag needed)
pip install faff-cli
# Or specific version
pip install faff-cli==0.1.0- Start:
pyproject.tomlhasversion = "0.1.0" - Dev builds publish:
0.1.0.dev1,0.1.0.dev2,0.1.0.dev3 - Tag
v0.1.0: publishes0.1.0, bumpspyproject.tomlto0.1.1 - Dev builds publish:
0.1.1.dev1,0.1.1.dev2 - Tag
v0.2.0: publishes0.2.0, bumpspyproject.tomlto0.2.1 - Dev builds publish:
0.2.1.dev1,0.2.1.dev2
The following GitHub secrets must be set:
PYPI_API_TOKEN: PyPI API token with permission to publishfaff-cli
- Dev builds are hidden from normal
pip install(need--preflag) - Stable releases are what users get by default
- All builds are published to real PyPI (not TestPyPI)
- Version numbers follow PEP 440
faff-clidepends onfaff-corewhich is also published to PyPI