releez
releez is a CLI tool for managing semantic versioned releases. It automates
version bumping, changelog generation, release PRs, and git tags — powered by
git-cliff under the hood.
Full documentation at hotdog-werx.github.io/releez
uv tool install releez
Commands
releez release start # bump version, update changelog, open PR
releez release preview # print what would be released
releez release notes # print unreleased changelog section
releez release tag # create git tags after merging the release PR
releez version artifact # compute semver/docker/pep440 versions for CI
releez changelog regenerate # rebuild the full CHANGELOG from git history
Common flags: --bump auto|patch|minor|major, --base <branch>, --dry-run,
--alias-versions none|major|minor.
For monorepo projects, add --project <name> (repeatable) or --all. For
automation needing structured start outputs, pass --result-file <path> to
releez release start to write one release result as JSON; use a single project
when doing so.
Monorepo support
Configure multiple independently-versioned projects in your root
pyproject.toml:
[tool.releez]
base-branch = "main"
[[tool.releez.projects]]
name = "core"
path = "packages/core"
tag-prefix = "core-"
changelog-path = "CHANGELOG.md"
[[tool.releez.projects]]
name = "ui"
path = "packages/ui"
tag-prefix = "ui-"
changelog-path = "CHANGELOG.md"
Each project gets its own changelog, release branch, PR, and tags (e.g.
core-1.2.3, core-v1). releez auto-detects which projects have unreleased
changes.
See the Monorepo Setup Guide for full configuration, change detection, uv workspace integration, and CI patterns.
Support branches
Support branches are long-lived maintenance lines for shipping hotfixes or
backported features on older majors (e.g. support/1.x while 2.x development
continues on the default branch).
Create a support branch with:
releez release support-branch 1 # single-repo → support/1.x
releez release support-branch 1 --project ui # monorepo → support/ui-1.x
Release from a support branch with the normal releez release start command
— Releez detects the branch automatically and scopes versioning to the correct
major line.
See the
Support Branches guide
for full details including --commit overrides, custom naming, and monorepo
configuration.
Configuration
Precedence (highest first): CLI flags → RELEEZ_* env vars → releez.toml →
pyproject.toml ([tool.releez]).
[tool.releez]
base-branch = "master"
git-remote = "origin"
alias-versions = "minor"
[tool.releez.hooks]
post-changelog = [
["uv", "version", "{version}"], # {version} = bare semver
["prettier", "--write", "{changelog}"],
]
Hooks run automatically after the changelog is updated. Template variables:
{version} (bare semver), {project_version} (full tagged version, e.g.
core-1.2.3), {changelog} (absolute path).
See the Settings reference and Hooks documentation for details.
GitHub Action
releez ships a composite GitHub Action. Pin it by tag — the matching CLI
version is installed automatically.
Modes
| Mode | When | What it does |
|---|---|---|
start |
Manual dispatch / scheduled run | Creates a release branch and optionally a PR |
validate |
PR opened / updated on release/* |
Dry-runs the release, posts a preview comment |
finalize |
Release PR merged | Creates git tags, emits version outputs |
version-artifact |
Any build | Computes semver / docker / pep440 version strings |
Validate a release PR
- uses: hotdog-werx/releez@v0
with:
mode: validate
post-comment: 'true'
Start a release from a workflow
- uses: actions/checkout@v6
with:
fetch-depth: 0
fetch-tags: true
- run: |
git config user.name 'github-actions[bot]'
git config user.email '41898282+github-actions[bot]@users.noreply.github.com'
- id: releez
uses: hotdog-werx/releez@v0
with:
mode: start
project: core # omit for single-package repos
The job needs contents: write and pull-requests: write. The action uses
github-token for git-cliff and PR creation; the checkout credential is used to
push. For a custom token, pass it to both the checkout and the action. Install
any tools required by configured post-changelog hooks before this step.
release-branch and pull-request-url outputs are available when created. With
dry-run: 'true', the release preview appears in the job summary.
Finalize and create a GitHub Release
- id: releez
uses: hotdog-werx/releez@v0
with:
mode: finalize
alias-versions: major
- uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.releez.outputs.release-version }}
body: ${{ steps.releez.outputs.release-notes }}
Artifact versions for a Docker build
- id: version
uses: hotdog-werx/releez@v0
with:
mode: version-artifact
is-full-release: ${{ github.event_name != 'pull_request' }}
prerelease-number: ${{ github.event.pull_request.number }}
Key outputs: release-version, semver-versions, docker-versions,
pep440-versions, semver-version, docker-version, pep440-version
(singular = exact version only, no aliases), release-notes, project
(monorepo), and start-mode release-branch / pull-request-url.
For the full input/output reference and workflow recipes see the Action Reference and Workflow Recipes.
GitHub recommendations
Prefer squash merging with "Pull request title" as the default commit message.
This keeps your history aligned with semantic PR titles and works well with
amannn/action-semantic-pull-request and git-cliff changelog generation.
Metadata
Release files for releez 1.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| releez-1.1.1.tar.gz | 44.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| releez-1.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 103.2 kB
Release files / releez-1.1.1.tar.gz
| Download URL | releez-1.1.1.tar.gz |
|---|---|
| Size | 44.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a5a55229390fa9b913bc0a7694dedf9749cb210b2b38b3fce3dd9b2428f0fa33
|
|
BLAKE2b-256 checksum How to use checksums |
161b45a7af5e46be61f632c85a7fc3281c658476c10d18c16d0416e8adee288a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.24 {"installer":{"name":"uv","version":"0.12.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / releez-1.1.1-py3-none-any.whl
| Download URL | releez-1.1.1-py3-none-any.whl |
|---|---|
| Size | 58.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d3b79d078914420a59fedb828e47ef938aaf32c808dbe77f7fe4109ef9b73166
|
|
BLAKE2b-256 checksum How to use checksums |
cb7357955d43fba75140f05be53f00796601b9d2260a719d3dc7527a30258985
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.24 {"installer":{"name":"uv","version":"0.12.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|