Releasing¶
This page is RELEASING.md from the repository, included as it stands. Only a maintainer cuts a release.
A release is a v* tag on a commit that is on main. The release workflow
(.github/workflows/release.yml) does the rest: it checks the tag against every version file, builds
the packages, image, chart, Python package and Galaxy collection, and publishes each from a job that
only downloads. The GitHub release stays a draft until every publisher has finished.
Nothing publishes until a tag is pushed. Do the one-time setup below first; it is what makes a tag without approval harmless.
Versioning¶
port49 uses SemVer. v0.1.0 is the beta. In 0.x, configuration may break between releases, and every
such change gets a loud release note. 1.0.0 is the compatibility promise. There is one version across
every artifact (packages, image, chart, Python package, Galaxy collection), and bumps come from
Conventional Commits. Tags are pushed by hand and carry no pre-release suffix unless it maps to a valid
PEP 440 version. The docs site states the same on its Versions page.
One-time setup, before the first tag¶
- PyPI trusted publisher. Project
port49, repositoryblanketfish/port49, workflowrelease.yml, environmentpypi. - Environments (Settings, Environments):
release(the goreleaser, image and chart jobs): the maintainer as the required reviewer, so no tag publishes without approval.pypiandgalaxy: created beside it.- Each of
release,pypiandgalaxy: deployment branches and tags restricted to thev*tag pattern. GALAXY_API_KEYis an environment secret ongalaxyonly: never a repository or organization secret, so no other job can read it.- Tag ruleset. A repository ruleset protecting
v*tags (restrict creation, updates and deletion to the maintainers). - Fork pull-request workflows. Settings, Actions, General, "Fork pull request workflows from outside collaborators": Require approval for all outside collaborators.
- Public packages. When the repository goes public, make the GHCR package
port49and the chart package public. - Docs site. Settings, Pages, source GitHub Actions. The
github-pagesenvironment's deployment branches and tags are restricted tomainand thev*tag pattern.docs.yml'sdeployjob is the only one that names it, and it deploys only from a public repository. - Required check. Add
docs(the build job indocs.yml, nameddocs) to the required status checks of themainruleset. The site deploys only for the highest finalvX.Y.Ztag. - Link check. At go-public, run one external link check over the built site (for example
lycheeonsite/) and fix what it finds.
Each release¶
- Set the same version in
clients/python/pyproject.toml, the collection'sgalaxy.yml, and the chart and app versions;go run ./tests/ci/cmd/versioncheck -tag vX.Y.Zmust pass. - Merge to
main. The tag must be onmain; the workflow refuses it otherwise. - The maintainer pushes the tag; nobody else, and no automation, does. The maintainer approves the
releaseenvironment when the run asks. - Check the draft release's assets and provenance attestations, then let the last job publish it.