/
StagePasses.kt
102 lines (90 loc) · 3.81 KB
/
StagePasses.kt
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package configurations
import common.applyDefaultSettings
import common.uuidPrefix
import jetbrains.buildServer.configs.kotlin.Dependencies
import jetbrains.buildServer.configs.kotlin.DslContext
import jetbrains.buildServer.configs.kotlin.FailureAction
import jetbrains.buildServer.configs.kotlin.RelativeId
import jetbrains.buildServer.configs.kotlin.SnapshotDependency
import jetbrains.buildServer.configs.kotlin.triggers.ScheduleTrigger
import jetbrains.buildServer.configs.kotlin.triggers.VcsTrigger
import jetbrains.buildServer.configs.kotlin.triggers.schedule
import jetbrains.buildServer.configs.kotlin.triggers.vcs
import model.CIBuildModel
import model.Stage
import model.StageName
import model.Trigger
import projects.StageProject
class StagePasses(model: CIBuildModel, stage: Stage, prevStage: Stage?, stageProject: StageProject) : BaseGradleBuildType(init = {
id(stageTriggerId(model, stage))
uuid = stageTriggerUuid(model, stage)
name = stage.stageName.stageName + " (Trigger)"
type = Type.COMPOSITE
applyDefaultSettings()
features {
publishBuildStatusToGithub(model)
}
val enableTriggers = model.branch.enableVcsTriggers
if (stage.trigger == Trigger.eachCommit) {
triggers.vcs {
quietPeriodMode = VcsTrigger.QuietPeriodMode.USE_CUSTOM
quietPeriod = 90
triggerRules = triggerExcludes
branchFilter = model.branch.branchFilter()
enabled = enableTriggers
}
} else if (stage.trigger != Trigger.never) {
triggers.schedule {
if (stage.trigger == Trigger.weekly) {
schedulingPolicy = weekly {
dayOfWeek = ScheduleTrigger.DAY.Saturday
hour = 1
}
} else {
schedulingPolicy = daily {
hour = 0
minute = 30
}
}
triggerBuild = always()
withPendingChangesOnly = true
param("revisionRule", "lastFinished")
branchFilter = model.branch.branchFilter()
enabled = enableTriggers
}
}
dependencies {
if (!stage.runsIndependent && prevStage != null) {
dependency(RelativeId(stageTriggerId(model, prevStage))) {
snapshot {
onDependencyFailure = FailureAction.FAIL_TO_START
onDependencyCancel = FailureAction.FAIL_TO_START
}
}
}
snapshotDependencies(stageProject.specificBuildTypes)
snapshotDependencies(stageProject.performanceTests)
snapshotDependencies(stageProject.functionalTests)
snapshotDependencies(stageProject.docsTestTriggers)
}
})
fun stageTriggerId(model: CIBuildModel, stage: Stage) = stageTriggerId(model, stage.stageName)
fun stageTriggerUuid(model: CIBuildModel, stage: Stage) = stageTriggerUuid(model, stage.stageName)
fun stageTriggerId(model: CIBuildModel, stageName: StageName) = "${model.projectId}_Stage_${stageName.id}_Trigger"
fun stageTriggerUuid(model: CIBuildModel, stageName: StageName) = "${DslContext.uuidPrefix}_${model.projectId}_Stage_${stageName.uuid}_Trigger"
fun <T : BaseGradleBuildType> Dependencies.snapshotDependencies(buildTypes: Iterable<T>, snapshotConfig: SnapshotDependency.(T) -> Unit = {}) {
buildTypes.forEach { buildType ->
dependency(buildType.id!!) {
snapshot {
if (!buildType.failStage) {
onDependencyFailure = FailureAction.IGNORE
onDependencyCancel = FailureAction.IGNORE
} else {
onDependencyFailure = FailureAction.ADD_PROBLEM
onDependencyCancel = FailureAction.FAIL_TO_START
}
snapshotConfig(buildType)
}
}
}
}