#!/usr/bin/env bash # Phase 3: parse the stored raw Compass pages for one child into SQLite. # # This runs the `school parse` subcommand in a one-off container that mounts the # service's own data volume (read/write) and the stored raw pages (read-only). # It does not restart or touch the running service. # # Usage: # scripts/parse-compass.sh [--child Harry] [--run latest] [--classify auto] # # Environment overrides: # IMAGE image tag (default 0.5.0-phase7) # VOLUME SQLite volume (default compass-teams-nhs_compass-teams-nhs-data) # RAW_ROOT host path to var/raw (default /var/raw) # SCHOOL_TIMEZONE family timezone (default Australia/Melbourne) # OMNIROUTE_BASE_URL OmniRoute endpoint (default http://127.0.0.1:20129/v1) # TIMEOUT docker command timeout (default 300) # # Importance classification (FR-4) uses OmniRoute when OMNIROUTE_API_KEY is set; # pass --classify none for the offline deterministic rule. set -euo pipefail REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" IMAGE="${IMAGE:-compass-teams-nhs/school:0.5.0-phase7}" VOLUME="${VOLUME:-compass-teams-nhs_compass-teams-nhs-data}" RAW_ROOT="${RAW_ROOT:-$REPO_ROOT/var/raw}" SCHOOL_TIMEZONE="${SCHOOL_TIMEZONE:-Australia/Melbourne}" OMNIROUTE_BASE_URL="${OMNIROUTE_BASE_URL:-http://127.0.0.1:20129/v1}" TIMEOUT="${TIMEOUT:-300}" CHILD="Harry" RUN="latest" CLASSIFY="auto" while [[ $# -gt 0 ]]; do case "$1" in --child) CHILD="$2"; shift 2 ;; --run) RUN="$2"; shift 2 ;; --classify) CLASSIFY="$2"; shift 2 ;; *) echo "unknown argument: $1" >&2; exit 2 ;; esac done if [[ ! -d "$RAW_ROOT" ]]; then echo "raw pages not found at $RAW_ROOT" >&2 exit 1 fi exec timeout "$TIMEOUT" docker run --rm --network host \ -v "$VOLUME:/data" \ -v "$RAW_ROOT:/raw:ro" \ -e SCHOOL_DB_PATH=/data/school.db \ -e SCHOOL_TIMEZONE="$SCHOOL_TIMEZONE" \ -e OMNIROUTE_API_KEY \ -e OMNIROUTE_BASE_URL="$OMNIROUTE_BASE_URL" \ "$IMAGE" parse --child "$CHILD" --run "$RUN" --raw-root /raw --classify "$CLASSIFY"