Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: helmfile/helmfile
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v1.5.1
Choose a base ref
...
head repository: helmfile/helmfile
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v1.5.2
Choose a head ref
  • 12 commits
  • 46 files changed
  • 9 contributors

Commits on May 15, 2026

  1. Bump Helm support to 3.21.0 and 4.2.0 (#2588)

    * chore: bump pinned helm versions
    
    Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/b1cfacaa-52d2-46c8-9fc7-67beaca43df0
    
    Co-authored-by: yxxhero <[email protected]>
    
    * fix: align kubernetes module pins for helm bump
    
    Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/b1cfacaa-52d2-46c8-9fc7-67beaca43df0
    
    Co-authored-by: yxxhero <[email protected]>
    
    * docs: clarify helm and k8s version pins
    
    Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/b1cfacaa-52d2-46c8-9fc7-67beaca43df0
    
    Co-authored-by: yxxhero <[email protected]>
    
    * test: update helm 4 snapshot outputs
    
    Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/b430f041-d8fb-407f-af06-070f2d0e9293
    
    Co-authored-by: yxxhero <[email protected]>
    
    * test: update helm 4 postrender integration fixture
    
    Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/fea792b4-b24c-43a9-a391-1fd52e59f843
    
    Co-authored-by: yxxhero <[email protected]>
    
    * test: update helm 4 postrender template fixture
    
    Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/7ca16c9d-e398-46ce-849b-6299214b2b60
    
    Co-authored-by: yxxhero <[email protected]>
    
    ---------
    
    Co-authored-by: copilot-swe-agent[bot] <[email protected]>
    Co-authored-by: yxxhero <[email protected]>
    Copilot and yxxhero authored May 15, 2026
    Configuration menu
    Copy the full SHA
    7ffd4a2 View commit details
    Browse the repository at this point in the history

Commits on May 17, 2026

  1. Configuration menu
    Copy the full SHA
    e96a277 View commit details
    Browse the repository at this point in the history

Commits on May 18, 2026

  1. fix: refresh Chart.lock after rewriting file:// dependencies (#2587)

    * fix: refresh Chart.lock after rewriting file:// dependencies
    
    `rewriteChartDependencies` rewrites relative `file://` repository URLs in
    Chart.yaml to absolute paths so chartify can resolve them from a temp
    directory. That mutates the Chart.yaml dependencies block, which
    invalidates the Chart.lock digest (helm computes it as
    `sha256(json.Marshal([2][]Dependency{req, lock}))` over the dependencies).
    
    Once the lock is out of sync, downstream `helm dependency build` errors
    with "the lock file (Chart.lock) is out of sync with the dependencies
    file (Chart.yaml)" and chartify falls back to `helm dependency update`.
    `dep update` then re-resolves Chart.yaml's version constraints against
    the chart repo, so any constraint that admits newer versions
    (e.g. `version: "*"`, `~1.0`) silently picks up a newer dependency on
    every render — even though Chart.lock pins a specific version.
    
    Repro:
      - Chart.yaml has `version: "*"` for some-dep, Chart.lock pins 4.1.0,
        upstream now publishes 4.2.0.
      - `helm template .` honors the cached `charts/some-dep-4.1.0.tgz`.
      - `helmfile template` produces 4.2.0, because it triggered chartify
        (via jsonPatches/strategic-merge/kustomize/etc), which copied the
        chart, ran `dep build` against an out-of-sync lock, fell back to
        `dep up`, and re-resolved the wildcard.
    
    This commit refreshes Chart.lock alongside Chart.yaml in the temp copy:
    
    - Mirror the rewritten file:// repository URLs onto matching entries in
      Chart.lock's dependencies. Without this, `helm dep build` would resolve
      the lock's relative `file://` paths against the temp chart directory
      and fail with "directory ... not found".
    - Recompute the digest using helm's resolver.HashReq algorithm
      (`sha256(json.Marshal([2][]chart.Dependency{req, lock}))`). The
      algorithm is small and stable; resolver.HashReq itself lives in an
      internal package, so it's inlined here.
    - Locked versions are preserved verbatim — only the repository URL is
      updated and the digest recomputed. Chart.lock remains the source of
      truth for which versions get installed.
    - The original Chart.lock on disk is never modified; only the temp copy
      is rewritten.
    
    Adds TestRewriteChartDependencies_RefreshesChartLock covering digest
    recomputation, file:// URL mirroring, version preservation, untouched
    non-file:// deps, and original-on-disk integrity.
    
    
    Signed-off-by: Shane Starcher <[email protected]>
    
    * fix: address Copilot review issues for Chart.lock refresh
    
    - Map all helm Dependency fields (alias, condition, tags, import-values,
      enabled) when building the request slice for digest computation, not
      just name/version/repository. This ensures the recomputed digest
      matches Helm's resolver.HashReq for all dependency shapes.
    - Match lock entries by Name + Alias (not Name alone) to correctly
      handle charts with duplicate dependency names distinguished by alias.
    - Log a warning when reading Chart.lock fails with a non-NotExist error,
      while still treating a missing Chart.lock as expected.
    - Add test case exercising dependencies with alias, condition, tags, and
      import-values fields, including same-name deps disambiguated by alias.
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
    
    Signed-off-by: Shane Starcher <[email protected]>
    
    * build(deps): bump github.com/helmfile/chartify to v0.26.4
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
    
    Signed-off-by: Shane Starcher <[email protected]>
    
    * fix: normalize import-values for JSON marshaling and improve test coverage
    
    - Normalize import-values using maputil.RecursivelyStringifyMapKey before
      assigning to helmchart.Dependency.ImportValues. When go-yaml v2 decodes
      nested maps (e.g. import-values entries with child/parent keys), they
      become map[interface{}]interface{} which json.Marshal cannot encode.
      This would silently prevent Chart.lock rewriting. The normalization
      converts all map keys to strings, making the value JSON-safe.
    - Improve TestRewriteChartDependencies_RefreshesChartLockWithExtraFields
      to prove that extra fields (condition, tags, import-values) actually
      affect the computed digest by comparing digests with and without those
      fields and asserting they differ.
    
    Signed-off-by: Shane Starcher <[email protected]>
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
    
    * fix: normalize lock ImportValues and fix digest test isolation
    
    - Normalize lock.Dependencies ImportValues via RecursivelyStringifyMapKey
      before json.Marshal, preventing failures when go-yaml v2 decodes nested
      maps as map[interface{}]interface{}.
    - Fix TestRewriteChartDependencies_RefreshesChartLockWithExtraFields to use
      a shared root directory so both chart variants resolve file:// paths to
      the same absolute location, isolating digest differences to field content.
    - Add TestRewriteChartDependencies_GoYamlV2ImportValues exercising the
      HELMFILE_GO_YAML_V3=false path with import-values containing nested maps.
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
    Signed-off-by: Shane Starcher <[email protected]>
    
    * fix: add exact digest verification test against Helm's HashReq
    
    Add TestRewriteChartDependencies_DigestMatchesHelmHashReq which computes
    the expected digest independently using the same algorithm as Helm's
    resolver.HashReq and asserts the rewritten Chart.lock matches exactly.
    This guards against producing a digest that is "different" yet still
    rejected by `helm dependency build`.
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
    Signed-off-by: Shane Starcher <[email protected]>
    
    ---------
    
    Signed-off-by: Shane Starcher <[email protected]>
    Co-authored-by: Shane Starcher <[email protected]>
    Co-authored-by: Claude Opus 4.6 <[email protected]>
    3 people authored May 18, 2026
    Configuration menu
    Copy the full SHA
    23802e7 View commit details
    Browse the repository at this point in the history

Commits on May 19, 2026

  1. feat: support HELMFILE_KUBE_CONTEXT env var for default kube context (#…

    …2593)
    
    * feat: support HELMFILE_KUBE_CONTEXT env var for default kube context
    
    Mirrors the existing HELMFILE_ENVIRONMENT pattern: the --kube-context
    CLI flag takes precedence, falling back to HELMFILE_KUBE_CONTEXT when
    unset.
    
    Refs #1213.
    
    Signed-off-by: Dominik Schmidt <[email protected]>
    
    * docs: mention HELMFILE_KUBE_CONTEXT in cli.md and templating.md
    
    Signed-off-by: Dominik Schmidt <[email protected]>
    
    ---------
    
    Signed-off-by: Dominik Schmidt <[email protected]>
    dschmidt authored May 19, 2026
    Configuration menu
    Copy the full SHA
    c15cbb0 View commit details
    Browse the repository at this point in the history
  2. feat: support HELMFILE_NAMESPACE env var for default namespace (#2592)

    * feat: support HELMFILE_NAMESPACE env var for default namespace
    
    Mirrors the existing HELMFILE_ENVIRONMENT pattern: the --namespace
    CLI flag takes precedence, falling back to HELMFILE_NAMESPACE when
    unset.
    
    Signed-off-by: Dominik Schmidt <[email protected]>
    
    * docs: mention HELMFILE_NAMESPACE in cli.md and templating.md
    
    Signed-off-by: Dominik Schmidt <[email protected]>
    
    ---------
    
    Signed-off-by: Dominik Schmidt <[email protected]>
    dschmidt authored May 19, 2026
    Configuration menu
    Copy the full SHA
    31ac918 View commit details
    Browse the repository at this point in the history

Commits on May 20, 2026

  1. fix: normalize dependency chart path before DirectoryExistsAt check (#…

    …2598)
    
    When helmfile.d contains multiple release files and one release has a
    local chart dependency (e.g. chart: ../chart), the dependency path was
    passed to DirectoryExistsAt without normalizing against basePath. This
    caused the path to be resolved against CWD instead of the helmfile
    directory, so the local chart was not detected and helmfile tried to
    resolve it as a remote repo, failing with:
      'failed reading adhoc dependencies: no helm list entry found for repository'
    
    Fixes #2596
    
    Signed-off-by: yxxhero <[email protected]>
    yxxhero authored May 20, 2026
    Configuration menu
    Copy the full SHA
    81ab674 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    2f2e861 View commit details
    Browse the repository at this point in the history
  3. feat: add defaultInherit for automatic release template inheritance (#…

    …2600)
    
    * feat: add defaultInherit for automatic release template inheritance
    
    Add a top-level defaultInherit field to helmfile.yaml that automatically
    applies template inheritance to all releases without requiring explicit
    inherit on each release.
    
    The field accepts a single template name as a string or a list of
    template names. Releases that already explicitly inherit from the same
    template are not duplicated.
    
    Fixes #2599
    
    Signed-off-by: yxxhero <[email protected]>
    
    * style: fix gci formatting in app_template_test.go
    
    Signed-off-by: yxxhero <[email protected]>
    
    * fix: correct relative chart path in integration test
    
    Signed-off-by: yxxhero <[email protected]>
    
    * fix: use absolute chart path in bad-helmfile test
    
    Signed-off-by: yxxhero <[email protected]>
    
    * fix: use clean chart path in bad-helmfile test
    
    Signed-off-by: yxxhero <[email protected]>
    
    * fix: use dir variable for chart path
    
    Signed-off-by: yxxhero <[email protected]>
    
    * test: fix flaky defaultInherit integration assertions
    
    Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/d0884e8e-8b1b-456d-8250-dec1566b8a37
    
    Co-authored-by: yxxhero <[email protected]>
    
    * test: tighten defaultInherit integration assertions
    
    Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/d0884e8e-8b1b-456d-8250-dec1566b8a37
    
    Co-authored-by: yxxhero <[email protected]>
    
    * test: harden release block parsing in issue-2599 case
    
    Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/d0884e8e-8b1b-456d-8250-dec1566b8a37
    
    Co-authored-by: yxxhero <[email protected]>
    
    * test: make issue-2599 assertions format-tolerant
    
    Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/d0884e8e-8b1b-456d-8250-dec1566b8a37
    
    Co-authored-by: yxxhero <[email protected]>
    
    * test: fix section extraction and regex matching in issue-2599 case
    
    Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/d0884e8e-8b1b-456d-8250-dec1566b8a37
    
    Co-authored-by: yxxhero <[email protected]>
    
    * fix: sanitize defaultInherit values and dedupe applied templates
    
    Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/85a8e815-3701-4b48-a28d-6bb2d50a3b40
    
    Co-authored-by: yxxhero <[email protected]>
    
    * chore: address validation feedback on defaultInherit fixes
    
    Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/85a8e815-3701-4b48-a28d-6bb2d50a3b40
    
    Co-authored-by: yxxhero <[email protected]>
    
    * fix: sanitize releaseInherit entries in applyDefaultInherit; add cleanup trap and quote vars in integration test
    
    Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/1fbf62d5-7ce2-42e5-898b-30151c0c1ef9
    
    Co-authored-by: yxxhero <[email protected]>
    
    * refactor: combine releaseInherit loops in applyDefaultInherit to avoid double TrimSpace; clarify test comment
    
    Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/1fbf62d5-7ce2-42e5-898b-30151c0c1ef9
    
    Co-authored-by: yxxhero <[email protected]>
    
    * test: align default inherit tests with yaml wrapper and assertions
    
    Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/3ea9b8e4-633f-43c4-899f-e063ec576486
    
    Co-authored-by: yxxhero <[email protected]>
    
    * test: address review feedback on defaultInherit tests
    
    Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/3ea9b8e4-633f-43c4-899f-e063ec576486
    
    Co-authored-by: yxxhero <[email protected]>
    
    * test: fix issue-2599 integration script helmfile invocation
    
    Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/9452bb65-7086-459f-b5ae-0b00c1e021eb
    
    Co-authored-by: yxxhero <[email protected]>
    
    ---------
    
    Signed-off-by: yxxhero <[email protected]>
    Co-authored-by: copilot-swe-agent[bot] <[email protected]>
    yxxhero and Copilot authored May 20, 2026
    Configuration menu
    Copy the full SHA
    781d28a View commit details
    Browse the repository at this point in the history
  4. fix: restore kubedog status progress output during tracking (#2602)

    * fix: restore kubedog status progress output during tracking
    
    The refactor in commit bda57b7 that replaced multitrack.Multitrack() with
    individual resource trackers only read from Ready/Failed/Succeeded channels,
    ignoring Status, Added, EventMsg, PodLogChunk, PodError, and AddedPod channels.
    This caused kubedog status messages to no longer be displayed.
    
    Additionally, IgnoreLogs was not passed to tracker.Options, so the trackLogs
    setting was effectively ignored.
    
    This fix restores the original multitrack-style table display using the same
    kubedog utils.Table and indicators packages for:
    - Formatted status tables with DEPLOYMENT/REPLICAS/AVAILABLE/UP-TO-DATE columns
    - Pod sub-tables showing POD/READY/RESTARTS/STATUS with tree structure
    - ANSI color coding (green=ready, yellow=in-progress, red=failed)
    - Progress indicators showing value transitions (e.g. 1->3)
    - Waiting messages in blue
    
    Fixes #2601
    
    Signed-off-by: yxxhero <[email protected]>
    
    * fix: address review feedback - caption coloring, termWidth, O(1) pod detection, display tests
    
    Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/147fc763-c3f2-4a7e-9591-6f972fb62667
    
    Co-authored-by: yxxhero <[email protected]>
    
    * fix: use status.FailedReason for canary final display, fix test name typo
    
    Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/147fc763-c3f2-4a7e-9591-6f972fb62667
    
    Co-authored-by: yxxhero <[email protected]>
    
    * fix: correct gci import grouping in display.go and display_test.go
    
    Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/7e8f8219-5979-44fb-9729-6138c3aae08b
    
    Co-authored-by: yxxhero <[email protected]>
    
    * fix: force ANSI color output in display_test.go for CI non-TTY environments
    
    Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/ff37ccd9-f4d1-4d42-a7d0-4903e2b9d253
    
    Co-authored-by: yxxhero <[email protected]>
    
    ---------
    
    Signed-off-by: yxxhero <[email protected]>
    Co-authored-by: copilot-swe-agent[bot] <[email protected]>
    yxxhero and Copilot authored May 20, 2026
    Configuration menu
    Copy the full SHA
    27015e8 View commit details
    Browse the repository at this point in the history

Commits on May 21, 2026

  1. feat: show diff preview when sync --interactive is used (#2603)

    * feat: show diff preview when sync --interactive is used
    
    Signed-off-by: vomba <[email protected]>
    vomba authored May 21, 2026
    Configuration menu
    Copy the full SHA
    2a1574b View commit details
    Browse the repository at this point in the history
  2. build(deps): bump github.com/containerd/containerd from 1.7.30 to 1.7…

    ….32 (#2607)
    
    Bumps [github.com/containerd/containerd](https://github.com/containerd/containerd) from 1.7.30 to 1.7.32.
    - [Release notes](https://github.com/containerd/containerd/releases)
    - [Changelog](https://github.com/containerd/containerd/blob/main/RELEASES.md)
    - [Commits](containerd/containerd@v1.7.30...v1.7.32)
    
    ---
    updated-dependencies:
    - dependency-name: github.com/containerd/containerd
      dependency-version: 1.7.32
      dependency-type: indirect
    ...
    
    Signed-off-by: dependabot[bot] <[email protected]>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    dependabot[bot] authored May 21, 2026
    Configuration menu
    Copy the full SHA
    8e2ddb8 View commit details
    Browse the repository at this point in the history

Commits on May 22, 2026

  1. feat: support HELMFILE_* env vars for more global flags (#2606)

    * feat: support more HELMFILE_* env vars as flag fallbacks
    
    Adds env-var fallbacks for global flags, mirroring the existing
    HELMFILE_ENVIRONMENT / HELMFILE_KUBE_CONTEXT pattern:
    
    * --helm-binary       -> HELMFILE_HELM_BINARY
    * --kustomize-binary  -> HELMFILE_KUSTOMIZE_BINARY
    * --log-level         -> HELMFILE_LOG_LEVEL
    * --debug             -> HELMFILE_DEBUG       (expecting "true" lower case)
    * --quiet             -> HELMFILE_QUIET       (expecting "true" lower case)
    * --no-color          -> HELMFILE_NO_COLOR    (expecting "true" lower case),
                             additionally honors NO_COLOR per no-color.org
                             (any non-empty value disables color)
    
    Flag values still take precedence; env vars are consulted only when the
    flag is unset. The string-flag default values ("helm", "kustomize",
    "info") move into the accessor methods so the env-var fallback can
    actually trigger when no flag is passed.
    
    Signed-off-by: Dominik Schmidt <[email protected]>
    
    * docs: mention new HELMFILE_* env vars in cli.md and templating.md
    
    Signed-off-by: Dominik Schmidt <[email protected]>
    
    * fix: make Color/NoColor/env interaction consistent
    
    Two issues with the env-aware NoColor() introduced together with
    HELMFILE_NO_COLOR / NO_COLOR support:
    
    1. Color() consulted the raw GlobalOptions.NoColor field instead of
       NoColor(), so in a TTY with only the env set, Color() fell through
       to terminal autodetect and ValidateConfig() spuriously errored with
       "--color and --no-color cannot be specified at the same time".
    
    2. NoColor() returned true via env even when --color was explicitly
       passed, so `helmfile --color` with NO_COLOR (or HELMFILE_NO_COLOR=true)
       in the environment hit the same ValidateConfig() error. A flag should
       always win over an env var.
    
    Fix both by routing Color() through NoColor() and giving NoColor() an
    explicit --color short-circuit. Regression tests added for both paths.
    
    Signed-off-by: Dominik Schmidt <[email protected]>
    
    ---------
    
    Signed-off-by: Dominik Schmidt <[email protected]>
    dschmidt authored May 22, 2026
    Configuration menu
    Copy the full SHA
    33eadc9 View commit details
    Browse the repository at this point in the history
Loading