Release Operations¶
This page documents which GitHub Actions workflows own each release entrypoint.
Update this table whenever a release workflow is added, renamed, or moved.
Release Workflow Ownership¶
| Workflow | Name | Triggers | Owns | Handoff |
|---|---|---|---|---|
.github/workflows/post-ci-dispatcher.yml | Post-CI dispatcher | workflow_run | Routes completed main-branch CI runs to release and recovery child workflows. | Calls .github/workflows/auto-release.yml when the upstream CI run targets main. |
.github/workflows/auto-release.yml | Auto-release | workflow_call | Decides whether a green main-branch CI run should create a release tag. | Pushes a v* tag; .github/workflows/publish.yml owns tag publish. |
.github/workflows/publish.yml | Publish | push | Builds release distributions, attests dist/*, publishes PyPI and npm packages, and creates or updates the GitHub Release for a v* tag. | GitHub Release publication triggers Docker, Homebrew, and release-scoped SBOM follow-up workflows. |
.github/workflows/release-major-minor.yml | Major/Minor Release | workflow_dispatch | Manually cuts major or minor releases after checking CI and applying the version bump. | Pushes the version commit and tag, then builds and publishes from the same run. |
.github/workflows/release-please.yml | Release Please | workflow_dispatch | Maintains release PRs and release metadata when an operator runs it manually. | Does not publish artifacts; publish still starts from a v* tag or a manual major/minor run. |
.github/workflows/reconcile-release.yml | Reconcile release drift | schedule, workflow_dispatch | Compares pyproject.toml, PyPI, and GitHub Release assets to detect missed publish work. | Opens or updates a release-drift issue when published state is inconsistent. |
.github/workflows/publish-docker.yml | Publish Docker Image | release, workflow_dispatch | Publishes the GHCR image and image provenance for a released tag. | Runs after a GitHub Release is published, or manually for a selected tag. |
.github/workflows/publish-homebrew.yml | Publish Homebrew Formula | release, workflow_dispatch | Updates the Homebrew tap formula for a released version. | Runs after a GitHub Release is published, or manually for a selected version. |
.github/workflows/sbom-upload.yml | SBOM upload | push, release | Generates and uploads the CycloneDX SBOM when the Dependency-Track endpoint is configured. | Runs on main updates and after a GitHub Release is published. |
Bumping the version¶
scripts/bump_version.py is the only supported way to bump the release version.
It performs the three coupled edits in one deterministic step:
- rewrites
project.versioninpyproject.toml, - runs
uv locksouv.lockpins the new version, and - regenerates
server.jsonand.plugin/plugin.jsonviascripts/gen_distribution_manifests.py.
Do not hand-edit any of these files for a bump. A bump that touches only pyproject.toml desyncs the lockfile and the distribution manifests, which the CI drift gates then fail. Commit the bump in a PR; the merge to main triggers CI and .github/workflows/auto-release.yml picks up the untagged version.
Guardrails¶
.github/workflows/auto-release.ymlonly creates tags..github/workflows/publish.ymlowns tag-triggered package and GitHub Release publication..github/workflows/reconcile-release.ymlis the drift detector for missing PyPI versions or empty GitHub Release assets.- New release entrypoints must be added to the ownership table and covered by
tests/unit/test_release_entrypoint_docs.py.