Skip to content

Phase 2: full Rust/WASM/Playwright testing + CI security gates #3

Phase 2: full Rust/WASM/Playwright testing + CI security gates

Phase 2: full Rust/WASM/Playwright testing + CI security gates #3

Workflow file for this run

name: Test Suite
on:
pull_request:
push:
branches:
- main
jobs:
rust-tests:
name: Rust + Coverage
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable
- name: Install Rust test tooling
uses: taiki-e/install-action@v2
with:
tool: cargo-nextest,cargo-llvm-cov
- name: Install llvm-tools
run: rustup component add llvm-tools-preview
- name: Run backend tests and coverage gate
run: ./scripts/test-rust.sh
security:
name: Dependency Security
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable
- name: Install security tooling
uses: taiki-e/install-action@v2
with:
tool: cargo-audit,cargo-deny
- name: Run cargo-audit
run: cargo audit --deny warnings
- name: Run cargo-deny
run: cargo deny check advisories bans sources
wasm-ui-tests:
name: WASM UI Tests
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Rust (wasm target)
uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown
- name: Install wasm-pack
uses: taiki-e/install-action@v2
with:
tool: wasm-pack
- name: Run WASM UI tests
run: ./scripts/test-wasm-ui.sh
e2e-tests:
name: Playwright E2E
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
cache: npm
- name: Install JavaScript dependencies
run: npm install
- name: Install Playwright browser
run: npx playwright install --with-deps chromium
- name: Set up Rust (wasm target)
uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown
- name: Install trunk
uses: taiki-e/install-action@v2
with:
tool: trunk
- name: Run Playwright E2E tests
env:
EXOCLAW_E2E_PORT: "7210"
EXOCLAW_E2E_TOKEN: "e2e-test-token"
run: npm run test:e2e
- name: Upload Playwright artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: playwright-artifacts
path: output/playwright
if-no-files-found: ignore