name: web_ui tests on: push: branches: [main] paths: ['web_ui/**', 'ts_config/**'] pull_request: branches: [main] paths: ['web_ui/**', 'ts_config/**'] workflow_dispatch: jobs: test: runs-on: ubuntu-latest defaults: run: working-directory: web_ui steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 with: version: 12 - uses: actions/setup-node@v4 with: node-version: "24.22.1" # The preset is a `link:../ts_config` dependency. pnpm links the # directory but installs nothing inside it, and a flat config imports # its plugins from the preset's own node_modules -- so without this # step the lint dies on "Cannot find package '@eslint/js'". - name: Install the shared lint preset's dependencies run: pnpm install --frozen-lockfile working-directory: ts_config - name: Install dependencies run: pnpm install --frozen-lockfile - name: Lint run: pnpm lint - name: Run tests with the 100% coverage gate run: pnpm coverage # The tag ships a prebuilt dist/ because Vite does not transpile # dependencies. A committed dist/ that does not match src/ would ship # stale code to every consumer with no error anywhere, so rebuild and # fail if the result differs from what is checked in. - name: dist/ is in sync with src/ run: | pnpm build if ! git diff --exit-code -- dist; then echo "::error::dist/ is stale — run 'pnpm build' in web_ui and commit the result." exit 1 fi - name: Categorical ramp still passes its constraints working-directory: . run: python3 unified-design-system/scripts/ramp_check.py