Remove superseded thesis-seed drafts and legacy s9pk seed artifacts
thesis-seed v1–v4 are superseded by v5 (the version seeded by thesis_seed.py) and had no inbound references. refresh_seed.sh and seed/README.md are 0.3.5-era seed-snapshot helpers the 0.4 entrypoint no longer uses (DEPLOY_040 labels both LEGACY). data/test_write was a stray 0-byte write-probe. Folder-rename housekeeping; no runtime change.
This commit is contained in:
@@ -1,116 +0,0 @@
|
||||
#!/bin/bash
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# refresh_seed.sh
|
||||
# Pull the live Ten31 Database data off a StartOS 0.3.5 host
|
||||
# and stage it as the seed snapshot baked into the 0.4 image.
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
#
|
||||
# Usage:
|
||||
# ./refresh_seed.sh <ssh-user@host> [remote-data-dir]
|
||||
#
|
||||
# Examples:
|
||||
# ./refresh_seed.sh start9@192.168.1.50
|
||||
# ./refresh_seed.sh embassy@embassy.local \
|
||||
# /embassy-data/package-data/volumes/ten-database/data/main
|
||||
#
|
||||
# What it does:
|
||||
# 1. Finds the remote /data directory for the ten-database service.
|
||||
# 2. Copies crm.db, backups/, and (optionally) .crm-secret into
|
||||
# start9/0.4/seed/data/ on this machine.
|
||||
# 3. Prints a row-count summary so you can verify content.
|
||||
#
|
||||
# After it finishes, run:
|
||||
# make clean && make x86
|
||||
# from this (start9/0.4/) directory to rebuild the .s9pk.
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
|
||||
set -eu
|
||||
|
||||
if [ $# -lt 1 ]; then
|
||||
echo "Usage: $0 <ssh-user@host> [remote-data-dir]"
|
||||
echo ""
|
||||
echo "Remote data dir defaults (tried in order):"
|
||||
echo " /embassy-data/package-data/volumes/ten-database/data/main"
|
||||
echo " /mnt/embassy-os/package-data/volumes/ten-database/data/main"
|
||||
echo " /var/lib/embassy/services/ten-database/data"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
REMOTE="$1"
|
||||
REMOTE_DIR="${2:-}"
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
SEED_DIR="$SCRIPT_DIR/seed/data"
|
||||
|
||||
echo ""
|
||||
echo " Staging production seed from $REMOTE"
|
||||
echo " into $SEED_DIR"
|
||||
echo ""
|
||||
|
||||
# Auto-detect remote data dir if not supplied
|
||||
if [ -z "$REMOTE_DIR" ]; then
|
||||
echo " Probing for remote data directory..."
|
||||
for candidate in \
|
||||
"/embassy-data/package-data/volumes/ten-database/data/main" \
|
||||
"/mnt/embassy-os/package-data/volumes/ten-database/data/main" \
|
||||
"/var/lib/embassy/services/ten-database/data"; do
|
||||
if ssh "$REMOTE" "[ -f \"$candidate/crm.db\" ]" 2>/dev/null; then
|
||||
REMOTE_DIR="$candidate"
|
||||
echo " found: $REMOTE_DIR"
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ -z "$REMOTE_DIR" ]; then
|
||||
echo " Could not auto-detect a valid data directory with crm.db on $REMOTE."
|
||||
echo " Re-run this script and pass the path explicitly as the 2nd argument."
|
||||
exit 2
|
||||
fi
|
||||
fi
|
||||
|
||||
mkdir -p "$SEED_DIR/backups"
|
||||
|
||||
echo ""
|
||||
echo " Copying crm.db ..."
|
||||
scp "$REMOTE:$REMOTE_DIR/crm.db" "$SEED_DIR/crm.db"
|
||||
|
||||
echo " Copying backups/ (if present) ..."
|
||||
if ssh "$REMOTE" "[ -d \"$REMOTE_DIR/backups\" ]" 2>/dev/null; then
|
||||
scp -r "$REMOTE:$REMOTE_DIR/backups/." "$SEED_DIR/backups/" || true
|
||||
else
|
||||
echo " (none found, skipping)"
|
||||
fi
|
||||
|
||||
echo " Copying .crm-secret (optional — keeps existing JWTs valid) ..."
|
||||
if ssh "$REMOTE" "[ -f \"$REMOTE_DIR/.crm-secret\" ]" 2>/dev/null; then
|
||||
read -r -p " Include .crm-secret in the baked image? [y/N] " ans
|
||||
case "$ans" in
|
||||
[yY]*) scp "$REMOTE:$REMOTE_DIR/.crm-secret" "$SEED_DIR/.crm-secret" ;;
|
||||
*) echo " skipping .crm-secret; a fresh secret will be generated on first boot" ;;
|
||||
esac
|
||||
else
|
||||
echo " (no .crm-secret on remote)"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo " Summary of staged seed:"
|
||||
ls -la "$SEED_DIR"
|
||||
echo ""
|
||||
|
||||
if command -v python3 >/dev/null 2>&1 && [ -f "$SEED_DIR/crm.db" ]; then
|
||||
python3 - <<PY
|
||||
import sqlite3
|
||||
db = sqlite3.connect("$SEED_DIR/crm.db")
|
||||
cur = db.cursor()
|
||||
cur.execute("PRAGMA integrity_check")
|
||||
print(" integrity_check:", cur.fetchone()[0])
|
||||
for t in ("users","fundraising_state","fundraising_funds","fundraising_views",
|
||||
"contacts","organizations","audit_log","feature_requests","app_settings"):
|
||||
try:
|
||||
cur.execute(f"SELECT COUNT(*) FROM {t}")
|
||||
print(f" {t:30s} {cur.fetchone()[0]} rows")
|
||||
except Exception as e:
|
||||
print(f" {t}: n/a ({e})")
|
||||
PY
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo " Seed refreshed. Next: cd $(dirname "$SCRIPT_DIR")/0.4 && make clean && make x86"
|
||||
@@ -1,58 +0,0 @@
|
||||
# Seed Snapshot (baked into the Docker image)
|
||||
|
||||
Anything under `seed/data/` is copied into the container image at build time
|
||||
and placed at `/app/seed/data/`. On first boot, if `/data/crm.db` is not
|
||||
present on the StartOS service volume, `docker_entrypoint.sh` copies
|
||||
`/app/seed/data/.` into `/data/.` so the new 0.4 install starts with the
|
||||
preserved data instead of an empty database.
|
||||
|
||||
## What's currently baked in
|
||||
|
||||
Initial snapshot was taken from the repo-level `data/` directory at build
|
||||
time (the same DB that the 0.3.5 dev workflow pointed at). Files:
|
||||
|
||||
- `seed/data/crm.db` — SQLite database (investors, contacts, fundraising
|
||||
rows, views, feature_requests, users, app_settings, etc.)
|
||||
- `seed/data/backups/*.json` — app-level snapshot exports
|
||||
|
||||
## Refreshing the seed before a build
|
||||
|
||||
If you want the 0.4 deploy to come up with the absolute latest production
|
||||
state from the 0.3.5 StartOS server, replace the files in `seed/data/`
|
||||
BEFORE running `make`:
|
||||
|
||||
```sh
|
||||
# 1) On the 0.3.5 StartOS server, take a fresh app backup and/or grab
|
||||
# the live database file:
|
||||
# /media/embassy/services/ten-database/data/crm.db (canonical)
|
||||
# /media/embassy/services/ten-database/data/backups/*.json (optional)
|
||||
# /media/embassy/services/ten-database/data/.crm-secret (optional)
|
||||
# Exact path may differ by StartOS 0.3.5 build.
|
||||
#
|
||||
# 2) scp them into this folder:
|
||||
scp embassy@<old-host>:/media/.../ten-database/data/crm.db \
|
||||
start9/0.4/seed/data/crm.db
|
||||
# (Optional) include backups + secret:
|
||||
scp embassy@<old-host>:/media/.../ten-database/data/backups/* \
|
||||
start9/0.4/seed/data/backups/
|
||||
scp embassy@<old-host>:/media/.../ten-database/data/.crm-secret \
|
||||
start9/0.4/seed/data/.crm-secret
|
||||
#
|
||||
# 3) Rebuild:
|
||||
cd start9/0.4 && make clean && make x86
|
||||
```
|
||||
|
||||
## Keeping `.crm-secret` out of the image
|
||||
|
||||
By default `seed/data/.crm-secret` is NOT included. The first boot on the
|
||||
new machine generates a fresh JWT secret. Existing password hashes in
|
||||
`crm.db` remain valid, so users just log in once on the new host.
|
||||
|
||||
If you WANT to preserve the exact secret (so already-issued JWTs remain
|
||||
valid), drop the file at `seed/data/.crm-secret` and rebuild.
|
||||
|
||||
## Safety
|
||||
|
||||
The entrypoint never overwrites an existing `/data/crm.db`. If the volume
|
||||
already contains data (StartOS restore, manual SSH pre-seed, prior install)
|
||||
the seed is skipped and a `.seeded` marker is written.
|
||||
Reference in New Issue
Block a user