#!/usr/bin/env bash set -euo pipefail echo "[java] starting java devcontainer install" # -------------------------------------------------- # Config # -------------------------------------------------- RUNTIME_ROOT="/opt/zlh/runtime/java" ARTIFACT_ROOT="/opt/zlh/devcontainer/java" VERSION="${RUNTIME_VERSION:-17}" SRC_DIR="${ARTIFACT_ROOT}/${VERSION}" DEST_DIR="${RUNTIME_ROOT}/${VERSION}" SYMLINK="${RUNTIME_ROOT}/current" # -------------------------------------------------- # Guards # -------------------------------------------------- if [ ! -d "${SRC_DIR}" ]; then echo "[java][ERROR] artifact directory not found: ${SRC_DIR}" exit 1 fi if [ -x "${DEST_DIR}/bin/java" ]; then echo "[java] java ${VERSION} already installed" else ARCHIVE="$(ls ${SRC_DIR}/*.tar.gz 2>/dev/null | head -n1)" if [ -z "${ARCHIVE}" ]; then echo "[java][ERROR] no Java archive found in ${SRC_DIR}" exit 1 fi echo "[java] installing java ${VERSION}" mkdir -p "${DEST_DIR}" TMP_DIR="$(mktemp -d)" tar -xzf "${ARCHIVE}" -C "${TMP_DIR}" # Java archives contain a single root dir EXTRACTED_DIR="$(find ${TMP_DIR} -maxdepth 1 -type d -name 'jdk*' | head -n1)" if [ -z "${EXTRACTED_DIR}" ]; then echo "[java][ERROR] failed to locate extracted jdk directory" exit 1 fi mv "${EXTRACTED_DIR}"/* "${DEST_DIR}/" rm -rf "${TMP_DIR}" fi # -------------------------------------------------- # Symlink current # -------------------------------------------------- ln -sfn "${DEST_DIR}" "${SYMLINK}" # -------------------------------------------------- # Verify # -------------------------------------------------- "${SYMLINK}/bin/java" -version echo "[java] java ${VERSION} install complete"