Add Doris Schoolhouse and clean pending homelab changes

This commit is contained in:
Fizzlepoof
2026-05-15 21:58:42 +00:00
parent 0e7dd21c66
commit 5c889f108e
60 changed files with 3145 additions and 20 deletions

View File

@@ -0,0 +1,24 @@
#!/usr/bin/env bash
set -euo pipefail
cd "$(dirname "$0")/.."
SCHEMA_FILE="app/db/schema.sql"
if [ ! -f "$SCHEMA_FILE" ]; then
echo "schema file missing: $SCHEMA_FILE" >&2
exit 1
fi
if [ -n "${DATABASE_URL:-}" ] && command -v python3 >/dev/null 2>&1; then
export PYTHONPATH=.
python3 app/scripts/apply_schema.py
exit $?
fi
cat >&2 <<'MSG'
Cannot apply schema automatically.
Requirements:
- DATABASE_URL must be set
- python3 must be available
- psycopg must be installed for direct apply
Alternative: run the SQL in app/db/schema.sql manually against the schoolhouse database.
MSG
exit 1

View File

@@ -0,0 +1,8 @@
#!/usr/bin/env bash
set -euo pipefail
cd "$(dirname "$0")/.."
export SCHOOLHOUSE_STORAGE_BACKEND="${SCHOOLHOUSE_STORAGE_BACKEND:-json}"
export SCHOOLHOUSE_STATE_DIR="${SCHOOLHOUSE_STATE_DIR:-/tmp/doris-schoolhouse-state}"
export UPLOAD_TMP_DIR="${UPLOAD_TMP_DIR:-/tmp/doris-schoolhouse-uploads}"
export PYTHONPATH=.
python3 app/scripts/bootstrap_state.py

View File

@@ -0,0 +1,22 @@
#!/usr/bin/env bash
set -euo pipefail
have() { command -v "$1" >/dev/null 2>&1; }
printf 'Doris Schoolhouse environment check\n'
printf '================================\n'
for cmd in python3 ffmpeg psql docker curl; do
if have "$cmd"; then
printf '%-10s %s\n' "$cmd" "$(command -v "$cmd")"
else
printf '%-10s %s\n' "$cmd" "MISSING"
fi
done
python3 - <<'PY'
import importlib.util
mods = ['fastapi', 'uvicorn', 'psycopg']
for mod in mods:
print(f'{mod:10} ', 'installed' if importlib.util.find_spec(mod) else 'MISSING')
PY

View File

@@ -0,0 +1,12 @@
#!/usr/bin/env bash
set -euo pipefail
if [ "$#" -lt 1 ]; then
echo "usage: $0 <recording_id>" >&2
exit 1
fi
cd "$(dirname "$0")/.."
export SCHOOLHOUSE_STORAGE_BACKEND="${SCHOOLHOUSE_STORAGE_BACKEND:-json}"
export SCHOOLHOUSE_STATE_DIR="${SCHOOLHOUSE_STATE_DIR:-/tmp/doris-schoolhouse-state}"
export UPLOAD_TMP_DIR="${UPLOAD_TMP_DIR:-/tmp/doris-schoolhouse-uploads}"
export PYTHONPATH=.
python3 app/scripts/process_recording.py "$1"

View File

@@ -0,0 +1,8 @@
#!/usr/bin/env bash
set -euo pipefail
cd "$(dirname "$0")/.."
export SCHOOLHOUSE_STORAGE_BACKEND="${SCHOOLHOUSE_STORAGE_BACKEND:-json}"
export SCHOOLHOUSE_STATE_DIR="${SCHOOLHOUSE_STATE_DIR:-/tmp/doris-schoolhouse-state}"
export UPLOAD_TMP_DIR="${UPLOAD_TMP_DIR:-/tmp/doris-schoolhouse-uploads}"
export PYTHONPATH=.
uvicorn app.main:app --host 0.0.0.0 --port "${SCHOOLHOUSE_PORT:-8091}"

View File

@@ -0,0 +1,21 @@
#!/usr/bin/env bash
set -euo pipefail
if [ "$#" -lt 2 ]; then
echo "usage: $0 <file> <class_name> [assignment_name]" >&2
exit 1
fi
FILE="$1"
CLASS_NAME="$2"
ASSIGNMENT_NAME="${3:-Sample Assignment}"
TARGET="${N8N_BASE_URL:-https://n8n.example.com}${SCHOOLHOUSE_N8N_ASSIGNMENT_WEBHOOK:-/webhook/school/intake/upload}"
cat <<MSG
Dry-run assignment handoff preview
Target: $TARGET
Command:
curl -X POST "$TARGET" \\
-F "document=@$FILE" \\
-F "class_name=$CLASS_NAME" \\
-F "assignment_name=$ASSIGNMENT_NAME" \\
-F "submission_kind=assignment_turn_in" \\
-F "source=doris-schoolhouse"
MSG

View File

@@ -0,0 +1,19 @@
#!/usr/bin/env bash
set -euo pipefail
if [ "$#" -lt 2 ]; then
echo "usage: $0 <file> <class_name>" >&2
exit 1
fi
FILE="$1"
CLASS_NAME="$2"
TARGET="${N8N_BASE_URL:-https://n8n.example.com}${SCHOOLHOUSE_N8N_RECORDING_WEBHOOK:-/webhook/class/upload}"
cat <<MSG
Dry-run recording handoff preview
Target: $TARGET
Command:
curl -X POST "$TARGET" \\
-F "data=@$FILE" \\
-F "class_name=$CLASS_NAME" \\
-F "lecture_title=${CLASS_NAME} Recording" \\
-F "source=doris-schoolhouse"
MSG