#!/usr/bin/env bash PLUGIN_HOME=$(dirname $(dirname "${0}")) CACHE_DIR="${TMPDIR:-/tmp/}asdf-java.cache" mkdir -p ${CACHE_DIR} case $(uname -s) in Darwin) OS="mac" SHA256SUM="gsha256sum" STAT="/usr/bin/stat -f %c ${CACHE_DIR}/*" TEMP_DIR=$(/usr/bin/mktemp -dt asdf-java) ;; Linux) OS="linux" SHA256SUM="sha256sum" STAT="stat -c %Z ${CACHE_DIR}/*" TEMP_DIR=$(mktemp -dp /tmp asdf-java.XXXXXXXX) ;; esac case ${ASDF_INSTALL_VERSION} in *_large-heap) RELEASE=${ASDF_INSTALL_VERSION%%_large-heap} HEAP_SIZE="large" ;; *) RELEASE=${ASDF_INSTALL_VERSION} HEAP_SIZE="normal" ;; esac case $(uname -m) in x86_64) ARCHITECTURE="x64" ;; esac trap "rm -rf ${TEMP_DIR}" EXIT function check-jq() { bold=`tput bold` nc=`tput sgr0` USAGE="Install ${bold}jq${nc} to continue. Aborting." if ! [ -x "$(command -v jq)" ]; then printf "$USAGE" >&2 exit 1; fi } function retrieve-adoptopenjdk() { URLS=("https://api.adoptopenjdk.net/v2/info/releases/{openjdk8}?type=jdk" "https://api.adoptopenjdk.net/v2/info/releases/{openjdk9}?type=jdk" "https://api.adoptopenjdk.net/v2/info/releases/{openjdk10}?type=jdk" "https://api.adoptopenjdk.net/v2/info/releases/{openjdk11}?type=jdk" "https://api.adoptopenjdk.net/v2/info/releases/{openjdk12}?type=jdk" "https://api.adoptopenjdk.net/v2/info/releases/{openjdk13}?type=jdk") if [[ -z "$(ls -A ${CACHE_DIR}/adopt-*.json)" ]] || [[ $(set -- $(${STAT}) && echo ${1}) -le $(( `date +%s` - 3600)) ]] then for url in "${URLS[@]}" do curl -s -L ${url} -# -w "%{filename_effective}\n" -o "${CACHE_DIR}/adopt-#1.json" 2>&1 >> /dev/null done for i in `ls ${CACHE_DIR}/adopt-*.json` do jq '(.[].release_name) |= sub("jdk-";"adopt-openjdk-") | (.[].release_name) |= sub("^jdk";"adopt-openjdk-")' \ ${i} > ${i}.temp mv ${i}.temp ${i} done fi } function retrieve-sapmachine() { args=('-s' '-f') if [ -n "$GITHUB_API_TOKEN" ]; then args+=('-H' "Authorization: token $GITHUB_API_TOKEN") fi local cache_file="${CACHE_DIR}/sapmachine.json" local filter='[ .[] | select(.prerelease == false and .draft == false) | { release_name: .name, binaries: [ .assets[] | select(.content_type == "application/x-tar") | select(.name | startswith("sapmachine-jdk")) | select(.name | endswith("linux-x64_bin.tar.gz") or endswith("osx-x64_bin.tar.gz")) | { binary_link: .browser_download_url, checksum_link: (.browser_download_url | sub("tar\\.gz$"; "sha256.txt")), os: (if .name | "osx-x64" then "mac" else "linux" end), architecture: "x64", openjdk_impl: "hotspot", heap_size: "normal" } ]} ]' if [[ -z "$(ls -A ${cache_file})" ]] || [[ $(set -- $(${STAT}) && echo ${1}) -le $(( `date +%s` - 3600)) ]] then curl "${args[@]}" -L 'https://api.github.com/repos/SAP/SapMachine/releases' -o "${cache_file}" jq "${filter}" "${cache_file}" > "${cache_file}.temp" mv "${cache_file}.temp" "${cache_file}" fi } function all-json() { check-jq jq -s 'add' ${CACHE_DIR}/*.json ${PLUGIN_HOME}/corretto/corretto.json ${PLUGIN_HOME}/zulu/zulu.json } function list-all() { check-jq retrieve-adoptopenjdk retrieve-sapmachine local hotspot="map(select(.binaries[].openjdk_impl == \"hotspot\")) \ | map(.release_name) | unique[]" local openj9_normal_heap="map(select(.binaries[].heap_size == \"normal\")) \ | map(.release_name) | unique[] | select(contains(\"openj9\"))" local openj9_large_heap="map(select(.binaries[].heap_size == \"large\")) \ | map(.release_name + \"_large-heap\") | unique[] | select(contains(\"openj9\"))" echo $(all-json | jq -r "${hotspot}" ; all-json | jq -r "${openj9_normal_heap}" ; all-json | jq -r "${openj9_large_heap}") } function list-legacy-filenames() { echo ".java-version" } function install { check-jq retrieve-adoptopenjdk retrieve-sapmachine local select_release="map(select(.release_name==\"${RELEASE}\")) | unique[] | .binaries[]" local select_binary="select(.os==\"${OS}\" and .architecture==\"${ARCHITECTURE}\" and .heap_size==\"${HEAP_SIZE}\")" local binary=$(all-json | jq "$select_release | $select_binary") local binary_link=$(set -- $(echo ${binary} | jq -r ".binary_link") ; echo ${1}) local checksum_link=$(set -- $(echo ${binary} | jq -r ".checksum_link") ; echo ${1}) cd ${TEMP_DIR} curl -LO -# -w "%{filename_effective}\n" ${binary_link} if [ $? -ne 0 ] then exit 1 fi curl -LO -# -w "%{filename_effective}\n" ${checksum_link} if [ $? -ne 0 ] then exit 1 fi ${SHA256SUM} -c $(basename ${checksum_link}) tar zxf $(basename ${binary_link}) dir=$(set -- $(ls -d */) ; echo ${1}) cd ${dir} mkdir -p ${ASDF_INSTALL_PATH} case ${OS} in mac) case ${RELEASE} in azul*) mv * ${ASDF_INSTALL_PATH} ;; *) mv Contents/Home/* ${ASDF_INSTALL_PATH} ;; esac ;; *) mv * ${ASDF_INSTALL_PATH} ;; esac } case `basename ${0}` in list-all) list-all ;; list-legacy-filenames) list-legacy-filenames ;; install) install ;; esac