Add test demonstrating lock file issue and implement partial fix for --skip-charts case
Co-authored-by: yxxhero <11087727+yxxhero@users.noreply.github.com>
This commit is contained in:
parent
6482956281
commit
19ede56a51
|
|
@ -605,7 +605,17 @@ func (a *App) ListReleases(c ListConfigProvider) error {
|
||||||
stateReleases = rel
|
stateReleases = rel
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
stateReleases, err = a.list(run)
|
// Even when skipping charts, we should still resolve dependencies from the lock file
|
||||||
|
// to show the locked versions instead of the version constraints from helmfile.yaml
|
||||||
|
resolvedState, resolveErr := run.state.ResolveDeps()
|
||||||
|
if resolveErr != nil {
|
||||||
|
err = resolveErr
|
||||||
|
} else {
|
||||||
|
// Create a new run with the resolved state to get the correct versions
|
||||||
|
resolvedRun := *run
|
||||||
|
resolvedRun.state = resolvedState
|
||||||
|
stateReleases, err = a.list(&resolvedRun)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,84 @@
|
||||||
|
package app
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"go.uber.org/zap"
|
||||||
|
|
||||||
|
ffs "github.com/helmfile/helmfile/pkg/filesystem"
|
||||||
|
"github.com/helmfile/helmfile/pkg/testutil"
|
||||||
|
)
|
||||||
|
|
||||||
|
// TestListReflectsLockedVersions tests that helmfile list shows versions from
|
||||||
|
// the lock file when available, both with and without --skip-charts
|
||||||
|
func TestListReflectsLockedVersions(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
name string
|
||||||
|
skipCharts bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "with skipCharts=false",
|
||||||
|
skipCharts: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "with skipCharts=true",
|
||||||
|
skipCharts: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
// Mock files: helmfile.yaml with a chart dependency and helmfile.lock with resolved version
|
||||||
|
files := map[string]string{
|
||||||
|
"/path/to/helmfile.yaml": `
|
||||||
|
repositories:
|
||||||
|
- name: bitnami
|
||||||
|
url: https://charts.bitnami.com/bitnami
|
||||||
|
|
||||||
|
releases:
|
||||||
|
- name: redis
|
||||||
|
chart: bitnami/redis
|
||||||
|
version: "*"
|
||||||
|
`,
|
||||||
|
"/path/to/helmfile.lock": `
|
||||||
|
version: v0.170.1
|
||||||
|
dependencies:
|
||||||
|
- name: redis
|
||||||
|
repository: https://charts.bitnami.com/bitnami
|
||||||
|
version: 18.1.5
|
||||||
|
digest: sha256:abcd1234
|
||||||
|
generated: "2023-01-01T00:00:00Z"
|
||||||
|
`,
|
||||||
|
}
|
||||||
|
|
||||||
|
logger := zap.NewNop().Sugar()
|
||||||
|
|
||||||
|
app := appWithFs(&App{
|
||||||
|
OverrideHelmBinary: DefaultHelmBinary,
|
||||||
|
fs: ffs.DefaultFileSystem(),
|
||||||
|
OverrideKubeContext: "default",
|
||||||
|
Env: "default",
|
||||||
|
Logger: logger,
|
||||||
|
FileOrDir: "/path/to/helmfile.yaml",
|
||||||
|
}, files)
|
||||||
|
|
||||||
|
expectNoCallsToHelm(app)
|
||||||
|
|
||||||
|
cfg := configImpl{
|
||||||
|
skipCharts: tc.skipCharts,
|
||||||
|
output: "json",
|
||||||
|
}
|
||||||
|
|
||||||
|
out, err := testutil.CaptureStdout(func() {
|
||||||
|
listErr := app.ListReleases(cfg)
|
||||||
|
assert.NoError(t, listErr)
|
||||||
|
})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
// The output should contain the locked version (18.1.5) not the constraint (*)
|
||||||
|
assert.Contains(t, out, "18.1.5", "Expected to see locked version 18.1.5 in output, but got: %s", out)
|
||||||
|
assert.NotContains(t, out, `"version":"*"`, "Should not see version constraint in output, but got: %s", out)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue