diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f8c5094c..9a2c5c8c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -48,8 +48,20 @@ jobs: - name: Run mypy (type checking) run: uv run mypy codeframe/ - # Note: Frontend linting disabled - web-ui is legacy during v2 CLI-first refactor - # Re-enable when web-ui package.json is restored + - name: Set up Node.js + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: ${{ env.NODE_VERSION }} + cache: 'npm' + cache-dependency-path: 'web-ui/package-lock.json' + + - name: Install frontend dependencies + working-directory: web-ui + run: npm ci + + - name: Run frontend lint (eslint) + working-directory: web-ui + run: npm run lint # ============================================ # Static Analysis - Check for Hardcoded URLs @@ -265,6 +277,12 @@ jobs: working-directory: web-ui run: npm ci + - name: Build (fail PR on TypeScript/build break) + working-directory: web-ui + env: + NEXT_TELEMETRY_DISABLED: 1 + run: npm run build + - name: Run Jest tests with coverage working-directory: web-ui run: npm run test:coverage diff --git a/web-ui/__tests__/app/proof/req_id/page.test.tsx b/web-ui/__tests__/app/proof/req_id/page.test.tsx index 3ada6399..928ec3e8 100644 --- a/web-ui/__tests__/app/proof/req_id/page.test.tsx +++ b/web-ui/__tests__/app/proof/req_id/page.test.tsx @@ -66,8 +66,6 @@ const waivedReq = { }, }; -const mockEvidenceResponse = []; - describe('ProofDetailPage', () => { beforeEach(() => { jest.clearAllMocks(); diff --git a/web-ui/src/__tests__/components/proof/ProofDetailPage.test.tsx b/web-ui/src/__tests__/components/proof/ProofDetailPage.test.tsx index e44155f1..d7be1a34 100644 --- a/web-ui/src/__tests__/components/proof/ProofDetailPage.test.tsx +++ b/web-ui/src/__tests__/components/proof/ProofDetailPage.test.tsx @@ -3,7 +3,7 @@ import { render, screen, fireEvent } from '@testing-library/react'; import useSWR from 'swr'; import ProofDetailPage from '@/app/proof/[req_id]/page'; import * as storage from '@/lib/workspace-storage'; -import type { ProofEvidence, ProofRequirement, ProofEvidenceSortCol, SortDir } from '@/types'; +import type { ProofEvidence, ProofRequirement } from '@/types'; // ── Mocks ──────────────────────────────────────────────────────────────── diff --git a/web-ui/src/__tests__/components/tasks/GitHubIssueImportModal.test.tsx b/web-ui/src/__tests__/components/tasks/GitHubIssueImportModal.test.tsx index 2d21d17f..cc909fa7 100644 --- a/web-ui/src/__tests__/components/tasks/GitHubIssueImportModal.test.tsx +++ b/web-ui/src/__tests__/components/tasks/GitHubIssueImportModal.test.tsx @@ -1,9 +1,8 @@ import React from 'react'; -import { render, screen, fireEvent, waitFor, within } from '@testing-library/react'; +import { render, screen, fireEvent, waitFor } from '@testing-library/react'; import useSWR from 'swr'; import { GitHubIssueImportModal } from '@/components/tasks/GitHubIssueImportModal'; -import { integrationsApi } from '@/lib/api'; import type { GitHubIssue, GitHubIssuesResponse } from '@/types'; jest.mock('swr'); diff --git a/web-ui/src/components/proof/CaptureGlitchModal.tsx b/web-ui/src/components/proof/CaptureGlitchModal.tsx index 7769499a..00de7f62 100644 --- a/web-ui/src/components/proof/CaptureGlitchModal.tsx +++ b/web-ui/src/components/proof/CaptureGlitchModal.tsx @@ -4,7 +4,6 @@ import { useState, useEffect } from 'react'; import { Cancel01Icon } from '@hugeicons/react'; import * as DialogPrimitive from '@radix-ui/react-dialog'; import { Button } from '@/components/ui/button'; -import { Input } from '@/components/ui/input'; import { Textarea } from '@/components/ui/textarea'; import { Checkbox } from '@/components/ui/checkbox'; import {