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.
This commit is contained in:
Executable
+43
@@ -0,0 +1,43 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user