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, plusminio-init(idempotent bucketpneumo). The server profile is commented out..env.example: the §12.3 names with fake dev values.scripts/e2e/minio.ts:start/stopwith uniquepneumo-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,devandcheck:infra(compose config, Biome, and a strict type-check of the harness).check:infrais added tocheck.
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.