0ed88691c2
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.
44 lines
1.8 KiB
Bash
Executable File
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
|