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