Skip to main content
Moderne OnlyThis recipe is proprietary to Moderne and runs on the Moderne platform or CLI — it isn’t part of the open-source catalog. Available with a Moderne subscription.Contact Sales

Change Helm chart version

Recipe IDorg.openrewrite.kubernetes.helm.ChangeChartVersion
Artifactorg.openrewrite.recipe:rewrite-kubernetes

Propagate a Helm chart version across every file that restates it: the chart's own Chart.yaml, the dependencies of the charts that consume it, Flux HelmRelease resources, k0rdent ClusterTemplate, ProviderTemplate and ServiceTemplate resources, and optionally files whose name encodes the version. dependencies[].version is a range, so by default a range that the new version already satisfies is left alone rather than pinned. Chart.lock is never edited, because its digest cannot be recomputed here; it is reported instead. Files under a chart's templates directory are Go template text and are left alone. A k0rdent template's metadata.name also encodes the chart version, but a name is an identity that ClusterDeployment, Release and *TemplateChain resources point at. Renaming it here would leave those references dangling, so this recipe changes only version fields; org.openrewrite.kubernetes.k0rdent.ChangeTemplateVersion moves the name and everything that references it together.

Single recipeOpenRewriteModerne Proprietary License
Try in PlatformTry this recipe in the Moderne platform. Not a user yet? You’ll get a no-setup demo environment, with nothing to install or configure.

Options

6 parameters
2 required4 optional
ParameterExampleTypeRequired
chartNamek0smotronStringRequired
The name of the chart whose version is changing, as it is written in its Chart.yaml and in the dependencies of the charts that consume it.
newVersion1.3.0StringRequired
The new chart version. Must be an exact semantic version.
matchModeMatchModeOptional
How to treat the range-valued version fields, dependencies[].version in a Chart.yaml and spec.chart.spec.version in a Flux HelmRelease. The exact-valued fields, a chart's own version and appVersion, are always set exactly. Default is Widen.
newAppVersionv1.3.0StringOptional
The new appVersion for the chart. A chart's appVersion names the application it packages, which usually moves independently of the chart version, so it is left alone unless this is set.
oldVersion1.2.0StringOptional
The version being replaced. When omitted, the version the chart's own Chart.yaml currently declares is used, which is only knowable for a chart that lives in this repository.
renameFilesMatching**/files/release/*.yamlStringOptional
A glob expression selecting files whose name encodes the version. Matching files are renamed, substituting the new version for the old in either 1.2.3 or 1-2-3 spelling. When omitted, nothing is renamed.

Examples

yaml, yaml, yaml
ParameterValue
chartNameapp
oldVersionnull
newVersion2.0.0
newAppVersionnull
matchModenull
renameFilesMatchingnull
Before
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: app
spec:
chart:
spec:
chart: app
version: 1.2.0
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: other
spec:
chart:
spec:
chart: other
version: 1.2.0
After
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: app
spec:
chart:
spec:
chart: app
version: 2.0.0
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: other
spec:
chart:
spec:
chart: other
version: 1.2.0
Before
apiVersion: v2
name: app
version: 1.2.0
After
apiVersion: v2
name: app
version: 2.0.0
Before
apiVersion: v2
name: parent
version: 0.1.0
dependencies:
- name: app
version: ^1.2.0
repository: file://../app
After
apiVersion: v2
name: parent
version: 0.1.0
dependencies:
- name: app
version: ^2.0.0
repository: file://../app

Usage

Run this recipe

You will need to have configured the Moderne CLI on your machine before you can run the following command.

shell
mod run . --recipe ChangeChartVersion --recipe-option "chartName=k0smotron" --recipe-option "oldVersion=1.2.0" --recipe-option "newVersion=1.3.0" --recipe-option "newAppVersion=v1.3.0" --recipe-option "renameFilesMatching='**/files/release/*.yaml'"

If the recipe is not available locally, then you can install it using:

RELEASE resolves to the newest release and LATEST to the newest build of any kind, including snapshots. Either one lets mod config recipes upgrade pull in later versions without editing this command; a pinned version stays where you put it.

mod config recipes jar install org.openrewrite.recipe:rewrite-kubernetes:RELEASE

Data tables

Helm chart version changes
org.openrewrite.kubernetes.table.HelmChartVersionChanges

Every place a chart version was propagated to, plus the places that were deliberately left alone.

ColumnDescription
Source pathThe path of the file the version was found in.
FieldThe field the version was found in, relative to the document root.
Old valueThe value before the change. For a range this is the range, not a version.
New valueThe value after the change, or the unchanged value when no change was made.
OutcomeOne of Changed, Renamed, Already satisfied when the new version already satisfies an existing range, Compound range when the range is too complex to rewrite safely, or Lock file when a Chart.lock needs regenerating.
Source files that had results
org.openrewrite.table.SourcesFileResults

Source files that were modified by the recipe run.

ColumnDescription
Source path before the runThe source path of the file before the run. null when a source file was created during the run.
Source path after the runA recipe may modify the source path. This is the path after the run. null when a source file was deleted during the run.
Parent of the recipe that made changesIn a hierarchical recipe, the parent of the recipe that made a change. Empty if this is the root of a hierarchy or if the recipe is not hierarchical at all.
Recipe that made changesThe specific recipe that made a change.
Estimated time savingAn estimated effort that a developer to fix manually instead of using this recipe, in unit of seconds.
CycleThe recipe cycle in which the change was made.
Source files that had search results
org.openrewrite.table.SearchResults

Search results that were found during the recipe run.

ColumnDescription
Source path of search result before the runThe source path of the file with the search result markers present.
Source path of search result after run the runA recipe may modify the source path. This is the path after the run. null when a source file was deleted during the run.
ResultThe trimmed printed tree of the LST element that the marker is attached to.
DescriptionThe content of the description of the marker.
Recipe that added the search markerThe specific recipe that added the Search marker.
Source files that errored on a recipe
org.openrewrite.table.SourcesFileErrors

The details of all errors produced by a recipe run.

ColumnDescription
Source pathThe file that failed to parse.
Recipe that made changesThe specific recipe that made a change.
Stack traceThe stack trace of the failure.
Recipe performance
org.openrewrite.table.RecipeRunStats

Statistics used in analyzing the performance of recipes.

ColumnDescription
The recipeThe recipe whose stats are being measured both individually and cumulatively.
Source file countThe number of source files the recipe ran over.
Source file changed countThe number of source files which were changed in the recipe run. Includes files created, deleted, and edited.
Cumulative scanning time (ns)The total time spent across the scanning phase of this recipe.
Max scanning time (ns)The max time scanning any one source file.
Cumulative edit time (ns)The total time spent across the editing phase of this recipe.
Max edit time (ns)The max time editing any one source file.