diff --git a/docker-bake.hcl b/docker-bake.hcl index d232658c..c3ceea7f 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -1,20 +1,14 @@ group "linux" { targets = [ - "alpine_jdk11", - "alpine_jdk17", - "alpine_jdk21", - "debian_jdk11", - "debian_jdk17", - "debian_jdk21", + "alpine", + "debian", "debian_jdk21-preview", ] } group "linux-arm64" { targets = [ - "debian_jdk11", - "debian_jdk17", - "debian_jdk21", + "debian", "alpine_jdk21", ] } @@ -34,9 +28,7 @@ group "linux-s390x" { group "linux-ppc64le" { targets = [ - "debian_jdk11", - "debian_jdk17", - "debian_jdk21" + "debian" ] } @@ -84,120 +76,95 @@ variable "DEBIAN_RELEASE" { default = "bookworm-20240423" } -target "alpine_jdk11" { - dockerfile = "alpine/Dockerfile" - context = "." - args = { - ALPINE_TAG = ALPINE_FULL_TAG - JAVA_VERSION = JAVA11_VERSION - } - tags = [ - equal(ON_TAG, "true") ? "${REGISTRY}/${JENKINS_REPO}:${VERSION}-alpine-jdk11" : "", - equal(ON_TAG, "true") ? "${REGISTRY}/${JENKINS_REPO}:${VERSION}-alpine${ALPINE_SHORT_TAG}-jdk11" : "", - "${REGISTRY}/${JENKINS_REPO}:alpine", - "${REGISTRY}/${JENKINS_REPO}:alpine-jdk11", - "${REGISTRY}/${JENKINS_REPO}:latest-alpine-jdk11", - "${REGISTRY}/${JENKINS_REPO}:alpine${ALPINE_SHORT_TAG}", - "${REGISTRY}/${JENKINS_REPO}:alpine${ALPINE_SHORT_TAG}-jdk11", - "${REGISTRY}/${JENKINS_REPO}:latest-alpine${ALPINE_SHORT_TAG}-jdk11", - "${REGISTRY}/${JENKINS_REPO}:latest-alpine${ALPINE_SHORT_TAG}", - ] - platforms = ["linux/amd64"] +variable "default_jdk" { + default = 11 } -target "alpine_jdk17" { - dockerfile = "alpine/Dockerfile" - context = "." - args = { - ALPINE_TAG = ALPINE_FULL_TAG - JAVA_VERSION = JAVA17_VERSION - } - tags = [ - equal(ON_TAG, "true") ? "${REGISTRY}/${JENKINS_REPO}:${VERSION}-alpine-jdk17" : "", - equal(ON_TAG, "true") ? "${REGISTRY}/${JENKINS_REPO}:${VERSION}-alpine${ALPINE_SHORT_TAG}-jdk17" : "", - "${REGISTRY}/${JENKINS_REPO}:alpine-jdk17", - "${REGISTRY}/${JENKINS_REPO}:latest-alpine-jdk17", - "${REGISTRY}/${JENKINS_REPO}:alpine${ALPINE_SHORT_TAG}-jdk17", - "${REGISTRY}/${JENKINS_REPO}:latest-alpine${ALPINE_SHORT_TAG}-jdk17", - ] - platforms = ["linux/amd64"] +# Return "true" if the jdk passed as parameter is the same as the default jdk, "false" otherwise +function "is_default_jdk" { + params = [jdk] + result = equal(default_jdk, jdk) ? "true" : "false" } -target "alpine_jdk21" { - dockerfile = "alpine/Dockerfile" - context = "." - args = { - ALPINE_TAG = ALPINE_FULL_TAG - JAVA_VERSION = JAVA21_VERSION - } - tags = [ - equal(ON_TAG, "true") ? "${REGISTRY}/${JENKINS_REPO}:${VERSION}-alpine-jdk21" : "", - equal(ON_TAG, "true") ? "${REGISTRY}/${JENKINS_REPO}:${VERSION}-alpine${ALPINE_SHORT_TAG}-jdk21" : "", - "${REGISTRY}/${JENKINS_REPO}:alpine-jdk21", - "${REGISTRY}/${JENKINS_REPO}:latest-alpine-jdk21", - "${REGISTRY}/${JENKINS_REPO}:alpine${ALPINE_SHORT_TAG}-jdk21", - "${REGISTRY}/${JENKINS_REPO}:latest-alpine${ALPINE_SHORT_TAG}-jdk21", - ] - platforms = ["linux/amd64", "linux/arm64"] +# Return the complete Java version corresponding to the jdk passed as parameter +function "javaversion" { + params = [jdk] + result = (equal(11, jdk) + ? "${JAVA11_VERSION}" + : (equal(17, jdk) + ? "${JAVA17_VERSION}" + : "${JAVA21_VERSION}")) } -target "debian_jdk11" { - dockerfile = "debian/Dockerfile" - context = "." - args = { - JAVA_VERSION = JAVA11_VERSION - DEBIAN_RELEASE = DEBIAN_RELEASE - } - tags = [ - equal(ON_TAG, "true") ? "${REGISTRY}/${JENKINS_REPO}:${VERSION}" : "", - equal(ON_TAG, "true") ? "${REGISTRY}/${JENKINS_REPO}:${VERSION}-jdk11" : "", - "${REGISTRY}/${JENKINS_REPO}:bookworm-jdk11", - "${REGISTRY}/${JENKINS_REPO}:debian-jdk11", - "${REGISTRY}/${JENKINS_REPO}:jdk11", - "${REGISTRY}/${JENKINS_REPO}:latest", - "${REGISTRY}/${JENKINS_REPO}:latest-bookworm-jdk11", - "${REGISTRY}/${JENKINS_REPO}:latest-debian-jdk11", - "${REGISTRY}/${JENKINS_REPO}:latest-jdk11", - ] - platforms = ["linux/amd64", "linux/arm64", "linux/s390x", "linux/ppc64le"] +# Return an array of Alpine platforms to use depending on the jdk passed as parameter +function "alpine_platforms" { + params = [jdk] + result = (equal(21, jdk) + ? ["linux/amd64", "linux/arm64"] + : ["linux/amd64"]) } -target "debian_jdk17" { - dockerfile = "debian/Dockerfile" +# Return an array of Debian platforms to use depending on the jdk passed as parameter +function "debian_platforms" { + params = [jdk] + result = (equal(17, jdk) + ? ["linux/amd64", "linux/arm64", "linux/ppc64le"] + : ["linux/amd64", "linux/arm64", "linux/ppc64le", "linux/s390x"]) +} + +target "alpine" { + matrix = { + jdk = [11, 17, 21] + } + name = "alpine_${jdk}" + dockerfile = "alpine/Dockerfile" context = "." args = { - JAVA_VERSION = JAVA17_VERSION - DEBIAN_RELEASE = DEBIAN_RELEASE + ALPINE_TAG = ALPINE_FULL_TAG + JAVA_VERSION = "${javaversion(jdk)}" } tags = [ - equal(ON_TAG, "true") ? "${REGISTRY}/${JENKINS_REPO}:${VERSION}-jdk17" : "", - "${REGISTRY}/${JENKINS_REPO}:bookworm-jdk17", - "${REGISTRY}/${JENKINS_REPO}:debian-jdk17", - "${REGISTRY}/${JENKINS_REPO}:jdk17", - "${REGISTRY}/${JENKINS_REPO}:latest-bookworm-jdk17", - "${REGISTRY}/${JENKINS_REPO}:latest-debian-jdk17", - "${REGISTRY}/${JENKINS_REPO}:latest-jdk17", + # If there is a tag, add versioned tags suffixed by the jdk + equal(ON_TAG, "true") ? "${REGISTRY}/${JENKINS_REPO}:${VERSION}-alpine-jdk${jdk}" : "", + equal(ON_TAG, "true") ? "${REGISTRY}/${JENKINS_REPO}:${VERSION}-alpine${ALPINE_SHORT_TAG}-jdk${jdk}" : "", + # If the jdk is the default one, add Alpine short tags + is_default_jdk(jdk) ? "${REGISTRY}/${JENKINS_REPO}:alpine" : "", + is_default_jdk(jdk) ? "${REGISTRY}/${JENKINS_REPO}:alpine${ALPINE_SHORT_TAG}" : "", + is_default_jdk(jdk) ? "${REGISTRY}/${JENKINS_REPO}:latest-alpine${ALPINE_SHORT_TAG}" : "", + "${REGISTRY}/${JENKINS_REPO}:alpine-jdk${jdk}", + "${REGISTRY}/${JENKINS_REPO}:latest-alpine-jdk${jdk}", + "${REGISTRY}/${JENKINS_REPO}:alpine${ALPINE_SHORT_TAG}-jdk${jdk}", + "${REGISTRY}/${JENKINS_REPO}:latest-alpine${ALPINE_SHORT_TAG}-jdk${jdk}", ] - platforms = ["linux/amd64", "linux/arm64", "linux/ppc64le"] + platforms = alpine_platforms(jdk) } -target "debian_jdk21" { +target "debian" { + matrix = { + jdk = [11, 17, 21] + } + name = "debian_${jdk}" dockerfile = "debian/Dockerfile" context = "." args = { - JAVA_VERSION = JAVA21_VERSION DEBIAN_RELEASE = DEBIAN_RELEASE + JAVA_VERSION = "${javaversion(jdk)}" } tags = [ - equal(ON_TAG, "true") ? "${REGISTRY}/${JENKINS_REPO}:${VERSION}-jdk21" : "", - "${REGISTRY}/${JENKINS_REPO}:bookworm-jdk21", - "${REGISTRY}/${JENKINS_REPO}:debian-jdk21", - "${REGISTRY}/${JENKINS_REPO}:jdk21", - "${REGISTRY}/${JENKINS_REPO}:latest-bookworm-jdk21", - "${REGISTRY}/${JENKINS_REPO}:latest-debian-jdk21", - "${REGISTRY}/${JENKINS_REPO}:latest-jdk21", + # If there is a tag, add versioned tag suffixed by the jdk + equal(ON_TAG, "true") ? "${REGISTRY}/${JENKINS_REPO}:${VERSION}-jdk${jdk}" : "", + # If there is a tag and if the jdk is the default one, add versioned short tag + equal(ON_TAG, "true") ? (is_default_jdk(jdk) ? "${REGISTRY}/${JENKINS_REPO}:${VERSION}" : "") : "", + # If the jdk is the default one, add latest short tag + is_default_jdk(jdk) ? "${REGISTRY}/${JENKINS_REPO}:latest" : "", + "${REGISTRY}/${JENKINS_REPO}:bookworm-jdk${jdk}", + "${REGISTRY}/${JENKINS_REPO}:debian-jdk${jdk}", + "${REGISTRY}/${JENKINS_REPO}:jdk${jdk}", + "${REGISTRY}/${JENKINS_REPO}:latest-bookworm-jdk${jdk}", + "${REGISTRY}/${JENKINS_REPO}:latest-debian-jdk${jdk}", + "${REGISTRY}/${JENKINS_REPO}:latest-jdk${jdk}", ] - platforms = ["linux/amd64", "linux/arm64", "linux/ppc64le", "linux/s390x"] + platforms = debian_platforms(jdk) } target "debian_jdk21-preview" { @@ -208,6 +175,7 @@ target "debian_jdk21-preview" { DEBIAN_RELEASE = DEBIAN_RELEASE } tags = [ + # If there is a tag, add the versioned tag suffixed by the jdk equal(ON_TAG, "true") ? "${REGISTRY}/${JENKINS_REPO}:${VERSION}-jdk21-preview" : "", "${REGISTRY}/${JENKINS_REPO}:bookworm-jdk21-preview", "${REGISTRY}/${JENKINS_REPO}:debian-jdk21-preview",