66 lines
1.9 KiB
Bash
66 lines
1.9 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
http_get() {
|
|
local url="$1"
|
|
curl -fsSL -H "User-Agent: AstraDeploy/${DEPLOY_VERSION}" "$url"
|
|
}
|
|
|
|
get_papermc_download_url() {
|
|
local project="$1"
|
|
local version="$2"
|
|
|
|
if [[ "$version" == "latest" ]]; then
|
|
version="$(http_get "https://fill.papermc.io/v3/projects/${project}" | jq -r '.versions | if type=="array" then .[-1] else (to_entries | last | .value[0]) end')"
|
|
fi
|
|
|
|
local builds_json
|
|
builds_json="$(http_get "https://fill.papermc.io/v3/projects/${project}/versions/${version}/builds")"
|
|
local url
|
|
url="$(printf '%s\n' "$builds_json" | jq -r '.builds | map(select(.channel=="STABLE")) | .[0].downloads."server:default".url // empty')"
|
|
if [[ -z "$url" || "$url" == "null" ]]; then
|
|
fail "$(t no_stable_build "$project" "$version")"
|
|
fi
|
|
echo "$url"
|
|
}
|
|
|
|
get_purpur_download_url() {
|
|
local version="$1"
|
|
local build="${2:-latest}"
|
|
|
|
if [[ "$version" == "latest" ]]; then
|
|
version="$(http_get "https://api.purpurmc.org/v2/purpur/" | jq -r '.versions | .[-1]')"
|
|
fi
|
|
|
|
if [[ "$build" == "latest" ]]; then
|
|
echo "https://api.purpurmc.org/v2/purpur/${version}/latest/download"
|
|
else
|
|
echo "https://api.purpurmc.org/v2/purpur/${version}/${build}/download"
|
|
fi
|
|
}
|
|
|
|
get_github_release_asset_url() {
|
|
local repo="$1"
|
|
local pattern="$2"
|
|
http_get "https://api.github.com/repos/${repo}/releases/latest" \
|
|
| jq -r --arg pattern "$pattern" '.assets[] | select(.name | test($pattern)) | .browser_download_url' | head -n 1
|
|
}
|
|
|
|
download_as_user() {
|
|
local url="$1"
|
|
local target="$2"
|
|
|
|
emit_step "download_start" "$url"
|
|
run_cmd sudo -u "$SERVER_USER" bash -lc "curl -fL \"$url\" -o \"${target}\""
|
|
emit_step "download_completed" "$target"
|
|
}
|
|
|
|
download_as_user_atomic() {
|
|
local url="$1"
|
|
local target="$2"
|
|
local tmp="${target}.tmp.${RANDOM}.$(date +%s)"
|
|
|
|
download_as_user "$url" "$tmp"
|
|
run_cmd mv "$tmp" "$target"
|
|
emit_step "download_swap" "$target"
|
|
}
|