name: Generate check on: push: pull_request: jobs: check-changes: runs-on: ubuntu-latest outputs: has_gen_changes: ${{ steps.check.outputs.has_gen_changes }} steps: - name: Checkout code uses: actions/checkout@v3 with: fetch-depth: 0 - name: Check for generated file changes id: check run: | if git diff --name-only origin/${{ github.base_ref }}...HEAD | grep -E '_gen\.go$|/generate\.go$'; then echo "has_gen_changes=true" >> $GITHUB_OUTPUT else echo "has_gen_changes=false" >> $GITHUB_OUTPUT fi check-generate: runs-on: ubuntu-latest needs: check-changes if: needs.check-changes.outputs.has_gen_changes == 'true' steps: - name: Checkout code uses: actions/checkout@v3 - name: Setup Go uses: actions/setup-go@v4 with: go-version: 1.25 - name: Save pre-generate git state run: git status --porcelain > pre-generate.txt - name: Run go generate run: go generate ./... - name: Save post-generate git state run: git status --porcelain > post-generate.txt - name: Check for changes run: | if ! diff pre-generate.txt post-generate.txt | grep .; then echo "No files changed by go generate" else echo "go generate produced changes; commit those first" >&2 exit 1 fi