Skip to content

Commit ad005a4

Browse files
authored
fix(ci): switch MinIO tests to Chainguard images (#4985)
## Summary Switches the MinIO test and local development containers to Chainguard's maintained Docker Hub images because the previous Quay images are no longer publicly pullable. ## Fix Pins the multi-platform server and client images by digest. The local stack now uses the Chainguard client entrypoint for bucket initialization, while test containers keep client state in a writable temporary directory.
1 parent c2b7a72 commit ad005a4

4 files changed

Lines changed: 42 additions & 20 deletions

File tree

‎.github/workflows/e2e-webapp.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ jobs:
102102
redis:7.2 \
103103
testcontainers/ryuk:0.14.0 \
104104
ghcr.io/s2-streamstore/s2:0.40.0@sha256:b26249e2ede0949755f5af8028185dc2bcfc3aa2db21eb9610543d144eb6ee9d \
105-
quay.io/minio/minio:RELEASE.2025-09-07T16-13-09Z@sha256:14cea493d9a34af32f524e538b8346cf79f3321eff8e708c1e2960462bd8936e
105+
chainguard/minio:latest@sha256:6a1d0b45c8669726bba580ced0bfa4cb9fdeed1ed636dfabd81d1577beb6937b
106106
do
107107
pull "$image" &
108108
pids+=("$!")

‎.github/workflows/unit-tests-webapp.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ jobs:
109109
redis:7.2 \
110110
testcontainers/ryuk:0.14.0 \
111111
electricsql/electric:1.2.4@sha256:20da3d0b0e74926c5623392db67fd56698b9e374c4aeb6cb5cadeb8fea171c36 \
112-
quay.io/minio/minio:RELEASE.2025-09-07T16-13-09Z@sha256:14cea493d9a34af32f524e538b8346cf79f3321eff8e708c1e2960462bd8936e
112+
chainguard/minio:latest@sha256:6a1d0b45c8669726bba580ced0bfa4cb9fdeed1ed636dfabd81d1577beb6937b
113113
do
114114
pull "$image" &
115115
pids+=("$!")

‎docker/docker-compose.yml‎

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -144,12 +144,13 @@ services:
144144
# routes to it when the OBJECT_STORE_* env vars are set (see .env.example).
145145
minio:
146146
container_name: ${CONTAINER_PREFIX:-}minio
147-
image: quay.io/minio/minio:RELEASE.2025-09-07T16-13-09Z@sha256:14cea493d9a34af32f524e538b8346cf79f3321eff8e708c1e2960462bd8936e
147+
image: chainguard/minio:latest@sha256:6a1d0b45c8669726bba580ced0bfa4cb9fdeed1ed636dfabd81d1577beb6937b
148148
restart: always
149149
command: server /data --console-address ":9001"
150150
environment:
151151
MINIO_ROOT_USER: minioadmin
152152
MINIO_ROOT_PASSWORD: minioadmin
153+
MC_HOST_local: http://minioadmin:minioadmin@localhost:9000
153154
volumes:
154155
- minio-data:/data
155156
ports:
@@ -158,25 +159,22 @@ services:
158159
networks:
159160
- app_network
160161
healthcheck:
161-
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
162+
test: ["CMD", "mc", "ready", "local"]
162163
interval: 5s
163164
timeout: 5s
164165
retries: 5
165166
start_period: 5s
166167

167168
minio-init:
168-
image: quay.io/minio/mc:RELEASE.2025-08-13T08-35-41Z@sha256:a7fe349ef4bd8521fb8497f55c6042871b2ae640607cf99d9bede5e9bdf11727
169+
image: chainguard/minio-client:latest@sha256:b2bd7824d23d3e3b15bedd7e87fbc3be29d2e213307b4f901e4a1d92356dc20f
169170
depends_on:
170171
minio:
171172
condition: service_healthy
172173
networks:
173174
- app_network
174-
entrypoint: /bin/sh
175-
command:
176-
- -c
177-
- |
178-
mc alias set local http://minio:9000 minioadmin minioadmin
179-
mc mb -p local/packets || true
175+
environment:
176+
MC_HOST_local: http://minioadmin:minioadmin@minio:9000
177+
command: ["mb", "--ignore-existing", "local/packets"]
180178
restart: "no"
181179

182180
electric:

‎internal-packages/testcontainers/src/minio.ts‎

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export class MinIOContainer extends GenericContainer {
1717
private region = "us-east-1";
1818

1919
constructor(
20-
image = "quay.io/minio/minio:RELEASE.2025-09-07T16-13-09Z@sha256:14cea493d9a34af32f524e538b8346cf79f3321eff8e708c1e2960462bd8936e"
20+
image = "chainguard/minio:latest@sha256:6a1d0b45c8669726bba580ced0bfa4cb9fdeed1ed636dfabd81d1577beb6937b"
2121
) {
2222
super(image);
2323
this.withExposedPorts(MINIO_PORT);
@@ -49,13 +49,14 @@ export class MinIOContainer extends GenericContainer {
4949

5050
const startedContainer = await super.start();
5151

52-
// Create the "packets" bucket using MinIO client
5352
await x(
5453
"docker",
5554
[
5655
"exec",
5756
startedContainer.getId(),
5857
"mc",
58+
"--config-dir",
59+
"/tmp/.mc",
5960
"alias",
6061
"set",
6162
"local",
@@ -66,9 +67,11 @@ export class MinIOContainer extends GenericContainer {
6667
{ throwOnError: true }
6768
);
6869

69-
await x("docker", ["exec", startedContainer.getId(), "mc", "mb", "local/packets"], {
70-
throwOnError: true,
71-
});
70+
await x(
71+
"docker",
72+
["exec", startedContainer.getId(), "mc", "--config-dir", "/tmp/.mc", "mb", "local/packets"],
73+
{ throwOnError: true }
74+
);
7275

7376
return new StartedMinIOContainer(
7477
startedContainer,
@@ -123,14 +126,35 @@ export class StartedMinIOContainer extends AbstractStartedContainer {
123126
public async resetBucket(bucket = "packets"): Promise<void> {
124127
await x(
125128
"docker",
126-
["exec", this.getId(), "mc", "rm", "--recursive", "--force", `local/${bucket}`],
129+
[
130+
"exec",
131+
this.getId(),
132+
"mc",
133+
"--config-dir",
134+
"/tmp/.mc",
135+
"rm",
136+
"--recursive",
137+
"--force",
138+
`local/${bucket}`,
139+
],
127140
{
128141
throwOnError: false,
129142
}
130143
);
131-
await x("docker", ["exec", this.getId(), "mc", "mb", "--ignore-existing", `local/${bucket}`], {
132-
throwOnError: true,
133-
});
144+
await x(
145+
"docker",
146+
[
147+
"exec",
148+
this.getId(),
149+
"mc",
150+
"--config-dir",
151+
"/tmp/.mc",
152+
"mb",
153+
"--ignore-existing",
154+
`local/${bucket}`,
155+
],
156+
{ throwOnError: true }
157+
);
134158
}
135159

136160
/**

0 commit comments

Comments
 (0)