Skip to content

Commit 1758e45

Browse files
authored
feat: Update job references to support overrides (#328)
1 parent 1bd66f5 commit 1758e45

File tree

6 files changed

+96
-10
lines changed

6 files changed

+96
-10
lines changed

pkg/ast/workflow.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,17 @@ type JobRef struct {
2525

2626
// StepName is the name of the job in the workflow,
2727
// not the job that will be executed
28-
StepName string
29-
StepNameRange protocol.Range
30-
Requires []Require
31-
Context []TextAndRange
32-
Type string
33-
TypeRange protocol.Range
34-
Parameters map[string]ParameterValue
35-
SerialGroup string
36-
SerialGroupRange protocol.Range
28+
StepName string
29+
StepNameRange protocol.Range
30+
Requires []Require
31+
Context []TextAndRange
32+
Type string
33+
TypeRange protocol.Range
34+
Parameters map[string]ParameterValue
35+
SerialGroup string
36+
SerialGroupRange protocol.Range
37+
OverrideWith string
38+
OverrideWithRange protocol.Range
3739

3840
PreSteps []Step
3941
PreStepsRange protocol.Range

pkg/parser/validate/workflow_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,19 @@ workflows:
7777
- deploy:
7878
serial-group: deploy-group`,
7979
},
80+
{
81+
Name: "Job override",
82+
YamlContent: `version: 2.1
83+
jobs:
84+
- deploy:
85+
type: no-op
86+
87+
workflows:
88+
someworkflow:
89+
jobs:
90+
- deploy:
91+
override-with: local/deploy`,
92+
},
8093
}
8194

8295
CheckYamlErrors(t, testCases)

pkg/parser/workflows.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,9 @@ func (doc *YamlDocument) parseSingleJobReference(jobRefNode *sitter.Node) ast.Jo
215215
case "serial-group":
216216
res.SerialGroup = doc.GetNodeText(valueNode)
217217
res.SerialGroupRange = doc.NodeToRange(valueNode)
218+
case "override-with":
219+
res.OverrideWith = doc.GetNodeText(valueNode)
220+
res.OverrideWithRange = doc.NodeToRange(valueNode)
218221

219222
case "pre-steps":
220223
res.PreStepsRange = doc.NodeToRange(child)

pkg/parser/workflows_test.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ func TestYamlDocument_parseSingleJobReference(t *testing.T) {
4646
const jobRef7 = `
4747
- deploy:
4848
serial-group: deploy-group`
49+
const jobRef8 = `
50+
- deploy:
51+
override-with: foo/deploy`
4952

5053
type fields struct {
5154
Content []byte
@@ -471,6 +474,59 @@ func TestYamlDocument_parseSingleJobReference(t *testing.T) {
471474
},
472475
},
473476
},
477+
{
478+
name: "Job reference with override",
479+
fields: fields{Content: []byte(jobRef8)},
480+
args: args{jobRefNode: getFirstChildOfType(GetRootNode([]byte(jobRef8)), "block_sequence_item")},
481+
want: ast.JobRef{
482+
JobName: "deploy",
483+
JobRefRange: protocol.Range{
484+
Start: protocol.Position{
485+
Line: 1,
486+
Character: 0,
487+
},
488+
End: protocol.Position{
489+
Line: 2,
490+
Character: 29,
491+
},
492+
},
493+
JobNameRange: protocol.Range{
494+
Start: protocol.Position{
495+
Line: 1,
496+
Character: 2,
497+
},
498+
End: protocol.Position{
499+
Line: 1,
500+
Character: 8,
501+
},
502+
},
503+
StepName: "deploy",
504+
StepNameRange: protocol.Range{
505+
Start: protocol.Position{
506+
Line: 1,
507+
Character: 2,
508+
},
509+
End: protocol.Position{
510+
Line: 1,
511+
Character: 8,
512+
},
513+
},
514+
Parameters: make(map[string]ast.ParameterValue),
515+
HasMatrix: false,
516+
MatrixParams: make(map[string][]ast.ParameterValue),
517+
OverrideWith: "foo/deploy",
518+
OverrideWithRange: protocol.Range{
519+
Start: protocol.Position{
520+
Line: 2,
521+
Character: 19,
522+
},
523+
End: protocol.Position{
524+
Line: 2,
525+
Character: 29,
526+
},
527+
},
528+
},
529+
},
474530
}
475531
for _, tt := range tests {
476532
t.Run(tt.name, func(t *testing.T) {

pkg/services/testdata/noErrors.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,12 @@ jobs:
9191
deploy:
9292
<<: *buildJob
9393

94+
check:
95+
docker:
96+
- image: node:latest
97+
steps:
98+
- run: echo "shellcheck"
99+
94100
workflows:
95101
test-build:
96102
jobs:
@@ -131,3 +137,6 @@ workflows:
131137

132138
- deploy:
133139
serial-group: << pipeline.project.slug >>/deploy-group
140+
141+
- check:
142+
override-with: shellcheck/check

schema.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1680,7 +1680,10 @@
16801680
"serial-group": {
16811681
"type": "string",
16821682
"minLength": 1
1683-
}
1683+
},
1684+
"override-with": {
1685+
"type": "string"
1686+
}
16841687
}
16851688
}
16861689
}

0 commit comments

Comments
 (0)