name: Benchmarks

on: [pull_request]

permissions:
  contents: read

jobs:
  benchmarks:
    name: benchmarks

    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - uses: actions/setup-node@v3
        with:
          node-version: 24.5
          cache: 'npm'
          cache-dependency-path: package-lock.json

      - uses: google/wireit@setup-github-actions-caching/v2

      - name: NPM install
        env:
          # Force installed chromedriver version to match the available chrome
          # version regardless of package-lock
          # https://github.com/giggio/node-chromedriver?tab=readme-ov-file#detect-chromedriver-version
          DETECT_CHROMEDRIVER_VERSION: true
        run: npm ci

      - name: Build
        run: |
          cd packages/benchmarks
          npm run build

      # lit-html:kitchen-sink
      - name: Benchmark lit-html/kitchen-sink
        run: |
          cd packages/benchmarks
          npx tachometer \
            --config lit-html/kitchen-sink/tachometer.json \
            --json-file lit-html-kitchen-sink.json

      # lit-html:template-heavy
      - name: Benchmark lit-html/template-heavy
        run: |
          cd packages/benchmarks
          npx tachometer \
            --config lit-html/template-heavy/tachometer.json \
            --json-file lit-html-template-heavy.json

      # lit-html:repeat
      - name: Benchmark lit-html/repeat
        run: |
          cd packages/benchmarks
          npx tachometer \
            --config lit-html/repeat/tachometer.json \
            --json-file lit-html-repeat.json

      # lit-element:list
      - name: Benchmark lit-element/list
        run: |
          cd packages/benchmarks
          npx tachometer \
            --config lit-element/list/tachometer.json \
            --json-file lit-element-list.json

      # reactive-element:list
      - name: Benchmark reactive-element/list
        run: |
          cd packages/benchmarks
          npx tachometer \
            --config reactive-element/list/tachometer.json \
            --json-file reactive-element-list.json

      - name: Upload results
        uses: actions/upload-artifact@v4
        with:
          name: results
          path: |
            packages/benchmarks/lit-html-kitchen-sink.json
            packages/benchmarks/lit-html-template-heavy.json
            packages/benchmarks/lit-html-repeat.json
            packages/benchmarks/lit-element-list.json
            packages/benchmarks/reactive-element-list.json
