name: Generated files on: pull_request: permissions: contents: read jobs: changes: name: Detect changes runs-on: ubuntu-latest permissions: contents: read pull-requests: read outputs: generated: ${{ steps.filter.outputs.generated }} steps: - name: Filter changed paths uses: dorny/paths-filter@v3 id: filter with: # `**/!(*.md)` excludes Markdown so docs-only changes don't trigger codegen checks. filters: | generated: - 'spec/**/!(*.md)' - 'codegen.Dockerfile' - 'Makefile' - 'packages/**/!(*.md)' - 'pnpm-lock.yaml' - 'pnpm-workspace.yaml' - 'package.json' - '.tool-versions' - '.github/workflows/generated_files.yml' check-generated: name: Generated files needs: changes if: ${{ needs.changes.outputs.generated == 'true' }} 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@v6 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