Skip to content

refactor(board): rebuild canvas context menu on Radix menu primitives… #445

refactor(board): rebuild canvas context menu on Radix menu primitives…

refactor(board): rebuild canvas context menu on Radix menu primitives… #445

Workflow file for this run

name: Tests
on:
pull_request:
branches:
- main
push:
branches:
- main
jobs:
webui:
name: webui (lint + tests)
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: "20"
cache: "npm"
cache-dependency-path: webui/package-lock.json
- name: Install webui dependencies
run: npm ci
working-directory: webui
- name: Lint (type-check + eslint)
run: make lint-ui
- name: Unit tests
run: make test-ui
e2e:
name: webui (e2e — local-only flow)
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: "20"
cache: "npm"
cache-dependency-path: webui/package-lock.json
- name: Install webui dependencies
run: npm ci
working-directory: webui
# Playwright's chromium needs system libs (libnspr4/libnss3/…); --with-deps
# installs them. This is what a local dev sandbox usually can't do.
- name: Install Playwright (browser + system deps)
run: npx playwright install --with-deps chromium
working-directory: webui
# The dev script loads ../.env via dotenv; the local-only flow needs no
# real backend values, so the sample env is enough to boot the server.
- name: Provide dev env
run: cp .env.sample .env
- name: E2E (local boards + agent, mocked provider)
run: npm run e2e
working-directory: webui
backend:
name: backend (ruff + unit tests)
runs-on: ubuntu-latest
# Backstop so a wedged test (e.g. a collab WebSocket frame-ordering
# race) can't pin the runner until GitHub's ~6h default. The per-test
# pytest-timeout is the primary guard; this caps the whole job.
timeout-minutes: 15
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.13"
- name: Set up uv
uses: astral-sh/setup-uv@v4
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: "20"
cache: "npm"
cache-dependency-path: backend/scripts/mini-app-compiler/package-lock.json
- name: Sync backend dependencies
run: uv sync --extra dev
working-directory: backend
- name: Install mini-app compiler dependencies
run: npm ci --omit=dev
working-directory: backend/scripts/mini-app-compiler
- name: Ruff check
run: make lint-backend
- name: Unit tests
run: make test-backend
tauri:
name: desktop (rust — rusqlite storage)
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- name: Check out repository
uses: actions/checkout@v4
# The Tauri crate links native libs on Linux even for `cargo test`, so the
# webkit2gtk/gtk stack must be present. rusqlite's `bundled` feature
# compiles SQLite from source (needs a C toolchain, present by default).
- name: Install Tauri system dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
libwebkit2gtk-4.1-dev \
libgtk-3-dev \
libayatana-appindicator3-dev \
librsvg2-dev \
libssl-dev \
libxdo-dev \
patchelf
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo
uses: Swatinem/rust-cache@v2
with:
workspaces: webui/src-tauri
- name: Rust unit tests (storage layer)
run: make test-tauri