kub-version
1. Overview
kub-version centralizes KUB release version management.
It provides three operations:
-
show: display detected versions from source files -
check: validate cross-file version consistency (used by CI) -
bump: update all managed version files from one command
This avoids embedding release logic directly in CI YAML and keeps version policy in tested Python code.
2. Installation
kub-version is installed with the main Python package:
# development install
uv pip install -e .
# then
kub-version --help
3. Synopsis
kub-version show [--repo-root <path>] [--format text|json]
kub-version check [--repo-root <path>] [--format text|json|github]
kub-version bump --version <X.Y.Z[-(alpha|beta|rc|preview).N]> | --level <major|minor|patch> [options]
4. Managed Files
kub-version bump updates these files atomically:
-
CMakeLists.txt(project(… VERSION …)andEXTRA_VERSION) -
pyproject.toml([project].version) -
package.json(version) -
docs/antora.yml(version) -
src/python/feelpp/ktirio/ub/dataset/manifest.py(KUB_VERSION) -
src/python/feelpp/ktirio/ub/dataset/backends/girder.py(kub_version_min) -
src/cpp/ktirio/ub/semver.cpp(FEELPP_UB_VERSION_*fallback macros)
5. Commands
5.1. show
Display discovered version values without validating consistency.
kub-version show --repo-root .
kub-version show --repo-root . --format json
5.2. check
Validate consistency between CMake, Python, JavaScript, and C++ fallback versions.
Returns exit code 0 on success, 1 on mismatch.
kub-version check --repo-root .
kub-version check --repo-root . --format github
--format github emits ::error::… messages for GitHub Actions annotations.
check also validates docs/antora.yml against ref context:
-
latestfor non-release refs (for examplemaster) -
vX.Yforrefs/heads/release/vX.Y -
vX.Yforrefs/tags/vX.Y.Z[-pre.N]
5.3. bump
Update all managed version files to a target version. For Antora docs versioning:
-
default bump flow (without
--tag) writesdocs/antora.ymlaslatest(development stream) -
release bump flow with
--tagwritesdocs/antora.ymlasvX.Y
# explicit target version
kub-version bump --version 0.8.0-rc.1
# automatic bump from current version
kub-version bump --level patch
kub-version bump --level minor
kub-version bump --level major
# automatic prerelease bump
kub-version bump --level patch --pre rc --pre-num 1
5.3.1. bump options
| Option | Description |
|---|---|
`--version <X.Y.Z[-(alpha |
beta |
rc |
preview).N]>` |
Set explicit target version (optional leading |
`--level <major |
minor |
patch>` |
Compute target automatically from current version. |
`--pre <alpha |
beta |
rc |
preview>` |
Add prerelease label when using |
|
Prerelease number (default: |
|
Compute and print target/changed files without writing. |
|
Allow bump with dirty git worktree; also enables forced tag overwrite when tagging. |
|
Stage only managed version files and create a release commit. |
|
Custom commit message (default: |
|
Create annotated git tag after bump (requires |
|
Custom tag name (default: |
|
Custom tag annotation message (default: |
6. Version Conventions
KUB uses this split convention:
-
CMake/JS use full release form:
X.Y.ZorX.Y.Z-rc.N -
Python
pyproject.tomluses normalized prerelease form:X.Y.ZrcN -
Antora docs use
lateston development bumps andvX.Yon tagged release bumps
Example:
-
CMake/package.json:
0.7.0-rc.2 -
pyproject.toml:
0.7.0rc2
7. Typical Workflows
8. CI usage
The main CI workflow calls:
python3 -m feelpp.ktirio.release.version_cli check --repo-root "$GITHUB_WORKSPACE" --format github
This makes CI a thin caller of the same logic used locally by maintainers.