From e59bc1b26d9a010845cc7cf54c71f01386f697b2 Mon Sep 17 00:00:00 2001 From: Svetlozar Argirov Date: Mon, 13 Jan 2025 15:36:03 +0200 Subject: [PATCH 1/4] Add support for JetBrainsRuntime --- bin/jbr.bash | 144 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100755 bin/jbr.bash diff --git a/bin/jbr.bash b/bin/jbr.bash new file mode 100755 index 00000000000..a4c405c2171 --- /dev/null +++ b/bin/jbr.bash @@ -0,0 +1,144 @@ +#!/usr/bin/env bash +set -e +set -Euo pipefail + +TEMP_DIR=$(mktemp -d) +trap 'rm -rf ${TEMP_DIR}' EXIT + +if [[ "$#" -lt 2 ]] +then + echo "Usage: ${0} metadata-directory checksum-directory" + exit 1 +fi + +# shellcheck source=bin/functions.bash +source "$(dirname "${0}")/functions.bash" + +VENDOR='jetbrains' +METADATA_DIR="${1}/${VENDOR}" +CHECKSUM_DIR="${2}/${VENDOR}" + +ensure_directory "${METADATA_DIR}" +ensure_directory "${CHECKSUM_DIR}" + + +function download { + local tag_name="${1}" + local asset_name="${2}" + local url="${3}" + local release_type="${4}" + local description="${5}" + local filename="${asset_name}" + + local metadata_file="${METADATA_DIR}/${filename}.json" + local archive="${TEMP_DIR}/${filename}" + + echo "asset ${asset_name} : |${description}|" + + if [[ -f "${metadata_file}" ]] + then + echo "Skipping ${filename}" + elif [[ "${filename}" =~ (tar\.gz|zip|pkg)$ ]] + then + download_file "${url}" "${archive}" || return 1 + + local regex='s/^jbr(sdk)?(?:_\w+)?-([0-9\+.]{1,})-(linux-musl|linux|osx|macos|windows)-(aarch64|x64|x86)(?:-\w+)?-(b[0-9\+.]{1,})(?:_\w+)?\.(tar\.gz|zip|pkg)$/ARCH="$4" OS="$3" VERSION="$2$5" JAVA_VERSION="$3" IMAGE_TYPE="$1" EXT="$6"/g' + + local VERSION="" + local JAVA_VERSION="" + local RELEASE_TYPE="$release_type" + local OS="" + local ARCH="" + local EXT="" + local FEATURES="" + local IMAGE_TYPE="" + + # Parse meta-data from file name + eval "$(perl -pe "${regex}" <<< "${asset_name}")" + + + if [[ -z "${IMAGE_TYPE}" ]] + then + IMAGE_TYPE='jre' + else + IMAGE_TYPE='jdk' + fi + + if [[ "${description}" =~ "fastdebug" ]] + then + FEATURES="$FEATURES fastdebug" + fi + + if [[ "${description}" =~ "debug symbols" ]] + then + FEATURES="$FEATURES debug" + fi + + if [[ "${description}" =~ "FreeType" ]] + then + FEATURES="$FEATURES freetype" + fi + + if [[ "${description}" =~ "JCEF" ]] + then + FEATURES="$FEATURES jcef" + fi + + if [[ "${OS}" = "linux-musl" ]] + then + FEATURES="$FEATURES musl" + OS='linux' + fi + + local json + json="$(metadata_json \ + "${VENDOR}" \ + "${filename}" \ + "${RELEASE_TYPE}" \ + "${VERSION}" \ + "${JAVA_VERSION}" \ + 'hotspot' \ + "$(normalize_os "${OS}")" \ + "$(normalize_arch "${ARCH}")" \ + "${EXT}" \ + "${IMAGE_TYPE}" \ + "${FEATURES}" \ + "${url}" \ + "$(hash_file 'md5' "${archive}" "${CHECKSUM_DIR}")" \ + "$(hash_file 'sha1' "${archive}" "${CHECKSUM_DIR}")" \ + "$(hash_file 'sha256' "${archive}" "${CHECKSUM_DIR}")" \ + "$(hash_file 'sha512' "${archive}" "${CHECKSUM_DIR}")" \ + "$(file_size "${archive}")" \ + "${filename}" + )" + + echo "${json}" > "${metadata_file}" + rm -f "${archive}" + else + echo "Skipping ${filename}" + fi +} + +RELEASE_FILE="${TEMP_DIR}/releases-${VENDOR}.json" +download_github_releases 'JetBrains' 'JetBrainsRuntime' "${RELEASE_FILE}" + +versions=$(jq -r '.[].tag_name' "${RELEASE_FILE}" | sort -V) + +assets_json=${TEMP_DIR}/assets-parsed.json +jq '[ .[] | ({version: .tag_name, type: (if .prerelease then "ea" else "ga" end) } + (.body | capture("\\|\\s*(?:\\*\\*)?(?[^|]+?)(?:\\*\\*)?\\s*\\|\\s*\\[(?[^\\]]+)\\]\\((?https:[^\\)]+)\\)\\s*\\|\\s*\\[checksum\\]\\((?https:[^\\)]+)\\)";"g")) ) ]' $RELEASE_FILE > "${assets_json}" + +for version in ${versions} +do + + readarray -t assets < <(jq -r ".[] | select(.version == \"${version}\") | .file" "${assets_json}") + readarray -t download_urls < <(jq -r ".[] | select(.version == \"${version}\") | .url" "${assets_json}") + readarray -t release_types < <(jq -r ".[] | select(.version == \"${version}\") | .type" "${assets_json}") + readarray -t descriptions < <(jq -r ".[] | select(.version == \"${version}\") | .description" "${assets_json}") + for ((i = 0; i < ${#assets[@]}; i++)); + do + download "${version}" "${assets[i]}" "${download_urls[i]}" "${release_types[i]}" "${descriptions[i]}" || echo "Cannot download ${asset}" + done + +done + +jq -s -S . "${METADATA_DIR}"/jbr*.json > "${METADATA_DIR}/all.json" From 519b79754c5635abb39d3c28232f46a87f2b577e Mon Sep 17 00:00:00 2001 From: Svetlozar Argirov Date: Mon, 13 Jan 2025 16:29:02 +0200 Subject: [PATCH 2/4] fix jetbrains shellcheck warnings --- bin/jbr.bash | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/bin/jbr.bash b/bin/jbr.bash index a4c405c2171..148855e13b0 100755 --- a/bin/jbr.bash +++ b/bin/jbr.bash @@ -23,11 +23,10 @@ ensure_directory "${CHECKSUM_DIR}" function download { - local tag_name="${1}" - local asset_name="${2}" - local url="${3}" - local release_type="${4}" - local description="${5}" + local asset_name="${1}" + local url="${2}" + local release_type="${3}" + local description="${4}" local filename="${asset_name}" local metadata_file="${METADATA_DIR}/${filename}.json" @@ -42,6 +41,7 @@ function download { then download_file "${url}" "${archive}" || return 1 + # shellcheck disable=SC2016 local regex='s/^jbr(sdk)?(?:_\w+)?-([0-9\+.]{1,})-(linux-musl|linux|osx|macos|windows)-(aarch64|x64|x86)(?:-\w+)?-(b[0-9\+.]{1,})(?:_\w+)?\.(tar\.gz|zip|pkg)$/ARCH="$4" OS="$3" VERSION="$2$5" JAVA_VERSION="$3" IMAGE_TYPE="$1" EXT="$6"/g' local VERSION="" @@ -125,7 +125,7 @@ download_github_releases 'JetBrains' 'JetBrainsRuntime' "${RELEASE_FILE}" versions=$(jq -r '.[].tag_name' "${RELEASE_FILE}" | sort -V) assets_json=${TEMP_DIR}/assets-parsed.json -jq '[ .[] | ({version: .tag_name, type: (if .prerelease then "ea" else "ga" end) } + (.body | capture("\\|\\s*(?:\\*\\*)?(?[^|]+?)(?:\\*\\*)?\\s*\\|\\s*\\[(?[^\\]]+)\\]\\((?https:[^\\)]+)\\)\\s*\\|\\s*\\[checksum\\]\\((?https:[^\\)]+)\\)";"g")) ) ]' $RELEASE_FILE > "${assets_json}" +jq '[ .[] | ({version: .tag_name, type: (if .prerelease then "ea" else "ga" end) } + (.body | capture("\\|\\s*(?:\\*\\*)?(?[^|]+?)(?:\\*\\*)?\\s*\\|\\s*\\[(?[^\\]]+)\\]\\((?https:[^\\)]+)\\)\\s*\\|\\s*\\[checksum\\]\\((?https:[^\\)]+)\\)";"g")) ) ]' "$RELEASE_FILE" > "${assets_json}" for version in ${versions} do @@ -136,7 +136,7 @@ do readarray -t descriptions < <(jq -r ".[] | select(.version == \"${version}\") | .description" "${assets_json}") for ((i = 0; i < ${#assets[@]}; i++)); do - download "${version}" "${assets[i]}" "${download_urls[i]}" "${release_types[i]}" "${descriptions[i]}" || echo "Cannot download ${asset}" + download "${assets[i]}" "${download_urls[i]}" "${release_types[i]}" "${descriptions[i]}" || echo "Cannot download ${asset_name}" done done From 77d66edd8146059b2892bc08c6b597594a5319df Mon Sep 17 00:00:00 2001 From: Svetlozar Argirov Date: Mon, 13 Jan 2025 16:30:26 +0200 Subject: [PATCH 3/4] Jetbrains script rename --- bin/{jbr.bash => jetbrains.bash} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename bin/{jbr.bash => jetbrains.bash} (100%) diff --git a/bin/jbr.bash b/bin/jetbrains.bash similarity index 100% rename from bin/jbr.bash rename to bin/jetbrains.bash From 37924dd71c24a4c0e7408d9cc8b08edd36b4f383 Mon Sep 17 00:00:00 2001 From: Svetlozar Argirov Date: Mon, 13 Jan 2025 16:30:44 +0200 Subject: [PATCH 4/4] Add jetbrains to update.bash --- bin/update.bash | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/update.bash b/bin/update.bash index e4a0ef4ecab..b62ba0fcbe5 100755 --- a/bin/update.bash +++ b/bin/update.bash @@ -65,6 +65,7 @@ vendors=( "$(cmd 'kona11')" "$(cmd 'kona17')" "$(cmd 'ibm')" + "$(cmd 'jetbrains')" ) printf '%s\n' "${vendors[@]}" | parallel -P 4 --verbose "bash {} ${METADATA_DIR}/vendor ${CHECKSUM_DIR} ; echo \"{} EXIT CODE: \$?\""