Files
YPMS/.env.example
Chris TonjesandClaude Opus 5.5 5f2d885fdc Phase 0 milestone 0.8: CI pipeline on Gitea Actions
Workflow moved to .gitea/workflows/ci.yml (Gitea is the CI host). Every
gate now passes locally, step-for-step; green on main is pending an
act_runner on gitea.doesworks.net (runs #1-#5 are queued "Waiting").

Gate fixes found by actually running them:
- pip-audit: `--disable-pip` without `-r` was a usage error, so the old
  step could never pass. Now `pip-audit --strict .` audits the runtime
  dependency set from pyproject.
- pip-audit then flagged ecdsa (PYSEC-2026-1325, no fix), a hard dep of
  python-jose. Swapped to PyJWT (HS256 only; 3-line change in
  auth/security.py). Flag to OWC.
- PyJWT warned the test JWT secret was 11 bytes. JWT_SECRET now requires
  >= 32 bytes (RFC 7518 s3.2) at settings load; dev/compose/test defaults
  updated. Test-only value carries an inline gitleaks:allow.
- bandit B101: assert in retention._count_past replaced with a raise.
- gitleaks: gitleaks-action needs a GitHub token/license; replaced with
  the pinned 8.30.1 binary, sha256-verified, scanning full history.

Added:
- SBOM: CycloneDX 1.6 from a clean runtime-only venv (39 components),
  uploaded as a CI artifact. YPMS-POAM-042.
- cyclonedx-bom in dev extras; CI outputs gitignored.

158 tests passing, 95.83% coverage; ruff, mypy, bandit, pip-audit,
gitleaks clean.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 10:57:09 -04:00

29 lines
980 B
Bash

# YPMS local development environment
#
# Copy this file to .env for local runs. Do NOT commit .env.
# Production values live in Azure Key Vault (Phase 1+).
# ---- Database ----
# Local (host) → Postgres exposed on 5433 to avoid clashing with OWC on 5432
DATABASE_URL=postgresql+psycopg://ypms:ypms@localhost:5433/ypms
# ---- JWT ----
# >= 32 bytes (HS256, RFC 7518 §3.2); the app refuses to start otherwise.
JWT_SECRET=dev-jwt-secret-change-me-32-bytes-min
JWT_ALG=HS256
ACCESS_TOKEN_TTL_MINUTES=60
REFRESH_TOKEN_TTL_DAYS=14
# ---- App-layer column encryption ----
# Phase 0: local key material only. Phase 1 swaps to Azure Key Vault.
# Any 32-byte value in dev. Never use this string in staging/prod.
COLUMN_ENCRYPTION_KEY=dev-col-enc-key-change-me-32bytes-______
# ---- Logging + environment ----
LOG_LEVEL=INFO
ENV=dev
# ---- CORS (dev only) ----
# Comma-separated origins allowed to hit the API from a browser.
CORS_ORIGINS=http://localhost:5173,http://127.0.0.1:5173