Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(jdk21) Use Liberica official build for linux/arm/v7 #778

Closed
wants to merge 9 commits into from
41 changes: 19 additions & 22 deletions debian/preview/Dockerfile → debian/liberica/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,8 @@ ARG TARGETPLATFORM

SHELL ["/bin/bash", "-o", "pipefail", "-c"]

## Example of preview (EA) jdk21 JAVA_VERSION values:
# 21+35 (note: only one number before the "+")
# 21.0.1+12
## Example of preview (EA) release download link:
# https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21%2B35-ea-beta/OpenJDK21U-jdk_x64_linux_hotspot_ea_21-0-35.tar.gz
# https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.1%2B12-ea-beta/OpenJDK21U-jdk_x64_alpine-linux_hotspot_ea_21-0-1-12.tar.gz
## Example of Liberica JDK21 download URL
# https://github.com/bell-sw/Liberica/releases/download/21.0.2%2B14/bellsoft-jdk21.0.2+14-linux-arm32-vfp-hflt.tar.gz

# hadolint ignore=DL3008
RUN set -x; apt-get update \
Expand All @@ -21,23 +17,23 @@ RUN set -x; apt-get update \
&& DASHED_JAVA_VERSION=$(echo "$JAVA_VERSION" | sed -e 's/\./-/g' -e 's/+/-/' -e 's/21-35/21-0-35/') \
&& JAVA_MAJOR_VERSION=$(echo "$JAVA_VERSION" | cut -d'+' -f1 | cut -d'.' -f1) \
&& ENCODED_JAVA_VERSION=$(echo "$JAVA_VERSION" | jq "@uri" -jRr) \
&& CONVERTED_ARCH=$(arch | sed -e 's/x86_64/x64/' -e 's/armv7l/arm/') \
&& wget --quiet https://github.com/adoptium/temurin"${JAVA_MAJOR_VERSION}"-binaries/releases/download/jdk-"${ENCODED_JAVA_VERSION}"-ea-beta/OpenJDK"${JAVA_MAJOR_VERSION}"U-jdk_"${CONVERTED_ARCH}"_linux_hotspot_ea_"${DASHED_JAVA_VERSION}".tar.gz -O /tmp/jdk.tar.gz \
&& TRIMMED_JAVA_VERSION=$(echo "$JAVA_VERSION" | cut -d'+' -f1) \
&& echo "TRIMMED_JAVA_VERSION=$TRIMMED_JAVA_VERSION" > /tmp/env_var \
# Load the environment variable from the file we just created
&& echo 'source /tmp/env_var' >> ~/.bashrc \
&& CONVERTED_ARCH=$(arch | sed -e 's/x86_64/x64/' -e 's/armv7l/arm32/') \
&& wget --quiet https://github.com/bell-sw/Liberica/releases/download/"${ENCODED_JAVA_VERSION}"/bellsoft-jdk"${JAVA_VERSION}"-linux-"${CONVERTED_ARCH}"-vfp-hflt.tar.gz -O /tmp/jdk.tar.gz \
&& tar -xzf /tmp/jdk.tar.gz -C /opt/ \
&& rm -f /tmp/jdk.tar.gz

ENV PATH=/opt/jdk-${JAVA_VERSION}/bin:$PATH

RUN if test "${TARGETPLATFORM}" != 'linux/arm/v7'; then \
jlink \
--add-modules ALL-MODULE-PATH \
--no-man-pages \
--compress=zip-6 \
--output /javaruntime; \
# It is acceptable to have a larger image in arm/v7 (arm 32 bits) environment.
# Because jlink fails with the error "jmods: Value too large for defined data type" error.
&& rm -f /tmp/jdk.tar.gz \
&& source /tmp/env_var \
&& if test "${TARGETPLATFORM}" != 'linux/arm/v7'; then \
jlink \
--add-modules ALL-MODULE-PATH \
--no-man-pages \
--compress=zip-6 \
--output /javaruntime; \
else \
cp -r "/opt/jdk-${JAVA_VERSION}" /javaruntime; \
cp -r "/opt/jdk-${TRIMMED_JAVA_VERSION}" /javaruntime; \
fi

## Agent image target
Expand Down Expand Up @@ -99,12 +95,13 @@ LABEL \
org.opencontainers.image.source="https://github.com/jenkinsci/docker-agent" \
org.opencontainers.image.licenses="MIT"

## Inbound Agent image target
# Inbound Agent image target
FROM agent AS inbound-agent

ARG user=jenkins

USER root
RUN find / -name jenkins-agent
COPY ../../jenkins-agent /usr/local/bin/jenkins-agent
RUN chmod +x /usr/local/bin/jenkins-agent &&\
ln -s /usr/local/bin/jenkins-agent /usr/local/bin/jenkins-slave
Expand Down
30 changes: 15 additions & 15 deletions docker-bake.hcl
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ group "linux" {
"debian_jdk11",
"debian_jdk17",
"debian_jdk21",
"debian_jdk21_preview"
"debian_jdk21_liberica"
]
}

Expand All @@ -20,7 +20,7 @@ group "linux-agent-only" {
"agent_debian_jdk11",
"agent_debian_jdk17",
"agent_debian_jdk21",
"agent_debian_jdk21_preview"
"agent_debian_jdk21_liberica"
]
}

Expand All @@ -32,7 +32,7 @@ group "linux-inbound-agent-only" {
"inbound-agent_debian_jdk11",
"inbound-agent_debian_jdk17",
"inbound-agent_debian_jdk21",
"inbound-agent_debian_jdk21_preview"
"inbound-agent_debian_jdk21_liberica"
]
}

Expand All @@ -49,7 +49,7 @@ group "linux-arm32" {
targets = [
"debian_jdk11",
"debian_jdk17",
"debian_jdk21_preview"
"debian_jdk21_liberica"
]
}

Expand Down Expand Up @@ -120,8 +120,8 @@ variable "JAVA21_VERSION" {
default = "21.0.2_13"
}

variable "JAVA21_PREVIEW_VERSION" {
default = "21.0.1+12"
variable "JAVA21_LIBERICA_VERSION" {
default = "21.0.2+14"
}

function "orgrepo" {
Expand Down Expand Up @@ -297,25 +297,25 @@ target "debian_jdk21" {
platforms = ["linux/amd64", "linux/arm64", "linux/ppc64le", "linux/s390x"]
}

target "debian_jdk21_preview" {
target "debian_jdk21_liberica" {
matrix = {
type = ["agent", "inbound-agent"]
}
name = "${type}_debian_jdk21_preview"
name = "${type}_debian_jdk21_liberica"
target = type
dockerfile = "debian/preview/Dockerfile"
dockerfile = "debian/liberica/Dockerfile"
context = "."
args = {
JAVA_VERSION = JAVA21_PREVIEW_VERSION
JAVA_VERSION = JAVA21_LIBERICA_VERSION
VERSION = REMOTING_VERSION
DEBIAN_RELEASE = DEBIAN_RELEASE
}
tags = [
equal(ON_TAG, "true") ? "${REGISTRY}/${orgrepo(type)}:${REMOTING_VERSION}-${BUILD_NUMBER}-jdk21-preview" : "",
"${REGISTRY}/${orgrepo(type)}:bookworm-jdk21-preview",
"${REGISTRY}/${orgrepo(type)}:jdk21-preview",
"${REGISTRY}/${orgrepo(type)}:latest-bookworm-jdk21-preview",
"${REGISTRY}/${orgrepo(type)}:latest-jdk21-preview",
equal(ON_TAG, "true") ? "${REGISTRY}/${orgrepo(type)}:${REMOTING_VERSION}-${BUILD_NUMBER}-jdk21-liberica" : "",
"${REGISTRY}/${orgrepo(type)}:bookworm-jdk21-liberica",
"${REGISTRY}/${orgrepo(type)}:jdk21-liberica",
"${REGISTRY}/${orgrepo(type)}:latest-bookworm-jdk21-liberica",
"${REGISTRY}/${orgrepo(type)}:latest-jdk21-liberica",
]
platforms = ["linux/arm/v7"]
}
82 changes: 0 additions & 82 deletions updatecli/scripts/check-jdk.sh

This file was deleted.

41 changes: 41 additions & 0 deletions updatecli/scripts/check-liberica-jdk.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#!/bin/bash
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
21.*)
ENCODED_JAVA_VERSION=$(echo "$jdk_version" | jq "@uri" -jRr)
CONVERTED_ARCH=$(arch | sed -e 's/x86_64/x64/' -e 's/armv7l/arm32/')
echo "https://github.com/bell-sw/Liberica/releases/download/${ENCODED_JAVA_VERSION}/bellsoft-jdk${jdk_version}-linux-${CONVERTED_ARCH}-vfp-hflt"
return 0;;
*)
echo "ERROR: unsupported JDK version (${jdk_version}).";
exit 1;;
esac
}

case "${1}" in
21.*)
platforms=("arm32_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."
58 changes: 58 additions & 0 deletions updatecli/updatecli.d/jdk21-arm32.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
---
name: Bump JDK21 Liberica version for all arm32 Linux images

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 }}"
liberica-binaries:
kind: "github"
spec:
user: "{{ .github.user }}"
email: "{{ .github.email }}"
owner: "bell-sw"
repository: "Liberica"
token: '{{ requiredEnv .github.token }}'
branch: "master"

sources:
getLatestJDK21LibericaVersion:
name: Get the latest Liberica JDK21 version
kind: gittag
scmid: liberica-binaries
spec:
versionfilter:
kind: regex
pattern: "21.*"

conditions:
checkIfReleaseIsAvailable:
kind: shell
spec:
command: bash ./updatecli/scripts/check-liberica-jdk.sh # source input value passed as argument

targets:
setJDK21LibericaVersionDockerBake:
name: "Bump Liberica JDK21 version for Linux arm32 images in the docker-bake.hcl file"
kind: hcl
spec:
file: docker-bake.hcl
path: variable.JAVA21_LIBERICA_VERSION.default
scmid: default

actions:
default:
kind: github/pullrequest
scmid: default
title: Bump arm32 Liberica JDK21 version to {{ source "getLatestJDK21LibericaVersion" }}
spec:
labels:
- dependencies
- jdk21-liberica
63 changes: 0 additions & 63 deletions updatecli/updatecli.d/jdk21-preview.yaml

This file was deleted.