This is an automated email from the ASF dual-hosted git repository.

github-merge-queue[bot] pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/seatunnel.git


The following commit(s) were added to refs/heads/dev by this push:
     new 35b2716cde [Fix][CI] Switch minio/minio test containers to the quay.io 
mirror (#12287)
35b2716cde is described below

commit 35b2716cde7d4c91a24fc618a8d9cae90e213db3
Author: David Zollo <[email protected]>
AuthorDate: Sun Sep 13 14:00:24 2026 +0000

    [Fix][CI] Switch minio/minio test containers to the quay.io mirror (#12287)
    
    Co-authored-by: Claude Sonnet 5 <[email protected]>
    Co-authored-by: davidzollo <[email protected]>
---
 seatunnel-cli/benchmark/README.md                         |  2 +-
 seatunnel-cli/benchmark/docker/docker-compose.yml         |  4 +++-
 .../e2e/connector/databend/DatabendCDCSinkIT.java         |  7 ++++++-
 .../seatunnel/e2e/connector/databend/DatabendIT.java      |  7 ++++++-
 .../e2e/connector/file/s3/S3FileWithFilterIT.java         |  6 +++++-
 .../e2e/connector/hudi/HudiSeatunnelS3MultiTableIT.java   | 15 +++++++++++++--
 .../e2e/connector/hudi/HudiSparkS3MultiTableIT.java       | 15 +++++++++++++--
 .../e2e/connector/iceberg/s3/IcebergSourceIT.java         | 15 +++++++++++++--
 .../seatunnel/e2e/connector/paimon/PaimonWithS3IT.java    | 15 +++++++++++++--
 9 files changed, 73 insertions(+), 13 deletions(-)

diff --git a/seatunnel-cli/benchmark/README.md 
b/seatunnel-cli/benchmark/README.md
index 1743c3e40b..d3f32b3cf4 100644
--- a/seatunnel-cli/benchmark/README.md
+++ b/seatunnel-cli/benchmark/README.md
@@ -121,7 +121,7 @@ Task format:
 | Kafka (KRaft) | `apache/kafka:3.7.0` | `localhost:9092` | PLAINTEXT | topics 
clicks, order_events, dbz.shop.users (seeded), events, wms.inventory, 
shop.orders.changelog |
 | ClickHouse | `clickhouse/clickhouse-server:23.3.13.6` | `localhost:8123` | 
default / Test@123 | db `bench`: pre-created sink tables |
 | Elasticsearch | `elasticsearch:8.9.0` | `localhost:9200` | security disabled 
| — |
-| MinIO (S3) | `minio/minio` | `localhost:9000` | minioadmin / minioadmin | 
bucket `bench` |
+| MinIO (S3) | `quay.io/minio/minio` | `localhost:9000` | minioadmin / 
minioadmin | bucket `bench` |
 | Doris *(profile `olap`)* | `apache/doris:doris-all-in-one-2.1.0` | FE 8030 / 
query 9030 | root / empty | apply `init/doris/01_bench.sql` |
 | StarRocks *(profile `olap`)* | `starrocks/allin1-ubuntu:3.3.4` | FE 8031 / 
query 9031 | root / empty | apply `init/doris/01_bench.sql` |
 
diff --git a/seatunnel-cli/benchmark/docker/docker-compose.yml 
b/seatunnel-cli/benchmark/docker/docker-compose.yml
index 72d2bd8c09..67938b3810 100644
--- a/seatunnel-cli/benchmark/docker/docker-compose.yml
+++ b/seatunnel-cli/benchmark/docker/docker-compose.yml
@@ -145,7 +145,9 @@ services:
       retries: 30
 
   minio:
-    image: minio/minio:RELEASE.2024-06-13T22-53-53Z
+    # Docker Hub's minio/minio repository no longer serves 
anonymous/unauthenticated pulls;
+    # quay.io is MinIO's own registry and mirrors the same tags publicly.
+    image: quay.io/minio/minio:RELEASE.2024-06-13T22-53-53Z
     container_name: st-bench-minio
     environment:
       MINIO_ROOT_USER: minioadmin
diff --git 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-databend-e2e/src/test/java/org/apache/seatunnel/e2e/connector/databend/DatabendCDCSinkIT.java
 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-databend-e2e/src/test/java/org/apache/seatunnel/e2e/connector/databend/DatabendCDCSinkIT.java
index 3cccba3bce..f21e67d01b 100644
--- 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-databend-e2e/src/test/java/org/apache/seatunnel/e2e/connector/databend/DatabendCDCSinkIT.java
+++ 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-databend-e2e/src/test/java/org/apache/seatunnel/e2e/connector/databend/DatabendCDCSinkIT.java
@@ -207,7 +207,12 @@ public class DatabendCDCSinkIT extends TestSuiteBase 
implements TestResource {
     @Override
     public void startUp() throws Exception {
         this.minioContainer =
-                new GenericContainer<>("minio/minio:latest")
+                // Docker Hub's minio/minio repository no longer serves 
anonymous/unauthenticated
+                // pulls; quay.io is MinIO's own registry and mirrors the same 
tags publicly.
+                // Pinned to the same release used by the other MinIO 
containers in this test
+                // suite instead of :latest, so an upstream MinIO release 
can't silently change
+                // this test's behavior underneath it.
+                new 
GenericContainer<>("quay.io/minio/minio:RELEASE.2024-06-13T22-53-53Z")
                         .withNetwork(NETWORK)
                         .withNetworkAliases("minio")
                         .withEnv("MINIO_ROOT_USER", "minioadmin")
diff --git 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-databend-e2e/src/test/java/org/apache/seatunnel/e2e/connector/databend/DatabendIT.java
 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-databend-e2e/src/test/java/org/apache/seatunnel/e2e/connector/databend/DatabendIT.java
index 04cc0b34d4..a27ac0fc93 100644
--- 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-databend-e2e/src/test/java/org/apache/seatunnel/e2e/connector/databend/DatabendIT.java
+++ 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-databend-e2e/src/test/java/org/apache/seatunnel/e2e/connector/databend/DatabendIT.java
@@ -235,7 +235,12 @@ public class DatabendIT extends TestSuiteBase implements 
TestResource {
     @Override
     public void startUp() throws Exception {
         this.minioContainer =
-                new GenericContainer<>("minio/minio:latest")
+                // Docker Hub's minio/minio repository no longer serves 
anonymous/unauthenticated
+                // pulls; quay.io is MinIO's own registry and mirrors the same 
tags publicly.
+                // Pinned to the same release used by the other MinIO 
containers in this test
+                // suite instead of :latest, so an upstream MinIO release 
can't silently change
+                // this test's behavior underneath it.
+                new 
GenericContainer<>("quay.io/minio/minio:RELEASE.2024-06-13T22-53-53Z")
                         .withNetwork(NETWORK)
                         .withNetworkAliases("minio")
                         .withEnv("MINIO_ROOT_USER", "minioadmin")
diff --git 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-file-s3-e2e/src/test/java/org/apache/seatunnel/e2e/connector/file/s3/S3FileWithFilterIT.java
 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-file-s3-e2e/src/test/java/org/apache/seatunnel/e2e/connector/file/s3/S3FileWithFilterIT.java
index 833829cdf5..99de95eefe 100644
--- 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-file-s3-e2e/src/test/java/org/apache/seatunnel/e2e/connector/file/s3/S3FileWithFilterIT.java
+++ 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-file-s3-e2e/src/test/java/org/apache/seatunnel/e2e/connector/file/s3/S3FileWithFilterIT.java
@@ -54,7 +54,11 @@ import java.util.concurrent.TimeUnit;
 public class S3FileWithFilterIT extends SeaTunnelContainer {
     private GenericContainer<?> s3Container;
 
-    private static final String MINIO_IMAGE = 
"minio/minio:RELEASE.2024-06-13T22-53-53Z";
+    // Docker Hub's minio/minio repository no longer serves 
anonymous/unauthenticated pulls
+    // ("pull access denied ... repository does not exist or may require 
'docker login'"); quay.io
+    // is
+    // MinIO's own registry and mirrors the same tags publicly.
+    private static final String MINIO_IMAGE = 
"quay.io/minio/minio:RELEASE.2024-06-13T22-53-53Z";
 
     private static final int S3_PORT = 9000;
 
diff --git 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-hudi-e2e/src/test/java/org/apache/seatunnel/e2e/connector/hudi/HudiSeatunnelS3MultiTableIT.java
 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-hudi-e2e/src/test/java/org/apache/seatunnel/e2e/connector/hudi/HudiSeatunnelS3MultiTableIT.java
index 3a553d391c..894b5d6c7f 100644
--- 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-hudi-e2e/src/test/java/org/apache/seatunnel/e2e/connector/hudi/HudiSeatunnelS3MultiTableIT.java
+++ 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-hudi-e2e/src/test/java/org/apache/seatunnel/e2e/connector/hudi/HudiSeatunnelS3MultiTableIT.java
@@ -37,6 +37,7 @@ import org.junit.jupiter.api.TestInstance;
 import org.testcontainers.containers.Container;
 import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.containers.MinIOContainer;
+import org.testcontainers.utility.DockerImageName;
 
 import com.amazonaws.services.s3.AmazonS3;
 import io.minio.BucketExistsArgs;
@@ -53,7 +54,12 @@ import static org.awaitility.Awaitility.given;
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class HudiSeatunnelS3MultiTableIT extends SeaTunnelContainer {
 
-    private static final String MINIO_DOCKER_IMAGE = 
"minio/minio:RELEASE.2024-06-13T22-53-53Z";
+    // Docker Hub's minio/minio repository no longer serves 
anonymous/unauthenticated pulls
+    // ("pull access denied ... repository does not exist or may require 
'docker login'"); quay.io
+    // is
+    // MinIO's own registry and mirrors the same tags publicly.
+    private static final String MINIO_DOCKER_IMAGE =
+            "quay.io/minio/minio:RELEASE.2024-06-13T22-53-53Z";
     private static final String HOST = "minio";
     private static final int MINIO_PORT = 9000;
     private static final String MINIO_USER_NAME = "minio";
@@ -73,7 +79,12 @@ public class HudiSeatunnelS3MultiTableIT extends 
SeaTunnelContainer {
     @BeforeAll
     public void startUp() throws Exception {
         container =
-                new MinIOContainer(MINIO_DOCKER_IMAGE)
+                // MinIOContainer validates its image name is a recognized 
substitute for
+                // "minio/minio"; the quay.io mirror needs an explicit 
compatibility declaration
+                // or Testcontainers rejects it with IllegalStateException at 
startup.
+                new MinIOContainer(
+                                DockerImageName.parse(MINIO_DOCKER_IMAGE)
+                                        
.asCompatibleSubstituteFor("minio/minio"))
                         .withNetwork(NETWORK)
                         .withNetworkAliases(HOST)
                         .withUserName(MINIO_USER_NAME)
diff --git 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-hudi-e2e/src/test/java/org/apache/seatunnel/e2e/connector/hudi/HudiSparkS3MultiTableIT.java
 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-hudi-e2e/src/test/java/org/apache/seatunnel/e2e/connector/hudi/HudiSparkS3MultiTableIT.java
index 8b598d443b..e0e1ef4d28 100644
--- 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-hudi-e2e/src/test/java/org/apache/seatunnel/e2e/connector/hudi/HudiSparkS3MultiTableIT.java
+++ 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-hudi-e2e/src/test/java/org/apache/seatunnel/e2e/connector/hudi/HudiSparkS3MultiTableIT.java
@@ -38,6 +38,7 @@ import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.TestTemplate;
 import org.testcontainers.containers.Container;
 import org.testcontainers.containers.MinIOContainer;
+import org.testcontainers.utility.DockerImageName;
 
 import io.minio.BucketExistsArgs;
 import io.minio.MakeBucketArgs;
@@ -53,7 +54,12 @@ import static org.awaitility.Awaitility.given;
 @Slf4j
 public class HudiSparkS3MultiTableIT extends TestSuiteBase implements 
TestResource {
 
-    private static final String MINIO_DOCKER_IMAGE = 
"minio/minio:RELEASE.2024-06-13T22-53-53Z";
+    // Docker Hub's minio/minio repository no longer serves 
anonymous/unauthenticated pulls
+    // ("pull access denied ... repository does not exist or may require 
'docker login'"); quay.io
+    // is
+    // MinIO's own registry and mirrors the same tags publicly.
+    private static final String MINIO_DOCKER_IMAGE =
+            "quay.io/minio/minio:RELEASE.2024-06-13T22-53-53Z";
     private static final String HOST = "minio";
     private static final int MINIO_PORT = 9000;
     private static final String MINIO_USER_NAME = "minio";
@@ -73,7 +79,12 @@ public class HudiSparkS3MultiTableIT extends TestSuiteBase 
implements TestResour
     @Override
     public void startUp() throws Exception {
         container =
-                new MinIOContainer(MINIO_DOCKER_IMAGE)
+                // MinIOContainer validates its image name is a recognized 
substitute for
+                // "minio/minio"; the quay.io mirror needs an explicit 
compatibility declaration
+                // or Testcontainers rejects it with IllegalStateException at 
startup.
+                new MinIOContainer(
+                                DockerImageName.parse(MINIO_DOCKER_IMAGE)
+                                        
.asCompatibleSubstituteFor("minio/minio"))
                         .withNetwork(NETWORK)
                         .withNetworkAliases(HOST)
                         .withUserName(MINIO_USER_NAME)
diff --git 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-iceberg-s3-e2e/src/test/java/org/apache/seatunnel/e2e/connector/iceberg/s3/IcebergSourceIT.java
 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-iceberg-s3-e2e/src/test/java/org/apache/seatunnel/e2e/connector/iceberg/s3/IcebergSourceIT.java
index 9176cc24ff..7dcfe5d369 100644
--- 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-iceberg-s3-e2e/src/test/java/org/apache/seatunnel/e2e/connector/iceberg/s3/IcebergSourceIT.java
+++ 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-iceberg-s3-e2e/src/test/java/org/apache/seatunnel/e2e/connector/iceberg/s3/IcebergSourceIT.java
@@ -58,6 +58,7 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.TestTemplate;
 import org.testcontainers.containers.Container;
 import org.testcontainers.containers.MinIOContainer;
+import org.testcontainers.utility.DockerImageName;
 
 import com.amazonaws.services.s3.AmazonS3;
 import io.minio.BucketExistsArgs;
@@ -99,7 +100,12 @@ public class IcebergSourceIT extends TestSuiteBase 
implements TestResource {
                         .copyTo(container, 
"/tmp/seatunnel/plugins/Iceberg/lib");
             };
 
-    private static final String MINIO_DOCKER_IMAGE = 
"minio/minio:RELEASE.2024-06-13T22-53-53Z";
+    // Docker Hub's minio/minio repository no longer serves 
anonymous/unauthenticated pulls
+    // ("pull access denied ... repository does not exist or may require 
'docker login'"); quay.io
+    // is
+    // MinIO's own registry and mirrors the same tags publicly.
+    private static final String MINIO_DOCKER_IMAGE =
+            "quay.io/minio/minio:RELEASE.2024-06-13T22-53-53Z";
     private static final String HOST = "minio";
     private static final int MINIO_PORT = 9000;
 
@@ -153,7 +159,12 @@ public class IcebergSourceIT extends TestSuiteBase 
implements TestResource {
     @Override
     public void startUp() throws Exception {
         container =
-                new MinIOContainer(MINIO_DOCKER_IMAGE)
+                // MinIOContainer validates its image name is a recognized 
substitute for
+                // "minio/minio"; the quay.io mirror needs an explicit 
compatibility declaration
+                // or Testcontainers rejects it with IllegalStateException at 
startup.
+                new MinIOContainer(
+                                DockerImageName.parse(MINIO_DOCKER_IMAGE)
+                                        
.asCompatibleSubstituteFor("minio/minio"))
                         .withNetwork(NETWORK)
                         .withNetworkAliases(HOST)
                         .withExposedPorts(MINIO_PORT);
diff --git 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-paimon-e2e/src/test/java/org/apache/seatunnel/e2e/connector/paimon/PaimonWithS3IT.java
 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-paimon-e2e/src/test/java/org/apache/seatunnel/e2e/connector/paimon/PaimonWithS3IT.java
index a8b488d14e..2a04bcd3d0 100644
--- 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-paimon-e2e/src/test/java/org/apache/seatunnel/e2e/connector/paimon/PaimonWithS3IT.java
+++ 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-paimon-e2e/src/test/java/org/apache/seatunnel/e2e/connector/paimon/PaimonWithS3IT.java
@@ -38,6 +38,7 @@ import org.junit.jupiter.api.TestInstance;
 import org.testcontainers.containers.Container;
 import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.containers.MinIOContainer;
+import org.testcontainers.utility.DockerImageName;
 
 import io.minio.BucketExistsArgs;
 import io.minio.MakeBucketArgs;
@@ -51,7 +52,12 @@ import java.util.List;
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class PaimonWithS3IT extends SeaTunnelContainer {
 
-    private static final String MINIO_DOCKER_IMAGE = 
"minio/minio:RELEASE.2024-06-13T22-53-53Z";
+    // Docker Hub's minio/minio repository no longer serves 
anonymous/unauthenticated pulls
+    // ("pull access denied ... repository does not exist or may require 
'docker login'"); quay.io
+    // is
+    // MinIO's own registry and mirrors the same tags publicly.
+    private static final String MINIO_DOCKER_IMAGE =
+            "quay.io/minio/minio:RELEASE.2024-06-13T22-53-53Z";
     private static final String HOST = "minio";
     private static final int MINIO_PORT = 9000;
     private static final String MINIO_USER_NAME = "minio";
@@ -142,7 +148,12 @@ public class PaimonWithS3IT extends SeaTunnelContainer {
     @BeforeAll
     public void startUp() throws Exception {
         container =
-                new MinIOContainer(MINIO_DOCKER_IMAGE)
+                // MinIOContainer validates its image name is a recognized 
substitute for
+                // "minio/minio"; the quay.io mirror needs an explicit 
compatibility declaration
+                // or Testcontainers rejects it with IllegalStateException at 
startup.
+                new MinIOContainer(
+                                DockerImageName.parse(MINIO_DOCKER_IMAGE)
+                                        
.asCompatibleSubstituteFor("minio/minio"))
                         .withNetwork(NETWORK)
                         .withNetworkAliases(HOST)
                         .withUserName(MINIO_USER_NAME)

Reply via email to