fix: migrate PaperMC to v3 API, fix NeoForge beta fallback, add test suite

- Migrate Paper loader from sunset v2 API to v3 (fill.papermc.io)
- Fix NeoForge: fall back to beta versions when no stable exists (set -e + grep)
- Fix setEula/setperms ordering (was writing eula.txt before /data was writable)
- Fix setEula/serverInfoWrite to use absolute paths (/data/server/)
- Add VOLUME directive removal (was shadowing bind mounts)
- Add comprehensive API test suite (110 tests across 6 suites)
- Move test.sh to tests/integration.sh, switch to named volumes
- Add Docker build cache to CI workflows
- Add .editorconfig, expand .gitignore, improve README docs
This commit is contained in:
2026-08-21 12:49:27 -04:00
parent a6f610de28
commit 5688b30892
26 changed files with 2530 additions and 263 deletions
+49 -17
View File
@@ -1,49 +1,81 @@
#!/usr/bin/env bash
set -euo pipefail
MC_VERSION=${MC_VERSION:-}
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
MC_LOADER=${MC_LOADER:-}
MC_LOADER_VERSION=${MC_LOADER_VERSION:-}
# ---------- source helpers first (so log/die are available) ----------------
# shellcheck disable=SC1091
source "${SCRIPT_DIR}/lib/common.sh"
FABRIC_LOADER_VERSION=${FABRIC_LOADER_VERSION:-${MC_LOADER_VERSION:-}}
FORGE_VERSION=${FORGE_VERSION:-${MC_LOADER_VERSION:-}}
NEOFORGE_VERSION=${NEOFORGE_VERSION:-${MC_LOADER_VERSION:-}}
PAPER_BUILD=${PAPER_BUILD:-""}
# ---------- environment variables ------------------------------------------
JAVA_VERSION=${JAVA_VERSION:-}
JAVA_HOME=/data/java/${JAVA_VERSION}
JAR=${JAR:-"server.jar"}
MC_VERSION="${MC_VERSION:-}"
MC_LOADER="${MC_LOADER:-}"
MC_LOADER_VERSION="${MC_LOADER_VERSION:-}"
XMS=${XMS:-2G}
XMX=${XMX:-4G}
FABRIC_LOADER_VERSION="${FABRIC_LOADER_VERSION:-${MC_LOADER_VERSION:-}}"
FORGE_VERSION="${FORGE_VERSION:-${MC_LOADER_VERSION:-}}"
NEOFORGE_VERSION="${NEOFORGE_VERSION:-${MC_LOADER_VERSION:-}}"
PAPER_BUILD="${PAPER_BUILD:-}"
ADD_ARGS=${ADD_ARGS:-""}
JAVA_VERSION="${JAVA_VERSION:-}"
JAVA_HOME="/data/java/${JAVA_VERSION}"
JAR="${JAR:-server.jar}"
XMS="${XMS:-2G}"
XMX="${XMX:-4G}"
ADD_ARGS="${ADD_ARGS:-}"
PUID="${PUID:-1000}"
PGID="${PGID:-1000}"
PATH=${JAVA_HOME}/bin:$PATH
PATH="${JAVA_HOME}/bin:$PATH"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# ---------- validate required vars early -----------------------------------
source "${SCRIPT_DIR}/lib/common.sh"
if [[ -z "$MC_LOADER" ]]; then
die "MC_LOADER is required. Valid: vanilla, paper, fabric, forge, neoforge, bedrock"
fi
if [[ "$MC_LOADER" != "bedrock" ]]; then
if [[ -z "$MC_VERSION" ]]; then
die "MC_VERSION is required for ${MC_LOADER} loader"
fi
fi
# ---------- source libraries ------------------------------------------------
# shellcheck disable=SC1091
source "${SCRIPT_DIR}/lib/java.sh"
# shellcheck disable=SC1091
source "${SCRIPT_DIR}/lib/server.sh"
# shellcheck disable=SC1091
source "${SCRIPT_DIR}/lib/loaders/vanilla.sh"
# shellcheck disable=SC1091
source "${SCRIPT_DIR}/lib/loaders/paper.sh"
# shellcheck disable=SC1091
source "${SCRIPT_DIR}/lib/loaders/fabric.sh"
# shellcheck disable=SC1091
source "${SCRIPT_DIR}/lib/loaders/forge.sh"
# shellcheck disable=SC1091
source "${SCRIPT_DIR}/lib/loaders/neoforge.sh"
# shellcheck disable=SC1091
source "${SCRIPT_DIR}/lib/loaders/bedrock.sh"
# ---------- main flow -------------------------------------------------------
setperms
setEula
if [[ "$MC_LOADER" != "bedrock" ]]; then
javaCheck
fi
serverSelect
if [[ "$MC_LOADER" != "bedrock" ]]; then
buildCommand
fi
setEula
serverStart