# crafting-table runtime config — every key is optional; defaults shown. # # Copy to `.env` and edit, or pass each key explicitly to `docker compose`. # SQLite ledger location (created on first boot) CRAFTING_DB=/data/crafting.db # Where workspaces (bare clones + per-job worktrees) live CRAFTING_WORKSPACE=/workspace # Per-job log files: /data/jobs/.log CRAFTING_LOG_DIR=/data/jobs # Admin bearer plaintext is written here on first boot, chmod 600 CRAFTING_ADMIN_BEARER=/data/admin-bearer.txt # Bounded asyncio pool size — how many recipes can run concurrently CRAFTING_MAX_CONCURRENT=4 # HTTP listen socket CRAFTING_PORT=8810 CRAFTING_BIND=0.0.0.0 # Default per-job timeout in seconds (recipes can override via timeout_secs) CRAFTING_DEFAULT_JOB_TIMEOUT=1800 # Override the default LAN allowlist if you want stricter scoping. # Default: 10/8, 172.16/12, 192.168/16, 127/8, ::1/128 # CRAFTING_LAN_CIDRS=192.168.0.0/16,127.0.0.0/8 # Workspace gc — how often to sweep for stale worktrees, and the age cutoff. CRAFTING_GC_INTERVAL=3600 CRAFTING_GC_AGE=86400 # --- Email digest (optional, off by default) ------------------------------- # If CRAFTING_SMTP_HOST is empty, the digest scheduler stays disabled and # the server logs a "digest disabled" warning at startup. Setting it on # enables the daily 06:00 PT loop. # CRAFTING_SMTP_HOST=postfix.sulkta.com # CRAFTING_SMTP_PORT=587 # CRAFTING_SMTP_USER=crafting-table@sulkta.com # CRAFTING_SMTP_PASS= # CRAFTING_SMTP_FROM=crafting-table@sulkta.com # CRAFTING_SMTP_TLS=1