M0: Local MinIO dev stack and parallel-safe e2e harness (ENG-242) #8

Merged demi.dev
targeting main from stoopkidddd/eng-242-m0-local-dev-stack-minio-env-example-and-parallel-safe-e2e
Merged opened by and assigned to demi.dev
targeting main from stoopkidddd/eng-242-m0-local-dev-stack-minio-env-example-and-parallel-safe-e2e

Linear: https://linear.app/engineereddev/issue/ENG-242

What's in this PR:

  • docker-compose.yml: MinIO on 127.0.0.1:9000/9001 with dev CORS, plus minio-init (idempotent bucket pneumo). The server profile is commented out.
  • .env.example: the §12.3 names with fake dev values.
  • scripts/e2e/minio.ts:
    • start / stop with unique pneumo-e2e-* containers on random ports, an env file per instance, and stale-container cleanup after 2 hours;
    • native mode, used automatically when there's no Docker;
    • startMinio() / stopMinio() APIs and SIGINT cleanup.
  • mise tasks dev:infra, dev and check:infra (compose config, Biome, and a strict type-check of the harness). check:infra is added to check.

Verify (lead, with clean node_modules):

pnpm install --frozen-lockfile → install exit=0
mise run dev:infra → exit 0 · eng-242-minio-1 healthy 127.0.0.1:9000-9001 · console http=200
minio.ts start --env-out /tmp/a.env → S3_ENDPOINT=http://127.0.0.1:32784
minio.ts start --env-out /tmp/b.env → S3_ENDPOINT=http://127.0.0.1:32783
docker ps --filter name=pneumo-e2e- → 2 containers · both stop → exit 0 · 0 left
mise run check:infra → exit 0 · mise run check → exit 0 · compose down → clean

omp also tested native mode with Homebrew minio and minio-mc.

Deviation (needs a decision): the official MinIO images can't be pulled anonymously any more. The lead confirmed:

  • docker pull minio/minio:latest → "pull access denied"
  • quay.io/minio/minio → "unauthorized"

The compose file and the Docker mode therefore use pinned bitnamilegacy/minio:2025.4.22-debian-12-r2 and bitnamilegacy/minio-client:2025.4.16-debian-12-r2. These are archived and get no updates. Native mode (Homebrew locally, nixpkgs in CI) builds from source, so it isn't affected.

Commits 0