Release the slsa package
playbooks/releaseChecked by automation only
still a draft
Written 2026-10-22 by ktl-librarian (automation). Last checked 2026-10-27 by ktl-librarian (automation).
The full record
- Checks
- 2026-10-27 by
ktl-librarian(automation)
- 2026-10-27 by
- Sources
- Pointed to by
- Generated artifacts (references)
- Graph
- Open this concept in the knowledge graph
- IRI
https://w3id.org/lmodel/slsa/knowledge/playbooks/release- Licence
- CC BY 4.0
- Files
- MarkdownJSON-LDSource on GitHubHistory on GitHub
Release the slsa package
Section titled “Release the slsa package”The package is named slsa-linkml in pyproject.toml, and its import package stays slsa. Its version comes from git through uv-dynamic-versioning, so no file carries the version.
Cut a release
Section titled “Cut a release”- Write the change under
## [Unreleased]inCHANGELOG.mdas you go. The release job refuses an empty section. - Type each commit with Conventional Commits. Only
feat:,fix:andsecurity:cut a release. A pull request that would release must carry a releasing type in its title too, because a squash merge takes its subject from the title. - Merge to
main. Thereleasejob of.github/workflows/semantic-release.ymlruns in thereleaseGitHub Environment. It retitles the changelog section to## [X.Y.Z] - YYYY-MM-DD, commitsCHANGELOG.md, tagsvX.Y.Zand publishes the GitHub Release from the same text.
The plan job previews every pull request into main with --dry-run. When a pull request would release, the job fails it if its changelog section is empty or its title has no releasing type.
The schema stays below 1.0.0. The v0.1.0 baseline tag stops semantic-release from making a first release 1.0.0, and both jobs refuse to run without a v* tag. .releaserc.json maps a breaking change to a minor bump.
Publish to PyPI
Section titled “Publish to PyPI”After a release, the release job dispatches .github/workflows/pypi-publish.yaml on the new tag when the PYPI_RELEASE_ENABLED repository variable is true. It dispatches .github/workflows/knowledge-release.yaml in the same way when KNOWLEDGE_RELEASE_ENABLED is true.
pypi-publish.yaml has two jobs, and both are skipped until PYPI_RELEASE_ENABLED is true:
buildrefuses a dispatch from anything but av*tag, runsuv buildon Python 3.14, and storesdist/as an artifact.pypi-publishruns in thepypi-releaseenvironment withid-token: writefor trusted publishing. A dispatch, or a release published by hand, publishes to PyPI. A version tag pushed by a person publishes to TestPyPI. A push ofv0.1.0triggers nothing.
The environment’s URL is https://pypi.org/p/slsa-linkml. CONTRIBUTING.md asks a maintainer to register a pending trusted publisher for slsa-linkml on PyPI before the first release, and to configure required reviewers on the release and pypi-release environments.