feat: add go lint
This commit is contained in:
@@ -55,9 +55,7 @@ func (b *treeBuilder) nextID() string {
|
||||
|
||||
func (b *treeBuilder) buildChildren(parent *treeNode, rawIncludes []any) {
|
||||
for _, entry := range rawIncludes {
|
||||
for _, child := range b.parseEntry(entry) {
|
||||
parent.children = append(parent.children, child)
|
||||
}
|
||||
parent.children = append(parent.children, b.parseEntry(entry)...)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -352,7 +352,7 @@ func checkEnvironment(name string, job model.Job) []Finding {
|
||||
return nil
|
||||
}
|
||||
var findings []Finding
|
||||
envName, _ := m["name"]
|
||||
envName := m["name"]
|
||||
_, hasURL := m["url"]
|
||||
if (envName == nil || envName == "") && hasURL {
|
||||
findings = append(findings, Finding{
|
||||
@@ -391,7 +391,7 @@ func checkArtifacts(name string, job model.Job) []Finding {
|
||||
})
|
||||
}
|
||||
if _, hasExposeAs := m["expose_as"]; hasExposeAs {
|
||||
paths, _ := m["paths"]
|
||||
paths := m["paths"]
|
||||
if paths == nil {
|
||||
findings = append(findings, Finding{
|
||||
Severity: Error,
|
||||
@@ -484,7 +484,7 @@ func checkImage(name string, job model.Job) []Finding {
|
||||
if !ok {
|
||||
return nil // String form is valid.
|
||||
}
|
||||
imgName, _ := m["name"]
|
||||
imgName := m["name"]
|
||||
if imgName == nil || imgName == "" {
|
||||
return []Finding{{
|
||||
Severity: Error,
|
||||
|
||||
@@ -14,7 +14,7 @@ import (
|
||||
// pipeline that is valid on GitLab) produces no Error findings.
|
||||
// These files exercise local include resolution and multi-level extends chains.
|
||||
func TestSambaCI(t *testing.T) {
|
||||
entryPoint := "../../samba-testdata/.gitlab-ci.yml"
|
||||
entryPoint := "../../testdata/samba/.gitlab-ci.yml"
|
||||
|
||||
p, err := model.Parse(entryPoint)
|
||||
if err != nil {
|
||||
@@ -51,9 +51,9 @@ func TestSambaCIEntryFiles(t *testing.T) {
|
||||
name string
|
||||
path string
|
||||
}{
|
||||
{"default", "../../samba-testdata/.gitlab-ci.yml"},
|
||||
{"coverage", "../../samba-testdata/.gitlab-ci-coverage.yml"},
|
||||
{"private", "../../samba-testdata/.gitlab-ci-private.yml"},
|
||||
{"default", "../../testdata/samba/.gitlab-ci.yml"},
|
||||
{"coverage", "../../testdata/samba/.gitlab-ci-coverage.yml"},
|
||||
{"private", "../../testdata/samba/.gitlab-ci-private.yml"},
|
||||
}
|
||||
|
||||
for _, tc := range entryPoints {
|
||||
|
||||
@@ -326,8 +326,9 @@ func includeFiles(entry map[string]any) []string {
|
||||
return nil
|
||||
}
|
||||
|
||||
// mergeIncluded copies jobs and stages from src into dst.
|
||||
// dst (the main pipeline) always wins when a key already exists.
|
||||
// mergeIncluded copies jobs, stages, and variables from src into dst.
|
||||
// dst (the main pipeline) always wins when a key already exists — this matches
|
||||
// GitLab's precedence rule where root-pipeline values override included templates.
|
||||
func mergeIncluded(dst, src *model.Pipeline) {
|
||||
stageSet := make(map[string]bool, len(dst.Stages))
|
||||
for _, s := range dst.Stages {
|
||||
@@ -348,4 +349,16 @@ func mergeIncluded(dst, src *model.Pipeline) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Merge pipeline-level variables: dst wins on conflict (root overrides includes).
|
||||
if len(src.Variables) > 0 {
|
||||
if dst.Variables == nil {
|
||||
dst.Variables = make(map[string]any, len(src.Variables))
|
||||
}
|
||||
for k, v := range src.Variables {
|
||||
if _, exists := dst.Variables[k]; !exists {
|
||||
dst.Variables[k] = v
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user