A small CLI that scans a project folder for Helm charts (and their subcharts), lets you select which ones to change, and sets a new chart version — either interactively or via flags for CI.
pip install -e ".[dev]"- Every directory containing a
Chart.yamlis a chart. - A chart at
<parent>/charts/<name>is recorded as a subchart of<parent>. - Each
dependencies:entry is classified as local (resolves to a chart in the project, or uses afile://repository) or third-party.
It can edit three fields: the chart version, appVersion, and the version
of local dependencies. Third-party dependency versions are never modified.
Edits are written with ruamel.yaml round-trip parsing, so comments, key
ordering, and quoting are preserved.
version-bumper ./my-projectYou'll get a checklist of charts. If you select more than one, you're asked whether to set the same version on all selected charts or configure each one individually. Otherwise you choose, per selection, which field(s) to change and whether to set an explicit version or bump major/minor/patch. A diff is shown before anything is written.
Triggered by passing --chart and/or --set-version/--bump.
# Bump the patch version of the "parent" chart, preview only
version-bumper ./my-project -c parent --bump patch --dry-run
# Set an explicit version on two charts, no prompt
version-bumper ./my-project -c parent -c parent/child --set-version 2.0.0 --yes
# Set the SAME version on EVERY discovered chart
version-bumper ./my-project --all --set-version 2.0.0 --yes
# Bump a local dependency's version
version-bumper ./my-project -c parent --field dependency --dep child --bump minor| Flag | Meaning |
|---|---|
PATH |
Project folder to scan (default .) |
-c, --chart |
Select chart by name or parent/child display path (repeatable) |
--all |
Select every discovered chart (e.g. with --set-version to set one version everywhere) |
--field |
version (default), app-version, or dependency (repeatable) |
--dep |
Local dependency name(s) for --field dependency |
--set-version |
Explicit SemVer to set |
--bump |
major / minor / patch |
--with-dependents |
Also bump every local chart that depends on the selected charts |
--dependent-bump |
Bump level for dependents with --with-dependents (default patch) |
--check |
CI lint: verify dependency refs match subchart versions; read-only |
--dry-run |
Show changes, write nothing |
-y, --yes |
Skip confirmation |
--set-version and --bump are mutually exclusive.
In an umbrella/monorepo layout, bumping a subchart means you must also update
every chart that depends on it — its dependencies[].version reference and
its own version — all the way up the graph. --with-dependents does that
cascade for you:
# Bump the `lib` chart and everything that depends on it
version-bumper ./my-project -c lib --bump patch --with-dependents --dry-run app version: 2.0.0 -> 2.0.1
app dependency:lib: 1.0.0 -> 1.0.1
lib version: 1.0.0 -> 1.0.1
umbrella version: 3.0.0 -> 3.0.1
umbrella dependency:app: 2.0.0 -> 2.0.1
Seeds (the charts you select) get your --set-version/--bump; dependents get
their references updated and their own version bumped by --dependent-bump
(default patch). The dependency graph is resolved from file:// repositories
(falling back to chart-name matching); third-party dependencies are never
touched.
A read-only linter for CI. It fails if any chart's local dependency reference has fallen out of sync with the actual version of the subchart it points at:
version-bumper ./my-project --check✗ 1 drift issue(s):
- app -> lib: declares 0.9.0 but the subchart is 1.0.0
Exits 0 when everything is in sync, 1 on drift — drop it into a pipeline
step to keep umbrella references honest. Exact pins are compared directly;
simple SemVer constraints (e.g. >=1.2.0) are checked for satisfaction.
A browser-based GUI (built on NiceGUI) offers the same features as the CLI — scan a folder, tick charts/subcharts, choose fields (version / appVersion / local dependency versions), set an explicit version (applied to all selected charts) or bump major/minor/patch, preview the diff, and apply. Third-party dependencies are never offered, same as the CLI.
The interface is a two-pane layout — an expandable chart tree on the left, the configuration panel on the right — with a header bar, a sticky Preview/Apply action bar, and dark mode (follows your OS by default, with a toggle in the header).
It ships as a separate optional dependency and entrypoint:
pip install -e ".[gui]"
version-bumper-gui ./my-project # opens http://127.0.0.1:8080
version-bumper-gui ./my-project --port 9000 --no-show # headless / remote| Flag | Meaning |
|---|---|
PATH |
Project folder to scan (default .) |
--host |
Bind host (default 127.0.0.1) |
--port |
Bind port (default 8080) |
--show / --no-show |
Open a browser window on start (default on) |
pytest