diff --git a/pkg/schema/schema.go b/pkg/schema/schema.go index 0d2dee77..5c26559e 100644 --- a/pkg/schema/schema.go +++ b/pkg/schema/schema.go @@ -238,6 +238,9 @@ func (s *Node) UnmarshalYAML(node *yaml.Node) error { if node != nil && node.Kind == yaml.DocumentNode { return s.UnmarshalYAML(node.Content[0]) } + if node.Kind == yaml.AliasNode { + node = node.Alias + } def := s.Schema.GetDefinition(s.Definition) if s.Context == nil { s.Context = def.Context diff --git a/pkg/schema/schema_test.go b/pkg/schema/schema_test.go index ce571c96..7e3a100d 100644 --- a/pkg/schema/schema_test.go +++ b/pkg/schema/schema_test.go @@ -90,3 +90,30 @@ jobs: }).UnmarshalYAML(&node) assert.NoError(t, err) } + +func TestYAMLAnchors(t *testing.T) { + var node yaml.Node + err := yaml.Unmarshal([]byte(` +on: push +jobs: + job-with-condition: + runs-on: &label + self-hosted + if: success() || success('joba', 'jobb') || failure() || failure('joba', 'jobb') || always() || cancelled() + steps: &steps + - run: exit 0 + then: + runs-on: *label + steps: + - run: exit 0 + +`), &node) + if !assert.NoError(t, err) { + return + } + err = (&Node{ + Definition: "workflow-root-strict", + Schema: GetWorkflowSchema(), + }).UnmarshalYAML(&node) + assert.NoError(t, err) +}