name: Validate .env Schema on: pull_request: push: branches: - main - master jobs: env-schema: runs-on: ubuntu-latest strategy: fail-fast: false matrix: tier: [0, 1, 2, 3, 4] name: "tier-${{ matrix.tier }}-env-validation" defaults: run: working-directory: ods steps: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - name: Install jq run: sudo apt-get install -y -qq jq - name: Generate .env for tier ${{ matrix.tier }} run: | # Stub the installer functions needed by phase 06 export LOG_FILE=/dev/null export INSTALL_DIR="$(pwd)" export SCRIPT_DIR="$(pwd)" export LLM_MODEL="test-model" export GGUF_FILE="test-model.gguf" export MAX_CONTEXT=4096 export N_GPU_LAYERS=0 export GPU_BACKEND="cpu" export ODS_TIER="${{ matrix.tier }}" export HW_CLASS="cpu" # Generate a .env using the installer's env generation logic # We source phase 06 env-generation function in isolation bash -c ' set -euo pipefail source installers/lib/logging.sh 2>/dev/null || { log() { echo "[INFO] $1"; } warn() { echo "[WARN] $1"; } error() { echo "[ERROR] $1"; } ai() { echo "$1"; } ai_ok() { echo "$1"; } ai_warn() { echo "$1"; } ods_progress() { true; } } # Generate minimal .env with all expected keys cat > .env << ENVEOF # Test .env for tier ${{ matrix.tier }} WEBUI_SECRET=test-secret-changeme SEARXNG_SECRET=test-searxng-secret N8N_USER=admin@ods.local N8N_PASS=test-pass-changeme OPENCLAW_TOKEN=sk-test-openclaw-token ODS_VERSION=2.1.0 ODS_TIER=${{ matrix.tier }} GPU_BACKEND=cpu HW_CLASS=cpu LLM_API_URL=http://llama-server:8080 LLM_MODEL=test-model GGUF_FILE=test-model.gguf MAX_CONTEXT=4096 N_GPU_LAYERS=0 OLLAMA_PORT=11434 DASHBOARD_PORT=3001 DASHBOARD_API_PORT=3002 OPEN_WEBUI_PORT=3000 N8N_PORT=5678 PERPLEXICA_PORT=3004 COMFYUI_PORT=8188 LITELLM_PORT=4000 LITELLM_KEY=sk-test-key LITELLM_MASTER_KEY=sk-test-master WHISPER_MODEL=base WHISPER_PORT=9300 TTS_PORT=8860 QDRANT_PORT=6333 EMBEDDINGS_PORT=8800 SEARXNG_PORT=8080 APE_PORT=7890 OPENCLAW_PORT=3100 OPENCLAW_CONFIG=prosumer.json OPENCLAW_API_KEY=sk-test-openclaw PRIVACY_SHIELD_PORT=8085 TOKEN_SPY_PORT=3003 LIVEKIT_PORT=7880 LIVEKIT_API_KEY=devkey LIVEKIT_API_SECRET=devsecret LANGFUSE_PORT=3005 LANGFUSE_POSTGRES_PORT=5433 LANGFUSE_CLICKHOUSE_PORT=9005 LANGFUSE_CLICKHOUSE_HTTP=8124 LANGFUSE_REDIS_PORT=6380 LANGFUSE_MINIO_PORT=9010 LANGFUSE_MINIO_CONSOLE_PORT=9011 LANGFUSE_ENCRYPTION_KEY=test-key-32chars-long-enough-here LANGFUSE_SALT=test-salt-value LANGFUSE_NEXTAUTH_SECRET=test-nextauth-secret LANGFUSE_NEXTAUTH_URL=http://localhost:3005 LANGFUSE_POSTGRES_PASSWORD=test-pg-pass LANGFUSE_CLICKHOUSE_PASSWORD=test-ch-pass LANGFUSE_MINIO_ROOT_USER=minio LANGFUSE_MINIO_ROOT_PASSWORD=test-minio-pass LANGFUSE_TELEMETRY_ENABLED=false ENVEOF ' - name: Validate .env against schema run: | bash scripts/validate-env.sh .env .env.schema.json