fix(action): normalize glued YAML doc separators in annotateAndMerge

Signed-off-by: LarytheLord <llawlietbagsum@gmail.com>
pull/31910/head
LarytheLord 7 months ago
parent b4f4c4c2dd
commit 54b7b54c09

@ -26,6 +26,7 @@ import (
"os"
"path"
"path/filepath"
"regexp"
"slices"
"strings"
"sync"
@ -62,6 +63,7 @@ import (
var Timestamper = time.Now
var (
compactDocSeparatorPattern = regexp.MustCompile(`(?m)^---(?=\S)`)
// errMissingChart indicates that a chart was not provided.
errMissingChart = errors.New("no chart provided")
// errMissingRelease indicates that a release (name) was not provided.
@ -159,7 +161,9 @@ func annotateAndMerge(files map[string]string) (string, error) {
continue
}
manifests, err := kio.ParseAll(content)
// Go template whitespace trimming can produce lines like `---apiVersion: ...`.
// Normalize those into valid document separators before YAML parsing.
manifests, err := kio.ParseAll(normalizeDocSeparators(content))
if err != nil {
return "", fmt.Errorf("parsing %s: %w", fname, err)
}
@ -178,6 +182,10 @@ func annotateAndMerge(files map[string]string) (string, error) {
return merged, nil
}
func normalizeDocSeparators(content string) string {
return compactDocSeparatorPattern.ReplaceAllString(content, "---\n")
}
// splitAndDeannotate reconstructs individual files from a merged YAML stream,
// removing filename annotations and grouping documents by their original filenames.
func splitAndDeannotate(postrendered string) (map[string]string, error) {

@ -504,6 +504,61 @@ metadata:
postrenderer.helm.sh/postrender-filename: 'templates/multi.yaml'
data:
key: value2
`,
},
{
name: "normalizes glued document separator at file start",
files: map[string]string{
"templates/glued.yaml": `---apiVersion: v1
kind: ConfigMap
metadata:
name: test-cm
data:
key: value`,
},
expected: `apiVersion: v1
kind: ConfigMap
metadata:
name: test-cm
annotations:
postrenderer.helm.sh/postrender-filename: 'templates/glued.yaml'
data:
key: value
`,
},
{
name: "normalizes glued document separator between manifests",
files: map[string]string{
"templates/glued-multi.yaml": `apiVersion: v1
kind: ConfigMap
metadata:
name: test-cm
data:
key: value
---apiVersion: v1
kind: Secret
metadata:
name: test-secret
data:
password: dGVzdA==`,
},
expected: `apiVersion: v1
kind: ConfigMap
metadata:
name: test-cm
annotations:
postrenderer.helm.sh/postrender-filename: 'templates/glued-multi.yaml'
data:
key: value
---
apiVersion: v1
kind: Secret
metadata:
name: test-secret
annotations:
postrenderer.helm.sh/postrender-filename: 'templates/glued-multi.yaml'
data:
password: dGVzdA==
`,
},
{

Loading…
Cancel
Save