This document explains the automated release process for faff-core.
Every push to main that passes CI automatically publishes a dev build to PyPI.
Versioning:
- Base version in
Cargo.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-core
# Or specific dev version
pip install faff-core==0.1.0.dev5What happens:
- Push to
main - CI workflow runs (tests, formatting, clippy)
- If CI passes → Publish Dev Build workflow triggers
- Builds wheels for all platforms (Linux, macOS x86/ARM, Windows)
- Publishes to PyPI with dev version number
When you're ready to release a stable version, tag the version number that is currently in Cargo.toml — that is always the correct next release version:
# Check the version
grep '^version' Cargo.toml
# Tag and push
git tag v$(grep '^version' Cargo.toml | sed 's/version = "\(.*\)"/\1/')
git push origin --tagsWhat happens:
- Release workflow triggers on tag
- Extracts version from tag (strips
vprefix) - Updates
Cargo.tomlwith release version0.1.0 - Commits version update to
main - Builds wheels for all platforms
- Publishes to PyPI (no
.devsuffix) - Builds WASM package via
wasm-packand publishes to npm - Creates GitHub Release with artifacts
- Bumps
Cargo.tomlto next patch version0.1.1for future dev builds
Installation:
# Get latest stable release (no --pre flag needed)
pip install faff-core
# Or specific version
pip install faff-core==0.1.0The following GitHub secrets must be set:
PYPI_API_TOKEN: PyPI API token with permission to publishfaff-coreNPM_TOKEN: npm access token with permission to publish the WASM package
- 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