Publisherator
One-command Python package publishing: bump version, commit, tag, push to GitHub, build, and upload to PyPI.
Problem
Publishing Python packages requires multiple manual steps: updating version numbers in multiple files, committing changes, creating git tags, pushing to GitHub, building the package, and uploading to PyPI. This repetitive process is error-prone and time-consuming.
Solution
A lightweight CLI tool that automates the entire publishing workflow with a single command.
Installation
pip install publisherator
Usage
# Bump patch version (1.0.0 → 1.0.1)
publisherator patch
# Bump minor version (1.0.1 → 1.1.0)
publisherator minor
# Bump major version (1.1.0 → 2.0.0)
publisherator major
# Default is patch if no argument provided
publisherator
What It Does
- ✓ Checks git working directory is clean
- ✓ Checks git remote 'origin' is configured
- ✓ Bumps version in
pyproject.tomlandpackage/__init__.py - ✓ Commits changes with message "Bump version to X.Y.Z"
- ✓ Creates git tag
X.Y.Z - ✓ Pushes commits and tags to GitHub
- ✓ Cleans old build artifacts
- ✓ Builds package with
python -m build - ✓ Uploads to PyPI with
twine upload
Options
# Preview changes without executing
publisherator patch --dry-run
# Custom commit message
publisherator minor --message "Release new features"
publisherator minor -m "Release new features"
# Skip git operations (only publish to PyPI)
publisherator patch --skip-git
# Skip PyPI upload (only push to git)
publisherator patch --skip-pypi
First-Time Setup
Before using publisherator, ensure:
-
Git repository initialized
git init git add . git commit -m "Initial commit"
-
Git remote configured
git remote add origin https://github.com/username/package.git
-
PyPI credentials configured
- Set up
~/.pypircor use environment variables - Or configure via
twinedirectly
- Set up
Requirements
Your package must have:
pyproject.tomlwith aversionfieldpackage/__init__.pywith__version__variable (optional but recommended)
Error Handling
Git push fails: Automatically rolls back commit and tag
PyPI upload fails: Provides recovery instructions:
- Retry:
twine upload dist/* - Rollback:
git reset --hard HEAD~1 && git tag -d X.Y.Z && git push origin --delete X.Y.Z
Features
- ✓ Semantic versioning (major.minor.patch)
- ✓ Multi-file version sync
- ✓ Real-time output streaming for git push, build, and upload
- ✓ Build warning collection and summary
- ✓ Git automation with automatic rollback on push failure
- ✓ Works with any git remote (GitHub, GitLab, Bitbucket, etc.)
- ✓ Supports first-time pushes with automatic upstream tracking
- ✓ Zero configuration needed
- ✓ Helpful error messages and recovery instructions
- ✓ Final summary with GitHub and PyPI URLs
License
MIT
Author
Arved Klöhn
Metadata
Release files for publisherator 0.1.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| publisherator-0.1.7.tar.gz | 8.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| publisherator-0.1.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 16.3 kB
Release files / publisherator-0.1.7.tar.gz
| Download URL | publisherator-0.1.7.tar.gz |
|---|---|
| Size | 8.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a744f2ae372e12fc88aba233e3b7b59f628847fb1eaf1bece8f0c23d2695733c
|
|
BLAKE2b-256 checksum How to use checksums |
bdb94ae49c22f7037383265fd9face7820065b55d5d43e6a4d5810853c9e8bea
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.12
|
Release files / publisherator-0.1.7-py3-none-any.whl
| Download URL | publisherator-0.1.7-py3-none-any.whl |
|---|---|
| Size | 7.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4204c6a6feeb795676ee71beeac939c0f9b1a4e708f27ea21f62229e2a4ff484
|
|
BLAKE2b-256 checksum How to use checksums |
72546fefa399d829f2e8c818be876f6dae576895fc0a0bdf429994c2da2972f5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.12
|