name: Tests on: pull_request: branches: [main] push: branches: [main] paths-ignore: - '**.md' - 'docs/**' - '.github/workflows/claude*.yml' permissions: contents: read jobs: backend: name: Backend Tests runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v6 - name: Set up uv uses: astral-sh/setup-uv@v8.1.0 with: enable-cache: true - name: Set up Python run: uv python install - name: Install dependencies run: uv sync - name: Run tests with coverage run: uv run pytest tests/ -v --cov=open_notebook --cov=api --cov-report=term-missing --cov-report=xml - name: Upload coverage artifact uses: actions/upload-artifact@v4 with: name: backend-coverage path: coverage.xml backend-lint: name: Backend Lint runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v6 - name: Set up uv uses: astral-sh/setup-uv@v8.1.0 with: enable-cache: true - name: Set up Python run: uv python install - name: Install dependencies run: uv sync - name: Run ruff run: uv run ruff check . backend-typecheck: name: Backend Typecheck runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v6 - name: Set up uv uses: astral-sh/setup-uv@v8.1.0 with: enable-cache: true - name: Set up Python run: uv python install - name: Install dependencies run: uv sync - name: Run mypy run: uv run python -m mypy . frontend: name: Frontend Tests runs-on: ubuntu-latest defaults: run: working-directory: frontend steps: - name: Checkout uses: actions/checkout@v6 - name: Set up Node.js uses: actions/setup-node@v6 with: node-version: 22 cache: npm cache-dependency-path: frontend/package-lock.json - name: Install dependencies run: npm ci - name: Run tests with coverage run: npm run test:coverage - name: Upload coverage artifact uses: actions/upload-artifact@v4 with: name: frontend-coverage path: frontend/coverage/ frontend-lint: name: Frontend Lint runs-on: ubuntu-latest defaults: run: working-directory: frontend steps: - name: Checkout uses: actions/checkout@v6 - name: Set up Node.js uses: actions/setup-node@v6 with: node-version: 22 cache: npm cache-dependency-path: frontend/package-lock.json - name: Install dependencies run: npm ci - name: Run ESLint run: npm run lint frontend-build: name: Frontend Build runs-on: ubuntu-latest defaults: run: working-directory: frontend steps: - name: Checkout uses: actions/checkout@v6 - name: Set up Node.js uses: actions/setup-node@v6 with: node-version: 22 cache: npm cache-dependency-path: frontend/package-lock.json - name: Install dependencies run: npm ci - name: Build run: npm run build