From d79fded2851c09c356775b843b1b8df604339b89 Mon Sep 17 00:00:00 2001 From: gounthar Date: Fri, 8 Sep 2023 12:06:12 +0200 Subject: [PATCH 1/2] feat(dependencies): Tracks JDK21 ea releases. --- updatecli/scripts/check-jdk.sh | 73 ++++++++++++++++++++++++++++++++ updatecli/updatecli.d/jdk21.yaml | 60 ++++++++++++++++++++++++++ 2 files changed, 133 insertions(+) create mode 100644 updatecli/scripts/check-jdk.sh create mode 100644 updatecli/updatecli.d/jdk21.yaml diff --git a/updatecli/scripts/check-jdk.sh b/updatecli/scripts/check-jdk.sh new file mode 100644 index 000000000..003f49178 --- /dev/null +++ b/updatecli/scripts/check-jdk.sh @@ -0,0 +1,73 @@ +#!/bin/bash +# This script checks that the provided JDK version has all the required binaries available for downloads +# as sometimes, the tag for adoptium is published immeidatly while binaries are published later. +## +# The source of truth is the ERB template stored at the location dist/profile/templates/jenkinscontroller/casc/tools.yaml.erb +# It lists all the installations used as "Jenkins Tools" by the Jenkins controllers of the infrastructure +## +set -eu -o pipefail + +command -v curl >/dev/null 2>&1 || { echo "ERROR: curl command not found. Exiting."; exit 1; } + +function get_jdk_download_url() { + jdk_version="${1}" + platform="${2}" + case "${jdk_version}" in + 8*) + ## JDK8 does not have the carret ('-') in their archive names + echo "https://github.com/adoptium/temurin8-binaries/releases/download/jdk${jdk_version}/OpenJDK8U-jdk_${platform}_hotspot_${jdk_version//-}"; + return 0;; + 11*) + ## JDK11 URLs have an underscore ('_') instead of a plus ('+') in their archive names + echo "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-${jdk_version}/OpenJDK11U-jdk_${platform}_hotspot_${jdk_version//+/_}"; + return 0;; + 17*) + ## JDK17 URLs have an underscore ('_') instead of a plus ('+') in their archive names + echo "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-${jdk_version}/OpenJDK17U-jdk_${platform}_hotspot_${jdk_version//+/_}"; + return 0;; + 19*) + ## JDK19 URLs have an underscore ('_') instead of a plus ('+') in their archive names + echo "https://github.com/adoptium/temurin19-binaries/releases/download/jdk-${jdk_version}/OpenJDK19U-jdk_${platform}_hotspot_${jdk_version//+/_}"; + return 0;; + 21*) + # JDK version (21+35-ea-beta) + ## https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21%2B35-ea-beta/OpenJDK21U-jdk_aarch64_linux_hotspot_ea_21-0-35.tar.gz + urlEncodedJDKVersion="${jdk_version//+/%2B}" + echo "https://github.com/adoptium/temurin21-binaries/releases/download/jdk-${urlEncodedJDKVersion}-ea-beta/OpenJDK21U-jdk_${platform}_hotspot_ea_21-0-$(echo ${jdk_version} | cut -d '+' -f 2 | cut -d '-' -f 1)" + return 0;; + *) + echo "ERROR: unsupported JDK version (${jdk_version})."; + exit 1;; + esac +} + +case "${1}" in + 8u*) + # No s390x support for JDK8: $platforms is kept as default + platforms=("x64_linux" "x64_windows" "aarch64_linux");; + 11.*) + platforms=("x64_linux" "x64_windows" "aarch64_linux" "s390x_linux");; + 17.*+*) + platforms=("x64_linux" "x64_windows" "aarch64_linux" "s390x_linux");; + 19.*+*) + platforms=("x64_linux" "x64_windows" "aarch64_linux" "s390x_linux");; + 21*+*) + platforms=("x64_linux" "x64_windows" "aarch64_linux" "s390x_linux");; + *) + echo "ERROR: unsupported JDK version (${1})."; + exit 1;; +esac + +for platform in "${platforms[@]}" +do + url_to_check="$(get_jdk_download_url "${1}" "${platform}")" + if [[ "${platform}" == *windows* ]] + then + url_to_check+=".zip" + else + url_to_check+=".tar.gz" + fi + >&2 curl --connect-timeout 5 --location --head --fail --silent "${url_to_check}" || { echo "ERROR: the following URL is NOT available: ${url_to_check}."; exit 1; } +done + +echo "OK: all JDK URL for version=${1} are available." diff --git a/updatecli/updatecli.d/jdk21.yaml b/updatecli/updatecli.d/jdk21.yaml new file mode 100644 index 000000000..e1a8bd0da --- /dev/null +++ b/updatecli/updatecli.d/jdk21.yaml @@ -0,0 +1,60 @@ +--- +name: Bump JDK21 version (Jenkins tools) on all controllers + +scms: + default: + kind: github + spec: + user: "{{ .github.user }}" + email: "{{ .github.email }}" + owner: "{{ .github.owner }}" + repository: "{{ .github.repository }}" + token: "{{ requiredEnv .github.token }}" + username: "{{ .github.username }}" + branch: "{{ .github.branch }}" + temurin21-binaries: + kind: "github" + spec: + user: "{{ .github.user }}" + email: "{{ .github.email }}" + owner: "adoptium" + repository: "temurin21-binaries" + token: '{{ requiredEnv .github.token }}' + branch: "main" + +sources: + getLatestJDK21EAVersion: + name: Get the latest Adoptium JDK21 version + kind: gittag + scmid: temurin21-binaries + spec: + versionfilter: + kind: regex + pattern: ".*-ea-.*" + transformers: + - trimprefix: "jdk-" + - trimsuffix: "-ea-beta" + +conditions: + checkIfReleaseIsAvailable: + kind: shell + spec: + command: bash ./updatecli/scripts/check-jdk.sh # source input value passed as argument + +targets: + setJDK21Version: + name: "Bump JDK21 version for Linux images in the docker-bake.hcl file" + kind: hcl + spec: + file: docker-bake.hcl + path: variable.JAVA21_VERSION.default + scmid: default + +actions: + default: + kind: github/pullrequest + scmid: default + title: Bump JDK21 version (Jenkins default tools) to {{ source "getLatestJDK21EAVersion" }} + spec: + labels: + - dependencies From 1391a4a4b2ac68f0ca4f10566b500309c0d06649 Mon Sep 17 00:00:00 2001 From: gounthar Date: Fri, 8 Sep 2023 12:18:22 +0200 Subject: [PATCH 2/2] fix(updatecli): Fixes title. --- updatecli/updatecli.d/jdk21.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/updatecli/updatecli.d/jdk21.yaml b/updatecli/updatecli.d/jdk21.yaml index e1a8bd0da..43928b7a9 100644 --- a/updatecli/updatecli.d/jdk21.yaml +++ b/updatecli/updatecli.d/jdk21.yaml @@ -1,5 +1,5 @@ --- -name: Bump JDK21 version (Jenkins tools) on all controllers +name: Bump JDK21 version for all Linux images scms: default: @@ -54,7 +54,7 @@ actions: default: kind: github/pullrequest scmid: default - title: Bump JDK21 version (Jenkins default tools) to {{ source "getLatestJDK21EAVersion" }} + title: Bump JDK21 version to {{ source "getLatestJDK21EAVersion" }} spec: labels: - dependencies