#!/bin/bash set -e # Generate a .env file from environment variables (e.g., Hugging Face Secrets) # By default, capture the common keys this app uses. Override with ENV_KEYS. ENV_PATH=${ENV_PATH:-"/app/.env"} KEYS=${ENV_KEYS:-"SECRET_KEY DATABASE_URL PORT"} # Try to write to ENV_PATH, fall back to /tmp if not writable if ! ( mkdir -p "$(dirname "$ENV_PATH")" >/dev/null 2>&1 && touch "$ENV_PATH" >/dev/null 2>&1 ); then echo "[warn] Cannot write to $ENV_PATH; falling back to /tmp/.env" >&2 ENV_PATH="/tmp/.env" : > "$ENV_PATH" # ensure file exists fi echo "# Generated by docker-entrypoint.sh" > "$ENV_PATH" for key in $KEYS; do val=$(printenv "$key") if [ -n "$val" ]; then printf "%s=%s\n" "$key" "$val" >> "$ENV_PATH" fi done # Export path so the app can load it explicitly if needed export DOTENV_FILE="$ENV_PATH" # Apply DB migrations (works for SQLite or external DB via DATABASE_URL) if command -v alembic >/dev/null 2>&1; then if ! alembic upgrade head; then echo "[warn] Alembic migration failed; attempting fallback DB" >&2 if [ -n "$DATABASE_URL" ]; then # Fallback to a local SQLite DB in /tmp when external DB is unreachable export DATABASE_URL="sqlite:////tmp/ai_schedule.db" printf "DATABASE_URL=%s\n" "$DATABASE_URL" >> "$ENV_PATH" if ! alembic upgrade head; then echo "[warn] Alembic migration failed on fallback as well; proceeding to start app" >&2 fi else echo "[warn] No DATABASE_URL set; using default app config" >&2 fi fi fi exec "$@"