#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
VERSION="${1:-${MOD_VERSION:-0.1.0-SNAPSHOT}}"
DIST_DIR="$ROOT_DIR/dist"
if [[ ! "$VERSION" =~ ^[0-9A-Za-z][0-9A-Za-z.+_-]*$ ]]; then
echo "Invalid version: $VERSION" >&2
exit 2
fi
require_java() {
local major="$1"
local variable="JAVA_HOME_${major}"
local java_installation="${!variable:-}"
if [[ -z "$java_installation" || ! -x "$java_installation/bin/java" ]]; then
echo "$variable must point to a JDK $major installation" >&2
exit 2
fi
local actual
actual="$("$java_installation/bin/java" -version 2>&1 | sed -n '1s/.*version "\([0-9]*\).*/\1/p')"
if [[ "$actual" != "$major" ]]; then
echo "$variable points to Java $actual, expected $major" >&2
exit 2
fi
printf '%s' "$java_installation"
}
JAVA17="$(require_java 17)"
JAVA21="$(require_java 21)"
mkdir -p "$DIST_DIR"
rm -f "$DIST_DIR"/xfeservermanager-forge-*.jar "$DIST_DIR/SHA256SUMS"
echo "Building and testing the embedded web UI"
npm --prefix "$ROOT_DIR/web-ui" ci
npm --prefix "$ROOT_DIR/web-ui" test
npm --prefix "$ROOT_DIR/web-ui" run build
echo "Testing common Java modules"
JAVA_HOME="$JAVA17" bash "$ROOT_DIR/gradlew" -p "$ROOT_DIR" --no-daemon check
build_platform() {
local minecraft="$1"
local java_home="$2"
local project="$ROOT_DIR/platform/forge-$minecraft"
echo "Building Forge $minecraft with $("$java_home/bin/java" -version 2>&1 | head -n 1)"
JAVA_HOME="$java_home" bash "$project/gradlew" -p "$project" --no-daemon clean check assemble \
"-Pmod_version=$VERSION"
local jar
jar="$(find "$project/build/libs" -maxdepth 1 -type f \
-name "xfeservermanager-forge-${minecraft}-*.jar" \
! -name '*-slim.jar' ! -name '*-sources.jar' ! -name '*-javadoc.jar' \
-print -quit)"
if [[ -z "$jar" ]]; then
echo "No distributable JAR found for Minecraft $minecraft" >&2
exit 1
fi
cp "$jar" "$DIST_DIR/xfeservermanager-forge-${minecraft}-${VERSION}.jar"
}
build_platform "1.20.1" "$JAVA17"
build_platform "1.20.6" "$JAVA21"
build_platform "1.21.1" "$JAVA21"
build_platform "1.21.11" "$JAVA21"
(
cd "$DIST_DIR"
sha256sum xfeservermanager-forge-*.jar > SHA256SUMS
)
echo "Artifacts written to $DIST_DIR"
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
VERSION="${1:-${MOD_VERSION:-0.1.0-SNAPSHOT}}"
DIST_DIR="$ROOT_DIR/dist"
if [[ ! "$VERSION" =~ ^[0-9A-Za-z][0-9A-Za-z.+_-]*$ ]]; then
echo "Invalid version: $VERSION" >&2
exit 2
fi
require_java() {
local major="$1"
local variable="JAVA_HOME_${major}"
local java_installation="${!variable:-}"
if [[ -z "$java_installation" || ! -x "$java_installation/bin/java" ]]; then
echo "$variable must point to a JDK $major installation" >&2
exit 2
fi
local actual
actual="$("$java_installation/bin/java" -version 2>&1 | sed -n '1s/.*version "\([0-9]*\).*/\1/p')"
if [[ "$actual" != "$major" ]]; then
echo "$variable points to Java $actual, expected $major" >&2
exit 2
fi
printf '%s' "$java_installation"
}
JAVA17="$(require_java 17)"
JAVA21="$(require_java 21)"
mkdir -p "$DIST_DIR"
rm -f "$DIST_DIR"/xfeservermanager-forge-*.jar "$DIST_DIR/SHA256SUMS"
echo "Building and testing the embedded web UI"
npm --prefix "$ROOT_DIR/web-ui" ci
npm --prefix "$ROOT_DIR/web-ui" test
npm --prefix "$ROOT_DIR/web-ui" run build
echo "Testing common Java modules"
JAVA_HOME="$JAVA17" bash "$ROOT_DIR/gradlew" -p "$ROOT_DIR" --no-daemon check
build_platform() {
local minecraft="$1"
local java_home="$2"
local project="$ROOT_DIR/platform/forge-$minecraft"
echo "Building Forge $minecraft with $("$java_home/bin/java" -version 2>&1 | head -n 1)"
JAVA_HOME="$java_home" bash "$project/gradlew" -p "$project" --no-daemon clean check assemble \
"-Pmod_version=$VERSION"
local jar
jar="$(find "$project/build/libs" -maxdepth 1 -type f \
-name "xfeservermanager-forge-${minecraft}-*.jar" \
! -name '*-slim.jar' ! -name '*-sources.jar' ! -name '*-javadoc.jar' \
-print -quit)"
if [[ -z "$jar" ]]; then
echo "No distributable JAR found for Minecraft $minecraft" >&2
exit 1
fi
cp "$jar" "$DIST_DIR/xfeservermanager-forge-${minecraft}-${VERSION}.jar"
}
build_platform "1.20.1" "$JAVA17"
build_platform "1.20.6" "$JAVA21"
build_platform "1.21.1" "$JAVA21"
build_platform "1.21.11" "$JAVA21"
(
cd "$DIST_DIR"
sha256sum xfeservermanager-forge-*.jar > SHA256SUMS
)
echo "Artifacts written to $DIST_DIR"