Skip to content

Guard optimistic shape edits against stale-write reverts #36

Guard optimistic shape edits against stale-write reverts

Guard optimistic shape edits against stale-write reverts #36

Workflow file for this run

# Build + test gate for PRs and pushes to main.
#
# Backend job runs the full in-process round trip (backend/test_e2e.py), including
# the snapshot save/open flow. Frontend job typechecks and builds the app.
name: ci
on:
pull_request:
push:
branches: [main]
jobs:
backend:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.11" # matches .venv-introspect (README "Run locally")
- name: Setup uv
uses: astral-sh/setup-uv@v5
with:
version: "0.5.16" # matches docker/Dockerfile and the local dev venv
enable-cache: true
cache-dependency-glob: backend/requirements.txt
- name: Install backend deps
# Exactly the README/run.sh setup: install pinned deps, then strip the GPL
# Leiden backends (custom.leiden uses graspologic-native instead).
run: |
uv pip install --system -r backend/requirements.txt
uv pip uninstall --system leidenalg igraph
- name: Prepare test dataset
# CI runs the Visium-backed portion of test_e2e.py. The Xenium flows
# (segmentation/raster/zarr-import/custom methods) need the larger
# xenium.zarr + xenium_tma.zarr fixtures and are skipped when absent;
# regenerate them locally via scripts/prepare_xenium_*.py (see
# DEVELOPMENT.md "Test datasets") to run the full suite.
run: python scripts/prepare_test_data.py
- name: Backend round-trip
# Script-style test (no pytest collection): the repo's canonical backend check.
run: |
cd backend
PYTHONPATH=. python test_e2e.py
frontend:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: "20"
cache: npm
cache-dependency-path: frontend/package-lock.json
- name: Install, typecheck, build
run: |
cd frontend
npm ci
npx tsc --noEmit -p tsconfig.app.json
npm run build