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 with `cd packages/svelte && pnpm generate:types` 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