name : CI
on :
push :
branches : [ main]
pull_request :
permissions :
contents : read # to fetch code (actions/checkout)
env :
# We only install Chromium manually
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD : '1'
jobs :
Tests :
runs-on : ${{ matrix.os }}
timeout-minutes : 15
strategy :
matrix :
include :
- node-version : 18
os : windows-latest
- node-version : 18
os : macOS-latest
- node-version : 18
os : ubuntu-latest
- node-version : 20
os : ubuntu-latest
- node-version : 22
os : ubuntu-latest
steps :
- uses : actions/checkout@v4
- uses : pnpm/action-setup@v4
- uses : actions/setup-node@v4
with :
node-version : ${{ matrix.node-version }}
cache : pnpm
- run : pnpm install --frozen-lockfile
- run : pnpm playwright install chromium
- run : pnpm test
env :
CI : true
Lint :
runs-on : ubuntu-latest
timeout-minutes : 5
steps :
- uses : actions/checkout@v4
- uses : pnpm/action-setup@v4
- uses : actions/setup-node@v4
with :
node-version : 18
cache : pnpm
- name : install
run : pnpm install --frozen-lockfile
- name : type check
run : pnpm check
- name : lint
if : (${{ success() }} || ${{ failure() }}) # ensures this step runs even if previous steps fail (avoids multiple runs uncovering different issues at different steps)
run : pnpm lint
- name : build and check generated types
if : (${{ success() }} || ${{ failure() }}) # ensures this step runs even if previous steps fail
run : pnpm build && { [ "`git status --porcelain=v1`" == "" ] || (echo "Generated types have changed — please regenerate types locally and commit the changes after you have reviewed them"; git diff; exit 1); }
Benchmarks :
runs-on : ubuntu-latest
timeout-minutes : 15
steps :
- uses : actions/checkout@v4
- uses : pnpm/action-setup@v4
- uses : actions/setup-node@v4
with :
node-version : 18
cache : pnpm
- run : pnpm install --frozen-lockfile
- run : pnpm bench
env :
CI : true