diff --git a/docs/gui-zip-recurring-scrape-bridge.md b/docs/gui-zip-recurring-scrape-bridge.md index daa1ccab..55c3159d 100644 --- a/docs/gui-zip-recurring-scrape-bridge.md +++ b/docs/gui-zip-recurring-scrape-bridge.md @@ -7,7 +7,7 @@ DiscordChatExporter.linux-x64/ ← GUI (this folder) DiscordChatExporter/ ← source repo (scripts, Docker, config) ``` -Copy this file to `../DiscordChatExporter.linux-x64/RECURRING-SCRAPE.md` if you want the quick reference next to the GUI binary. +Sync to the GUI zip folder: `./scripts/sync-gui-bridge-doc.sh` (writes `../DiscordChatExporter.linux-x64/RECURRING-SCRAPE.md` by default). ## Quick start (run from source repo) diff --git a/docs/plans/2026-05-29-031-feat-sync-gui-bridge-doc-plan.md b/docs/plans/2026-05-29-031-feat-sync-gui-bridge-doc-plan.md new file mode 100644 index 00000000..62bfdba1 --- /dev/null +++ b/docs/plans/2026-05-29-031-feat-sync-gui-bridge-doc-plan.md @@ -0,0 +1,28 @@ +--- +title: feat: Sync GUI zip bridge doc from source repo +type: feat +status: complete +date: 2026-05-29 +origin: /lfg — plan 013/019 planned sync-workspace-bridge.sh; bridge doc now versioned in git +--- + +# feat: Sync GUI zip bridge doc from source repo + +## Summary + +Add `scripts/sync-gui-bridge-doc.sh` to copy `docs/gui-zip-recurring-scrape-bridge.md` into the sibling GUI zip folder as `RECURRING-SCRAPE.md`, with a smoke test using a temp destination. + +## Requirements + +| ID | Requirement | +|----|-------------| +| R1 | `sync-gui-bridge-doc.sh` copies bridge doc to configurable dest (default `../DiscordChatExporter.linux-x64/RECURRING-SCRAPE.md`) | +| R2 | `--dry-run` prints source and destination | +| R3 | `sync-gui-bridge-doc-smoke.sh` verifies copy into temp dir | +| R4 | Operator checklist and gui bridge doc mention the sync script | +| R5 | `run-all-smokes.sh` passes | + +## Verification + +- `./scripts/tests/sync-gui-bridge-doc-smoke.sh` +- `DCE_MIN_FREE_MB=0 ./scripts/run-all-smokes.sh` diff --git a/docs/recurring-scrape-operator-checklist.md b/docs/recurring-scrape-operator-checklist.md index 46230ce8..18a545c2 100644 --- a/docs/recurring-scrape-operator-checklist.md +++ b/docs/recurring-scrape-operator-checklist.md @@ -33,7 +33,7 @@ Installed jobs are marked `# BEGIN discord-scrape` in `crontab -l`. Logs append ## GUI zip only -See [gui-zip-recurring-scrape-bridge.md](gui-zip-recurring-scrape-bridge.md) or run `../DiscordChatExporter.linux-x64/bootstrap-recurring-scrape.sh`. +See [gui-zip-recurring-scrape-bridge.md](gui-zip-recurring-scrape-bridge.md), run `./scripts/sync-gui-bridge-doc.sh`, or use `../DiscordChatExporter.linux-x64/bootstrap-recurring-scrape.sh`. Validate scripts after changes: diff --git a/scripts/sync-gui-bridge-doc.sh b/scripts/sync-gui-bridge-doc.sh new file mode 100755 index 00000000..55cd113c --- /dev/null +++ b/scripts/sync-gui-bridge-doc.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash + +set -Eeuo pipefail + +SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P) +REPO_ROOT="${DCE_REPO_ROOT:-$(cd "$SCRIPT_DIR/.." && pwd -P)}" +SOURCE_DOC="$REPO_ROOT/docs/gui-zip-recurring-scrape-bridge.md" +DEFAULT_DEST="$REPO_ROOT/../DiscordChatExporter.linux-x64/RECURRING-SCRAPE.md" +DEST_PATH="${DCE_GUI_BRIDGE_DEST:-$DEFAULT_DEST}" +DRY_RUN=0 + +usage() { + cat <&2 + exit 1 +} + +main() { + while (($#)); do + case "$1" in + --dest) + [[ $# -ge 2 ]] || die "Missing value for --dest." + DEST_PATH=$2 + shift 2 + ;; + --dry-run) + DRY_RUN=1 + shift + ;; + --help|-h) + usage + exit 0 + ;; + *) + die "Unknown option: $1" + ;; + esac + done + + [[ -f "$SOURCE_DOC" ]] || die "Missing source doc: $SOURCE_DOC" + local dest_dir + dest_dir=$(dirname "$DEST_PATH") + [[ -d "$dest_dir" ]] || die "Destination directory does not exist: $dest_dir (create it or pass --dest)" + + if (( DRY_RUN == 1 )); then + printf 'Would copy:\n %s\n -> %s\n' "$SOURCE_DOC" "$DEST_PATH" + exit 0 + fi + + cp -f "$SOURCE_DOC" "$DEST_PATH" + printf 'Synced GUI bridge doc to %s\n' "$DEST_PATH" +} + +main "$@" diff --git a/scripts/tests/sync-gui-bridge-doc-smoke.sh b/scripts/tests/sync-gui-bridge-doc-smoke.sh new file mode 100755 index 00000000..ed7d702a --- /dev/null +++ b/scripts/tests/sync-gui-bridge-doc-smoke.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +set -Eeuo pipefail + +REPO_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd -P) +SYNC="$REPO_ROOT/scripts/sync-gui-bridge-doc.sh" +TMP_DIR=$(mktemp -d "${TMPDIR:-/tmp}/dce-bridge-sync-smoke.XXXXXX") +DEST="$TMP_DIR/gui-zip/RECURRING-SCRAPE.md" + +cleanup() { + rm -rf "$TMP_DIR" +} +trap cleanup EXIT + +mkdir -p "$TMP_DIR/gui-zip" + +"$SYNC" --dest "$DEST" +[[ -f "$DEST" ]] || { printf 'ERROR: dest missing\n' >&2; exit 1; } +grep -q 'operator-handoff' "$DEST" || { printf 'ERROR: dest content unexpected\n' >&2; exit 1; } + +printf 'sync-gui-bridge-doc-smoke: ok\n'