mirror of
https://github.com/joelhooks/joelclaw.git
synced 2026-09-19 01:24:04 +08:00
0719010a84
Move NAS placement behind shared configuration, update docs paths, and remove stale storage defaults.
Focused tests, CLI/docs-api typechecks, and changed-file Biome checks pass. CI failures are pre-existing workflow package-manager duplication and an unrelated Vercel ADR auth failure.
SR 🐀
56 lines
1.8 KiB
Bash
Executable File
56 lines
1.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
NAS_BACKUPS_ROOT="${JOELCLAW_NAS_BACKUPS_HDD_ROOT:-/Volumes/backups/services/joelclaw}"
|
|
ARCHIVE_ROOT="${SYSTEM_LOG_ARCHIVE_ROOT:-${NAS_BACKUPS_ROOT}/slog/archive}"
|
|
SOURCE="panda:~/Vault/system/system-log.jsonl"
|
|
STAMP="$(date -u +%Y%m%dT%H%M%SZ)"
|
|
SNAPSHOT="${ARCHIVE_ROOT}/system-log-panda-${STAMP}.jsonl"
|
|
RECEIPT="${SNAPSHOT}.receipt.json"
|
|
TMP="$(mktemp -t panda-system-log.XXXXXX)"
|
|
trap 'rm -f "$TMP" "${SNAPSHOT}.partial" "${RECEIPT}.partial"' EXIT
|
|
|
|
if [[ ! -d "$NAS_ROOT" ]]; then
|
|
echo "NAS root is unavailable: $NAS_ROOT" >&2
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "$ARCHIVE_ROOT"
|
|
if [[ -e "$SNAPSHOT" || -e "$RECEIPT" || -e "${SNAPSHOT}.partial" || -e "${RECEIPT}.partial" ]]; then
|
|
echo "Refusing to overwrite an existing snapshot or receipt for $STAMP" >&2
|
|
exit 1
|
|
fi
|
|
scp "$SOURCE" "$TMP"
|
|
if [[ ! -s "$TMP" ]]; then
|
|
echo "Panda system log copy is empty; refusing to archive" >&2
|
|
exit 1
|
|
fi
|
|
|
|
DOC_COUNT="$(wc -l < "$TMP" | tr -d ' ')"
|
|
SOURCE_BYTES="$(wc -c < "$TMP" | tr -d ' ')"
|
|
SOURCE_SHA256="$(shasum -a 256 "$TMP" | awk '{print $1}')"
|
|
install -m 600 "$TMP" "${SNAPSHOT}.partial"
|
|
mv "${SNAPSHOT}.partial" "$SNAPSHOT"
|
|
BYTES="$(wc -c < "$SNAPSHOT" | tr -d ' ')"
|
|
SHA256="$(shasum -a 256 "$SNAPSHOT" | awk '{print $1}')"
|
|
if [[ "$SHA256" != "$SOURCE_SHA256" || "$BYTES" != "$SOURCE_BYTES" ]]; then
|
|
echo "NAS snapshot verification failed" >&2
|
|
exit 1
|
|
fi
|
|
|
|
cat > "${RECEIPT}.partial" <<EOF
|
|
{
|
|
"ok": true,
|
|
"source": "panda:~/Vault/system/system-log.jsonl",
|
|
"snapshotPath": "${SNAPSHOT}",
|
|
"archivedAt": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
|
|
"lineCount": ${DOC_COUNT},
|
|
"bytes": ${BYTES},
|
|
"sha256": "${SHA256}"
|
|
}
|
|
EOF
|
|
chmod 600 "${RECEIPT}.partial"
|
|
mv "${RECEIPT}.partial" "$RECEIPT"
|
|
|
|
printf 'Snapshot: %s\nReceipt: %s\nSHA-256: %s\nLines: %s\n' "$SNAPSHOT" "$RECEIPT" "$SHA256" "$DOC_COUNT"
|