Repository navigation
CORE-2764: replace MinIO with SeaweedFS in CI and the dev compose - #13
Merged
Merged
Conversation
added 4 commits
November 9, 2026 16:45
MinIO publishes no community images any more. This moves the S3 stand-in used by the specs to SeaweedFS 4.48 (`weed mini`), the store Wallarm's devenv already runs. - .github/workflows/ci.yaml: SeaweedFS replaces the minio container on localhost:9000 (-s3.port=9000), with the same minioadmin key pair as its static admin identity and -bucket=test instead of the mkdir trick. Readiness is an authenticated HEAD on the bucket (curl --aws-sigv4); the wait step now fails the job when the services never come up, where it used to fall through. - docker/docker-compose.yml: same s3 service for dip, keeping the name and port 9000 so S3_ENDPOINT stays http://s3:9000; the app waits for its healthcheck. The ../uploads/s3 bind mount is gone: it held MinIO's on-disk layout, and the specs need no persistence. - -s3.autoCreateBucket=false: SeaweedFS otherwise creates a missing bucket on the first upload by an admin identity, where AWS answers NoSuchBucket. - dip.yml: drop the mkdir of uploads/s3. - .circleci/config.yml removed: GitHub Actions runs the same rubocop and rspec job on a wider Ruby matrix. Verified: bundle exec rspec in the dip app container against the new compose, 58 examples, 0 failures, twice.
fake-gcs-server answers 404 on /, so the wait step's curl never succeeded: the loop always ran its 30 attempts and fell through, which went unnoticed until the step started failing the job when the services never come up. The bucket endpoint answers 200 once the server is up.
CI installs the newest gems (no Gemfile.lock in git), and rubocop-rspec
3.10.2 flags match(/GoogleAccessId=/), which failed the Rubocop step
before rspec ran. include('GoogleAccessId=') is the cop's own
autocorrection and asserts the same thing.
exist? and find rescue BadRequest/InvalidBucketName for an invalid bucket name. MinIO answered HEAD on invalid_bucket with 400, so the existing specs reached those rescues; SeaweedFS answers 404, exists? returns false without raising, and the two rescue lines went uncovered, putting line coverage at 94.90% under the 95% minimum. Two specs now drive the branch with stub_responses (head_object: BadRequest), so it is covered whatever the S3 stand-in answers.
yamax2
approved these changes
Nov 9, 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.
MinIO publishes no community images any more. This moves the S3 stand-in
used by the specs to SeaweedFS 4.48 (
weed mini), the store Wallarm'sdevenv already runs.
localhost:9000 (-s3.port=9000), with the same minioadmin key pair as
its static admin identity and -bucket=test instead of the mkdir trick.
Readiness is an authenticated HEAD on the bucket (curl --aws-sigv4);
the wait step now fails the job when the services never come up,
where it used to fall through.
and port 9000 so S3_ENDPOINT stays http://s3:9000; the app waits for
its healthcheck. The ../uploads/s3 bind mount is gone: it held MinIO's
on-disk layout, and the specs need no persistence.
on the first upload by an admin identity, where AWS answers NoSuchBucket.
rspec job on a wider Ruby matrix.
Verified: bundle exec rspec in the dip app container against the new
compose, 58 examples, 0 failures, twice.