# 1. Bump version in pyproject.toml (single source of truth)
# __init__.py reads it dynamically via importlib.metadata
# 2. Commit the version bump
git add pyproject.toml
git commit -m "chore: bump version to X.Y.Z"
git push origin main
# 3. Create and push a tag (bare semver, NO 'v' prefix)
git tag X.Y.Z
git push origin X.Y.Z
# 4. Verify
# - PyPI: https://pypi.org/project/snakesee/
# - GitHub: https://github.com/nh13/snakesee/releases
# - Install: pip install snakesee==X.Y.ZCI automatically:
- Verifies the tag is on
main - Runs all tests (Python 3.11, 3.12, 3.13)
- Builds source distribution (
uv build --sdist) - Publishes to PyPI (OIDC authentication)
- Generates changelog via
git-cliff - Creates GitHub Release with changelog
Before releasing, ensure:
- All tests pass:
pixi run checkoruv run poe check-all - Coverage meets 95% threshold
- Documentation builds:
pixi run docs - All PRs for this release are merged to
main
- Tag format: Use bare semver (
0.7.0), NOTv0.7.0. The publish workflow triggers on tags matching[0-9]+.[0-9]+.[0-9]+. - Version location: Only update
pyproject.toml. The__init__.pyreads the version dynamically viaimportlib.metadata.version("snakesee"). - Changelog: Generated automatically by
git-clifffrom conventional commit messages. No manual CHANGELOG.md updates needed. - Commit messages: Use Conventional Commits
(
feat:,fix:,docs:,perf:,refactor:,chore:, etc.) so git-cliff categorizes them correctly.
The Snakemake logger plugin (snakemake-logger-plugin-snakesee/) has its own
independent release cycle.
# 1. Bump version in snakemake-logger-plugin-snakesee/pyproject.toml
# 2. Commit the version bump
git add snakemake-logger-plugin-snakesee/pyproject.toml
git commit -m "chore: bump logger plugin version to X.Y.Z"
git push origin main
# 3. Create and push a tag (prefixed with 'snakesee-logger-')
git tag snakesee-logger-X.Y.Z
git push origin snakesee-logger-X.Y.Z
# 4. Verify
# - PyPI: https://pypi.org/project/snakemake-logger-plugin-snakesee/
# - GitHub: https://github.com/nh13/snakesee/releases
# - Install: pip install snakemake-logger-plugin-snakesee==X.Y.ZCI automatically:
- Verifies the tag is on
main - Runs plugin tests (Python 3.11, 3.12, 3.13)
- Builds source distribution from the subdirectory
- Publishes to PyPI (OIDC authentication)
- Creates GitHub Release
Tag format: Use snakesee-logger-X.Y.Z (e.g., snakesee-logger-0.1.0).
This is distinct from the main snakesee tags which use bare semver.
These steps were done during initial project setup and are kept here for reference.
Publishing uses OIDC token authentication (configured in .github/workflows/publish.yml
and .github/workflows/publish-logger-plugin.yml with environment pypi). No API
tokens need to be stored as secrets. The logger plugin reuses the same pypi environment
— ensure snakemake-logger-plugin-snakesee is registered as a trusted publisher in
PyPI settings.
To add or update the bioconda recipe:
- Fork https://github.com/bioconda/bioconda-recipes
- Create/update
recipes/snakesee/meta.yamlwith the new version and SHA256 hash:curl -sL https://pypi.org/pypi/snakesee/json | \ python -c "import sys, json; print(json.load(sys.stdin)['urls'][0]['digests']['sha256'])"
- Submit PR to bioconda-recipes
Documentation is hosted at https://snakesee.readthedocs.io/ and configured via
.readthedocs.yml in the repository root.
Coverage reporting is configured via codecov.yml and the CODECOV_TOKEN GitHub secret.