Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

version-bumper

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.

Install

pip install -e ".[dev]"

What it discovers

  • Every directory containing a Chart.yaml is 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 a file:// 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.

Interactive mode (default)

version-bumper ./my-project

You'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.

Non-interactive mode (CI)

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.

Propagation (--with-dependents)

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.

Drift check (--check)

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.

GUI mode

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)

Tests

pytest

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages