name: Frontend Tests on: pull_request: branches: - v3 push: branches: - v3 permissions: contents: read concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true jobs: format: if: github.event_name == 'pull_request' runs-on: ubuntu-latest timeout-minutes: 20 steps: - name: Checkout uses: actions/checkout@v7 with: fetch-depth: 0 - name: Setup Node uses: actions/setup-node@v7 with: node-version: '24' cache: yarn cache-dependency-path: yarn.lock - name: Install dependencies run: yarn --frozen-lockfile - name: Check changed-file formatting env: BASE_SHA: ${{ github.event.pull_request.base.sha }} HEAD_SHA: ${{ github.event.pull_request.head.sha }} run: yarn format:check --base "$BASE_SHA" --head "$HEAD_SHA" lint: runs-on: ubuntu-latest timeout-minutes: 20 steps: - name: Checkout uses: actions/checkout@v7 - name: Setup Node uses: actions/setup-node@v7 with: node-version: '24' cache: yarn cache-dependency-path: yarn.lock - name: Install dependencies run: yarn --frozen-lockfile - name: Lint run: yarn lint typecheck-and-tests: runs-on: ubuntu-latest timeout-minutes: 20 steps: - name: Checkout uses: actions/checkout@v7 - name: Setup Node uses: actions/setup-node@v7 with: node-version: '24' cache: yarn cache-dependency-path: yarn.lock - name: Install dependencies run: yarn --frozen-lockfile - name: Typecheck run: yarn typecheck - name: Unit tests run: yarn test:run