asdf-java/bin/functions
2020-06-24 20:37:09 -04:00

127 lines
3.4 KiB
Bash
Executable File

#!/usr/bin/env bash
CACHE_DIR="${TMPDIR:-/tmp}/asdf-java.cache"
if [ ! -d "${CACHE_DIR}" ]
then
mkdir -p "${CACHE_DIR}"
fi
KERNEL_NAME="$(uname -s)"
case "${KERNEL_NAME}" in
Darwin)
OS="macosx"
SHA256SUM="gsha256sum"
STAT_OPTS=('-f' '%c')
TEMP_DIR=$(/usr/bin/mktemp -dt asdf-java)
;;
Linux)
OS="linux"
SHA256SUM="sha256sum"
STAT_OPTS=('-c' '%Z')
TEMP_DIR=$(mktemp -dp /tmp asdf-java.XXXXXXXX)
;;
*) echo "Unknown operating system: ${KERNEL_NAME}"
exit 1
esac
trap 'test -d "${TEMP_DIR}" && rm -rf "${TEMP_DIR}"' EXIT
MACHINE="$(uname -m)"
case "${MACHINE}" in
x86_64) ARCHITECTURE="x86_64" ;;
*) echo "Unknown machine architecture: ${MACHINE}"
exit 1
esac
function check-unzip() {
USAGE="Install unzip to continue. Aborting."
if ! [ -x "$(command -v unzip)" ]; then
echo "${USAGE}" >&2
exit 1;
fi
}
function retrieve-release-data() {
local cache_file="${CACHE_DIR}/releases.tsv"
# shellcheck disable=SC2046
if [[ ! -r "${cache_file}" ]] || (( $(stat "${STAT_OPTS[@]}" "${cache_file}") <= $(date +%s) - 3600 )) ; then
# TODO: Replace before merging
#curl -s -f --compressed -L "https://raw.githubusercontent.com/halcyon/asdf-java/master/data/jdk-${OS}-${ARCHITECTURE}.tsv" -o "${cache_file}"
curl -s -f --compressed -L "https://raw.githubusercontent.com/joschi/asdf-java/java-metadata/data/jdk-${OS}-${ARCHITECTURE}.tsv" -o "${cache_file}"
fi
}
function list-all() {
retrieve-release-data
cut -d $'\t' -f 1 "${CACHE_DIR}/releases.tsv" | uniq | tr '\n' ' '
}
function list-legacy-filenames() {
echo ".java-version"
}
function install {
local release_data package_link package_filename checksum
local -a dirs
retrieve-release-data
release_data=$(grep "^${ASDF_INSTALL_VERSION} " "${CACHE_DIR}/releases.tsv" | tail -n 1)
if [[ -z "${release_data}" ]]; then
echo "Unknown release: ${ASDF_INSTALL_VERSION}"
exit 1
fi
package_filename=$(cut -d $'\t' -f 2 <<<"${release_data}")
package_link=$(cut -d $'\t' -f 3 <<<"${release_data}")
checksum=$(cut -d $'\t' -f 4 <<<"${release_data}")
if [[ "${package_filename}" =~ "zip$" ]]; then
check-unzip
fi
cd "${TEMP_DIR}" || return 1
if ! curl -LO -# -w "${package_filename}\n" "${package_link}"; then
exit 1
fi
${SHA256SUM} -c <<<"${checksum} ${package_filename}"
case "${package_filename}" in
*zip) unzip "${package_filename}"
;;
*tar.gz) tar xf "${package_filename}"
;;
*) echo "Cannot extract ${package_filename}"
exit 1
;;
esac
read -r -a dirs <<<"$(ls -d ./*/)"
cd "${dirs[0]}" || return 1
if [ ! -d "${ASDF_INSTALL_PATH}" ]; then
mkdir -p "${ASDF_INSTALL_PATH}"
fi
case ${OS} in
macosx)
case ${ASDF_INSTALL_VERSION} in
zulu*) mv ./* "${ASDF_INSTALL_PATH}" ;;
liberica*) 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