#!/usr/bin/env bash # Build a single custom mod from its manifest: clone (or refresh) the source at # the pinned ref, apply optional patch, run the build, then copy produced jars # to out//. # # Usage: ./scripts/build-mod.sh set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # shellcheck disable=SC1091 source "$SCRIPT_DIR/lib.sh" name="${1:-}" if [[ -z "$name" ]]; then echo "Usage: $0 " >&2 exit 1 fi load_manifest "$name" src_dir="$WORK_DIR/$name" mkdir -p "$WORK_DIR" "$OUT_DIR/$name" echo "==> [$name] ensuring source at $SOURCE_REF from $SOURCE_URL" if [[ -d "$src_dir/.git" ]]; then git -C "$src_dir" fetch --tags --force origin else git clone --no-single-branch "$SOURCE_URL" "$src_dir" fi # Checkout the pinned ref robustly: prefer an exact tag, then a remote branch, # then fall back to a raw commit SHA. if git -C "$src_dir" rev-parse -q --verify "refs/tags/$SOURCE_REF" >/dev/null 2>&1; then git -C "$src_dir" checkout --force "$SOURCE_REF" elif git -C "$src_dir" rev-parse -q --verify "origin/$SOURCE_REF" >/dev/null 2>&1; then git -C "$src_dir" checkout -B "$SOURCE_REF" "origin/$SOURCE_REF" else git -C "$src_dir" checkout --force "$SOURCE_REF" fi git -C "$src_dir" submodule update --init --recursive || true if [[ -n "${PATCH_CMD:-}" ]]; then echo "==> [$name] applying patch: $PATCH_CMD" ( cd "$src_dir" && eval "$PATCH_CMD" ) fi echo "==> [$name] running: $BUILD_CMD" ( cd "$src_dir" && eval "$BUILD_CMD" ) echo "==> [$name] collecting jars matching '$JAR_GLOB'" # shellcheck disable=SC2086 shopt -s nullglob found=0 for jar in "$src_dir"/$JAR_GLOB; do [[ -f "$jar" ]] || continue base="$(basename "$jar")" cp "$jar" "$OUT_DIR/$name/$base" echo " -> out/$name/$base" found=1 done shopt -u nullglob if [[ "$found" -eq 0 ]]; then echo "ERROR: [$name] no jar matched '$JAR_GLOB' after build" >&2 exit 1 fi echo "==> [$name] done"