#!/bin/sh set -e # Include app binaries in our path export PATH="/app/.venv/bin:$PATH" # Shared config : "${ROOM_CAL_DATA_HOME:=/config}" export ROOM_CAL_DATA_HOME if [ -z "$TZ" ] && [ -f "$ROOM_CAL_DATA_HOME/config.json" ]; then TZ=$(python3 -c "import json,sys; print(json.load(open('$ROOM_CAL_DATA_HOME/config.json')).get('timezone',''))" 2>/dev/null || true) fi : "${TZ:=UTC}" export TZ if [ -z "$ROOM_CAL_API_URL" ] && [ -f "$ROOM_CAL_DATA_HOME/config.json" ]; then ROOM_CAL_API_URL=$(python3 -c "import json,sys; print(json.load(open('$ROOM_CAL_DATA_HOME/config.json')).get('api_url',''))" 2>/dev/null || true) fi export ROOM_CAL_API_URL SERVICE="${1:-api}" # Shared API config : "${API_HOST:=0.0.0.0}" : "${API_PORT:=8000}" : "${LOG_LEVEL:=info}" # App builds its own loopback URL from API_PORT (internal credential upload) export API_PORT LOG_CONFIG=/etc/uvicorn_log.json [ -f "${ROOM_CAL_DATA_HOME}/uvicorn_log.json" ] && LOG_CONFIG="${ROOM_CAL_DATA_HOME}/uvicorn_log.json" # Calc-only API if [ "$SERVICE" = "calc" ]; then exec uvicorn "room_cal.api.calc_app:app" \ --host "$API_HOST" \ --port "$API_PORT" \ --log-config "$LOG_CONFIG" \ --log-level "$LOG_LEVEL" # Standard API else export DISPLAY=:99 Xvfb ${DISPLAY} -screen 0 1280x720x24 -ac & exec uvicorn "room_cal.api:create_app" --factory \ --host "$API_HOST" \ --port "$API_PORT" \ --log-config "$LOG_CONFIG" \ --log-level "$LOG_LEVEL" fi