| name: Post-Commit Static Analyzer | |
| permissions: | |
| contents: read | |
| on: | |
| push: | |
| branches: | |
| - 'release/**' | |
| paths: | |
| - 'clang/**' | |
| - 'llvm/**' | |
| - '.github/workflows/ci-post-commit-analyzer.yml' | |
| pull_request: | |
| types: | |
| - opened | |
| - synchronize | |
| - reopened | |
| - closed | |
| paths: | |
| - '.github/workflows/ci-post-commit-analyzer.yml' | |
| - '.github/workflows/ci-post-commit-analyzer-run.py' | |
| schedule: | |
| - cron: '30 0 * * *' | |
| concurrency: | |
| group: >- | |
| llvm-project-${{ github.workflow }}-${{ github.event_name == 'pull_request' && | |
| ( github.event.pull_request.number || github.ref) }} | |
| cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }} | |
| jobs: | |
| post-commit-analyzer: | |
| if: >- | |
| github.repository_owner == 'llvm' && | |
| github.event.action != 'closed' | |
| runs-on: ubuntu-26.04 | |
| container: | |
| image: ghcr.io/llvm/ci-ubuntu-26.04:latest@sha256:7ac659feb90ac48dd8676e4eb305b9aa5b31fc8b329b7e39379c38af06efc6e1 | |
| env: | |
| LLVM_VERSION: 18 | |
| steps: | |
| - name: Checkout Source | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Setup ccache | |
| uses: hendrikmuhs/ccache-action@d62db5f07c26379fc4b4e0916f098a92573c3b03 # v1.2.23 | |
| with: | |
| # A full build of llvm, clang, lld, and lldb takes about 250MB | |
| # of ccache space. There's not much reason to have more than this, | |
| # because we usually won't need to save cache entries from older | |
| # builds. Also, there is an overall 10GB cache limit, and each | |
| # run creates a new cache entry so we want to ensure that we have | |
| # enough cache space for all the tests to run at once and still | |
| # fit under the 10 GB limit. | |
| # Default to 2G to workaround: https://github.com/hendrikmuhs/ccache-action/issues/174 | |
| max-size: 2G | |
| key: post-commit-analyzer | |
| variant: sccache | |
| - name: Configure | |
| run: | | |
| cmake -B build -S llvm -G Ninja \ | |
| -DLLVM_ENABLE_ASSERTIONS=ON \ | |
| -DLLVM_ENABLE_PROJECTS=clang \ | |
| -DLLVM_BUILD_LLVM_DYLIB=ON \ | |
| -DLLVM_LINK_LLVM_DYLIB=ON \ | |
| -DCMAKE_CXX_COMPILER=clang++ \ | |
| -DCMAKE_C_COMPILER=clang \ | |
| -DCMAKE_CXX_COMPILER_LAUNCHER=sccache \ | |
| -DCMAKE_C_COMPILER_LAUNCHER=sccache \ | |
| -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ | |
| -DLLVM_INCLUDE_TESTS=OFF \ | |
| -DCLANG_INCLUDE_TESTS=OFF \ | |
| -DCMAKE_BUILD_TYPE=Release | |
| - name: Build | |
| run: | | |
| # FIXME: We need to build all the generated header files in order to be able to run | |
| # the analyzer on every file. Building libLLVM and libclang is probably overkill for | |
| # this, but it's better than building every target. | |
| ninja -v -C build libLLVM.so libclang.so | |
| # Run the analyzer. | |
| python3 .github/workflows/ci-post-commit-analyzer-run.py build/compile_commands.json | |
| scan-build --generate-index-only build/analyzer-results | |
| - name: Upload Results | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| if: always() | |
| with: | |
| name: analyzer-results | |
| path: 'build/analyzer-results/*' | |