
- add architecture rule for ppc64le so that incompatible agents don't pick up the build - disable PIE tests on linux/ppc64le (the tests claim it doesn't work) - enable PIE tests on darwin/amd64 now that the entry point calculation has been fixed - remove dependency on wget and curl in the test script for linux to reduce test time - only install git in the linux test script when we need it - remove staticcheck from linux/ppc64le builds (it takes almost 5 minutes between installation and execution and makes the test timeout sometimes) - drop windows/arm64/tip build, the windows/arm64 build is broken anyway and since there is only one agent it makes CI runs slow - drop linux/ppc64le/tip build, there is only one agent, it's slow and it will always timeout. CI runs in excess of 1h are too long.
262 lines
7.8 KiB
Kotlin
262 lines
7.8 KiB
Kotlin
import jetbrains.buildServer.configs.kotlin.v2019_2.*
|
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.PullRequests
|
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.commitStatusPublisher
|
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.golang
|
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.pullRequests
|
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.dockerCommand
|
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.exec
|
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.powerShell
|
|
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
|
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
|
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
|
|
|
/*
|
|
The settings script is an entry point for defining a TeamCity
|
|
project hierarchy. The script should contain a single call to the
|
|
project() function with a Project instance or an init function as
|
|
an argument.
|
|
|
|
VcsRoots, BuildTypes, Templates, and subprojects can be
|
|
registered inside the project using the vcsRoot(), buildType(),
|
|
template(), and subProject() methods respectively.
|
|
|
|
To debug settings scripts in command-line, run the
|
|
|
|
mvnDebug org.jetbrains.teamcity:teamcity-configs-maven-plugin:generate
|
|
|
|
command and attach your debugger to the port 8000.
|
|
|
|
To debug in IntelliJ Idea, open the 'Maven Projects' tool window (View
|
|
-> Tool Windows -> Maven Projects), find the generate task node
|
|
(Plugins -> teamcity-configs -> teamcity-configs:generate), the
|
|
'Debug' option is available in the context menu for the task.
|
|
*/
|
|
|
|
version = "2020.2"
|
|
|
|
val targets = arrayOf(
|
|
"linux/amd64/1.19",
|
|
"linux/amd64/1.20",
|
|
"linux/amd64/1.21",
|
|
"linux/amd64/tip",
|
|
|
|
"linux/386/1.20",
|
|
|
|
"linux/arm64/1.21",
|
|
"linux/arm64/tip",
|
|
|
|
"linux/ppc64le/1.21",
|
|
|
|
"windows/amd64/1.21",
|
|
"windows/amd64/tip",
|
|
|
|
"windows/arm64/1.21",
|
|
|
|
"mac/amd64/1.21",
|
|
"mac/amd64/tip",
|
|
|
|
"mac/arm64/1.21",
|
|
"mac/arm64/tip"
|
|
)
|
|
|
|
project {
|
|
val tests = targets.map { target ->
|
|
val (os, arch, version) = target.split("/")
|
|
TestBuild(os, arch, version, AbsoluteId("Delve_${os}_${arch}_${version.replace('.', '_')}"))
|
|
}
|
|
tests.map { test ->
|
|
test.os
|
|
}.distinct().forEach { os ->
|
|
subProject(OSProject(os, tests.filter { test ->
|
|
test.os == os
|
|
}))
|
|
}
|
|
buildType(AggregatorBuild(tests))
|
|
params {
|
|
param("teamcity.ui.settings.readOnly", "true")
|
|
}
|
|
}
|
|
|
|
class AggregatorBuild(tests: Collection<BuildType>) : BuildType({
|
|
name = "Aggregator"
|
|
type = Type.COMPOSITE
|
|
|
|
vcs {
|
|
root(DslContext.settingsRoot)
|
|
}
|
|
|
|
triggers {
|
|
vcs {
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
tests.forEach { test ->
|
|
snapshot(test) {
|
|
}
|
|
}
|
|
}
|
|
|
|
features {
|
|
pullRequests {
|
|
vcsRootExtId = "${DslContext.settingsRoot.id}"
|
|
provider = github {
|
|
authType = token {
|
|
token = "credentialsJSON:1312c856-0e13-4b04-8c40-ac26d4a5f700"
|
|
}
|
|
filterAuthorRole = PullRequests.GitHubRoleFilter.EVERYBODY
|
|
}
|
|
}
|
|
commitStatusPublisher {
|
|
vcsRootExtId = "${DslContext.settingsRoot.id}"
|
|
publisher = github {
|
|
githubUrl = "https://api.github.com"
|
|
authType = personalToken {
|
|
token = "credentialsJSON:1312c856-0e13-4b04-8c40-ac26d4a5f700"
|
|
}
|
|
}
|
|
param("github_oauth_user", "")
|
|
}
|
|
}
|
|
|
|
failureConditions {
|
|
executionTimeoutMin = 60
|
|
}
|
|
})
|
|
|
|
class OSProject(os: String, tests: List<TestBuild>) : Project({
|
|
id = AbsoluteId("Delve_$os")
|
|
name = os.capitalize()
|
|
|
|
tests.map { test ->
|
|
test.arch
|
|
}.distinct().forEach { arch ->
|
|
subProject(ArchProject(os, arch, tests.filter { test ->
|
|
test.arch == arch
|
|
}))
|
|
}
|
|
})
|
|
|
|
class ArchProject(os: String, arch: String, tests: List<TestBuild>) : Project({
|
|
id = AbsoluteId("Delve_${os}_${arch}")
|
|
name = arch
|
|
|
|
tests.forEach { test ->
|
|
buildType(test)
|
|
}
|
|
})
|
|
|
|
class TestBuild(val os: String, val arch: String, version: String, buildId: AbsoluteId) : BuildType({
|
|
id = buildId
|
|
name = version
|
|
|
|
vcs {
|
|
root(DslContext.settingsRoot)
|
|
}
|
|
|
|
failureConditions {
|
|
executionTimeoutMin = 30
|
|
|
|
if (version != "tip") {
|
|
failOnMetricChange {
|
|
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
|
|
units = BuildFailureOnMetric.MetricUnit.DEFAULT_UNIT
|
|
comparison = BuildFailureOnMetric.MetricComparison.LESS
|
|
compareTo = value()
|
|
}
|
|
}
|
|
}
|
|
|
|
steps {
|
|
when (os) {
|
|
"linux" -> {
|
|
val dockerArch = when (arch) {
|
|
"386" -> "i386"
|
|
"arm64" -> "arm64v8"
|
|
else -> {
|
|
arch
|
|
}
|
|
}
|
|
val dockerPlatformArch = when (arch) {
|
|
"arm64" -> "arm64/v8"
|
|
else -> {
|
|
dockerArch
|
|
}
|
|
}
|
|
dockerCommand {
|
|
name = "Pull Ubuntu"
|
|
commandType = other {
|
|
subCommand = "pull"
|
|
commandArgs = "$dockerArch/ubuntu:20.04"
|
|
}
|
|
}
|
|
dockerCommand {
|
|
name = "Test"
|
|
commandType = other {
|
|
subCommand = "run"
|
|
commandArgs = """
|
|
-v %teamcity.build.checkoutDir%:/delve
|
|
--env TEAMCITY_VERSION=${'$'}TEAMCITY_VERSION
|
|
--env CI=true
|
|
--privileged
|
|
--platform linux/$dockerPlatformArch
|
|
$dockerArch/ubuntu:20.04
|
|
/delve/_scripts/test_linux.sh ${"go$version"} $arch
|
|
""".trimIndent()
|
|
}
|
|
}
|
|
}
|
|
"windows" -> {
|
|
powerShell {
|
|
name = "Test"
|
|
scriptMode = file {
|
|
path = "_scripts/test_windows.ps1"
|
|
}
|
|
param("jetbrains_powershell_scriptArguments", "-version ${"go$version"} -arch $arch")
|
|
}
|
|
}
|
|
"mac" -> {
|
|
exec {
|
|
name = "Test"
|
|
path = "_scripts/test_mac.sh"
|
|
arguments = "${"go$version"} $arch %system.teamcity.build.tempDir%"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
requirements {
|
|
when (arch) {
|
|
"386", "amd64" -> equals("teamcity.agent.jvm.os.arch", if (os == "mac") "x86_64" else "amd64")
|
|
"arm64" -> equals("teamcity.agent.jvm.os.arch", "aarch64")
|
|
"ppc64le" -> equals("teamcity.agent.jvm.os.arch", "ppc64le")
|
|
}
|
|
when (os) {
|
|
"linux" -> {
|
|
matches("teamcity.agent.jvm.os.family", "Linux")
|
|
}
|
|
"windows" -> {
|
|
matches("teamcity.agent.jvm.os.family", "Windows")
|
|
}
|
|
"mac" -> {
|
|
matches("teamcity.agent.jvm.os.family", "Mac OS")
|
|
}
|
|
}
|
|
}
|
|
|
|
features {
|
|
pullRequests {
|
|
vcsRootExtId = "${DslContext.settingsRoot.id}"
|
|
provider = github {
|
|
authType = token {
|
|
token = "credentialsJSON:1312c856-0e13-4b04-8c40-ac26d4a5f700"
|
|
}
|
|
filterAuthorRole = PullRequests.GitHubRoleFilter.EVERYBODY
|
|
}
|
|
}
|
|
golang {
|
|
testFormat = "json"
|
|
}
|
|
}
|
|
})
|