Multi-registry publishing automation. PyPI, npm, Docker, Homebrew, Maven, RubyGems, Cargo, NuGet, Packagist, plus seven git hosts. Fluent OOP, config-driven, OIDC-first.
Project description
simtabi-release-kit
Multi-registry publishing automation. One config file, one command, every registry your project needs.
pip install simtabi-release-kit
release-kit init
release-kit doctor # green / amber / red per target
release-kit publish --apply # dry-run is the default
What it does
- Publishes to package registries: PyPI, npm (+ GitHub Packages, GitLab npm), Docker Hub, GHCR, GitLab Container Registry, AWS ECR, Google Artifact Registry, Azure Container Registry, Homebrew tap, Maven Central, RubyGems, crates.io, NuGet, Packagist.
- Automates git hosts: GitHub.com, GitHub Enterprise (Cloud + Server), GitLab.com, GitLab Self-Managed, Bitbucket Cloud, Bitbucket Data Center, Gitea / Forgejo, Azure DevOps.
- OIDC-first: prefers passwordless trusted publishing.
Refuses to fall back to long-lived tokens without
--allow-token-auth. - Dry-run by default: nothing publishes until
--apply. - Pluggable: third parties register custom platforms via
[project.entry-points."release_kit.platforms"]without forking.
Quick start
# 1. Install
pip install simtabi-release-kit
# 2. Scaffold a config + .env template
release-kit init
# 3. Verify your credentials and connectivity
release-kit doctor
# 4. Dry-run a publish to selected targets
release-kit publish --target pypi --target ghcr
# 5. For real
release-kit publish --target pypi --target ghcr --apply
Two artefacts in one repo
This repository ships:
- A reference playbook at
docs/playbook/— 33 markdown files covering every supported registry and git host, following an identical 8-section template. Read it standalone even if you never install the package. - The Python automation package under
src/release_kit/— Typer CLI + config-driven runner + per-platform implementations.
Status
| Version | 0.1.0 |
| Python | ≥ 3.11 |
| Platforms (playbook) | 26 platforms documented |
| Platforms (code) | 25 platforms registered (16 registries + 8 git hosts + 1 sub-class via inheritance) |
| Tests | 158 passing, 76% coverage (gate 70%) |
| Type-check | mypy --strict clean on 47 source files |
Configuration
Three layers, highest wins:
- CLI flags (
--target pypi --apply) - Environment variables (loaded from
.envin dev; from CI secret store in prod) - JSON config (
release.json, validated against the bundled schema)
Example release.json:
{
"$schema": "./schema/release-kit.schema.json",
"project": {
"name": "my-project",
"version_source": "pyproject.toml"
},
"targets": {
"pypi": { "enabled": true, "auth": "oidc" },
"ghcr": { "enabled": true, "auth": "oidc", "image": "ghcr.io/my-org/my-project" },
"github_release": { "enabled": true, "draft": false, "generate_notes": true }
},
"policies": {
"require_clean_git": true,
"require_tag_match": true,
"continue_on_error": false,
"default_dry_run": true
}
}
Full schema: docs/configuration.md.
JSON Schema (machine-readable): src/release_kit/schema/release-kit.schema.json.
CLI surface
| Command | Purpose |
|---|---|
release-kit init |
Scaffold release.json + .env-example in the current dir |
release-kit doctor |
Per-target readiness check (green / amber / red) |
release-kit publish [--target NAME ...] [--apply] |
Run the publish flow |
release-kit bootstrap-repo [--apply] |
Apply topics + branch protection per config |
release-kit verify [--target NAME ...] |
Run each target's verify step to confirm artifacts are live |
release-kit rotate-tokens [--platform SLUG ...] [--list] |
Interactive token rotation helper |
release-kit version |
Print version |
Full reference: docs/cli.md.
Documentation
docs/playbook/ |
The standalone reference for every supported platform |
docs/architecture.md |
How the package is laid out + extension points |
docs/configuration.md |
Full JSON config schema |
docs/cli.md |
Every command, every flag |
docs/security.md |
Token handling, OIDC, rotation cadence |
docs/workflows/ |
End-to-end how-tos (first publish, CI release, OIDC bootstrap) |
docs/recipes/ |
Copy-pasteable example configs |
docs/troubleshooting.md |
Symptom → cause → fix |
Built by
Simtabi LLC · MIT license · contributions welcome.
Project details
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 simtabi_release_kit-0.2.0.tar.gz.
File metadata
- Download URL: simtabi_release_kit-0.2.0.tar.gz
- Upload date:
- Size: 132.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f390509d75b4a3d135b3644bea5bd9c9214b1bf170fa47bc3fcb7b375caf6351
|
|
| MD5 |
5889ff4c8a9f8f9a82c71330a43e81a8
|
|
| BLAKE2b-256 |
510f920e76e4957db25e4a59c177fbbdd623ee6bb31716ec54beec70e083af0d
|
Provenance
The following attestation bundles were made for simtabi_release_kit-0.2.0.tar.gz:
Publisher:
release.yml on simtabi/release-kit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
simtabi_release_kit-0.2.0.tar.gz -
Subject digest:
f390509d75b4a3d135b3644bea5bd9c9214b1bf170fa47bc3fcb7b375caf6351 - Sigstore transparency entry: 1552835924
- Sigstore integration time:
-
Permalink:
simtabi/release-kit@09e61e6305082fa62454ad9b9ac47a50c4a07625 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/simtabi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@09e61e6305082fa62454ad9b9ac47a50c4a07625 -
Trigger Event:
push
-
Statement type:
File details
Details for the file simtabi_release_kit-0.2.0-py3-none-any.whl.
File metadata
- Download URL: simtabi_release_kit-0.2.0-py3-none-any.whl
- Upload date:
- Size: 78.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
520ad75d04ca059e6e504e8dff28f13b008dc877050941a3745cdccc74251ce3
|
|
| MD5 |
b4ecd68cb82cda134cef923b3ac64618
|
|
| BLAKE2b-256 |
e5ac6f14483a463a8d555353568ac754270cf1d46d54aae71fd9a966787d1523
|
Provenance
The following attestation bundles were made for simtabi_release_kit-0.2.0-py3-none-any.whl:
Publisher:
release.yml on simtabi/release-kit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
simtabi_release_kit-0.2.0-py3-none-any.whl -
Subject digest:
520ad75d04ca059e6e504e8dff28f13b008dc877050941a3745cdccc74251ce3 - Sigstore transparency entry: 1552835970
- Sigstore integration time:
-
Permalink:
simtabi/release-kit@09e61e6305082fa62454ad9b9ac47a50c4a07625 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/simtabi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@09e61e6305082fa62454ad9b9ac47a50c4a07625 -
Trigger Event:
push
-
Statement type: