Skip to content

Commit 1fdeaa8

Browse files
rleganJulesFaucherre
authored andcommitted
fix: Default values not recognized in job parameters of type steps
1 parent 3ae4014 commit 1fdeaa8

6 files changed

Lines changed: 33 additions & 11 deletions

File tree

pkg/parser/executors.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ func (doc *YamlDocument) parseSingleExecutorDocker(nameNode *sitter.Node, valueN
217217

218218
parseDocker := func(blockNode *sitter.Node) {
219219
// blockNode is a block_node
220-
blockSequence := GetChildOfType(blockNode, "block_sequence")
220+
blockSequence := GetChildSequence(blockNode)
221221

222222
if blockSequence == nil { //TODO: deal with errors
223223
return

pkg/parser/parameters.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -246,12 +246,12 @@ func (doc *YamlDocument) parseStepsParameter(paramName string, paramNode *sitter
246246
keyName := doc.GetNodeText(keyNode)
247247
switch keyName {
248248
case "default":
249-
stepsNode := GetChildOfType(valueNode, "block_sequence")
249+
stepsNode := GetChildSequence(valueNode)
250250
if stepsNode == nil {
251251
return
252252
}
253253
rng := NodeToRange(child)
254-
astDefault, _ := doc.parseArrayParameterValue(paramName, stepsNode, rng)
254+
astDefault, _ := doc.parseArrayParameterValue(paramName, stepsNode, rng, true)
255255
stepsParam.Default = astDefault
256256
stepsParam.DefaultRange = doc.getDefaultParameterRange(child)
257257
stepsParam.HasDefault = true
@@ -327,9 +327,9 @@ func (doc *YamlDocument) parseParameterValue(child *sitter.Node) (ast.ParameterV
327327
return doc.parseSimpleParameterValue(paramName, flowNodeChild, rng)
328328

329329
case "block_sequence":
330-
return doc.parseArrayParameterValue(paramName, flowNodeChild, rng)
330+
return doc.parseArrayParameterValue(paramName, flowNodeChild, rng, false)
331331
case "flow_sequence":
332-
return doc.parseArrayParameterValue(paramName, flowNodeChild, rng)
332+
return doc.parseArrayParameterValue(paramName, flowNodeChild, rng, false)
333333

334334
case "double_quote_scalar":
335335
return ast.ParameterValue{
@@ -390,12 +390,12 @@ func (doc *YamlDocument) parseParameterValue(child *sitter.Node) (ast.ParameterV
390390
return ast.ParameterValue{Name: paramName}, nil // not supported atm by the parser
391391
}
392392

393-
func (doc *YamlDocument) parseArrayParameterValue(paramName string, arrayParamNode *sitter.Node, rng protocol.Range) (ast.ParameterValue, error) {
393+
func (doc *YamlDocument) parseArrayParameterValue(paramName string, arrayParamNode *sitter.Node, rng protocol.Range, forceSteps bool) (ast.ParameterValue, error) {
394394
// arrayParamNode is a flow_sequence or a block sequence
395395
values := make([]ast.ParameterValue, 0)
396396
iterateOnBlockSequence(arrayParamNode, func(child *sitter.Node) {
397397
if child.Type() == "block_sequence_item" || child.Type() == "flow_node" {
398-
if isStep(doc, child) {
398+
if isStep(doc, child) || forceSteps {
399399
steps := doc.parseSingleStep(child)
400400
values = append(values, ast.ParameterValue{
401401
Value: steps,

pkg/parser/steps.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ func (doc *YamlDocument) parseSteps(stepsNode *sitter.Node) []ast.Step {
1212
// stepsNode is a block_node
1313
steps := make([]ast.Step, 0)
1414

15-
blockSequenceNode := GetChildOfType(stepsNode, "block_sequence")
15+
blockSequenceNode := GetChildSequence(stepsNode)
1616
iterateOnBlockSequence(blockSequenceNode, func(child *sitter.Node) {
1717
if child.Type() == "block_sequence_item" {
1818
steps = append(steps, doc.parseSingleStep(child)...)
@@ -126,7 +126,7 @@ func (doc *YamlDocument) parseStep(blockMapping *sitter.Node) []ast.Step {
126126

127127
func (doc *YamlDocument) parseAnchorStep(blockNode *sitter.Node) []ast.Step {
128128
blockMapping := GetChildOfType(blockNode, "block_mapping")
129-
blockSequence := GetChildOfType(blockNode, "block_sequence")
129+
blockSequence := GetChildSequence(blockNode)
130130

131131
if blockSequence != nil {
132132
blockSequenceItem := GetChildOfType(blockSequence, "block_sequence_item")

pkg/parser/utils.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,16 @@ func GetChildMapping(node *sitter.Node) *sitter.Node {
5555
return GetChildOfType(node, "flow_mapping")
5656
}
5757

58+
func GetChildSequence(node *sitter.Node) *sitter.Node {
59+
blockMappingNode := GetChildOfType(node, "block_sequence")
60+
61+
if blockMappingNode != nil {
62+
return blockMappingNode
63+
}
64+
65+
return GetChildOfType(node, "flow_sequence")
66+
}
67+
5868
func GetBlockMappingNode(streamNode *sitter.Node) *sitter.Node {
5969
documentNode := GetChildOfType(streamNode, "document")
6070
if documentNode.Type() != "document" {
@@ -113,7 +123,7 @@ func (doc *YamlDocument) getNodeTextArrayWithRange(valueNode *sitter.Node) []Tex
113123
texts := make([]TextAndRange, 0)
114124

115125
if blockSequenceNode == nil {
116-
blockSequenceNode = GetChildOfType(valueNode, "flow_sequence")
126+
blockSequenceNode = GetChildSequence(valueNode)
117127
if blockSequenceNode == nil {
118128
return texts
119129
}

pkg/parser/workflows.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ func (doc *YamlDocument) buildJobsDAG(jobRefs []ast.JobRef) map[string][]string
101101

102102
func (doc *YamlDocument) parseJobReferences(jobsRefsNode *sitter.Node) []ast.JobRef {
103103
// jobsRefsNode is block_node
104-
blockSequenceNode := GetChildOfType(jobsRefsNode, "block_sequence")
104+
blockSequenceNode := GetChildSequence(jobsRefsNode)
105105
jobReferences := []ast.JobRef{}
106106
if blockSequenceNode == nil {
107107
return jobReferences

pkg/services/testdata/noErrors.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,16 @@ jobs:
4040
steps:
4141
- checkout
4242

43+
dummyJobWithStepParam:
44+
executor:
45+
name: &execRefBis go
46+
parameters:
47+
stepParam:
48+
type: steps
49+
default: []
50+
steps:
51+
- steps: << parameters.stepParam >>
52+
4353
workflows:
4454
test-build:
4555
jobs:
@@ -62,6 +72,8 @@ workflows:
6272
environment_type: something
6373
environment: another thing
6474

75+
- dummyJobWithStepParam
76+
6577
- somejob:
6678
myparam: some-value
6779
- anotherjob

0 commit comments

Comments
 (0)