Skip to content

Commit

Permalink
fix(compiler): treat top level anchors like nested anchors
Browse files Browse the repository at this point in the history
  • Loading branch information
ecrupper committed Jan 30, 2025
1 parent abe0d5f commit 7d24754
Show file tree
Hide file tree
Showing 8 changed files with 59 additions and 15 deletions.
6 changes: 3 additions & 3 deletions internal/testdata/buildkite.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ aliases:
image: alpine:latest

env:
dev-env: &dev-environment
environment:
dev-env: &dev-parameters
parameters:
REGION: dev

steps:
- name: example
<<: *alpine-image
<<: *dev-environment
<<: *dev-parameters
commands:
- echo $REGION
6 changes: 3 additions & 3 deletions internal/testdata/buildkite_new_version.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ aliases:
image: alpine:latest

env:
dev-env: &dev-environment
environment:
dev-env: &dev-parameters
parameters:
REGION: dev

steps:
- name: example
<<: *alpine-image
<<: *dev-environment
<<: *dev-parameters
commands:
- echo $REGION
6 changes: 3 additions & 3 deletions internal/testdata/go-yaml.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ aliases:
image: alpine:latest

env:
dev-env: &dev-environment
environment:
dev-env: &dev-parameters
parameters:
REGION: dev

steps:
- name: example
<<:
- *alpine-image
- *dev-environment
- *dev-parameters
commands:
- echo $REGION
6 changes: 3 additions & 3 deletions internal/testdata/no_version.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ aliases:
image: alpine:latest

env:
dev-env: &dev-environment
environment:
dev-env: &dev-parameters
parameters:
REGION: dev

steps:
- name: example
<<:
- *alpine-image
- *dev-environment
- *dev-parameters
commands:
- echo $REGION
16 changes: 16 additions & 0 deletions internal/testdata/top_level_anchor.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
version: "1"

<<: &alpine-image
image: alpine:latest

<<: &dev-parameters
parameters:
REGION: dev

steps:
- name: example
<<:
- *alpine-image
- *dev-parameters
commands:
- echo $REGION
16 changes: 16 additions & 0 deletions internal/testdata/top_level_anchor_legacy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
version: "legacy"

<<: &alpine-image
image: alpine:latest

<<: &dev-parameters
parameters:
REGION: dev

steps:
- name: example
<<:
- *alpine-image
- *dev-parameters
commands:
- echo $REGION
4 changes: 2 additions & 2 deletions internal/yaml.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,8 @@ func collapseMergeAnchors(node *yaml.Node, warnings []string) []string {
keyNode := node.Content[i]

// anchor found
if keyNode.Value == "<<" {
if (i+1) < len(node.Content) && node.Content[i+1].Kind == yaml.AliasNode {
if keyNode.Tag == "!!merge" && keyNode.Value == "<<" {
if (i + 1) < len(node.Content) {
anchors = append(anchors, node.Content[i+1])
}

Expand Down
14 changes: 13 additions & 1 deletion internal/yaml_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ func TestInternal_ParseYAML(t *testing.T) {
&yaml.Step{
Name: "example",
Image: "alpine:latest",
Environment: map[string]string{
Parameters: map[string]interface{}{
"REGION": "dev",
},
Pull: "not_present",
Expand All @@ -47,6 +47,18 @@ func TestInternal_ParseYAML(t *testing.T) {
file: "testdata/go-yaml.yml",
wantBuild: wantBuild,
},
{
name: "top level anchors",
file: "testdata/top_level_anchor.yml",
wantBuild: wantBuild,
wantWarnings: []string{`6:duplicate << keys in single YAML map`},
},
{
name: "top level anchors legacy",
file: "testdata/top_level_anchor_legacy.yml",
wantBuild: wantBuild,
wantWarnings: []string{`using legacy version - address any incompatibilities and use "1" instead`},
},
{
name: "buildkite legacy",
file: "testdata/buildkite.yml",
Expand Down

0 comments on commit 7d24754

Please sign in to comment.