57 lines
1.7 KiB
Bash
57 lines
1.7 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
cd "$PROJECT_ROOT"
|
|
|
|
SOURCE_TARGET_PAIRS=(
|
|
".gitea/workflow-sources/deploy-to-phoenix.yml:.gitea/workflows/deploy-to-phoenix.yml"
|
|
".gitea/workflow-sources/validate-on-pr.yml:.gitea/workflows/validate-on-pr.yml"
|
|
)
|
|
|
|
REMOTE="${GITEA_WORKFLOW_REMOTE:-origin}"
|
|
if git remote | grep -qx gitea; then
|
|
REMOTE="${GITEA_WORKFLOW_REMOTE:-gitea}"
|
|
fi
|
|
|
|
missing_ref=false
|
|
for ref in "$REMOTE/main" "$REMOTE/master"; do
|
|
if ! git rev-parse --verify "$ref" >/dev/null 2>&1; then
|
|
missing_ref=true
|
|
fi
|
|
done
|
|
|
|
if [[ "$missing_ref" == true ]]; then
|
|
echo "[i] Skipping main/master workflow parity check ($REMOTE/main or $REMOTE/master not available)"
|
|
exit 0
|
|
fi
|
|
|
|
for pair in "${SOURCE_TARGET_PAIRS[@]}"; do
|
|
source="${pair%%:*}"
|
|
target="${pair##*:}"
|
|
|
|
main_blob="$(git show "$REMOTE/main:$source" 2>/dev/null || true)"
|
|
master_blob="$(git show "$REMOTE/master:$source" 2>/dev/null || true)"
|
|
|
|
if [[ -z "$main_blob" ]]; then
|
|
main_blob="$(git show "$REMOTE/main:$target" 2>/dev/null || true)"
|
|
fi
|
|
if [[ -z "$master_blob" ]]; then
|
|
master_blob="$(git show "$REMOTE/master:$target" 2>/dev/null || true)"
|
|
fi
|
|
|
|
if [[ -z "$main_blob" || -z "$master_blob" ]]; then
|
|
echo "[✗] Missing $source/$target on $REMOTE/main or $REMOTE/master" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ "$main_blob" != "$master_blob" ]]; then
|
|
echo "[✗] Branch workflow drift: $source differs between $REMOTE/main and $REMOTE/master" >&2
|
|
echo " Keep both deploy branches in lockstep for workflow-source files." >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "[✓] Branch parity OK for $source"
|
|
done
|