FKRPG/tools/drift-check.fish
mithral 1b3cf45bf6
All checks were successful
Build & Release Pack / build (push) Successful in 1m24s
perf(server): optimization stack 1.0.1 — Lithium 0.15.4, FerriteCore 7.0.3, C2ME 0.4.0-alpha.0.27, ChunkSmith 3.14.0 + Spark, tuned configs
- server_pack: bump 1.0 → 1.0.1 (patch, optimization-only)
- Lithium 0.15.0→0.15.4 (gvQqBUqZ/N08Z8wog)
- FerriteCore 7.0.2-hotfix→7.0.3 (uXXizFIs/sOzRw3CG)
- C2ME 0.3.0+alpha.0.364→0.4.0-alpha.0.27 (VSNURh3q/gRm1ZAvc) fixes drift, async gen for Tectonic 1.28
- ChunkSmith 3.13.0→3.14.0 (4BeAEBIb/iBSiBgt7)
- Add Spark 1.10.109 (l6YH9Als/cALUj9l1) server-only for profiling
- Tune chunksmith/config.json: targetMspt 45, tickBudget 10, heap 75, dispatch 100, settle 20
- Tune c2me-notes.txt + modernfix-mixins.properties with documented safe defaults
- Add optimization-manifest.json + mod-version-policy.json (FROZEN 31/OPT 11) + audit/drift/benchmark tools + baseline + report
- Packwiz is source of truth; client_pack unchanged (server-only Spark)
- Validate: packwiz refresh OK 144 mods, index adccf3bb..., manifest in-sync
- Drift: LOCAL test still 142 vs 144 (needs reinstall from Packwiz export); PACKWIZ internal OK
2026-08-27 00:59:15 -04:00

94 lines
3.4 KiB
Fish
Executable file

#!/usr/bin/env fish
# FKRPG drift check — standalone, Fish-friendly
# Compares LOCAL ≠ PACKWIZ, PRODUCTION ≠ PACKWIZ, LOCAL ≠ PRODUCTION
# via Packwiz index hash + mod filenames
set -l repo (dirname (dirname (realpath (status filename))))
set -l pack_dir "$repo/server_pack"
set -l local_dir "$HOME/.auto-mcs/Servers/FKRPG"
set -l manifest "$repo/optimization-manifest.json"
echo "=== FKRPG DRIFT CHECK ==="
echo "Packwiz: $pack_dir"
echo "Local: $local_dir"
echo "Manifest: $manifest"
echo
# pack hash
set -l pack_hash (grep -E '^\s*hash\s*=' "$pack_dir/pack.toml" | head -n1 | string trim)
echo "PACKWIZ $pack_hash"
# manifest hash
if test -f "$manifest"
set -l manifest_hash (python3 -c "import json; print(json.load(open('$manifest'))['pack']['index_hash'])" 2>/dev/null)
echo "MANIFEST index_hash=$manifest_hash"
if string match -q "*$manifest_hash*" "$pack_hash"
echo " -> manifest in-sync"
else
echo " -> DRIFT: manifest != pack.toml (run fish tools/audit.fish --write-manifest)"
end
else
echo "MANIFEST missing"
end
echo
# local mods vs packwiz
if test -d "$local_dir/mods"
set -l local_count (command ls -1 "$local_dir/mods"/*.jar 2>/dev/null | wc -l | string trim)
set -l pack_count (command ls -1 "$pack_dir/mods"/*.pw.toml 2>/dev/null | wc -l | string trim)
echo "LOCAL mods: $local_count jars"
echo "PACKWIZ mods: $pack_count pw.toml"
# compare filenames (packwiz filenames vs local jars)
set -l tmp_pack (mktemp)
set -l tmp_local (mktemp)
python3 -c "
import glob, re, os
PW=re.compile(r'filename\s*=\s*\"([^\"]+)\"')
for f in glob.glob(os.path.join('$pack_dir', 'mods', '*.pw.toml')):
for line in open(f):
m=PW.search(line)
if m:
print(m.group(1))
break
" | sort > $tmp_pack
python3 -c "
import glob, os
for f in glob.glob(os.path.join('$local_dir', 'mods', '*.jar')):
print(os.path.basename(f))
" | sort > $tmp_local
set -l missing (comm -23 $tmp_pack $tmp_local | head -n 20)
set -l extra (comm -13 $tmp_pack $tmp_local | head -n 20)
set -l missing_count (comm -23 $tmp_pack $tmp_local | wc -l | string trim)
set -l extra_count (comm -13 $tmp_pack $tmp_local | wc -l | string trim)
if test "$missing_count" = "0" -a "$extra_count" = "0"
echo "DRIFT: LOCAL = PACKWIZ (in-sync)"
else
echo "DRIFT DETECTED"
echo " Missing in LOCAL ($missing_count):"
for f in $missing; echo " - $f"; end
echo " Extra in LOCAL ($extra_count):"
for f in $extra; echo " - $f"; end
echo " Action: Production is outdated or Local is drifted — reinstall from Packwiz export"
end
rm $tmp_pack $tmp_local
else
echo "LOCAL: not found at $local_dir/mods"
end
echo
# production hint (repo/data or server-pack.mrpack)
if test -d "$repo/data/mods"
set -l prod_count (command ls -1 "$repo/data/mods"/*.jar 2>/dev/null | wc -l | string trim)
echo "PRODUCTION (repo/data/mods): $prod_count jars"
echo " Hint: compare via docker compose file-mount /modpacks/pack.mrpack"
else if test -f "$repo/server-pack.mrpack"
set -l h (sha256sum "$repo/server-pack.mrpack" 2>/dev/null | cut -c1-16)
echo "PRODUCTION mrpack: $repo/server-pack.mrpack sha256 $h..."
else
echo "PRODUCTION: no local hint (check VPS: docker compose exec mc ls /data/mods | wc -l)"
end
echo
echo "Full audit: fish tools/audit.fish --json | jq .drift"