Skip to content

Feat/plan and fixes #56

Feat/plan and fixes

Feat/plan and fixes #56

Workflow file for this run

name: CI
on:
pull_request:
push:
branches: [main]
# A new push to a PR makes the in-flight run irrelevant.
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
ci:
name: lint, typecheck, test, build
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v7
- name: Install pnpm
# Version comes from the `packageManager` field in package.json.
uses: pnpm/action-setup@v6
- name: Install Node
uses: actions/setup-node@v7
with:
node-version-file: .nvmrc
cache: pnpm
- name: Install dependencies
run: pnpm install --frozen-lockfile
# First, not last. Every package consumes its workspace dependencies
# through their published dist rather than a path alias — deliberately, so
# they exercise the shape a consumer gets — which means nothing
# downstream resolves until those dists exist. That includes lint: the
# type-aware rules read an unbuilt import as `error` and report every use
# of it as unsafe, which is a confusing way to be told the build is
# missing.
- name: Build
run: pnpm build
- name: Lint
run: pnpm lint
- name: Check formatting
run: pnpm format:check
- name: Typecheck
run: pnpm typecheck
# Story tests run in a real browser, so the binary has to be present.
- name: Install Playwright Chromium
run: pnpm exec playwright install --with-deps chromium
- name: Test
run: pnpm test
# A budget nobody checks is decoration. Runs after Build because it
# measures the real dist, not a re-bundle of source.
- name: Bundle size
run: pnpm size
- name: Build Storybook
run: pnpm build-storybook