name: Generated files

on:
  pull_request:

permissions:
  contents: read

jobs:
  check-generated:
    name: Generated files
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Parse .tool-versions
        uses: wistia/parse-tool-versions@v2.1.1
        with:
          filename: '.tool-versions'
          uppercase: 'true'
          prefix: 'tool_version_'

      - name: Install pnpm
        uses: pnpm/action-setup@v4
        id: pnpm-install
        with:
          version: '${{ env.TOOL_VERSION_PNPM }}'

      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: '${{ env.TOOL_VERSION_NODEJS }}'
          registry-url: 'https://registry.npmjs.org'
          cache: pnpm
          cache-dependency-path: pnpm-lock.yaml

      - name: Configure pnpm
        run: |
          pnpm config set auto-install-peers true
          pnpm config set exclude-links-from-lockfile true

      - name: Install dependencies
        run: pnpm install --frozen-lockfile

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Build codegen image with caching
        uses: docker/build-push-action@v6
        with:
          context: .
          file: codegen.Dockerfile
          tags: codegen-env:latest
          load: true # makes the image available for `docker run`
          cache-from: type=gha
          cache-to: type=gha,mode=max

      - name: Run codegen
        run: CODEGEN_IMAGE=codegen-env:latest make codegen

      - name: Check for uncommitted changes
        run: |
          if [[ -n $(git status --porcelain) ]]; then
            echo "❌ Generated files are not up to date:"
            git status --short
            git diff
            exit 1
          else
            echo "✅ No changes detected."
          fi
