name: CI on: push: branches: [master, next] pull_request: permissions: contents: read jobs: build: strategy: fail-fast: false matrix: node-version: [20] runner: [ubuntu-latest, windows-latest] runs-on: ${{ matrix.runner }} timeout-minutes: 15 steps: - uses: actions/checkout@v3 - uses: pnpm/action-setup@v3 with: version: ^9.5.0 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} cache: 'pnpm' # Cargo already skips downloading dependencies if they already exist - name: Cache cargo uses: actions/cache@v3 with: path: | ~/.cargo/bin/ ~/.cargo/registry/index/ ~/.cargo/registry/cache/ ~/.cargo/git/db/ target/ key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} # Cache the `oxide` Rust build - name: Cache oxide build uses: actions/cache@v3 with: path: | ./target/ ./crates/node/*.node ./crates/node/index.js ./crates/node/index.d.ts key: ${{ runner.os }}-oxide-${{ hashFiles('./crates/**/*') }} - name: Install dependencies run: pnpm install - name: Build run: pnpm run build - name: Lint run: pnpm run lint # Only lint on linux to avoind \r\n line ending errors if: matrix.runner == 'ubuntu-latest' - name: Test run: pnpm run test - name: Integration Tests run: pnpm run test:integrations - name: Install Playwright Browsers run: npx playwright install --with-deps - name: Run Playwright tests run: npm run test:ui - uses: actions/upload-artifact@v3 if: always() with: name: playwright-report path: packages/tailwindcss/playwright-report/ retention-days: 30