You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opendal.apache.org by xu...@apache.org on 2026/10/26 17:19:20 UTC

(opendal-yinyang) 02/03: ci: require real managed sync acceptance

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

Xuanwo pushed a commit to branch xuanwo/managed-sync-acceptance
in repository https://gitbox.apache.org/repos/asf/opendal-yinyang.git

commit 1e15dca92cf4504b16142dbb6d302529aa54a674
Author: Xuanwo <gi...@xuanwo.io>
AuthorDate: Tue Oct 27 01:18:06 2026 +0800

    ci: require real managed sync acceptance
    
    Co-authored-by: Chojan Shang <ps...@apache.org>
---
 .github/workflows/ci.yml | 39 +++++++++++++++++++++++++++++++++++++++
 xtask/src/main.rs        | 42 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 81 insertions(+)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 46a5222..37f26c7 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -142,6 +142,43 @@ jobs:
             docker logs yinyang-silo
           fi
 
+  managed_sync:
+    name: Managed Sync acceptance
+    runs-on: ubuntu-24.04
+    timeout-minutes: 45
+    env:
+      YINYANG_S3_BUCKET: yinyang-test
+      YINYANG_S3_ENDPOINT: http://127.0.0.1:9000
+      YINYANG_S3_REGION: us-east-1
+      YINYANG_S3_ACCESS_KEY_ID: yinyang-test
+      YINYANG_S3_SECRET_ACCESS_KEY: yinyang-test-only
+      YINYANG_STORAGE_PROFILE: minio
+    steps:
+      - uses: actions/checkout@v7
+
+      - name: Start isolated S3-compatible storage
+        run: |
+          docker run -d --name yinyang-managed-sync-silo -p 127.0.0.1:9000:9000 \
+            -e MINIO_ROOT_USER=yinyang-test -e MINIO_ROOT_PASSWORD=yinyang-test-only \
+            docker.io/pgsty/silo:RELEASE.2026-09-16T00-00-00Z@sha256:635197cb9f36d01bee221d34d1c7d7960f6a95c48b0b6c01d99cd13bdae51a46 server /data
+          for _ in $(seq 1 30); do
+            if curl --fail --silent http://127.0.0.1:9000/minio/health/ready; then break; fi
+            sleep 1
+          done
+          curl --fail http://127.0.0.1:9000/minio/health/ready
+          docker exec yinyang-managed-sync-silo mcli alias set local http://127.0.0.1:9000 yinyang-test yinyang-test-only
+          docker exec yinyang-managed-sync-silo mcli mb local/yinyang-test
+
+      - name: Run real Managed Sync acceptance
+        run: cargo x test-managed-sync
+
+      - name: Show storage logs on failure
+        if: failure()
+        run: |
+          if docker container inspect yinyang-managed-sync-silo > /dev/null 2>&1; then
+            docker logs yinyang-managed-sync-silo
+          fi
+
   linux-fuse:
     name: Linux FUSE acceptance
     runs-on: ubuntu-24.04
@@ -195,6 +232,7 @@ jobs:
       - test
       - compliance
       - s3
+      - managed_sync
       - linux-fuse
     steps:
       - name: Guardian
@@ -205,6 +243,7 @@ jobs:
               && "${{ needs.test.result }}" == "success" \
               && "${{ needs.compliance.result }}" == "success" \
               && "${{ needs.s3.result }}" == "success" \
+              && "${{ needs.managed_sync.result }}" == "success" \
               && "${{ needs.linux-fuse.result }}" == "success" \
               ) ]]; then
             echo "Required jobs haven't been completed successfully."
diff --git a/xtask/src/main.rs b/xtask/src/main.rs
index 8c0ce47..9c80324 100644
--- a/xtask/src/main.rs
+++ b/xtask/src/main.rs
@@ -56,6 +56,7 @@ impl Command {
             SubCommand::Lint(cmd) => cmd.run(),
             SubCommand::Test(cmd) => cmd.run(),
             SubCommand::Macos(cmd) => cmd.run(),
+            SubCommand::TestManagedSync(cmd) => cmd.run(),
             SubCommand::TestLinuxFuse(cmd) => cmd.run(),
         }
     }
@@ -71,6 +72,10 @@ enum SubCommand {
     Lint(CommandLint),
     #[clap(about = "Run all workspace tests.")]
     Test(CommandTest),
+    #[clap(
+        about = "Run real Linux Managed Sync acceptance through yy and ordinary directories (requires isolated S3 settings)."
+    )]
+    TestManagedSync(CommandTestManagedSync),
     #[clap(
         about = "Run real Linux FUSE acceptance through yy and /dev/fuse (requires isolated S3 settings)."
     )]
@@ -259,6 +264,43 @@ impl CommandTest {
     }
 }
 
+#[derive(Parser)]
+#[clap(name = "test-managed-sync")]
+struct CommandTestManagedSync {}
+
+impl CommandTestManagedSync {
+    fn run(self) {
+        if !cfg!(target_os = "linux") {
+            panic!("Managed Sync acceptance requires Linux");
+        }
+        for name in [
+            "YINYANG_S3_BUCKET",
+            "YINYANG_S3_ENDPOINT",
+            "YINYANG_S3_REGION",
+            "YINYANG_S3_ACCESS_KEY_ID",
+            "YINYANG_S3_SECRET_ACCESS_KEY",
+        ] {
+            if std::env::var_os(name).is_none() {
+                panic!("{name} is unset; Managed Sync acceptance fails hard instead of skipping");
+            }
+        }
+        let mut cmd = find_command("cargo");
+        cmd.args([
+            "test",
+            "-p",
+            "yinyang",
+            "--test",
+            "linux_sync",
+            "managed_sync_",
+            "--",
+            "--ignored",
+            "--nocapture",
+            "--test-threads=1",
+        ]);
+        run_command(cmd);
+    }
+}
+
 #[derive(Parser)]
 #[clap(name = "test-linux-fuse")]
 struct CommandTestLinuxFuse {