opentelemetry-java-instrume.../smoke-tests/matrix/build.gradle

151 lines
6.2 KiB
Groovy

import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage
import com.bmuschko.gradle.docker.tasks.image.DockerPushImage
plugins {
id "com.bmuschko.docker-remote-api" version "6.7.0"
}
def buildLinuxTestImagesTask = tasks.create("buildLinuxTestImages") {
group = "build"
description = "Builds all Linux Docker images for the test matrix"
}
def buildWindowsTestImagesTask = tasks.create("buildWindowsTestImages") {
group = "build"
description = "Builds all Windows Docker images for the test matrix"
}
ext {
matrix = []
}
tasks.create("pushMatrix", DockerPushImage) {
group = "publishing"
description = "Push all Docker images for the test matrix"
images.set(project.ext.matrix)
}
// Each line under appserver describes one matrix of (version x vm x jdk), dockerfile key overrides
// Dockerfile name, args key passes raw arguments to docker build
def linuxTargets = [
"jetty": [
// TODO (trask) drop JDK 15 (everywhere below) after JDK 16 is passing
[version: ["9.4.35"], vm: ["hotspot", "openj9"], jdk: ["8", "11", "15", "16"]],
[version: ["10.0.0"], vm: ["hotspot", "openj9"], jdk: ["11", "15", "16"]],
[version: ["11.0.1"], vm: ["hotspot", "openj9"], jdk: ["11", "15", "16"], war: "servlet-5.0"]
],
"tomcat": [
[version: ["7.0.107"], vm: ["hotspot", "openj9"], jdk: ["8"]],
[version: ["8.5.60", "9.0.40"], vm: ["hotspot", "openj9"], jdk: ["8", "11"]],
[version: ["10.0.4"], vm: ["hotspot", "openj9"], jdk: ["11", "15"], war: "servlet-5.0"]
],
"tomee": [
[version: ["7.0.0"], vm: ["hotspot"], jdk: ["8"]],
[version: ["7.0.0"], vm: ["openj9"], jdk: ["8"], dockerfile: "tomee-custom"],
[version: ["8.0.6"], vm: ["hotspot"], jdk: ["8", "11"]],
[version: ["8.0.6"], vm: ["openj9"], jdk: ["8", "11"], dockerfile: "tomee-custom"]
],
"payara": [
[version: ["5.2020.6"], vm: ["hotspot"], jdk: ["8"], args: [tagSuffix: ""]],
[version: ["5.2020.6"], vm: ["hotspot"], jdk: ["11"], args: [tagSuffix: "-jdk11"]],
[version: ["5.2020.6"], vm: ["openj9"], jdk: ["8", "11"], dockerfile: "payara-custom-5.2020.6"]
],
"wildfly": [
[version: ["13.0.0.Final"], vm: ["hotspot", "openj9"], jdk: ["8"]],
[version: ["17.0.1.Final", "21.0.0.Final"], vm: ["hotspot", "openj9"], jdk: ["8", "11", "15", "16"]]
],
"liberty": [
[version: ["20.0.0.12"], vm: ["hotspot", "openj9"], jdk: ["8", "11", "15", "16"]]
]
]
def windowsTargets = [
"jetty" : [
[version: ["9.4.35"], vm: ["hotspot", "openj9"], jdk: ["8", "11", "15", "16"], args: [sourceVersion: "9.4.35.v20201120"]],
[version: ["10.0.0"], vm: ["hotspot", "openj9"], jdk: ["11", "15", "16"], dockerfile: "jetty-split", args: [sourceVersion: "10.0.0.beta3"]],
[version: ["11.0.1"], vm: ["hotspot", "openj9"], jdk: ["11", "15", "16"], dockerfile: "jetty-split", args: [sourceVersion: "11.0.1"], war: "servlet-5.0"]
],
"tomcat" : [
[version: ["7.0.107"], vm: ["hotspot", "openj9"], jdk: ["8"], args: [majorVersion: "7"]],
[version: ["8.5.60"], vm: ["hotspot", "openj9"], jdk: ["8", "11"], args: [majorVersion: "8"]],
[version: ["9.0.40"], vm: ["hotspot", "openj9"], jdk: ["8", "11"], args: [majorVersion: "9"]],
[version: ["10.0.4"], vm: ["hotspot", "openj9"], jdk: ["11", "15"], args: [majorVersion: "10"], war: "servlet-5.0"]
],
"tomee" : [
[version: ["7.0.0"], vm: ["hotspot", "openj9"], jdk: ["8"]],
[version: ["8.0.6"], vm: ["hotspot", "openj9"], jdk: ["8", "11"]]
],
"payara": [
[version: ["5.2020.6"], vm: ["hotspot", "openj9"], jdk: ["8", "11"]]
],
"wildfly" : [
[version: ["13.0.0.Final"], vm: ["hotspot", "openj9"], jdk: ["8"]],
[version: ["17.0.1.Final", "21.0.0.Final"], vm: ["hotspot", "openj9"], jdk: ["8", "11", "15", "16"]]
],
"liberty" : [
[version: ["20.0.0.12"], vm: ["hotspot", "openj9"], jdk: ["8", "11", "15", "16"], args: [release: "2020-11-11_0736"]]
]
]
createDockerTasks(buildLinuxTestImagesTask, linuxTargets, false)
createDockerTasks(buildWindowsTestImagesTask, windowsTargets, true)
def configureImage(Task parentTask, server, dockerfile, version, vm, jdk, warProject, Map<String, String> extraArgs, isWindows = false) {
// Using separate build directory for different war files allows using the same app.war filename
def dockerWorkingDir = new File(project.buildDir, "docker-$warProject")
def dockerFileName = isWindows ? "${dockerfile}.windows.dockerfile" : "${dockerfile}.dockerfile"
def platformSuffix = isWindows ? "-windows" : ""
def prepareTask = tasks.register("${server}ImagePrepare-$version-jdk$jdk-$vm$platformSuffix", Copy) {
def warTask = warProject != null ? project(":$warProject").tasks["war"] : project.tasks.war
it.dependsOn(warTask)
it.into(dockerWorkingDir)
it.from("src/$dockerFileName")
it.from("src/main/docker/$server")
it.from(warTask.archiveFile) {
rename { _ -> "app.war" }
}
}
def extraTag = findProperty("extraTag") ?: new Date().format("yyyyMMdd.HHmmSS")
def vmSuffix = vm == "hotspot" ? "" : "-$vm"
def image = "ghcr.io/open-telemetry/java-test-containers:$server-$version-jdk$jdk$vmSuffix$platformSuffix-$extraTag"
def buildTask = tasks.register("${server}Image-$version-jdk$jdk$vmSuffix$platformSuffix", DockerBuildImage) {
it.dependsOn(prepareTask)
group = "build"
description = "Builds Docker image with $server $version on JDK $jdk-$vm${isWindows ? ' on Windows' : ''}"
it.inputDir.set(dockerWorkingDir)
it.images.add(image)
it.dockerFile.set(new File(dockerWorkingDir, dockerFileName))
it.buildArgs.set(extraArgs + [jdk: jdk, vm: vm, version: version])
it.doLast {
project.ext.matrix.add(image)
}
}
parentTask.dependsOn(buildTask)
return image
}
def createDockerTasks(Task parentTask, targets, isWindows) {
Set<String> resultImages = []
targets.each { server, matrices ->
matrices.forEach { entry ->
def dockerfile = entry["dockerfile"]?.toString() ?: server
def extraArgs = (entry["args"] ?: [:]) as Map<String, String>
def warProject = entry["war"] ?: "servlet-3.0"
entry.version.forEach { version ->
entry.vm.forEach { vm ->
entry.jdk.forEach { jdk ->
resultImages.add(configureImage(parentTask, server, dockerfile, version, vm, jdk, warProject, extraArgs, isWindows))
}
}
}
}
}
return resultImages
}