Repository navigation
Release Process
release-please keeps one open Release PR per repository, updated on every push to main:
- Conventional Commit PR titles (squash-merged) decide the bump:
fix:β patch,feat:β minor,!orBREAKING CHANGE:β major. Before 1.0, each of these is one level lower. The first release is0.1.0(initial-version; without it release-please starts at 1.0.0). - The Release PR bumps the version (
pyproject.toml, orpackage.jsonandpackage-lock.json) and.release-please-manifest.json, writes theCHANGELOG.mdentry (β¨ Features, π Bug Fixes, β‘ Performance, β»οΈ Refactoring, π Documentation; chore/ci/test/build are hidden), and moves the image tag incontrib/k8sandcontrib/docker. A follow-up job refreshesuv.lockon the same branch. - A human reviews it. The wiki check runs in strict mode, so any page still holding skeleton guidance blocks the release.
- Merging it tags
vX.Y.Z, publishes the GitHub Release, and callsdocker-build.ymlfor:X.Y.Z,:X.Y,:Xand:latest.
The full user-facing description is each project's own Release-Process wiki page (template-owned).
Versus the old process: nobody runs bump-version.sh or pushes tags, the version lives in one file, and the changelog can't duplicate entries or pick up merge commits.
Workflows can't trigger other workflows through GITHUB_TOKEN. With the default token, a Release PR gets no CI run, and the uv.lock refresh commit doesn't either. The image build doesn't depend on this: it's called directly. The fix, once for the organisation:
- Create a GitHub App in metalayerlab (no webhook) with repository permissions Contents, Pull requests, Issues and Workflows, all read & write (template updates change
.github/workflows/, whichGITHUB_TOKENcan never push). Install it on all repositories (and on project-template, sotemplate-update.ymlcan read it if it's private). - Organisation variable
RELEASE_APP_CLIENT_ID= the App's client ID. Organisation secretRELEASE_APP_PRIVATE_KEY= a private key.
release-please.yml and template-update.yml use the App when the variable is set, and fall back to GITHUB_TOKEN otherwise.
project-template is released the same way (release-type simple), tagged vX.Y.Z with no component prefix, because Copier ignores tags that aren't PEP 440 versions. Its tags matter: copier update moves projects to the newest tag, so every template change reaches projects only through a reviewed release. Mark breaking changes (a new required wiki heading, a renamed question, a removed file) with !.
project-template | The metalayerlab project template
GitHub β’ Releases β’ Changelog β’ Contributing
This wiki is generated from docs/wiki/ on every push to main: edits made here are overwritten. Change it with a pull request.
- π
copier updatekeeps every project in step - π·οΈ release-please: reviewed Release PRs and generated changelogs
- π A standardised, CI-checked wiki in every repo
- π€ One
AGENTS.mdfor Claude, Codex, Copilot, Gemini and Cursor - π³ Hardened Docker, Kubernetes and systemd manifests