name: Playwright Test (end-to-end) # IMPORTANT: using Swatinem/rust-cache@v2 : reuse same cache as ci.yml (minimize non necessary new compilation) on: push: branches: [ main, dev ] pull_request: branches: [ main, dev ] concurrency: group: rust-build-${{ github.ref }} cancel-in-progress: false jobs: test: timeout-minutes: 60 runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install Rust toolchain uses: dtolnay/rust-toolchain@stable - name: Cache compiled binary id: binary-cache uses: actions/cache@v4 with: path: ${{ github.workspace }}/target/debug/oxicloud key: ${{ runner.os }}-oxicloud-binary-${{ hashFiles('src/**', 'Cargo.toml', 'Cargo.lock') }} - name: Cache Rust dependencies if: steps.binary-cache.outputs.cache-hit != 'true' uses: Swatinem/rust-cache@v2 - name: Build server if: steps.binary-cache.outputs.cache-hit != 'true' run: cargo build - uses: actions/setup-node@v4 with: node-version: lts/* - name: Install Node dependencies working-directory: tests/e2e run: npm ci - name: Install Playwright browsers working-directory: tests/e2e run: npx playwright install --with-deps - name: Run Playwright tests (spawns DB via pretest hook) working-directory: tests/e2e run: npm test - uses: actions/upload-artifact@v4 if: ${{ !cancelled() }} with: name: playwright-report path: tests/e2e/playwright-report/ retention-days: 30