name: Panel CI on: push: branches: - master # The dev branch: every fleet PR merges here, so without it the panel # suite never ran on the trunk that master is cut from. - slave # Fleet task branches: `pull_request`'s synchronize trigger doesn't # reliably fire when a revision lands on a PR head via the merge API # (see ci.yml for the live-proven receipts); `push` does. - 'feature/**' - 'bug/**' - 'chore/**' - 'docs/**' - 'hotfix/**' paths: - 'panel/**' - '.github/workflows/panel-ci.yml' pull_request: branches: - master # Fleet PRs target the dev branch — see ci.yml's pull_request note. - slave paths: - 'panel/**' - '.github/workflows/panel-ci.yml' workflow_dispatch: # A fleet branch that's also an open PR head can get both a `push` and a # `pull_request` run for the same commit; cancel the older one instead of # burning two runners on identical work. `head_ref` (set only for # pull_request) and `ref_name` (the short branch name, valid for push) both # resolve to the SAME branch name, so the two event shapes share one group — # plain `github.ref` would NOT (it's `refs/pull//merge` for pull_request # vs `refs/heads/` for push, so it'd never collapse them). concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.ref_name }} cancel-in-progress: true jobs: panel: name: Panel (Next.js) runs-on: ubuntu-latest defaults: run: working-directory: panel steps: - name: Checkout code uses: actions/checkout@v7 with: # The release-readiness smoke test calls ``git describe --tags`` to # find the most recent release tag. ``actions/checkout``'s default # shallow + no-tags clone makes that return empty, which made # ``test_gather_snapshot_reads_the_real_repo`` fail with # ``last_tag is None`` even though master had a tagged v0.13.0. # ``fetch-depth: 0`` clones full history; the default ``fetch-tags`` # would still skip tags on shallow clones, so we also pin it true. fetch-depth: 0 fetch-tags: true - name: Set up Node uses: actions/setup-node@v7 with: # pnpm 11 (pinned in panel/package.json via packageManager) requires # Node >=22.13; Node 20 makes `pnpm install` fail the engines check. node-version: '22' - name: Enable corepack (pnpm) run: corepack enable - name: Install dependencies run: pnpm install --frozen-lockfile - name: Lint run: pnpm lint - name: Type-check run: pnpm exec tsc --noEmit - name: Test (vitest + coverage) run: pnpm test