From 672a74881dd3e38f54b00953219a7e21902a2f0f Mon Sep 17 00:00:00 2001 From: Stephan Butler Date: Wed, 13 May 2026 09:35:15 +0200 Subject: [PATCH] fix: oci rendering prefix clean --- .../checker/engine_chart_rendering.go | 28 ++++++++++++++++++- .../checker/engine_chart_rendering_test.go | 10 +++++-- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/chartvalidator/checker/engine_chart_rendering.go b/chartvalidator/checker/engine_chart_rendering.go index e653d06..8976773 100644 --- a/chartvalidator/checker/engine_chart_rendering.go +++ b/chartvalidator/checker/engine_chart_rendering.go @@ -1,6 +1,7 @@ package main import ( + "bytes" "context" "fmt" "math/rand" @@ -89,8 +90,8 @@ func (engine *ChartRenderingEngine) renderSingleChart(chart ChartRenderParams, w args := []string{ "template", + chart.ChartName, resolveChartReference(chart), - "--release-name", chart.ChartName, "-f", chart.BaseValuesFile, "-f", chart.ValuesOverride, "--version", chart.ChartVersion, @@ -124,6 +125,8 @@ func (engine *ChartRenderingEngine) renderSingleChart(chart ChartRenderParams, w return nil, fmt.Errorf("helm command failed: %w", err) } + output = sanitizeManifestOutput(output) + logEngineDebug(engine.name, workerId, fmt.Sprintf("helm %s\t\tCOMPLETED", strings.Join(args, " "))) // Create output file path using release name (use absolute path for output) @@ -159,6 +162,29 @@ func resolveChartReference(chart ChartRenderParams) string { return chart.ChartName } +func sanitizeManifestOutput(output []byte) []byte { + trimmed := bytes.TrimLeft(output, "\n\r\t ") + manifestMarkers := [][]byte{ + []byte("---\n"), + []byte("apiVersion:"), + []byte("# Source:"), + } + + firstIndex := -1 + for _, marker := range manifestMarkers { + idx := bytes.Index(trimmed, marker) + if idx >= 0 && (firstIndex == -1 || idx < firstIndex) { + firstIndex = idx + } + } + + if firstIndex <= 0 { + return trimmed + } + + return trimmed[firstIndex:] +} + // Suffix the files just in case two charts end up having the same name func generateRandomString(length int) string { const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" diff --git a/chartvalidator/checker/engine_chart_rendering_test.go b/chartvalidator/checker/engine_chart_rendering_test.go index e5578b5..6d5819d 100644 --- a/chartvalidator/checker/engine_chart_rendering_test.go +++ b/chartvalidator/checker/engine_chart_rendering_test.go @@ -2,6 +2,7 @@ package main import ( "context" + "os" "testing" "github.com/stretchr/testify/assert" @@ -44,13 +45,14 @@ func TestRenderBasics(t *testing.T) { assertChartFieldsMatch(t, testChart, result.Chart) // Verify the command that was executed - expectedCommand := "helm template test-chart --release-name test-chart -f values.yaml -f override.yaml --version 1.0.0 --include-crds --kube-version 1.33.0 --repo https://example.com/charts --api-versions something --api-versions something-else" + expectedCommand := "helm template test-chart test-chart -f values.yaml -f override.yaml --version 1.0.0 --include-crds --kube-version 1.33.0 --repo https://example.com/charts --api-versions something --api-versions something-else" actualCommand := mockExecutor.GetFullCommand() assert.Equal(t, expectedCommand, actualCommand) } func TestRenderOCIRepo(t *testing.T) { mockExecutor := createMockExecutor() + mockExecutor.Output = []byte("Pulled: europe-west4-docker.pkg.dev/wallet-dev-462809/interledger-helm-charts/test-chart:1.0.0\nDigest: sha256:abc123\n---\napiVersion: v1\nkind: ConfigMap\nmetadata:\n name: test\n") engine := createEngine(mockExecutor, false) defer cleanupEngine(engine) @@ -62,9 +64,13 @@ func TestRenderOCIRepo(t *testing.T) { assertChartFieldsMatch(t, testChart, result.Chart) // OCI charts should be templated using the full OCI chart reference, not --repo. - expectedCommand := "helm template oci://europe-west4-docker.pkg.dev/wallet-dev-462809/interledger-helm-charts/test-chart --release-name test-chart -f values.yaml -f override.yaml --version 1.0.0 --include-crds --kube-version 1.33.0 --api-versions something --api-versions something-else" + expectedCommand := "helm template test-chart oci://europe-west4-docker.pkg.dev/wallet-dev-462809/interledger-helm-charts/test-chart -f values.yaml -f override.yaml --version 1.0.0 --include-crds --kube-version 1.33.0 --api-versions something --api-versions something-else" actualCommand := mockExecutor.GetFullCommand() assert.Equal(t, expectedCommand, actualCommand) + + renderedManifest, err := os.ReadFile(result.ManifestPath) + assert.NoError(t, err) + assert.Equal(t, "---\napiVersion: v1\nkind: ConfigMap\nmetadata:\n name: test\n", string(renderedManifest)) } func TestRenderBaseFileNotExist(t *testing.T) {