| name: "Code lint" | |
| permissions: | |
| contents: read | |
| on: | |
| pull_request: | |
| branches: | |
| - main | |
| - 'users/**' | |
| paths: | |
| - 'clang-tools-extra/clang-tidy/**' | |
| - 'clang-tools-extra/docs/clang-tidy/**' | |
| - '.github/workflows/pr-code-lint.yml' | |
| - '.ci/compute_projects**' | |
| jobs: | |
| code_linter: | |
| if: github.repository_owner == 'llvm' | |
| runs-on: ubuntu-26.04 | |
| defaults: | |
| run: | |
| shell: bash | |
| container: | |
| image: 'ghcr.io/llvm/ci-ubuntu-26.04-lint:latest@sha256:f323567151f2e8983bbce3d4447d78a74623a475256651ac8c52fa43552a903d' | |
| timeout-minutes: 60 | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| steps: | |
| - name: Fetch LLVM sources | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| fetch-depth: 2 | |
| - name: Get changed files | |
| id: changed-files | |
| uses: tj-actions/changed-files@9426d40962ed5378910ee2e21d5f8c6fcbf2dd96 # v47.0.6 | |
| 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 "Changed files:" | |
| echo "$CHANGED_FILES" | |
| # TODO: create special mapping for 'codegen' targets, for now build predefined set | |
| # TODO: add entrypoint in 'compute_projects.py' that only adds a project and its direct dependencies | |
| - name: Configure and CodeGen | |
| run: | | |
| git config --global --add safe.directory '*' | |
| projects_to_build=$(git diff --name-only HEAD~1...HEAD | python3 .ci/compute_projects.py | python3 -c "import json, sys; print(json.load(sys.stdin).get('projects_to_build', ''))") | |
| if [[ "${projects_to_build}" == "" ]]; then | |
| echo "No projects to analyze" | |
| exit 0 | |
| fi | |
| cmake -G Ninja \ | |
| -B build \ | |
| -S llvm \ | |
| -DLLVM_ENABLE_ASSERTIONS=OFF \ | |
| -DLLVM_ENABLE_PROJECTS="${projects_to_build}" \ | |
| -DCMAKE_CXX_COMPILER=clang++ \ | |
| -DCMAKE_C_COMPILER=clang \ | |
| -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ | |
| -DLLVM_INCLUDE_TESTS=OFF \ | |
| -DCLANG_INCLUDE_TESTS=OFF \ | |
| -DCMAKE_BUILD_TYPE=Release | |
| ninja_targets="" | |
| if [[ ";${projects_to_build};" == *";clang;"* ]]; then | |
| ninja_targets="${ninja_targets} clang-tablegen-targets" | |
| fi | |
| if [[ ";${projects_to_build};" == *";clang-tools-extra;"* ]]; then | |
| ninja_targets="${ninja_targets} genconfusable" | |
| fi | |
| if [[ -n "${ninja_targets}" ]]; then | |
| ninja -C build ${ninja_targets} | |
| fi | |
| - name: Run code linters | |
| env: | |
| GITHUB_PR_NUMBER: ${{ github.event.pull_request.number }} | |
| CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} | |
| run: | | |
| echo "[]" > comments && | |
| python3 llvm/utils/git/code-lint-helper.py \ | |
| --token ${{ secrets.GITHUB_TOKEN }} \ | |
| --issue-number $GITHUB_PR_NUMBER \ | |
| --start-rev HEAD~1 \ | |
| --end-rev HEAD \ | |
| --verbose \ | |
| --changed-files "$CHANGED_FILES" | |
| - name: Upload results | |
| uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 | |
| if: always() | |
| with: | |
| name: workflow-args | |
| path: | | |
| comments |