name: "Check code formatting"

permissions:
  contents: read

on:
  pull_request:
    branches:
      - main
      - 'users/**'

jobs:
  code_formatter:
    runs-on: ubuntu-24.04
    container:
      image: 'ghcr.io/llvm/ci-ubuntu-24.04-format'
    timeout-minutes: 30
    concurrency:
      group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
      cancel-in-progress: true
    if: github.repository == 'llvm/llvm-project'
    steps:
      - name: Fetch LLVM sources
        uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
        with:
          fetch-depth: 2

      - name: Get changed files
        id: changed-files
        uses: tj-actions/changed-files@24d32ffd492484c1d75e0c0b894501ddb9d30d62 # v47.0.0
        with:
          separator: ","
          skip_initial_fetch: true
          base_sha: 'HEAD~1'
          sha: 'HEAD'

      - name: "Listed files"
        env:
          CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
        run: |
          echo "Formatting files:"
          echo "$CHANGED_FILES"

      - name: Run code formatter
        env:
          GITHUB_PR_NUMBER: ${{ github.event.pull_request.number }}
          CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
        # Create an empty comments file so the pr-write job doesn't fail.
        run: |
          echo "[]" > comments &&
          python ./llvm/utils/git/code-format-helper.py \
            --write-comment-to-file \
            --token ${{ secrets.GITHUB_TOKEN }} \
            --issue-number $GITHUB_PR_NUMBER \
            --start-rev HEAD~1 \
            --end-rev HEAD \
            --changed-files "$CHANGED_FILES"

      - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
        if: always()
        with:
          name: workflow-args
          path: |
            comments