The most common release-kit shape. Single Python package, OIDC to PyPI, GitHub release object for changelog visibility.
{
"$schema": "./schema/release-kit.schema.json",
"project": {
"name": "my-package",
"version_source": "pyproject.toml"
},
"targets": {
"pypi": {
"enabled": true,
"auth": "oidc",
"package": "my-package"
},
"github": {
"enabled": true,
"auth": "token",
"repo": "my-org/my-package",
"tag": "v1.0.0",
"generate_notes": true,
"topics": ["python", "oss"]
}
},
"policies": {
"require_clean_git": true,
"require_tag_match": true,
"require_changelog": true,
"default_dry_run": true
}
}name: release
on:
push:
tags: ["v*"]
permissions:
id-token: write
contents: write
jobs:
release:
runs-on: ubuntu-latest
environment: pypi
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 0 }
- uses: actions/setup-python@v5
with: { python-version: "3.11" }
- run: pip install build simtabi-release-kit
- run: python -m build
- run: release-kit doctor
- run: release-kit publish --apply- https://pypi.org/manage/account/publishing/ → add trusted
publisher for
my-org/my-package, workflowrelease.yml, environmentpypi. - Repo settings → Environments → create
pypi; add required reviewers if you want a human in the loop. - Create a fine-grained PAT for
GITHUB_TOKENfallback (the built-inGITHUB_TOKENis fine for releases, but rotate it viarelease-kit rotate-tokensif you'd rather use a long-lived one).
# update version in pyproject.toml
git commit -am "release v1.0.0"
git tag v1.0.0
git push origin v1.0.0The workflow fires, doctor goes green, publish dry-runs, then applies, and the GitHub Release shows up with auto-generated notes.