product:release
Release a product: bump version, create Git tag, publish GitHub Release, publish to PyPI, and push a Docker image to Docker Hub.
Table of contents
Usage
splent product:release [<version>] [--product <name>]
| Argument / Option | Description |
|---|---|
<version> |
Optional. Version to release (e.g. v1.2.1). If omitted, the semver wizard runs. |
--product |
Override SPLENT_APP. |
Examples
Interactive (recommended):
splent product:release
Fetching current version from GitHub...
Current version: v1.0.3
Bump type:
[1] patch v1.0.4 bug fixes, no new features
[2] minor v1.1.0 new features, backward compatible
[3] major v2.0.0 breaking changes
[4] cancel
Choice: 1
Will release as v1.0.4
Proceed? [y/N]: y
Releasing my_first_app v1.0.4
version 1.0.4 written to pyproject.toml
commit changes committed and pushed
tag v1.0.4 created
tag v1.0.4 pushed to origin
github release created: https://github.com/...
pypi building package...
pypi upload complete
docker logging into Docker Hub...
docker building image...
docker pushing images...
docker push complete
my_first_app v1.0.4 released.
Explicit version:
splent product:release v1.0.4
Override product:
splent product:release v1.0.4 --product other_app
Pipeline
- Validates environment credentials (PyPI + Docker Hub).
- Guards: all features must be pinned (no editable features allowed).
- Bumps the version in
<product>/pyproject.toml. - Stages, commits, and pushes all pending changes to
main. - Creates and pushes a Git tag (
v<version>). - Creates a GitHub Release.
- Cleans build artifacts (
__pycache__,dist/,build/,*.egg-info). - Builds and uploads the package to PyPI.
- Builds and pushes Docker images to Docker Hub:
<user>/<product>:<version><user>/<product>:latest
Feature pinning guard
A product release must be reproducible. If any feature is editable (no version pinned), the command refuses to proceed and lists the offending features:
Cannot release: the following features are editable (no version pinned):
- splent-io/splent_feature_notes
A product release must be reproducible. Pin all features first:
splent feature:release <feature>
splent feature:attach <feature> <version>
Requirements
| Variable | Required | Description |
|---|---|---|
TWINE_USERNAME / PYPI_USERNAME |
Yes | PyPI authentication |
TWINE_PASSWORD / PYPI_PASSWORD |
Yes | PyPI API token |
DOCKERHUB_USERNAME |
Yes | Docker Hub authentication |
DOCKERHUB_PASSWORD |
Yes | Docker Hub password |
GITHUB_TOKEN |
Optional | GitHub Release creation + semver wizard tag fetch |
Verify credentials before releasing:
splent check:github
splent check:pypi
See also
feature:release— release an individual featurefeature:attach— pin a released feature version to a productfeature:pin— pin all editable features at oncerelease:cli— release the CLI packagerelease:framework— release the framework package