name: CI on: push: branches: - main paths-ignore: - "**.md" - "LICENSE" - ".gitignore" - ".editorconfig" - ".vscode/**" - "docs/**" - ".prettierrc*" - ".eslintrc*" - ".github/ISSUE_TEMPLATE/**" - ".github/PULL_REQUEST_TEMPLATE/**" pull_request: branches: - main paths-ignore: - "**.md" - "LICENSE" - ".gitignore" - ".editorconfig" - ".vscode/**" - "docs/**" - ".prettierrc*" - ".eslintrc*" - ".github/ISSUE_TEMPLATE/**" - ".github/PULL_REQUEST_TEMPLATE/**" workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true permissions: contents: read jobs: lint: name: Lint runs-on: ubuntu-latest timeout-minutes: 10 steps: - name: Checkout uses: actions/checkout@v6 - name: Setup Node.js uses: actions/setup-node@v6 with: node-version: "20" cache: "npm" - name: Install dependencies run: npm ci - name: Run ESLint run: npm run lint - name: Check formatting run: npm run format:check test: name: Test runs-on: ubuntu-latest timeout-minutes: 15 steps: - name: Checkout uses: actions/checkout@v6 - name: Setup Node.js uses: actions/setup-node@v6 with: node-version: "20" cache: "npm" - name: Install dependencies run: npm ci - name: Run tests run: npm run test:run env: CI: true typecheck: name: Type Check runs-on: ubuntu-latest timeout-minutes: 10 steps: - name: Checkout uses: actions/checkout@v6 - name: Setup Node.js uses: actions/setup-node@v6 with: node-version: "20" cache: "npm" - name: Install dependencies run: npm ci - name: Run type check run: npm run type-check