From 2f3d203d87f07f37564cd1abdc26f1767795191f Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Mon, 16 Aug 2021 21:00:17 +0200 Subject: [PATCH] feat(java): allow dynamic java install (#108) --- Dockerfile.bionic | 4 +-- src/usr/local/bin/install-buildpack | 1 + src/usr/local/buildpack/tools/java.sh | 45 ++++++++++++++++++++++----- src/usr/local/buildpack/util.sh | 2 +- test/java/Dockerfile | 41 +++++++++++++++++------- 5 files changed, 71 insertions(+), 22 deletions(-) diff --git a/Dockerfile.bionic b/Dockerfile.bionic index 5d57d1e815..9d16cd169a 100644 --- a/Dockerfile.bionic +++ b/Dockerfile.bionic @@ -42,8 +42,8 @@ RUN install-tool golang 1.16.7 # renovate: datasource=github-releases lookupName=helm/helm RUN install-tool helm v3.6.3 -# renovate: datasource=docker lookupName=openjdk versioning=docker -RUN install-tool java 11.0.12 +# renovate: datasource=adoptium-java +RUN install-tool java 11.0.12+7 # renovate: datasource=gradle-version lookupName=gradle versioning=gradle RUN install-tool gradle 7.1.1 diff --git a/src/usr/local/bin/install-buildpack b/src/usr/local/bin/install-buildpack index 9bf782ab75..418a0b1e8d 100755 --- a/src/usr/local/bin/install-buildpack +++ b/src/usr/local/bin/install-buildpack @@ -89,6 +89,7 @@ apt_install \ curl \ dumb-init \ gnupg \ + jq \ openssh-client \ unzip \ xz-utils \ diff --git a/src/usr/local/buildpack/tools/java.sh b/src/usr/local/buildpack/tools/java.sh index 7bc55a24ca..8cedf39569 100644 --- a/src/usr/local/buildpack/tools/java.sh +++ b/src/usr/local/buildpack/tools/java.sh @@ -2,16 +2,47 @@ set -e -require_root check_semver $TOOL_VERSION -VERSION_CODENAME=$(. /etc/os-release && echo ${VERSION_CODENAME}) +if [[ ! "${MAJOR}" || ! "${MINOR}" || ! "${PATCH}" ]]; then + echo Invalid version: ${TOOL_VERSION} + exit 1 +fi -echo "deb http://ppa.launchpad.net/openjdk-r/ppa/ubuntu ${VERSION_CODENAME} main" | tee /etc/apt/sources.list.d/java.list -curl -sSL \ - 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xDA1A4A13543B466853BAF164EB9B1D8886F44E2A' \ - | apt-key add - +tool_path=$(find_tool_path) -apt_install openjdk-${MAJOR}-jdk-headless +function update_env () { + reset_tool_env + export_tool_env JAVA_HOME "${1}" + export_tool_path "${1}/bin" +} + +if [[ -z "${tool_path}" ]]; then + INSTALL_DIR=$(get_install_dir) + base_path=${INSTALL_DIR}/${TOOL_NAME} + tool_path=${base_path}/${TOOL_VERSION} + + mkdir -p ${tool_path} + + file=/tmp/java.tgz + + ARCH=x64 + URL=https://api.adoptium.net/v3/assets/version + API_ARGS='heap_size=normal&image_type=jdk&os=linux&page=0&page_size=1&project=jdk&vendor=adoptium' + + BIN_URL=$(curl -sSLf -H 'accept: application/json' "${URL}/${TOOL_VERSION}?architecture=${ARCH}&${API_ARGS}" \ + | jq --raw-output '.[0].binaries[0].package.link') + + curl -sSfLo ${file} ${BIN_URL} + tar --strip 1 -C ${tool_path} -xf ${file} + rm ${file} + + update_env ${tool_path} + + shell_wrapper java +else + echo "Already installed, resetting env" + update_env ${tool_path} +fi java -version diff --git a/src/usr/local/buildpack/util.sh b/src/usr/local/buildpack/util.sh index b6d210513a..a45e81fa15 100644 --- a/src/usr/local/buildpack/util.sh +++ b/src/usr/local/buildpack/util.sh @@ -106,7 +106,7 @@ function check_command () { } -SEMVER_REGEX="^(0|[1-9][0-9]*)(\.(0|[1-9][0-9]*))?(\.(0|[1-9][0-9]*))?([a-z-].*)?$" +SEMVER_REGEX="^(0|[1-9][0-9]*)(\.(0|[1-9][0-9]*))?(\.(0|[1-9][0-9]*))?(\+[0-9]+)?([a-z-].*)?$" function check_semver () { if [[ ! "${1}" =~ ${SEMVER_REGEX} ]]; then diff --git a/test/java/Dockerfile b/test/java/Dockerfile index 9a89929f84..2d97db638e 100644 --- a/test/java/Dockerfile +++ b/test/java/Dockerfile @@ -1,11 +1,5 @@ ARG IMAGE=containerbase/buildpack -FROM ${IMAGE} as build - -ARG APT_HTTP_PROXY - -# TODO: only lts -# renovate: datasource=docker lookupName=openjdk versioning=docker -RUN install-tool java 11.0.12 +FROM ${IMAGE} as base RUN touch /.dummy @@ -13,6 +7,17 @@ WORKDIR /tmp COPY --chown=1000:0 test test +#-------------------------------------- +# build: Java LTS base +#-------------------------------------- +FROM base as build + +ARG APT_HTTP_PROXY + +# TODO: only lts +# renovate: datasource=adoptium-java +RUN install-tool java 11.0.12+7 + #-------------------------------------- # test: gradle 6 #-------------------------------------- @@ -66,17 +71,29 @@ FROM build as testc ARG APT_HTTP_PROXY # need to stay old -RUN install-tool java 8 +# renovate: datasource=adoptium-java +RUN install-tool java 8.0.302+8 #-------------------------------------- -# test: java 16 +# test: java 16 (non-root) #-------------------------------------- -FROM build as testd +FROM base as testd ARG APT_HTTP_PROXY -# renovate: datasource=docker lookupName=openjdk versioning=docker -RUN install-tool java 16.0.2 +USER 1000 + +# renovate: datasource=adoptium-java +ARG JAVA_VERSION=16.0.2+7 +RUN install-tool java + +# renovate: datasource=gradle-version lookupName=gradle versioning=gradle +RUN install-tool gradle 7.1.1 + +RUN gradle --version + +# fail if java version mismatch +RUN gradle --version | grep "${JAVA_VERSION}" #-------------------------------------- # test: maven