SonicDE-rpmspecs/copr-build.sh

100 lines
2.2 KiB
Bash
Executable file

#!/bin/bash
set -e
COPR="${COPR:-@SonicDE/SonicDE-EL10}"
GIT_URL="${GIT_URL:-https://pc-rytteren.dk/forge/anders/SonicDE-rpmspecs.git}"
BRANCH="${BRANCH:-master}"
METHOD="${METHOD:-rpkg}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ORDER_FILE="$SCRIPT_DIR/build-order.txt"
# All tier names present in build-order.txt, in order.
tier_names() {
sed -n 's/^\[\(tier[0-9]\+\)\]$/\1/p' "$ORDER_FILE"
}
# Packages of a single tier.
tier_packages() {
sed -n "/^\[$1\]$/,/^\[/p" "$ORDER_FILE" |
grep -v '^\[' | grep -v '^#' | grep -v '^$'
}
# Submit SCM build to Copr (blocks until completion by default)
submit_scm() {
local pkg=$1
echo "=== Bygger $pkg i Copr (SCM) ==="
copr-cli buildscm "$COPR" \
--clone-url "$GIT_URL" \
--commit "$BRANCH" \
--subdir "$pkg" \
--spec "$pkg.spec" \
--method "$METHOD"
}
# Submit tier in parallel
submit_tier() {
local tier=$1
local pids=()
echo ""
echo "========================================"
echo " $tier"
echo "========================================"
for pkg in $(tier_packages "$tier"); do
submit_scm "$pkg" &
pids+=($!)
done
for pid in "${pids[@]}"; do
wait $pid || { echo "FEJL: Bygning fejlede i $tier"; exit 1; }
done
echo " $tier færdig"
}
usage() {
echo "Brug: $0 [tierN ...|all]"
echo " tierN - Byg pakkerne i den angivne tier fra build-order.txt"
echo " all - Byg alle tiers i rækkefølge (default hvis intet angivet)"
echo ""
echo "Tiers i $ORDER_FILE:"
for t in $(tier_names); do
echo " $t ($(tier_packages "$t" | wc -l) pakker)"
done
echo ""
echo "Miljøvariabler: COPR, GIT_URL, BRANCH, METHOD"
exit 1
}
if [ $# -eq 0 ]; then
set -- all
fi
for arg; do
case "$arg" in
all) ;;
tier[0-9]*)
tier_names | grep -qx "$arg" || { echo "Ukendt tier: $arg"; usage; } ;;
*) echo "Ukendt argument: $arg"; usage ;;
esac
done
echo "Bygger SonicDE pakker i Copr fra git repo"
echo "COPR: $COPR"
echo "GIT: $GIT_URL"
echo "Branch: $BRANCH"
echo ""
for arg; do
if [ "$arg" = all ]; then
for t in $(tier_names); do
submit_tier "$t"
done
else
submit_tier "$arg"
fi
done
echo ""
echo "Kørsel færdig."