Address reviewer feedback: preserve update error context and add version assertions in tests
- exec.go: include original update error in fallback log message; wrap both errors (update + reinstall) when reinstall also fails so callers get full context - init_test.go: add semver import and GetPluginVersion assertions after CheckHelmPlugins to verify plugins are at required versions on disk Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/c784db7d-7d4c-40a0-97f0-a31eb8901cd6 Co-authored-by: yxxhero <11087727+yxxhero@users.noreply.github.com>
This commit is contained in:
parent
b5f3420818
commit
a31ee32e9e
|
|
@ -11,6 +11,7 @@ import (
|
|||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/Masterminds/semver/v3"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"go.uber.org/zap"
|
||||
|
|
@ -271,6 +272,16 @@ func TestCheckHelmPlugins_UpdateFailsFallbackToReinstall(t *testing.T) {
|
|||
assert.Contains(t, calledOps, "uninstall:"+p.name, "expected uninstall to be called for plugin %s", p.name)
|
||||
assert.Contains(t, calledOps, "install:"+p.name, "expected install to be called for plugin %s", p.name)
|
||||
}
|
||||
|
||||
// Verify that all plugins are now at (or above) the required version on disk.
|
||||
for _, p := range helmPlugins {
|
||||
requiredVersion, err := semver.NewVersion(p.version)
|
||||
require.NoError(t, err)
|
||||
installedVersion, err := helmexec.GetPluginVersion(p.name, pluginsDir)
|
||||
require.NoError(t, err, "plugin %s should be present after reinstall", p.name)
|
||||
assert.False(t, installedVersion.LessThan(requiredVersion),
|
||||
"plugin %s: installed version %s should be >= required version %s", p.name, installedVersion, requiredVersion)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCheckHelmPlugins_UpdateErrorButPluginAtRequiredVersion(t *testing.T) {
|
||||
|
|
|
|||
|
|
@ -946,11 +946,15 @@ func (helm *execer) UpdatePlugin(name, path, version string) error {
|
|||
helm.info(out)
|
||||
if err != nil {
|
||||
// If standard update failed, fall back to uninstall + reinstall with specific version
|
||||
helm.logger.Infof("helm plugin update %v failed, falling back to reinstall with version %v", name, version)
|
||||
updateErr := err
|
||||
helm.logger.Infof("helm plugin update %v failed (%v), falling back to reinstall with version %v", name, updateErr, version)
|
||||
if uninstallErr := helm.uninstallPlugin(name); uninstallErr != nil {
|
||||
helm.logger.Warnf("Failed to uninstall helm plugin %v: %v", name, uninstallErr)
|
||||
}
|
||||
return helm.AddPlugin(name, path, version)
|
||||
if reinstallErr := helm.AddPlugin(name, path, version); reinstallErr != nil {
|
||||
return fmt.Errorf("helm plugin update failed (%w) and reinstall also failed: %w", updateErr, reinstallErr)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue