Skip to content

Commit fc46a03

Browse files
authored
Don't overwrite existing git params (#258)
1 parent c8ce9f5 commit fc46a03

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

internal/cli/service_resolvecliparams.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,18 @@ func resolveCliParams(yamlContent string) (string, []string, error) {
6363
}
6464

6565
if doc.hasPath("$.on.cli.init") {
66-
err = doc.MergeAtPath("$.on.cli.init", gitParamsMap)
66+
// Don't overwrite existing git params
67+
existingCliInit, initErr := doc.getNodeAtPath("$.on.cli.init")
68+
if initErr == nil {
69+
if mappingNode, ok := existingCliInit.(*ast.MappingNode); ok {
70+
for _, v := range mappingNode.Values {
71+
delete(gitParamsMap, v.Key.String())
72+
}
73+
}
74+
}
75+
if len(gitParamsMap) > 0 {
76+
err = doc.MergeAtPath("$.on.cli.init", gitParamsMap)
77+
}
6778
} else {
6879
err = doc.MergeAtPath("$.on", map[string]any{
6980
"cli": map[string]any{

internal/cli/service_resolvecliparams_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,37 @@ tasks:
427427
require.False(t, result.Rewritten)
428428
})
429429

430+
t.Run("does not overwrite existing CLI init param with hardcoded value", func(t *testing.T) {
431+
tmpFile, err := os.CreateTemp(t.TempDir(), "test-*.yml")
432+
require.NoError(t, err)
433+
defer tmpFile.Close()
434+
435+
content := `
436+
on:
437+
github:
438+
push:
439+
init:
440+
commit-sha: ${{ event.git.sha }}
441+
cli:
442+
init:
443+
commit-sha: HEAD
444+
445+
tasks:
446+
- key: "test"
447+
run: echo 'hello world'
448+
`
449+
_, err = tmpFile.WriteString(content)
450+
require.NoError(t, err)
451+
452+
result, err := ResolveCliParamsForFile(tmpFile.Name())
453+
require.NoError(t, err)
454+
require.False(t, result.Rewritten)
455+
456+
fileContent, err := os.ReadFile(tmpFile.Name())
457+
require.NoError(t, err)
458+
require.Contains(t, string(fileContent), "commit-sha: HEAD")
459+
})
460+
430461
t.Run("errors when multiple events use different param names for event.git.sha", func(t *testing.T) {
431462
tmpFile, err := os.CreateTemp(t.TempDir(), "test-*.yml")
432463
require.NoError(t, err)

0 commit comments

Comments
 (0)