Skip to content

CORE-2764: replace MinIO with SeaweedFS in CI and the dev compose - #13

Merged
yamax2 merged 4 commits into
wallarm:masterfrom
accessd:chore/CORE-2764-seaweedfs
Nov 9, 2026
Merged

yamax2 merged 4 commits into
wallarm:masterfrom
accessd:chore/CORE-2764-seaweedfs

Conversation

@accessd

@accessd accessd commented Nov 9, 2026

Copy link
Copy Markdown

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.

Andrey Morskov 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
yamax2 merged commit 502bc36 into wallarm:master Nov 9, 2026
2 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants