Files
buzz/.github/ci/minio/README.md
2026-10-07 18:02:27 -04:00

54 lines
2.8 KiB
Markdown

# Buzz CI MinIO
`ghcr.io/block/buzz-minio:latest` contains MinIO and `mc` for the disposable
Linux AMD64 runners. Only the publisher smoke test selects it through
`docker-compose.ci.yml`. Ordinary CI inherits the Silo pins from
`docker-compose.yml`; the Helm install test inherits the chart defaults.
The **MinIO image** workflow builds only when its inputs change, or on a manual
dispatch. Pull requests build and smoke-test without publishing. On `main`, a
successful smoke test publishes the same image as
`sha-<full commit>-run-<run id>-<attempt>` and `latest`. The run-specific tag
preserves each build, including package refreshes from the same source commit.
Once consumers adopt the override, ordinary CI only pulls it; there is no build
fallback or dependency on the publisher. `latest` deliberately floats, and
Compose always pulls it. Docker's pull output records the resolved digest.
The Dockerfile pins upstream MinIO releases independently of the Silo images
used by the development and deployment examples. It uses checksummed official
GitHub release binaries and a digest-pinned Alpine base. MinIO and `mc` are
AGPL-3.0; their corresponding source is available at
the [MinIO release](https://github.com/minio/minio/tree/RELEASE.2025-09-07T16-13-09Z)
and [mc release](https://github.com/minio/mc/tree/RELEASE.2025-08-13T08-35-41Z).
## First publication
The image must exist and be publicly pullable before the CI switch can pass.
Use two separate PRs: Buzz only permits squash merges, so two commits in one
PR cannot stage this rollout.
1. Merge the publisher-only PR containing `.github/ci/minio/`,
`.github/workflows/minio-image.yml`, and the opt-in `docker-compose.ci.yml`.
Ordinary CI does not select the override yet, so it does not need this image
to validate the publisher PR. The merge triggers the first publication.
2. After publication succeeds, an org/package admin must make **buzz-minio**
public in its GitHub package settings (new GHCR packages default to private,
even for public repositories). Verify an anonymous pull of
`ghcr.io/block/buzz-minio:latest`.
3. Rebase the separate consumer PR onto `main`, run its integration checks, and
merge it. That PR selects the override in relay and mesh lifecycle CI.
Subsequent publications preserve package visibility.
## Updating or rebuilding
Update the release URLs/checksums or base digest in the Dockerfile and open a
PR. Merging triggers publication. To rebuild the existing recipe (for example,
to pick up Alpine package updates), dispatch **MinIO image** from `main`.
Manual dispatch disables Docker's layer cache so the package installation
runs again. Other refs can build and test but cannot publish `latest`.
To reproduce a CI run with a recorded version, set `MINIO_CI_IMAGE` to
the published run-specific tag or digest while using
`COMPOSE_FILE=docker-compose.yml:docker-compose.ci.yml`.