Release the schema
playbooks/releaseNobody has checked this yet
still a draft
Written 2026-10-29 by ktl-librarian (automation).
The full record
- Checks
- none recorded
- Sources
- References
- Pointed to by
- Semantic release (semantic-release.yml) (related to)
- Graph
- Open this concept in the knowledge graph
- IRI
https://w3id.org/lmodel/oscal/knowledge/playbooks/release- Licence
- CC BY 4.0
- Files
- MarkdownJSON-LDSource on GitHubHistory on GitHub
Release the schema
Section titled “Release the schema”CONTRIBUTING.md’s Releasing section and the Semantic release workflow say how a release is made.1 The release tags, vX.Y.Z, number the schema’s versions, and no file is bumped. SECURITY.md says that the repository releases a LinkML schema, the Python datamodel generated from it, and the schema’s lokf adapt copy as a release asset, and that nothing is published to PyPI.2 The package oscal takes its version from git through uv-dynamic-versioning, with 0.0.0 as the fallback.3
Before the first release
Section titled “Before the first release”- Push the
v0.0.0baseline tag onmainbefore the first releasing merge, which then releases 0.1.0. Both release jobs refuse to run without av*tag, because semantic-release would otherwise start at 1.0.0. CHANGELOG.md callsv0.0.0a baseline, not a release.4 - Configure required reviewers on the
releaseGitHub Environment in the repository’s settings, or every qualifying merge is released unattended. SECURITY.md says that this setting is not yet in force. - Leave off any branch rule that requires pull requests, status checks or signed commits on
main, because it would reject the release job’s own push tomain.
For each change
Section titled “For each change”- Write the change under
## [Unreleased]in CHANGELOG.md as you go. The release job refuses an empty section, throughnode .github/scripts/changelog-release.mjs check. - Type the commit with Conventional Commits for what the change is. Only
feat:,fix:,security:and a breaking!start a release, and other types leave their entries for the next release that does. A pull request that would release must carry a releasing type in its title too, since a squash merge takes its subject from the title. - Merge to
main. semantic-release retitles the section to## [X.Y.Z] - YYYY-MM-DD, commits CHANGELOG.md, tagsvX.Y.Zand publishes the GitHub Release. Once the repository variableKNOWLEDGE_RELEASE_ENABLEDistrue, it dispatches Knowledge Release, which attaches the schema copy and the bundle when the bundle changed. Run that workflow by hand withforcewhen only the schema changed.
Staying below 1.0.0
Section titled “Staying below 1.0.0”.releaserc.json maps a breaking change to a minor release and a security commit to a patch release.5 So the schema stays in 0.x until someone removes the first rule, which CONTRIBUTING.md asks to be done in a pull request of its own. The release commit’s message is chore(release): ${nextRelease.version} - changelog promoted [skip ci], so the commit skips CI.
Footnotes
Section titled “Footnotes”-
CONTRIBUTING.md, Releasing (maintainers) ↩
-
SECURITY.md, What this repository releases and the paragraph after the table ↩
-
pyproject.toml, the tool.hatch.version and tool.uv-dynamic-versioning settings ↩
-
CHANGELOG.md, the paragraph on the v0.0.0 tag ↩
-
.releaserc.json, releaseRules and the git plugin’s message ↩