2.5 KiB
Development and tests
Run npm test before every commit and whenever changing authentication, API authorization, service-worker behavior, or persistence. Add a regression test under test/ for every new route and for every security/ownership bug. Tests use an in-memory PostgreSQL-compatible database; production migration is run automatically at startup against DATABASE_URL.
Pushes to master automatically run .gitea/workflows/deploy.yml: it installs dependencies, runs npm test, builds/recreates the Unraid Docker project, and verifies both the container and https://roast.srmr.xyz/. Watch each run in Repository → Actions; do not report a pushed change complete until its Actions run succeeds. Production runs from /mnt/user/dev/roast_command_center on xNAS. The self-hosted Gitea runner is the single gitea-act-runner container (registered as unraid-roast-deployer); its custom image includes Node, Git, Docker Compose, and curl, and it reads the protected production environment file as /run/roast-production.env. Do not create duplicate runners, expose a runner registration token in a command/log/commit, or manually redeploy after a successful pipeline.
The workflow copies its checked-out revision to an isolated /tmp build directory before testing and deploying because the runner's host-executor workspace is ephemeral. docker-compose.yml accepts APP_PORT (production defaults to 8090); the container-startup test uses 18090 so CI can run alongside production without binding its port.
Docker builds run scripts/stamp-asset-version.mjs, which replaces __ASSET_VERSION__ in browser assets and the service-worker cache. Keep those markers intact: each build must produce fresh CSS/JS URLs so Cloudflare cannot serve a mixed stale frontend. The Docker entrypoint copies the read-only PI_AGENT_CONFIG_DIR seed mounted at /run/pi-agent-config into writable /home/node/.pi/agent; Pi locks auth.json at runtime, so do not mount that directory directly over the runtime path or prefill will lose configured model credentials.
For local development, copy .env.example, start docker compose up --build, then visit http://localhost:8090. Production must set APP_ORIGIN=https://roast.srmr.xyz, COOKIE_SECURE=true, a strong POSTGRES_PASSWORD, and a random BOOTSTRAP_SETUP_TOKEN. Bootstrap [email protected] exactly once at POST /api/auth/bootstrap, then remove BOOTSTRAP_SETUP_TOKEN from deployment configuration. Never commit credentials or a bootstrap password/token.