chore: RustFS as the only object store; retire minioadmin defaults - #1826
chore: RustFS as the only object store; retire minioadmin defaults#1826pyramation wants to merge 2 commits into
Conversation
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
|
Review complete. 🟡 1 medium 💬 Inline comments (1)
This PR migrates the object-storage backend from MinIO to RustFS across local dev (docker-compose.yml), CI (.github/workflows/run-tests.yaml), and the CLI, renaming the endpoint env var from MINIO_ENDPOINT to OBJECT_STORE_ENDPOINT and swapping default credentials to constructive/constructive-dev-secret. It adds a new packages/bucket-provisioner module that applies CORS, lifecycle, versioning, and public-access-block config to buckets, updates the upload-resolver and presigned-url plugin types, and adjusts env-config assertions and snapshots accordingly.
Reviewed commit: 9296f54 |
There was a problem hiding this comment.
Migrates local and CI object storage from MinIO to RustFS, renaming endpoint/credential env vars and adding a bucket-provisioner package.
Key findings
- 🟡 Health probe still hits MinIO path against RustFS — provisioner.integration.test.ts:53
| async function isObjectStoreReachable(): Promise<boolean> { | ||
| try { | ||
| const response = await fetch(`${MINIO_ENDPOINT}/minio/health/live`, { | ||
| const response = await fetch(`${OBJECT_STORE_ENDPOINT}/minio/health/live`, { |
There was a problem hiding this comment.
🟡 bug · medium
Health probe still hits MinIO path against RustFS
The bucket-provisioner integration suite's reachability check probes ${OBJECT_STORE_ENDPOINT}/minio/health/live (packages/bucket-provisioner/tests/provisioner.integration.test.ts:53), but this PR migrated CI and local storage to RustFS, whose health endpoint is /health as set in .github/workflows/run-tests.yaml and docker-compose.yml. RustFS does not serve the MinIO-specific /minio/health/live path, so isObjectStoreReachable() always returns false and the entire suite silently skips in CI, defeating the new RustFS integration coverage this PR intends to add.
📋 Prompt for AI Agents
In packages/bucket-provisioner/tests/provisioner.integration.test.ts line 53, change the reachability fetch URL from ${OBJECT_STORE_ENDPOINT}/minio/health/live to ${OBJECT_STORE_ENDPOINT}/health. The PR migrated the storage service from MinIO to RustFS everywhere else (run-tests.yaml and docker-compose.yml both use the /health endpoint), so this probe must match or the whole integration suite silently skips against RustFS.
Summary
Docker Hub removed
minio/minio, which currently breaksintegration-testsin this repo (minio_cdnservice can't pull). Phase 1 of constructive-io/constructive-planning#2036: take MinIO out of every default path and stop shipping a well-known credential as a code default.pgpm docker start: the MinIO service is gone, RustFS pinned torustfs/rustfs:1.0.0-rc.5is the object store (--minioflag removed;--rustfsno longer behind a compose profile). Health probe isGET /health.pgpmDefaults.cdn, mirrored inOBJECT_STORE_PROFILE, docker service env, tests, snapshots, docs):graphile-settings/upload-resolver.tsandgraphql/server/scripts/create-bucket.ts— they didcdn.awsAccessKey || 'minioadmin'inside the upload path, so a misconfigured deploy silently signed as minioadmin. They now read the mergedcdnfromgetEnvOptions()only;pgpm/env/src/assert.tsalready flagscdn.*defaults in production (STRICT_ENV).MINIO_ENDPOINT→OBJECT_STORE_ENDPOINTin docs/test identifiers (the env var actually read is stillCDN_ENDPOINT). The'minio'BucketProvidervalue is unchanged — it means path-style S3-compatible and RustFS maps onto it.bucket-provisionerintegration test assertions tightened: RustFS applies CORS, PublicAccessBlock and lifecycle rules (MinIO free didn't), soinspect()now asserts them — 17/17 pass against the pinned image locally.Follow-up (phase 2, same issue): bump these packages in constructive-db and apply the same rename there.
Link to Devin session: https://app.devin.ai/sessions/70eb5e27252f4066a10a727d71957c05
Open in Devin Desktop: https://app.devin.ai/desktop/session/70eb5e27252f4066a10a727d71957c05?variant=devin
Requested by: @pyramation