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: matrix: os: [macos-latest, ubuntu-22.04] runs-on: ${{ matrix.os }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install pnpm uses: pnpm/action-setup@v4 with: version: 9 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: "22" cache: "pnpm" - name: Install Rust uses: dtolnay/rust-toolchain@stable - name: Cache Rust dependencies uses: Swatinem/rust-cache@v2 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 services: minio: image: minio/minio:latest ports: - 8987:9000 env: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin options: >- --health-cmd "curl -f http://localhost:9000/minio/health/live || exit 1" --health-interval 5s --health-timeout 5s --health-retries 10 steps: - name: Checkout repository uses: actions/checkout@v4 - name: Wait for MinIO to be ready run: | 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@v4 with: version: 9 - name: Setup Node.js uses: actions/setup-node@v4 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