copier-release is a small Copier template for GitHub repositories that want a conventional-commit release loop without copying release plumbing by hand.
- π Release PRs from
main: calculates the next semantic version withgit-cliff, writesCHANGELOG.md, bumpspackage.jsonwhen it exists, and opens a signed release PR. - π·οΈ GitHub releases after merge: watches merged
release-please/*PRs, creates the version tag, and creates the matching GitHub Release from the PR body. - π§Ή Legacy cleanup: removes older release-please config and superseded release workflow names during Copier generation.
- π§© Project-friendly scope: handles changelogs, tags, and GitHub Releases while leaving package publishing, artifacts, and deployment to the consuming project.
Important
Use --trust when applying or updating this template. The template runs cleanup tasks during generation.
copier copy --trust gh:liblaf/copier-release .Generated repositories keep their release-template answers in .config/copier/.copier-answers.release.yaml.
copier recopy --trust --answers-file '.config/copier/.copier-answers.release.yaml'| File | Purpose |
|---|---|
.github/workflows/release-pr.yaml |
Finds the next version, generates the changelog and release PR body, bumps package.json when present, and opens a release PR. |
.github/workflows/release-publish.yaml |
Runs when a release-please/* PR is merged, then tags the merge commit and creates the GitHub Release. |
.config/copier/.copier-answers.release.yaml |
Stores the template source and answers for reproducible copier recopy runs. |
The generated workflows use this repository's shared git-cliff configuration from https://raw.githubusercontent.com/liblaf/copier-release/refs/heads/main/cliff.toml, so generated repositories do not need to keep their own cliff.toml.
Create a GitHub Actions environment named release-please, then provide:
vars.APP_IDsecrets.PRIVATE_KEY
Those credentials are passed to liblaf/actions/auth so the workflows can open release PRs, push tags, and create GitHub Releases as a GitHub App.
- Push Conventional Commits to
main, such asfeat:,fix:,docs:, orci:. release-pr.yamlcalculates the next version and opensrelease-please/mainwhen a release is needed.- Review and merge the release PR after CI is green.
release-publish.yamltags the merged release commit and creates the GitHub Release.- Run project-specific publish, artifact, or deploy workflows from your own repository.
Use Conventional Commits for predictable version bumps and changelog grouping.
Ideas, fixes, and improvements are welcome. Open an issue or pull request if you want to refine the template, release workflow, or generated changelog format.
- Shared - shared automation for code quality, maintenance, and repository hygiene
- Python - a modern Python project template with tooling, docs, and CI
- Rust - a Rust template with cross-compilation, CI, and release automation
- TypeScript - a TypeScript template built around modern tooling and GitHub automation
