-
Notifications
You must be signed in to change notification settings - Fork 4
/
beatsStages.groovy
80 lines (72 loc) · 3.18 KB
/
beatsStages.groovy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
// Licensed to Elasticsearch B.V. under one or more contributor
// license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright
// ownership. Elasticsearch B.V. licenses this file to you under
// the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
/**
* Given the YAML definition then it creates all the stages
*/
Map call(Map args = [:]){
def project = args.containsKey('project') ? args.project : error('beatsStages: project parameter is required')
def content = args.containsKey('content') ? args.content : error('beatsStages: content parameter is required')
def function = args.containsKey('function') ? args.function : error('beatsStages: function parameter is required')
def filterStage = args.get('filterStage', '')
def defaultNode = content.containsKey('platform') ? content.platform : error('beatsStages: platform entry in the content is required.')
def mapOfStages = [:]
content?.stages?.each { stageName, value ->
def tempMapOfStages = [:]
if (value.containsKey('when')) {
if (beatsWhen(project: project, content: value.when, description: stageName)) {
tempMapOfStages = generateStages(content: value, project: project, stageName: stageName, defaultNode: defaultNode, function: function)
}
} else {
tempMapOfStages = generateStages(content: value, project: project, stageName: stageName, defaultNode: defaultNode, function: function)
}
// This should help to filter stages by their stage name and ignore if they don't match
if (value.containsKey('stage') && filterStage?.trim()) {
if (value.get('stage').equals(filterStage)) {
tempMapOfStages.each { k,v -> mapOfStages["${k}"] = v }
}
} else {
tempMapOfStages.each { k,v -> mapOfStages["${k}"] = v }
}
}
return mapOfStages
}
private generateStages(Map args = [:]) {
def content = args.content
def project = args.project
def stageName = args.stageName
def defaultNode = args.defaultNode
def function = args.function
def mapOfStages = [:]
if (content.containsKey('platforms')) {
content.platforms.each { platform ->
def id = "${project}-${stageName}-${platform}"
log(level: 'DEBUG', text: "stage: ${id}")
mapOfStages[id] = generateStage(context: id, project: project, label: platform, content: content, function: function, id: id)
}
} else {
def id = "${project}-${stageName}"
log(level: 'DEBUG', text: "stage: ${id}")
mapOfStages["${id}"] = generateStage(context: id, project: project, label: defaultNode, content: content, function: function, id: id)
}
return mapOfStages
}
private generateStage(Map args = [:]) {
def function = args.function
return {
function.run(args)
}
}