Repository navigation
Pull MinIO from pgsty/silo instead of building it from source - #800
Merged
Merged
Conversation
Building MinIO and mc from source makes every just ci and every smoke leg download and compile about 241 Go modules. That takes about 2 minutes on a typical runner and up to 9.5 on a slow one, and on 2026-09-29 it bounced #787 from the merge queue when proxy.golang.org returned stream errors mid-download on three smoke legs. pgsty/silo is a community-maintained AGPLv3 fork of MinIO that still publishes multi-arch images. It ships mc at /usr/bin/mc and bash, so the compose healthcheck and the mc recipes in the justfile run unchanged. Pinned by digest. smoke runs example-java's compose file, so its pin moves to nisshi-io/example-java#5, which makes the same switch. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Samuel Gamelin <samuel.gamelin@solace.com>
sgamelin
requested review from
shortishly,
solace-aross and
solace-wkourlas
as code owners
September 29, 2026 20:14
solace-aross
approved these changes
Sep 29, 2026
solace-aross
left a comment
Collaborator
There was a problem hiding this comment.
Approving. I checked the swap by running the image, not just reading the diff.
What I verified:
- Digest matches the tag. Docker Hub resolves
pgsty/silo:RELEASE.2026-09-16T00-00-00Ztosha256:635197cb…a46, an OCI index withlinux/amd64andlinux/arm64(plus attestation entries). The pin can't drift underneath us. - The image behaves the way compose and the justfile need. I ran the pinned digest locally (podman) with compose's
server /data --console-address ":9001". The entrypoint maps it tosilo./usr/bin/mcandbashare present, andmc ready local,mc alias setandmc mb local/nisshiall succeed. - The healthcheck isn't passing vacuously. Compose's
bash -c ':> /dev/tcp/127.0.0.1/9000'reports healthy against silo. The same probe pointed at a dead port (9999) fails withConnection refused, so the--waitgates injust ciare really checking the server. - CI used silo. In this PR's
test (postgres:17)job,minio Pulledtakes 1.6 s, then healthy, then both buckets are created, then1052 tests run: 1052 passedwithSTORAGE_ENGINE: s3://nisshi/. - Nothing else refers to
etc/minio. Agit grepat the head finds no leftoverbuild: etc/minioor Dockerfile path references.
One note, not blocking:
- The
smokepin (65bfbfd) is example-java#5's head, and #5 is still open. The commit stays fetchable throughrefs/pull/5/head, so checkout won't break. But if #5 changes before it merges, nisshi'ssmokekeeps testing the old compose file. Consider merging example-java#5 first, or re-pinning to its merge commit afterwards.smokeonly runs in the merge queue, so this PR's green checks don't cover that leg yet.
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.
What does this change do, and why?
This switches the
miniocompose service from building MinIO andmcfrom source (etc/minio/Dockerfile, now removed) to thepgsty/siloimage, pinned by digest.pgsty/silois a community-maintained AGPLv3 fork of MinIO that still publishes images.The source build downloads and compiles about 241 Go modules on every
just ciand everysmokeleg. As measured in #777, that takes about 2 minutes on a typical runner and up to 9½ on a slow one. It also bounced #787 from the merge queue: all three failedsmokelegs died ingo buildonstream error: INTERNAL_ERRORfromproxy.golang.org(run).linux/amd64andlinux/arm64. It hasmcat/usr/bin/mcand hasbash, so the compose healthcheck and the justfile'sminio-*recipes run unchanged. Its entrypoint maps the existingserver /data ...command to itssilobinary. The service keeps the nameminio, soAWS_ENDPOINTand every recipe work unchanged.smokebrings upnisshi-io/example-java's compose file, so its pin moves to example-java#5, which makes the same switch. The pin is Bump clap from 4.5.11 to 4.5.16 #5's head commit. example-java merges with merge commits, so the pin stays reachable from itsmainonce Bump clap from 4.5.11 to 4.5.16 #5 lands.How was this tested?
Locally, with this
compose.yaml:just cicame up healthy in 21 s, including Lakekeeper creating its warehouse on the lake bucket.mc ready local,mc alias setandmc mbpass.s3://engine relies on: a secondPutObjectwithIf-None-Match: *and one with a wrongIf-Matchboth returnPreconditionFailed, and the correctIf-Matchsucceeds.ghcr.io/nisshi-io/nisshi:mainon--storage-engine s3://nisshi/created a topic and produced 500 idempotent records, and a consumer group read all 500 back.In example-java#5's CI, which runs the same flow as
smoke:s3://nisshi/legs pass on amd64 and arm64.docker compose uptook 9 to 14 s per leg, against 102 to 160 s on example-java's lastmainrun.postgres://legs fail in the bats step, as they do on example-java'smain, because of its schema drift.smokeisn't affected because it copies nisshi's schema in first.This PR's
testjob runs the full suite, including thebergtests, against silo throughjust ci.smokeruns in the merge queue.Checklist
git commit -s) — see CONTRIBUTING.mdjust fmt,just clippy, andjust testpass locally. Not run: this changes no Rust code, and this PR'stestjob runs the suite against silo.🤖 Generated with Claude Code