From 08a4bde6c1a004918f15ae825f0c72adbcde9462 Mon Sep 17 00:00:00 2001 From: Geoff Bourne Date: Wed, 25 Nov 2020 15:42:27 -0600 Subject: [PATCH] Switched to PaperMC v2 API Fixes #670 --- start-deployPaper | 79 +++++++++++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 34 deletions(-) diff --git a/start-deployPaper b/start-deployPaper index ebe6c958..16e80edb 100644 --- a/start-deployPaper +++ b/start-deployPaper @@ -4,43 +4,54 @@ set -o pipefail isDebugging && set -x -: ${PAPERBUILD:=latest} -export SERVER=paper_server-${VANILLA_VERSION}-${PAPERBUILD}.jar +# PaperMC API v2 docs : https://papermc.io/api/docs/swagger-ui/index.html?configUrl=/api/openapi/swagger-config -if [ ! -f "$SERVER" ] || isTrue "$FORCE_REDOWNLOAD"; then +build=$(curl -fsSL "https://papermc.io/api/v2/projects/paper/versions/${VANILLA_VERSION}" -H "accept: application/json" \ + | jq '.builds[-1]') +case $? in + 0) + ;; + 22) + versions=$(curl -fsSL "https://papermc.io/api/v2/projects/paper" -H "accept: application/json") + if [[ $VERSION = LATEST ]]; then + VANILLA_VERSION=$(echo "$versions" | jq -r '.versions[-1]') + log "WARN: using ${VANILLA_VERSION} since that's the latest provided by PaperMC" + # re-execute the current script with the newly computed version + exec $0 "$@" + fi + log "ERROR: ${VANILLA_VERSION} is not published by PaperMC" + log " Set VERSION to one of the following: " + log " $(echo "$versions" | jq -r '.versions | join(", ")')" + exit 1 + ;; + *) + echo "ERROR: unknown error while looking up PaperMC version=${VANILLA_VERSION}" + exit 1 + ;; +esac +if [ $? != 0 ]; then + echo "ERROR: failed to lookup PaperMC build from version ${VANILLA_VERSION}" + exit 1 +fi - if [ -f "$SERVER" ]; then - zarg=(-z "$SERVER") - fi +export SERVER=$(curl -fsSL "https://papermc.io/api/v2/projects/paper/versions/${VANILLA_VERSION}/builds/${build}" -H "accept: application/json" \ + | jq -r '.downloads.application.name') +if [ $? != 0 ]; then + echo "ERROR: failed to lookup PaperMC download file from version=${VANILLA_VERSION} build=${build}" + exit 1 +fi - downloadUrl=${PAPER_DOWNLOAD_URL:-https://papermc.io/api/v1/paper/${VANILLA_VERSION}/${PAPERBUILD}/download} - log "Downloading Paper $VANILLA_VERSION (build $PAPERBUILD) from $downloadUrl ..." - out=$(curl -fsSL -o "$SERVER" "${zarg[@]}" "$downloadUrl" 2>&1) - case $? in - 0) - ;; - 22) # = 404 HTTP status - if versions=$(curl -fsSL https://papermc.io/api/v1/paper 2> /dev/null); then - if [[ $VERSION = LATEST ]]; then - VANILLA_VERSION=$(echo $versions | jq -r '.versions[0]') - log "WARN: using ${VANILLA_VERSION} since that's the latest provided by PaperMC" - # re-execute the current script with the newly computed version - exec $0 "$@" - fi - log "ERROR: ${VANILLA_VERSION} is not (yet) published by PaperMC" - log " Set VERSION to one of the following: " - log " $(echo $versions | jq -r '.versions | join(", ")')" - else - log "ERROR: failed to retrieve versions from https://papermc.io/api/v1/paper" - fi - exit 3 - ;; - *) - log "ERROR: failed to contact PaperMC at $downloadUrl" - log " $out" - exit 3 - ;; - esac +if [ -f "$SERVER" ]; then + zarg=(-z "$SERVER") +fi + +log "Downloading PaperMC $VANILLA_VERSION (build $build) ..." +curl -fsSL -o "$SERVER" "${zarg[@]}" \ + "https://papermc.io/api/v2/projects/paper/versions/${VANILLA_VERSION}/builds/${build}/downloads/${SERVER}" \ + -H "accept: application/java-archive" +if [ $? != 0 ]; then + echo "ERROR: failed to download PaperMC from version=${VANILLA_VERSION} build=${build} download=${SERVER}" + exit 1 fi # Normalize on Spigot for downstream operations