Skip to content

Commit 7f1e7b1

Browse files
authored
Add support for JetBrainsRuntime (#59)
Closes #41
1 parent df84b78 commit 7f1e7b1

File tree

2 files changed

+145
-0
lines changed

2 files changed

+145
-0
lines changed

bin/jetbrains.bash

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
#!/usr/bin/env bash
2+
set -e
3+
set -Euo pipefail
4+
5+
TEMP_DIR=$(mktemp -d)
6+
trap 'rm -rf ${TEMP_DIR}' EXIT
7+
8+
if [[ "$#" -lt 2 ]]
9+
then
10+
echo "Usage: ${0} metadata-directory checksum-directory"
11+
exit 1
12+
fi
13+
14+
# shellcheck source=bin/functions.bash
15+
source "$(dirname "${0}")/functions.bash"
16+
17+
VENDOR='jetbrains'
18+
METADATA_DIR="${1}/${VENDOR}"
19+
CHECKSUM_DIR="${2}/${VENDOR}"
20+
21+
ensure_directory "${METADATA_DIR}"
22+
ensure_directory "${CHECKSUM_DIR}"
23+
24+
25+
function download {
26+
local asset_name="${1}"
27+
local url="${2}"
28+
local release_type="${3}"
29+
local description="${4}"
30+
local filename="${asset_name}"
31+
32+
local metadata_file="${METADATA_DIR}/${filename}.json"
33+
local archive="${TEMP_DIR}/${filename}"
34+
35+
echo "asset ${asset_name} : |${description}|"
36+
37+
if [[ -f "${metadata_file}" ]]
38+
then
39+
echo "Skipping ${filename}"
40+
elif [[ "${filename}" =~ (tar\.gz|zip|pkg)$ ]]
41+
then
42+
download_file "${url}" "${archive}" || return 1
43+
44+
# shellcheck disable=SC2016
45+
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'
46+
47+
local VERSION=""
48+
local JAVA_VERSION=""
49+
local RELEASE_TYPE="$release_type"
50+
local OS=""
51+
local ARCH=""
52+
local EXT=""
53+
local FEATURES=""
54+
local IMAGE_TYPE=""
55+
56+
# Parse meta-data from file name
57+
eval "$(perl -pe "${regex}" <<< "${asset_name}")"
58+
59+
60+
if [[ -z "${IMAGE_TYPE}" ]]
61+
then
62+
IMAGE_TYPE='jre'
63+
else
64+
IMAGE_TYPE='jdk'
65+
fi
66+
67+
if [[ "${description}" =~ "fastdebug" ]]
68+
then
69+
FEATURES="$FEATURES fastdebug"
70+
fi
71+
72+
if [[ "${description}" =~ "debug symbols" ]]
73+
then
74+
FEATURES="$FEATURES debug"
75+
fi
76+
77+
if [[ "${description}" =~ "FreeType" ]]
78+
then
79+
FEATURES="$FEATURES freetype"
80+
fi
81+
82+
if [[ "${description}" =~ "JCEF" ]]
83+
then
84+
FEATURES="$FEATURES jcef"
85+
fi
86+
87+
if [[ "${OS}" = "linux-musl" ]]
88+
then
89+
FEATURES="$FEATURES musl"
90+
OS='linux'
91+
fi
92+
93+
local json
94+
json="$(metadata_json \
95+
"${VENDOR}" \
96+
"${filename}" \
97+
"${RELEASE_TYPE}" \
98+
"${VERSION}" \
99+
"${JAVA_VERSION}" \
100+
'hotspot' \
101+
"$(normalize_os "${OS}")" \
102+
"$(normalize_arch "${ARCH}")" \
103+
"${EXT}" \
104+
"${IMAGE_TYPE}" \
105+
"${FEATURES}" \
106+
"${url}" \
107+
"$(hash_file 'md5' "${archive}" "${CHECKSUM_DIR}")" \
108+
"$(hash_file 'sha1' "${archive}" "${CHECKSUM_DIR}")" \
109+
"$(hash_file 'sha256' "${archive}" "${CHECKSUM_DIR}")" \
110+
"$(hash_file 'sha512' "${archive}" "${CHECKSUM_DIR}")" \
111+
"$(file_size "${archive}")" \
112+
"${filename}"
113+
)"
114+
115+
echo "${json}" > "${metadata_file}"
116+
rm -f "${archive}"
117+
else
118+
echo "Skipping ${filename}"
119+
fi
120+
}
121+
122+
RELEASE_FILE="${TEMP_DIR}/releases-${VENDOR}.json"
123+
download_github_releases 'JetBrains' 'JetBrainsRuntime' "${RELEASE_FILE}"
124+
125+
versions=$(jq -r '.[].tag_name' "${RELEASE_FILE}" | sort -V)
126+
127+
assets_json=${TEMP_DIR}/assets-parsed.json
128+
jq '[ .[] | ({version: .tag_name, type: (if .prerelease then "ea" else "ga" end) } + (.body | capture("\\|\\s*(?:\\*\\*)?(?<description>[^|]+?)(?:\\*\\*)?\\s*\\|\\s*\\[(?<file>[^\\]]+)\\]\\((?<url>https:[^\\)]+)\\)\\s*\\|\\s*\\[checksum\\]\\((?<checksum_url>https:[^\\)]+)\\)";"g")) ) ]' "$RELEASE_FILE" > "${assets_json}"
129+
130+
for version in ${versions}
131+
do
132+
133+
readarray -t assets < <(jq -r ".[] | select(.version == \"${version}\") | .file" "${assets_json}")
134+
readarray -t download_urls < <(jq -r ".[] | select(.version == \"${version}\") | .url" "${assets_json}")
135+
readarray -t release_types < <(jq -r ".[] | select(.version == \"${version}\") | .type" "${assets_json}")
136+
readarray -t descriptions < <(jq -r ".[] | select(.version == \"${version}\") | .description" "${assets_json}")
137+
for ((i = 0; i < ${#assets[@]}; i++));
138+
do
139+
download "${assets[i]}" "${download_urls[i]}" "${release_types[i]}" "${descriptions[i]}" || echo "Cannot download ${asset_name}"
140+
done
141+
142+
done
143+
144+
jq -s -S . "${METADATA_DIR}"/jbr*.json > "${METADATA_DIR}/all.json"

bin/update.bash

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ vendors=(
6565
"$(cmd 'kona11')"
6666
"$(cmd 'kona17')"
6767
"$(cmd 'ibm')"
68+
"$(cmd 'jetbrains')"
6869
)
6970

7071
printf '%s\n' "${vendors[@]}" | parallel -P 4 --verbose "bash {} ${METADATA_DIR}/vendor ${CHECKSUM_DIR} ; echo \"{} EXIT CODE: \$?\""

0 commit comments

Comments
 (0)