Skip to content

Commit 74bd00c

Browse files
CopilotKaniska244
andauthored
Fix Java feature: fallback to LTS when latest version not found in distributions
Reworked the fallback mechanism so it triggers AFTER the version is confirmed unavailable in ms/tem distributions, not preemptively. The fallback_to_lts_if_needed() function is called when the version list is empty and "latest" was requested. Also bumps feature version to 1.7.3. Agent-Logs-Url: https://github.com/devcontainers/features/sessions/1659dca5-85f8-42a5-9ef0-70e48adfd2de Co-authored-by: Kaniska244 <[email protected]>
1 parent 3738318 commit 74bd00c

2 files changed

Lines changed: 36 additions & 16 deletions

File tree

src/java/devcontainer-feature.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"id": "java",
3-
"version": "1.7.2",
3+
"version": "1.7.3",
44
"name": "Java (via SDKMAN!)",
55
"documentationURL": "https://github.com/devcontainers/features/tree/main/src/java",
66
"description": "Installs Java, SDKMAN! (if not installed), and needed dependencies.",

src/java/install.sh

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -197,41 +197,38 @@ updaterc() {
197197

198198
fallback_to_lts_if_needed() {
199199
local all_versions="$1"
200-
local feature_release_version="$2"
200+
local current_major="$2"
201201
local most_recent_lts
202202
most_recent_lts=$(echo "$all_versions" | jq -r '.most_recent_lts')
203203

204-
# Validate that both values are non-empty integers before comparing
205-
if [ -z "${feature_release_version}" ] || [ -z "${most_recent_lts}" ] \
206-
|| ! echo "${feature_release_version}" | grep -qE '^[0-9]+$' \
207-
|| ! echo "${most_recent_lts}" | grep -qE '^[0-9]+$'; then
208-
echo "${feature_release_version}"
209-
return
204+
if [ -z "${most_recent_lts}" ] || ! echo "${most_recent_lts}" | grep -qE '^[0-9]+$' \
205+
|| [ -z "${current_major}" ] || ! echo "${current_major}" | grep -qE '^[0-9]+$'; then
206+
return 1
210207
fi
211208

212-
if [ "${feature_release_version}" -gt "${most_recent_lts}" ]; then
213-
echo "Latest feature release (${feature_release_version}) is newer than most recent LTS (${most_recent_lts}). Falling back to LTS version ${most_recent_lts}." >&2
209+
if [ "${current_major}" -gt "${most_recent_lts}" ]; then
210+
echo "Latest feature release (${current_major}) not available in any distribution. Falling back to LTS version ${most_recent_lts}." >&2
214211
echo "${most_recent_lts}"
215-
else
216-
echo "${feature_release_version}"
212+
return 0
217213
fi
214+
215+
return 1
218216
}
219217

220218
find_version_list() {
221219
prefix="$1"
222220
suffix="$2"
223221
install_type=$3
224222
ifLts="$4"
225-
version_list=$5
223+
local version_list_var=$5
226224
java_ver=$6
227225

228226
check_packages jq
229227
all_versions=$(curl -s https://api.adoptium.net/v3/info/available_releases)
230228
if [ "${ifLts}" = "true" ]; then
231229
major_version=$(echo "$all_versions" | jq -r '.most_recent_lts')
232230
elif [ "${java_ver}" = "latest" ]; then
233-
major_version=$(echo "$all_versions" | jq -r '.most_recent_feature_release')
234-
major_version=$(fallback_to_lts_if_needed "$all_versions" "$major_version")
231+
major_version=$(echo "$all_versions" | jq -r '.most_recent_feature_release')
235232
else
236233
major_version=$(echo "$java_ver" | cut -d '.' -f 1)
237234
fi
@@ -255,7 +252,30 @@ find_version_list() {
255252
else
256253
regex="${prefix}\\K${major_version}\\.?[0-9]*\\.?[0-9]*${suffix}${JDK_DISTRO}\\s*"
257254
fi
258-
declare -g ${version_list}="$(su ${USERNAME} -c ". \${SDKMAN_DIR}/bin/sdkman-init.sh && sdk list ${install_type} 2>&1 | grep -oP \"${regex}\" | tr -d ' ' | sort -rV")"
255+
declare -g ${version_list_var}="$(su ${USERNAME} -c ". \${SDKMAN_DIR}/bin/sdkman-init.sh && sdk list ${install_type} 2>&1 | grep -oP \"${regex}\" | tr -d ' ' | sort -rV")"
256+
257+
# Fallback to LTS when the latest version is not found in either ms or tem distributions
258+
if [ -z "${!version_list_var}" ] && [ "${java_ver}" = "latest" ] && [ "${install_type}" = "java" ]; then
259+
local lts_version
260+
lts_version=$(fallback_to_lts_if_needed "$all_versions" "$major_version")
261+
if [ $? -eq 0 ] && [ -n "${lts_version}" ]; then
262+
major_version="${lts_version}"
263+
JDK_DISTRO="${JDKDISTRO:-"ms"}"
264+
if [ "${JDK_DISTRO}" = "ms" ]; then
265+
echo "Check if OpenJDK is available for version ${major_version} for ${JDK_DISTRO} Distro"
266+
available_versions=$(su ${USERNAME} -c ". ${SDKMAN_DIR}/bin/sdkman-init.sh && sdk list ${install_type} | grep ${JDK_DISTRO} | grep -oE '[0-9]+(\.[0-9]+(\.[0-9]+)?)?' | sort -u")
267+
if echo "${available_versions}" | grep -q "^${major_version}"; then
268+
echo "JDK version ${major_version} is available in ${JDK_DISTRO}..."
269+
else
270+
echo "JDK version ${major_version} not available in ${JDK_DISTRO}.... Switching to (tem)."
271+
JDK_DISTRO="tem"
272+
fi
273+
fi
274+
echo "JDK_DISTRO: ${JDK_DISTRO}"
275+
regex="${prefix}\\K${major_version}\\.?[0-9]*\\.?[0-9]*${suffix}${JDK_DISTRO}\\s*"
276+
declare -g ${version_list_var}="$(su ${USERNAME} -c ". \${SDKMAN_DIR}/bin/sdkman-init.sh && sdk list ${install_type} 2>&1 | grep -oP \"${regex}\" | tr -d ' ' | sort -rV")"
277+
fi
278+
fi
259279
}
260280

261281
# Use SDKMAN to install something using a partial version match

0 commit comments

Comments
 (0)