Local-first release CLI tools: ship_bump, ship_pypi, ship_release_gh
Project description
fastship
Tiny, local-first release tools for modern Python projects.
fastship gives you the same workflow feel as the nbdev nbdev_bump_version, release_pypi, and release_gh commands — but for plain (non-notebook) Python projects.
Install
pip install fastship
Quick start
Create a new project:
ship_new my-project
cd my-project
python -m venv .venv && . .venv/bin/activate
pip install -e .[dev]
This creates a complete project with pyproject.toml, __version__, LICENSE, README, and everything wired for fastship.
Commands
ship_bump
Bump a version part (0=major, 1=minor, 2=patch):
ship_bump --part 2
ship_bump --part 1
ship_bump --part 0
Decrement instead:
ship_bump --part 2 --unbump
ship_pypi
Build + upload to PyPI:
ship_pypi
Upload to a named repository in ~/.pypirc (e.g. testpypi):
ship_pypi --repository testpypi
Quiet mode:
ship_pypi --quiet
ship_release_gh
This is an interactive helper:
- Creates/updates
CHANGELOG.mdfrom closed GitHub issues since your last GitHub release - Opens your
$EDITOR(defaults tonano) so you can edit the changelog - Prompts you to confirm
- Runs
git commit -am release,git push - Creates a GitHub release tagged with your current
__version__
ship_release_gh
GitHub token setup
ship_release_gh looks for a token in this order:
FASTSHIP_TOKEN- a
./tokenfile in your repo root GITHUB_TOKEN
The token must have permission to create releases (typically repo scope for classic PATs, or appropriate fine-grained permissions).
Notes
ship_pypidoes not bump your version for you — keep it explicit and boring.ship_release_ghrequires that your project has a gitoriginremote pointing at GitHub (or use--repo OWNER/REPO).
Existing projects
To add fastship to an existing project:
1) Put your version in __init__.py
In your package's main __init__.py:
__version__ = "0.0.1"
2) Configure pyproject.toml
[project]
name = "my-project"
dynamic = ["version"]
[tool.setuptools.dynamic]
version = { attr = "my_project.__version__" }
Keep __version__ = "x.y.z" as a simple literal (don't compute it). ship_bump will rewrite this line near the top of the file to keep builds happy.
3) Optional: specify branch
Fastship infers your package name from [project].name (changing - to _). To override the release branch:
[tool.fastship]
branch = "main" # defaults to current git branch
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fastship-0.0.3.tar.gz.
File metadata
- Download URL: fastship-0.0.3.tar.gz
- Upload date:
- Size: 17.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6624663931509b21046ae9cb3e114b7c724e10ba961f9e9a1d4d93228530304a
|
|
| MD5 |
5196faf79155c6b7fee8dd0d443e0bca
|
|
| BLAKE2b-256 |
48f64bb916662fe777b35e2deef586d55a8eef19d32a19b172dcdf3086e2eae5
|
File details
Details for the file fastship-0.0.3-py3-none-any.whl.
File metadata
- Download URL: fastship-0.0.3-py3-none-any.whl
- Upload date:
- Size: 19.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8743acd0bcbdd506029862738db2d8c4cafc1153565919050d6081425050fa5c
|
|
| MD5 |
27b738093c380540e0094be62169a2c6
|
|
| BLAKE2b-256 |
309bcf7e8d5249785c77b6e179bb0532e8d199d50db5a6558b43d754c3ba8470
|