fix(infra): replace MinIO with RustFS for local and test object storage - #1390
Merged
Merged
Conversation
MinIO images are no longer pullable: minio/minio and minio/mc were removed from Docker Hub, and quay.io/minio/* now refuses anonymous pulls. That broke every Testcontainers integration test, the Aspire AppHost and the compose deployment on a clean machine. - Tests: generic Testcontainers container on rustfs/rustfs:1.0.0 (drops Testcontainers.Minio for the base Testcontainers package). - AppHost: RustFS container with CORS for both dev origins; bucket bootstrap moves from minio/mc to amazon/aws-cli (create + public-read GetObject policy). - Compose: rustfs + rustfs-init services; MINIO_ROOT_USER/PASSWORD become RUSTFS_ACCESS_KEY/RUSTFS_SECRET_KEY; volume minio_data -> rustfs_data. - fsh CLI generates the new env keys; docs/rules updated. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
marcelo-maciel
added a commit
to marcelo-maciel/dotnet-starter-kit
that referenced
this pull request
Sep 25, 2026
Drops the carried SourceLink/Testcontainers bumps and the MinIO quay pin in favour of main (fullstackhero#1369, fullstackhero#1375, fullstackhero#1390). Identity keeps both Locale and the fullstackhero#1387 If-Match precondition on UpdateAsync; UserLocaleTests follows the new UserProfileService constructor.
marcelo-maciel
added a commit
to marcelo-maciel/dotnet-starter-kit
that referenced
this pull request
Sep 25, 2026
Drops the carried SourceLink/Testcontainers bumps and the MinIO quay pin in favour of main (fullstackhero#1369, fullstackhero#1375, fullstackhero#1390).
marcelo-maciel
added a commit
to marcelo-maciel/dotnet-starter-kit
that referenced
this pull request
Sep 25, 2026
Drops the carried SourceLink/Testcontainers bumps and the MinIO quay pin in favour of main (fullstackhero#1369, fullstackhero#1375, fullstackhero#1390). Profile settings keep the fullstackhero#1387 ETag flow with its new copy routed through t(); the topbar language switch now reads the profile with its ETag, sends If-Match, and refetches the shared profile query so the settings form never seeds from a spent tag.
This was referenced Sep 25, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
MinIO images can no longer be pulled anonymously:
minio/minioandminio/mcare gone from Docker Hub.quay.io/minio/minionow refuses anonymous pulls (registry token has no pull rights, HTTP 401). fix(infra): pull MinIO from quay.io on a pinned tag, not Docker Hub #1388's quay.io pin passed CI on 2026-09-17 but no longer works.On
mainthat breaks every Testcontainers integration test, the Aspire AppHost and the docker-compose deployment on any machine without a cached image.Fix: RustFS (
rustfs/rustfs:1.0.0, S3-compatible, Apache-2.0)rustfs/rustfs:1.0.0, waits on/health. DropsTestcontainers.Miniofor the baseTestcontainerspackage.rustfscontainer (S3 API 9000, console 9001),RUSTFS_CORS_ALLOWED_ORIGINSfor both dev origins. Bucket bootstrap moves fromminio/mctoamazon/aws-cli:2.37.3(create + public-readGetObjectpolicy, same as the oldmc anonymous set download).rustfs+rustfs-initservices; healthcheck via/health.fshCLIdeploy/docker/.env..agents/rules, client READMEs, comments.src/BuildingBlocksuntouched.Breaking (compose users)
MINIO_ROOT_USER/MINIO_ROOT_PASSWORD→RUSTFS_ACCESS_KEY/RUSTFS_SECRET_KEY.minio_data→rustfs_data; serviceminio→rustfs. Existing objects must be copied across (e.g.aws s3 sync).minio-user/minio-password→rustfs-user/rustfs-password(defaults work with no secrets set).Verification
dotnet build src/FSH.Starter.slnx: 0 warnings, 0 errors.Integration.Tests: 746 passed, 1 skipped (pre-existing), 0 failed.Integration.Middleware.Tests: 5/5.rustfs-initexits 0; anonymous list → 403, anonymous object read allowed by policy, CORS preflight from:5174→ allowed; API up.docker compose configvalid;rustfshealthy,rustfs-initexits 0 and is idempotent on re-run.Supersedes #1388.
🤖 Generated with Claude Code