#!/usr/bin/env bash # cops — thin wrapper: run any career-ops command inside the docker container. # # Examples: # ./cops doctor # ./cops verify # ./cops pdf cv.html output/cv.pdf # ./cops scan # ./cops node generate-pdf.mjs cv.html output/cv.pdf # ./cops shell # interactive bash # ./cops up | down | rebuild | logs # # Anything not matching a known subcommand is forwarded to npm run # when package.json defines it, otherwise executed verbatim inside the container. set -euo pipefail cd "$(dirname "$0")" SERVICE="career-ops" ensure_up() { if ! docker compose ps --services --filter "status=running" | grep -qx "$SERVICE"; then docker compose up -d >/dev/null fi } case "${1:-}" in ""|help|-h|--help) sed -n '2,15p' "$0" | sed 's/^# \{0,1\}//' exit 0 ;; up) docker compose up -d exit 0 ;; down) docker compose down exit 0 ;; rebuild) docker compose build --no-cache docker compose up -d exit 0 ;; logs) shift docker compose logs -f "$@" exit 0 ;; shell|bash) ensure_up exec docker compose exec -it "$SERVICE" bash ;; node|npm|npx|go|bash|sh) ensure_up exec docker compose exec -it "$SERVICE" "$@" ;; esac # Map known npm scripts → `npm run `. Anything else is forwarded raw. cmd="$1"; shift || true case "$cmd" in doctor|verify|normalize|dedup|merge|pdf|sync-check|liveness|scan|gemini:eval|update|update:check|rollback) ensure_up exec docker compose exec -it "$SERVICE" npm run --silent "$cmd" -- "$@" ;; *) ensure_up exec docker compose exec -it "$SERVICE" "$cmd" "$@" ;; esac