What happened
v3.15.14 (via #1072, "fix: make release tarballs installable offline by helm 4") renamed the top-level directory inside release archives from diff/ to helm-diff-<os>-<arch>/. This breaks helm plugin update diff on any machine where the plugin was installed with a pre-3.15.14 release.
Reason: for existing installs the update hook runs the already-installed copy of install-binary.sh (platformHooks.update → ${HELM_PLUGIN_DIR}/install-binary.sh -u), which is the old pre-3.15.14 script. The old script's installFile() hardcodes HELM_TMP_BIN="$HELM_TMP/diff/bin/diff", while in update mode it always downloads releases/latest — which is now the v3.15.14 archive with the new layout:
Downloading https://github.com/databus23/helm-diff/releases/latest/download/helm-diff-linux-amd64.tgz
Preparing to install into /root/.local/share/helm/plugins/helm-diff
Failed to install helm-diff
For support, go to https://github.com/databus23/helm-diff.
STDERR:
cp: cannot stat '/tmp/helm-diff-6OmpsW/diff/bin/diff': No such file or directory
Error: Failed to update plugin diff, got error (plugin update hook for "diff" exited with error)
This hits CI pipelines that reuse containers with a cached plugin — in our case helmfile init --force → helm plugin update diff → helmfile panics with helmexec.ExitError.
A fresh install works fine, because the v3.15.14 install-binary.sh handles both layouts (explicit fallback to $HELM_TMP/diff/bin/$bin).
Verified by diffing the archives:
# v3.15.13
diff/plugin.yaml
diff/install-binary.sh
diff/bin/diff
# v3.15.14
helm-diff-linux-amd64/plugin.yaml
helm-diff-linux-amd64/install-binary.sh
helm-diff-linux-amd64/bin/diff
Affected
Every install of helm-diff < 3.15.14 on helm plugin update diff. Until the affected machine reinstalls the plugin, every update attempt fails.
Possible directions
- Revert the layout rename so old update hooks keep working (helm 4 offline-install compat would then need another approach).
- Or, minimally, document that pre-3.15.14 installs need a one-time
helm plugin uninstall diff + reinstall, since the layout rename cannot be picked up by the already-installed update hook.
What happened
v3.15.14 (via #1072, "fix: make release tarballs installable offline by helm 4") renamed the top-level directory inside release archives from
diff/tohelm-diff-<os>-<arch>/. This breakshelm plugin update diffon any machine where the plugin was installed with a pre-3.15.14 release.Reason: for existing installs the update hook runs the already-installed copy of
install-binary.sh(platformHooks.update→${HELM_PLUGIN_DIR}/install-binary.sh -u), which is the old pre-3.15.14 script. The old script'sinstallFile()hardcodesHELM_TMP_BIN="$HELM_TMP/diff/bin/diff", while in update mode it always downloadsreleases/latest— which is now the v3.15.14 archive with the new layout:This hits CI pipelines that reuse containers with a cached plugin — in our case
helmfile init --force→helm plugin update diff→ helmfile panics withhelmexec.ExitError.A fresh install works fine, because the v3.15.14
install-binary.shhandles both layouts (explicit fallback to$HELM_TMP/diff/bin/$bin).Verified by diffing the archives:
Affected
Every install of helm-diff < 3.15.14 on
helm plugin update diff. Until the affected machine reinstalls the plugin, every update attempt fails.Possible directions
helm plugin uninstall diff+ reinstall, since the layout rename cannot be picked up by the already-installed update hook.