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 {