#!/usr/bin/env bash
set -u
set -o pipefail

REPO_URL="https://github.com/MariaDB/server.git"
ROOT_DIR="${ROOT_DIR:-$PWD/mariadb-rpm-builds}"

BRANCHES=("11.8" "12.3" "13.0" "main")

RPM_DIST="${RPM_DIST:-fedora44}"
MAKE_JOBS="${MAKE_JOBS:-24}"

CPACK_PADDING_DIR="padding_for_CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX"

mkdir -p "$ROOT_DIR"

SUMMARY="$ROOT_DIR/summary.txt"
: > "$SUMMARY"

log_run() {
    local logfile="$1"
    shift

    {
        echo "=== Command ==="
        printf '%q ' "$@"
        echo
        echo
        echo "=== Output ==="
        "$@"
    } >"$logfile" 2>&1
}

for branch in "${BRANCHES[@]}"; do
    echo "===== Processing branch: $branch ====="

    BRANCH_DIR_SAFE="${branch//\//_}"
    BASEDIR="$ROOT_DIR/mariadb-$BRANCH_DIR_SAFE"
    WORKDIR="$BASEDIR/$CPACK_PADDING_DIR"

    rm -rf "$BASEDIR"
    mkdir -p "$BASEDIR"

    echo "Branch: $branch" >> "$SUMMARY"

    CLONE_LOG="$BASEDIR/git-clone.log"

    echo "[clone] $branch"
    if ! log_run "$CLONE_LOG" \
        git clone --branch "$branch" --depth 1 "$REPO_URL" "$WORKDIR"; then
        echo "  git clone: FAILED" >> "$SUMMARY"
        echo "  clone log: $CLONE_LOG" >> "$SUMMARY"
        echo >> "$SUMMARY"
        tail -80 "$CLONE_LOG"
        continue
    fi

    LOGDIR="$WORKDIR/logs"
    mkdir -p "$LOGDIR"
    mv "$CLONE_LOG" "$LOGDIR/git-clone.log"

    cd "$WORKDIR" || exit 1

    echo "[submodules] $branch"
    if ! log_run "$LOGDIR/submodules.log" \
        git submodule update --init --recursive --depth 1; then
        echo "  submodules: FAILED" >> "$SUMMARY"
        echo "  logs: $LOGDIR" >> "$SUMMARY"
        echo >> "$SUMMARY"
        tail -80 "$LOGDIR/submodules.log"
        continue
    fi

    echo "[cmake] $branch"
    if ! log_run "$LOGDIR/cmake.log" \
        sh -c 'export PATH=/usr/lib/ccache:/usr/lib64/ccache:$PATH && cmake . -DBUILD_CONFIG=mysql_release -DRPM='"$RPM_DIST"' -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache'; then
        echo "  cmake: FAILED" >> "$SUMMARY"
        echo "  make package: SKIPPED" >> "$SUMMARY"
        echo "  logs: $LOGDIR" >> "$SUMMARY"
        echo >> "$SUMMARY"
        tail -80 "$LOGDIR/cmake.log"
        continue
    fi
    echo "  cmake: OK" >> "$SUMMARY"

    echo "[make package] $branch"
    if ! log_run "$LOGDIR/make-package.log" \
        sh -xc '
            mkdir -p rpms srpms
            if grep -qw CPACK_RPM_SOURCE_PKG_BUILD_PARAMS CPackSourceConfig.cmake; then
                make package_source
                mv *.src.rpm srpms/
            fi
            export PATH=/usr/lib/ccache:/usr/lib64/ccache:$PATH
            make -j '"$MAKE_JOBS"' package
        '; then
        echo "  make package: FAILED" >> "$SUMMARY"
        echo "  logs: $LOGDIR" >> "$SUMMARY"
        echo >> "$SUMMARY"
        tail -80 "$LOGDIR/make-package.log"
        continue
    fi
    echo "  make package: OK" >> "$SUMMARY"

    echo "  logs: $LOGDIR" >> "$SUMMARY"
    echo "  workdir: $WORKDIR" >> "$SUMMARY"
    echo >> "$SUMMARY"
done

echo
echo "===== SUMMARY ====="
cat "$SUMMARY"
