name: Sync E2E Tests on: pull_request: branches: ["main"] paths: - "donut-sync/**" - "src-tauri/src/sync/**" - "scripts/sync-test-harness.mjs" - ".github/workflows/sync-e2e.yml" push: branches: ["main"] paths: - "donut-sync/**" - "src-tauri/src/sync/**" - "scripts/sync-test-harness.mjs" workflow_call: workflow_dispatch: permissions: contents: read jobs: rust-sync-e2e: name: Rust Sync E2E Tests strategy: fail-fast: false matrix: os: [macos-latest, ubuntu-22.04] runs-on: ${{ matrix.os }} steps: - name: Checkout repository uses: actions/checkout@v6 - name: Install pnpm uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 #v4.4.0 with: run_install: false - name: Setup Node.js uses: actions/setup-node@v6 with: node-version: "22" cache: "pnpm" - name: Install Rust uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 #master with: toolchain: stable - name: Cache Rust dependencies uses: swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 #v2.9.1 with: workspaces: "src-tauri" - name: Install Tauri dependencies (Ubuntu only) if: matrix.os == 'ubuntu-22.04' run: | sudo apt-get update sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libxdo-dev - name: Install dependencies run: pnpm install --frozen-lockfile - name: Run Rust sync e2e tests with harness run: node scripts/sync-test-harness.mjs donut-sync-e2e: name: donut-sync Node.js E2E Tests runs-on: ubuntu-22.04 steps: - name: Checkout repository uses: actions/checkout@v6 - name: Start MinIO run: | docker run -d --name minio \ -p 8987:9000 \ -e MINIO_ROOT_USER=minioadmin \ -e MINIO_ROOT_PASSWORD=minioadmin \ minio/minio:latest server /data # Wait for MinIO to be ready for i in {1..30}; do if curl -sf http://localhost:8987/minio/health/live; then echo "MinIO is ready" break fi echo "Waiting for MinIO... ($i/30)" sleep 2 done - name: Install pnpm uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 #v4.4.0 with: run_install: false - name: Setup Node.js uses: actions/setup-node@v6 with: node-version: "22" cache: "pnpm" - name: Install dependencies run: pnpm install --frozen-lockfile - name: Run donut-sync Node.js e2e tests working-directory: donut-sync env: SYNC_TOKEN: test-sync-token S3_ENDPOINT: http://localhost:8987 S3_ACCESS_KEY_ID: minioadmin S3_SECRET_ACCESS_KEY: minioadmin S3_BUCKET: donut-sync-test S3_FORCE_PATH_STYLE: "true" run: pnpm test:e2e