mirror of
https://github.com/halcyon/asdf-java.git
synced 2024-10-06 07:42:09 +08:00
127 lines
3.4 KiB
Bash
Executable File
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
|