Files
HellionChat/scripts/verify-manifest-shape.sh
T
JonKazama-Hellion 0ed88691c2 build: add preflight validator family for versions/manifest/changelog drift
Establishes the local pre-push gate. preflight.sh runs four blocks: version
consistency, manifest shape (Icon plus all ImageUrls), changelog sync, plus a
release build as compile-health smoke. setup-hooks.sh wires core.hooksPath to
.githooks. .gitignore opens scripts/ for tracking (setup-dev-env.sh stays
private). Test execution itself lives in a separate local repository and is
not part of this codebase.
2026-05-08 07:23:54 +02:00

44 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# verify-manifest-shape.sh — Block B. Required fields in lowercase yaml,
# DalamudApiLevel sanity in repo.json, no own DalamudPackager.targets,
# Icon AND every ImageUrl reachable.
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
YAML="$ROOT/HellionChat/HellionChat.yaml"
REPO_JSON="$ROOT/repo.json"
TARGETS_OWN="$ROOT/HellionChat/DalamudPackager.targets"
fail() { echo "verify-manifest-shape: FAIL — $1" >&2; exit 1; }
ok() { echo "verify-manifest-shape: OK — $1"; }
for FIELD in name author punchline description repo_url icon_url image_urls tags changelog; do
grep -qE "^${FIELD}:" "$YAML" || fail "$YAML missing required field: $FIELD"
done
[ -f "$TARGETS_OWN" ] && fail "Own DalamudPackager.targets at $TARGETS_OWN strips Icon/ImageUrls. DELETE it; SDK default works."
API_LEVEL="$(jq -r '.[0].DalamudApiLevel' "$REPO_JSON")"
case "$API_LEVEL" in
''|null) fail "$REPO_JSON missing DalamudApiLevel" ;;
esac
[[ "$API_LEVEL" =~ ^[0-9]+$ ]] || fail "$REPO_JSON DalamudApiLevel must be integer, got: $API_LEVEL"
[ "$API_LEVEL" -ge 12 ] || fail "$REPO_JSON DalamudApiLevel=$API_LEVEL is below SDK 15 floor (12)."
if [ "${HOOKS_OFFLINE:-0}" != "1" ]; then
ICON_URL="$(jq -r '.[0].IconUrl' "$REPO_JSON")"
curl -fsI "$ICON_URL" > /dev/null || fail "IconUrl unreachable: $ICON_URL"
ok "IconUrl reachable: $ICON_URL"
COUNT="$(jq -r '.[0].ImageUrls | length' "$REPO_JSON")"
[ "$COUNT" -ge 1 ] || fail "repo.json ImageUrls is empty"
for i in $(seq 0 $((COUNT - 1))); do
URL="$(jq -r ".[0].ImageUrls[$i]" "$REPO_JSON")"
curl -fsI "$URL" > /dev/null || fail "ImageUrls[$i] unreachable: $URL"
done
ok "$COUNT ImageUrl(s) reachable, DalamudApiLevel=$API_LEVEL"
else
ok "skipped URL reachability (HOOKS_OFFLINE=1), DalamudApiLevel=$API_LEVEL"
fi