Skip to content

Commit 2433473

Browse files
authored
Improve get gtnh download path (#4101)
1 parent 4495d9f commit 2433473

1 file changed

Lines changed: 49 additions & 75 deletions

File tree

scripts/start-deployGTNH

Lines changed: 49 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -6,87 +6,61 @@
66
# Define setup functions
77
function getGTNHdownloadPath(){
88
gtnh_download_path=""
9-
current_java_version=$(mc-image-helper java-release)
10-
11-
if ! packs_data="$(
12-
curl -fsSL "https://downloads.gtnewhorizons.com/versions.json" \
13-
| jq -r '.versions[]?.server? | .[]? | select(type=="string" and test("Server"))'
14-
)"; then
15-
logError "Failed to retrieve data from https://downloads.gtnewhorizons.com/versions.json"
16-
exit 1
17-
fi
18-
mapfile -t packs <<< "$packs_data"
9+
local release_object=""
10+
local current_java_version=$(mc-image-helper java-release)
1911

20-
log "Start locating server files..."
21-
for pack in "${packs[@]}"; do
22-
# Extract the Java version(s) from the pack filename
23-
if ! pack_java_version=$(basename "$pack" | grep -Eo 'Java_[0-9]+(-[0-9]+)?' | sed 's/Java_//'); then
24-
logWarning "Could not parse java version of $pack"
12+
# Select release JSON object
13+
if [ "$GTNH_PACK_VERSION" == "latest-dev" ]; then
14+
if ! release_object="$(
15+
curl -fsSL "https://downloads.gtnewhorizons.com/versions.json" \
16+
| jq -r '.versions|to_entries|sort_by(.value.releaseDate)|map(select(.value.title=="Beta release"))|.[-1]'
17+
)"; then logError "Failed to retrieve release from https://downloads.gtnewhorizons.com/versions.json"
18+
exit 1
2519
fi
20+
log "Selected $(jq '.key' <<< "$release_object") as latest dev version for download."
2621

27-
# Skip the pack if the current Java version is not compatible
28-
if [[ "$pack_java_version" == *-* ]]; then
29-
# Handle range of Java versions (e.g., "17-21")
30-
java_min_version=$(echo "$pack_java_version" | cut -d'-' -f1)
31-
java_max_version=$(echo "$pack_java_version" | cut -d'-' -f2)
32-
if (( current_java_version < java_min_version || current_java_version > java_max_version )); then
33-
debug "Skipping $pack due to incompatible Java version: $current_java_version not in range $java_min_version-$java_max_version"
34-
continue
35-
fi
36-
else
37-
# Handle single Java version (e.g., "8")
38-
if (( current_java_version != pack_java_version )); then
39-
debug "Skipping $pack due to incompatible Java version: $current_java_version != $pack_java_version"
40-
continue
41-
fi
22+
elif [ "$GTNH_PACK_VERSION" == "latest" ]; then
23+
if ! release_object="$(
24+
curl -fsSL "https://downloads.gtnewhorizons.com/versions.json" \
25+
| jq -r '.versions|to_entries|sort_by(.value.releaseDate)|map(select(.value.title=="Stable release"))|.[-1]'
26+
)"; then logError "Failed to retrieve release from https://downloads.gtnewhorizons.com/versions.json"
27+
exit 1
4228
fi
29+
log "Selected $(jq '.key' <<< "$release_object") as latest version for download."
4330

44-
# Extract version numbers and release type (beta or RC) from the file names
45-
46-
if ! pack_version=$(basename "$pack" | grep -Eo '[0-9]+(\.[0-9]+)+'); then
47-
logWarning "Could not parse version of $pack"
48-
fi
49-
if ! pack_release_type=$(basename "$pack" | grep -Eo '(beta|RC)(-[0-9]+)?' || echo ""); then
50-
logWarning "Could not parse release type of $pack"
51-
fi
52-
if ! current_version=$(basename "$gtnh_download_path" | grep -Eo '[0-9]+(\.[0-9]+)+'); then
53-
debug "Could not parse version of selected download path. String might be empty."
54-
fi
55-
if ! current_release_type=$(basename "$gtnh_download_path" | grep -Eo '(beta|RC)(-[0-9]+)?' || echo ""); then
56-
debug "Could not parse release type of selected download path. String might be empty."
31+
else
32+
if ! release_object="$(
33+
curl -fsSL "https://downloads.gtnewhorizons.com/versions.json" \
34+
| jq -r --arg USRIN $GTNH_PACK_VERSION '.versions|to_entries|sort_by(.value.releaseDate)|map(select(.key==$USRIN))|.[]'
35+
)"; then logError "Failed to retrieve release from https://downloads.gtnewhorizons.com/versions.json"
36+
exit 1
5737
fi
58-
# Check if the pack matches the desired type based on GTNH_PACK_VERSION:
59-
# - If GTNH_PACK_VERSION is "latest-dev", only consider beta packs (path contains "/betas/").
60-
# - If GTNH_PACK_VERSION is "latest", only consider non-beta packs (path does not contain "/betas/").
61-
if [[ ($pack == *"/betas/"* && $GTNH_PACK_VERSION == "latest-dev") || ($pack != *"/betas/"* && $GTNH_PACK_VERSION == "latest") ]]; then
62-
# Compare versions and update gtnh_download_path if pack is newer
63-
# Check if the current version is unset or if the pack version is newer than the current version.
64-
# This comparison uses version sorting to determine the latest version.
65-
if [[ -z "$current_version" || "$(printf '%s\n' "$pack_version" "$current_version" | sort -V | tail -n 1)" == "$pack_version" ]]; then
66-
67-
# If the pack version is the same as the current version, prioritize based on release type.
68-
# Full versions are preferred over RC (Release Candidate), and RC is preferred over beta.
69-
# Within the same release type, higher numbered versions are preferred.
70-
if [[ "$pack_version" == "$current_version" ]]; then
71-
if [[ -z "$pack_release_type" || ("$pack_release_type" == "RC" && "$current_release_type" == "beta") ||
72-
("$pack_release_type" == "$current_release_type" && "$(printf '%s\n' "$pack_release_type" "$current_release_type" | sort -V | tail -n 1)" == "$pack_release_type") ]]; then
73-
debug "$current_version-$current_release_type is older than $pack_version-$pack_release_type! Update latest version to: $pack_version-$pack_release_type"
74-
gtnh_download_path="$pack"
75-
fi
76-
else
77-
# If the pack version is newer than the current version, set it as the download path.
78-
debug "$current_version is older than $pack_version! Update latest version to: $pack_version"
79-
gtnh_download_path="$pack"
80-
fi
81-
fi
82-
else
83-
if [[ "$pack_version" == "$GTNH_PACK_VERSION" || "$pack_version-$pack_release_type" == "$GTNH_PACK_VERSION" ]]; then
84-
log "Found exact match $pack_version = $GTNH_PACK_VERSION! Select $pack_version for download."
85-
gtnh_download_path="$pack"
86-
break
87-
fi
38+
log "Selected $(jq -r '.key' <<< "$release_object") as matching version for download."
39+
40+
fi
41+
42+
# Select compatible server files for java version
43+
if (( current_java_version == 8 )); then
44+
gtnh_download_path=$(jq -r '.value.server.java8Url' <<< "$release_object")
45+
log "Use GTNH Server Java 8 release."
46+
47+
elif (( current_java_version >= 17 )); then
48+
if (( current_java_version > $(jq '.value.maxJavaVersion' <<< "$release_object") )); then
49+
logError "Container Java version $current_java_version is not supported by GTNH. Try an older release."
50+
exit 1
8851
fi
89-
done
52+
53+
gtnh_download_path=$(jq -r '.value.server.java17_2XUrl' <<< "$release_object")
54+
log "Use GTNH Server Java 17+ release."
55+
56+
else
57+
logError "Container Java version $current_java_version is not supported by GTNH."
58+
exit 1
59+
60+
fi
61+
62+
debug "Download source URL: $gtnh_download_path"
63+
9064
}
9165

9266
function deleteGTNHbackup(){
@@ -104,7 +78,7 @@ function updateGTNH(){
10478
folders_to_update=("libraries" "mods" "resources" "scripts")
10579
files_to_update=("lwjgl3ify-forgePatches.jar" "java9args.txt" "startserver-java9.bat" "startserver-java9.sh" "forge-1.7.10-10.13.4.1614-1.7.10-universal.jar" "startserver.bat" "startserver.sh" "server-icon.png")
10680
config_folder="config"
107-
backup_folder="/data/gtnh-upgrade-${current_version}${current_release_type:+-$current_release_type}-$current_datetime"
81+
backup_folder="/data/gtnh-upgrade-$current_datetime"
10882
journey_map_folder="JourneyMapServer"
10983

11084
# Delete specified folders if they exist

0 commit comments

Comments
 (0)