Skip to content

Commit

Permalink
Trigger types (spinnaker#1890)
Browse files Browse the repository at this point in the history
refactor(triggers): concrete types for triggers
  • Loading branch information
robfletcher authored Feb 1, 2018
1 parent 33c8666 commit 6153322
Show file tree
Hide file tree
Showing 60 changed files with 2,047 additions and 915 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ import org.springframework.beans.factory.annotation.Autowired
import org.springframework.beans.factory.annotation.Value
import org.springframework.stereotype.Component
import retrofit.RetrofitError
import static com.netflix.spinnaker.orca.pipeline.model.Execution.ExecutionType.PIPELINE

@Component
@CompileStatic
Expand Down Expand Up @@ -70,9 +69,9 @@ class CreateBakeTask implements RetryableTask {
def bakeStatus = bakery.createBake(region, bake, rebake).toBlocking().single()

def stageOutputs = [
status : bakeStatus,
bakePackageName : bake.packageName ?: "",
previouslyBaked : bakeStatus.state == BakeStatus.State.COMPLETED
status : bakeStatus,
bakePackageName: bake.packageName ?: "",
previouslyBaked: bakeStatus.state == BakeStatus.State.COMPLETED
] as Map<String, ? extends Object>

if (bake.buildInfoUrl) {
Expand Down Expand Up @@ -114,31 +113,27 @@ class CreateBakeTask implements RetryableTask {
if (stage.context.rebake == true) {
return true
}
if (stage.execution.type == PIPELINE) {
Map trigger = stage.execution.trigger
return trigger?.rebake == true
}
return false
return stage.execution.trigger?.rebake
}

@CompileDynamic
private BakeRequest bakeFromContext(Stage stage) {
PackageType packageType
if (roscoApisEnabled) {
def baseImage = bakery.getBaseImage(stage.context.cloudProviderType as String,
stage.context.baseOs as String).toBlocking().single()
stage.context.baseOs as String).toBlocking().single()
packageType = baseImage.packageType as PackageType
} else {
OperatingSystem operatingSystem = OperatingSystem.valueOf(stage.context.baseOs as String)
packageType = operatingSystem.packageType
}

PackageInfo packageInfo = new PackageInfo(stage,
packageType.packageType,
packageType.versionDelimiter,
extractBuildDetails,
false /* extractVersion */,
mapper)
packageType.packageType,
packageType.versionDelimiter,
extractBuildDetails,
false /* extractVersion */,
mapper)

Map requestMap = packageInfo.findTargetPackage(allowMissingPackageInstallation)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@ import com.netflix.spinnaker.orca.bakery.api.BakeStatus
import com.netflix.spinnaker.orca.bakery.api.BakeryService
import com.netflix.spinnaker.orca.jackson.OrcaObjectMapper
import com.netflix.spinnaker.orca.pipeline.model.Execution
import com.netflix.spinnaker.orca.pipeline.model.JenkinsTrigger
import com.netflix.spinnaker.orca.pipeline.model.Stage
import com.netflix.spinnaker.orca.pipeline.model.Trigger
import retrofit.RetrofitError
import retrofit.client.Response
import retrofit.mime.TypedString
Expand All @@ -32,6 +34,7 @@ import spock.lang.Subject
import spock.lang.Unroll
import static com.netflix.spinnaker.orca.bakery.api.BakeStatus.State.COMPLETED
import static com.netflix.spinnaker.orca.bakery.api.BakeStatus.State.RUNNING
import static com.netflix.spinnaker.orca.pipeline.model.JenkinsTrigger.*
import static com.netflix.spinnaker.orca.test.model.ExecutionBuilder.pipeline
import static com.netflix.spinnaker.orca.test.model.ExecutionBuilder.stage
import static java.net.HttpURLConnection.HTTP_NOT_FOUND
Expand Down Expand Up @@ -87,93 +90,80 @@ class CreateBakeTaskSpec extends Specification {
]

@Shared
def buildInfo = [
artifacts: [
[fileName: 'hodor_1.1_all.deb'],
[fileName: 'hodor-1.1.noarch.rpm'],
[fileName: 'hodor.1.1.nupkg']
]
]
def buildInfo = new BuildInfo(
"name", 0, null, [
new JenkinsArtifact("hodor_1.1_all.deb", "."),
new JenkinsArtifact("hodor-1.1.noarch.rpm", "."),
new JenkinsArtifact("hodor.1.1.nupkg", ".")
], [], "name#0", false, "SUCCESS"
)

@Shared
def buildInfoWithUrl = [
url : "http://spinnaker.builds.test.netflix.net/job/SPINNAKER-package-echo/69/",
artifacts: [
[fileName: 'hodor_1.1_all.deb'],
[fileName: 'hodor-1.1.noarch.rpm'],
[fileName: 'hodor.1.1.nupkg']
]
]
def buildInfoWithUrl = new BuildInfo(
"name", 0, "http://spinnaker.builds.test.netflix.net/job/SPINNAKER-package-echo/69/".toURI(),
[
new JenkinsArtifact("hodor_1.1_all.deb", "."),
new JenkinsArtifact("hodor-1.1.noarch.rpm", "."),
new JenkinsArtifact("hodor.1.1.nupkg", ".")
], [], "name#0", false, "SUCCESS"
)

@Shared
def buildInfoWithFoldersUrl = [
url : "http://spinnaker.builds.test.netflix.net/job/folder/job/SPINNAKER-package-echo/69/",
artifacts: [
[fileName: 'hodor_1.1_all.deb'],
[fileName: 'hodor-1.1.noarch.rpm'],
[fileName: 'hodor.1.1.nupkg']
]
]
def buildInfoWithFoldersUrl = new BuildInfo(
"name", 0, "http://spinnaker.builds.test.netflix.net/job/folder/job/SPINNAKER-package-echo/69/".toURI(),
[
new JenkinsArtifact("hodor_1.1_all.deb", "."),
new JenkinsArtifact("hodor-1.1.noarch.rpm", "."),
new JenkinsArtifact("hodor.1.1.nupkg", ".")
], [], "name#0", false, "SUCCESS"
)

@Shared
def buildInfoWithUrlAndSCM = [
url : "http://spinnaker.builds.test.netflix.net/job/SPINNAKER-package-echo/69/",
artifacts: [
[fileName: 'hodor_1.1_all.deb'],
[fileName: 'hodor-1.1.noarch.rpm'],
[fileName: 'hodor.1.1.nupkg']
],
scm : [
[name : "refs/remotes/origin/master",
sha1 : "f83a447f8d02a40fa84ec9d4d0dccd263d51782d",
branch: "master"]
]
]
def buildInfoWithUrlAndSCM = new BuildInfo(
"name", 0, "http://spinnaker.builds.test.netflix.net/job/SPINNAKER-package-echo/69/".toURI(),
[
new JenkinsArtifact("hodor_1.1_all.deb", "."),
new JenkinsArtifact("hodor-1.1.noarch.rpm", "."),
new JenkinsArtifact("hodor.1.1.nupkg", ".")
], [
new SourceControl("refs/remotes/origin/master", "master", "f83a447f8d02a40fa84ec9d4d0dccd263d51782d")
], "name#0", false, "SUCCESS"
)

@Shared
def buildInfoWithUrlAndTwoSCMs = [
url : "http://spinnaker.builds.test.netflix.net/job/SPINNAKER-package-echo/69/",
artifacts: [
[fileName: 'hodor_1.1_all.deb'],
[fileName: 'hodor-1.1.noarch.rpm'],
[fileName: 'hodor.1.1.nupkg']
],
scm : [
[name : "refs/remotes/origin/master",
sha1 : "f83a447f8d02a40fa84ec9d4d0dccd263d51782d",
branch: "master"],
[name : "refs/remotes/origin/some-feature",
sha1 : "1234567f8d02a40fa84ec9d4d0dccd263d51782d",
branch: "some-feature"]
]
]
def buildInfoWithUrlAndTwoSCMs = new BuildInfo(
"name", 0, "http://spinnaker.builds.test.netflix.net/job/SPINNAKER-package-echo/69/".toURI(),
[
new JenkinsArtifact("hodor_1.1_all.deb", "."),
new JenkinsArtifact("hodor-1.1.noarch.rpm", "."),
new JenkinsArtifact("hodor.1.1.nupkg", ".")
], [
new SourceControl("refs/remotes/origin/master", "master", "f83a447f8d02a40fa84ec9d4d0dccd263d51782d"),
new SourceControl("refs/remotes/origin/some-feature", "some-feature", "1234567f8d02a40fa84ec9d4d0dccd263d51782d")
], "name#0", false, "SUCCESS"
)

@Shared
def buildInfoWithUrlAndMasterAndDevelopSCMs = [
url : "http://spinnaker.builds.test.netflix.net/job/SPINNAKER-package-echo/69/",
artifacts: [
[fileName: 'hodor_1.1_all.deb'],
[fileName: 'hodor-1.1.noarch.rpm'],
[fileName: 'hodor.1.1.nupkg']
],
scm : [
[name : "refs/remotes/origin/master",
sha1 : "f83a447f8d02a40fa84ec9d4d0dccd263d51782d",
branch: "master"],
[name : "refs/remotes/origin/develop",
sha1 : "1234567f8d02a40fa84ec9d4d0dccd263d51782d",
branch: "develop"]
]
]
def buildInfoWithUrlAndMasterAndDevelopSCMs = new BuildInfo(
"name", 0, "http://spinnaker.builds.test.netflix.net/job/SPINNAKER-package-echo/69/".toURI(),
[
new JenkinsArtifact("hodor_1.1_all.deb", "."),
new JenkinsArtifact("hodor-1.1.noarch.rpm", "."),
new JenkinsArtifact("hodor.1.1.nupkg", ".")
], [
new SourceControl("refs/remotes/origin/master", "master", "f83a447f8d02a40fa84ec9d4d0dccd263d51782d"),
new SourceControl("refs/remotes/origin/develop", "develop", "1234567f8d02a40fa84ec9d4d0dccd263d51782d")
], "name#0", false, "SUCCESS"
)

@Shared
def buildInfoNoMatch = [
artifacts: [
[fileName: 'hodornodor_1.1_all.deb'],
[fileName: 'hodor-1.1.noarch.rpm'],
[fileName: 'hodor.1.1.nupkg']
]
]
def buildInfoNoMatch = new BuildInfo(
"name", 0, null, [
new JenkinsArtifact("hodornodor_1.1_all.deb", "."),
new JenkinsArtifact("hodor-1.1.noarch.rpm", "."),
new JenkinsArtifact("hodor.1.1.nupkg", ".")
], [], "name#0", false, "SUCCESS"
)

@Shared
def invalidArtifactList = [
Expand Down Expand Up @@ -247,7 +237,7 @@ class CreateBakeTaskSpec extends Specification {
given:
bakeConfig.buildInfo = contextInfo
def pipelineWithTrigger = pipeline {
trigger.putAll(buildInfo: triggerInfo)
trigger = new JenkinsTrigger("master", "job", 1, null, [:], triggerInfo, null, [:], [])
stage {
type = "bake"
context = bakeConfig
Expand Down Expand Up @@ -283,7 +273,7 @@ class CreateBakeTaskSpec extends Specification {
given:
bakeConfig.buildInfo = contextInfo
def pipelineWithTrigger = pipeline {
trigger.putAll(buildInfo: triggerInfo)
trigger = new JenkinsTrigger("master", "job", 1, null, [:], triggerInfo, null, [:], [])
stage {
type = "bake"
context = bakeConfig
Expand All @@ -303,7 +293,6 @@ class CreateBakeTaskSpec extends Specification {
null | buildInfoNoMatch
buildInfoNoMatch | null
buildInfoNoMatch | buildInfoNoMatch
buildInfoNoMatch | invalidArtifactList
invalidArtifactList | buildInfoNoMatch
}
Expand All @@ -318,7 +307,7 @@ class CreateBakeTaskSpec extends Specification {
]
]
def pipelineWithTrigger = pipeline {
trigger.putAll(buildInfo: buildInfo)
trigger = new JenkinsTrigger("master", "job", 1, null, [:], buildInfo, null, null, null)
stage {
type = "bake"
context = bakeConfig
Expand Down Expand Up @@ -368,7 +357,7 @@ class CreateBakeTaskSpec extends Specification {
given:
bakeConfig.buildInfo = contextInfo
def pipelineWithTrigger = pipeline {
trigger.putAll(buildInfo: triggerInfo)
trigger = new JenkinsTrigger("master", "job", 1, null, [:], triggerInfo, null, [:], [])
stage {
type = "bake"
context = bakeConfig
Expand Down Expand Up @@ -403,7 +392,7 @@ class CreateBakeTaskSpec extends Specification {
given:
bakeConfig.buildInfo = contextInfo
def pipelineWithTrigger = pipeline {
trigger.putAll(buildInfo: triggerInfo)
trigger = new JenkinsTrigger("master", "job", 1, null, [:], triggerInfo, null, [:], [])
stage {
type = "bake"
context = bakeConfig
Expand Down Expand Up @@ -436,10 +425,10 @@ class CreateBakeTaskSpec extends Specification {
given:
bakeConfig.buildInfo = contextInfo
def pipelineWithTrigger = pipeline {
trigger.putAll(buildInfo: triggerInfo)
trigger = new JenkinsTrigger("master", "job", 1, null, [:], triggerInfo, null, [:], [])
stage {
type = "bake"
context = bakeConfig
context = mapper.convertValue(bakeConfig, Map)
}
}

Expand Down Expand Up @@ -467,12 +456,12 @@ class CreateBakeTaskSpec extends Specification {
@Unroll
def "build info with url and master and develop scms yields bake stage output containing build host, job, build number and first commit hash"() {
given:
bakeConfig.buildInfo = contextInfo
bakeConfig.buildInfo = mapper.convertValue(contextInfo, Map)
def pipelineWithTrigger = pipeline {
trigger.putAll(buildInfo: triggerInfo)
trigger = new JenkinsTrigger("master", "job", 1, null, [:], triggerInfo, null, [:], [])
stage {
type = "bake"
context = bakeConfig
context = mapper.convertValue(bakeConfig, Map)
}
}

Expand Down Expand Up @@ -502,7 +491,7 @@ class CreateBakeTaskSpec extends Specification {
given:
bakeConfig.buildInfo = contextInfo
def pipelineWithTrigger = pipeline {
trigger.putAll(buildInfo: triggerInfo)
trigger = new JenkinsTrigger("master", "job", 1, null, [:], triggerInfo, null, [:], [])
stage {
type = "bake"
context = bakeConfig
Expand Down Expand Up @@ -537,7 +526,7 @@ class CreateBakeTaskSpec extends Specification {
given:
bakeConfig.buildInfo = contextInfo
def pipelineWithTrigger = pipeline {
trigger.putAll(buildInfo: triggerInfo)
trigger = new JenkinsTrigger("master", "job", 1, null, [:], triggerInfo, null, [:], [])
stage {
type = "bake"
context = bakeConfig
Expand Down Expand Up @@ -575,7 +564,7 @@ class CreateBakeTaskSpec extends Specification {
given:
bakeConfig.buildInfo = contextInfo
def pipelineWithTrigger = pipeline {
trigger.putAll(buildInfo: triggerInfo)
trigger = new JenkinsTrigger("master", "job", 1, null, [:], triggerInfo, null, [:], [])
stage {
type = "bake"
context = bakeConfig
Expand Down Expand Up @@ -612,7 +601,7 @@ class CreateBakeTaskSpec extends Specification {
given:
bakeConfig.buildInfo = contextInfo
def pipelineWithTrigger = pipeline {
trigger.putAll(buildInfo: triggerInfo)
trigger = new JenkinsTrigger("master", "job", 1, null, [:], triggerInfo, null, [:], [])
stage {
type = "bake"
context = bakeConfig
Expand Down Expand Up @@ -718,9 +707,7 @@ class CreateBakeTaskSpec extends Specification {
def "sets rebake query parameter to #queryParameter when trigger is #trigger"() {
given:
def pipeline = pipeline {
if (triggerConfig) {
trigger.putAll(triggerConfig)
}
trigger = mapper.convertValue(triggerConfig, Trigger)
stage {
type = "bake"
context = bakeConfig
Expand Down Expand Up @@ -760,10 +747,10 @@ class CreateBakeTaskSpec extends Specification {
0 * _

where:
triggerConfig | queryParameter
[rebake: true] | "1"
[rebake: false] | null
null | null
triggerConfig | queryParameter
[type: "jenkins", master: "master", job: "job", buildNumber: 1, rebake: true] | "1"
[type: "jenkins", master: "master", job: "job", buildNumber: 1, rebake: false] | null
[type: "jenkins", master: "master", job: "job", buildNumber: 1] | null
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ class ParallelDeployStage implements StageDefinitionBuilder {
protected Collection<Map<String, Object>> parallelContexts(Stage stage) {
if (stage.execution.type == PIPELINE) {
Map trigger = stage.execution.trigger
if (trigger.parameters?.strategy == true) {
if (trigger?.parameters?.strategy == true) {
Stage parentStage = trigger.parentExecution.stages.find {
it.id == trigger.parameters.parentStageId
}
Expand Down Expand Up @@ -149,7 +149,7 @@ class ParallelDeployStage implements StageDefinitionBuilder {
if (stage.execution.type == PIPELINE) {
Map trigger = stage.execution.trigger

if (trigger.parameters?.clone == true) {
if (trigger?.parameters?.clone == true) {
return true
}
}
Expand Down
Loading

0 comments on commit 6153322

Please sign in to comment.