| name: LLVM Premerge Checks |
| |
| permissions: |
| contents: read |
| |
| on: |
| pull_request: |
| types: |
| - opened |
| - synchronize |
| - reopened |
| # When a PR is closed, we still start this workflow, but then skip |
| # all the jobs, which makes it effectively a no-op. The reason to |
| # do this is that it allows us to take advantage of concurrency groups |
| # to cancel in progress CI jobs whenever the PR is closed. |
| - closed |
| push: |
| branches: |
| - 'main' |
| - 'release/**' |
| |
| concurrency: |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} |
| cancel-in-progress: true |
| |
| jobs: |
| premerge-checks-linux: |
| name: Linux Premerge Checks (Test Only - Please Ignore Results) |
| if: >- |
| github.repository_owner == 'llvm' && |
| (github.event_name != 'pull_request' || github.event.action != 'closed') |
| runs-on: llvm-premerge-linux-runners |
| steps: |
| - name: Checkout LLVM |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |
| with: |
| fetch-depth: 2 |
| - name: Setup ccache |
| uses: hendrikmuhs/ccache-action@a1209f81afb8c005c13b4296c32e363431bffea5 # v1.2.17 |
| with: |
| max-size: "2000M" |
| - name: Build and Test |
| # Mark the job as a success even if the step fails so that people do |
| # not get notified while the new premerge pipeline is in an |
| # experimental state. |
| # TODO(boomanaiden154): Remove this once the pipeline is stable and we |
| # are ready for people to start recieving notifications. |
| continue-on-error: true |
| run: | |
| git config --global --add safe.directory '*' |
| |
| modified_files=$(git diff --name-only HEAD~1...HEAD) |
| modified_dirs=$(echo "$modified_files" | cut -d'/' -f1 | sort -u) |
| |
| echo $modified_files |
| echo $modified_dirs |
| |
| . ./.ci/compute-projects.sh |
| |
| all_projects="bolt clang clang-tools-extra compiler-rt cross-project-tests flang libc libclc lld lldb llvm mlir openmp polly pstl" |
| modified_projects="$(keep-modified-projects ${all_projects})" |
| |
| linux_projects_to_test=$(exclude-linux $(compute-projects-to-test 0 ${modified_projects})) |
| linux_check_targets=$(check-targets ${linux_projects_to_test} | sort | uniq) |
| linux_projects=$(add-dependencies ${linux_projects_to_test} | sort | uniq) |
| |
| linux_runtimes_to_test=$(compute-runtimes-to-test ${linux_projects_to_test}) |
| linux_runtime_check_targets=$(check-targets ${linux_runtimes_to_test} | sort | uniq) |
| linux_runtimes=$(echo ${linux_runtimes_to_test} | sort | uniq) |
| |
| if [[ "${linux_projects}" == "" ]]; then |
| echo "No projects to build" |
| exit 0 |
| fi |
| |
| echo "Building projects: ${linux_projects}" |
| echo "Running project checks targets: ${linux_check_targets}" |
| echo "Building runtimes: ${linux_runtimes}" |
| echo "Running runtimes checks targets: ${linux_runtime_check_targets}" |
| |
| export CC=/opt/llvm/bin/clang |
| export CXX=/opt/llvm/bin/clang++ |
| |
| ./.ci/monolithic-linux.sh "$(echo ${linux_projects} | tr ' ' ';')" "$(echo ${linux_check_targets})" "$(echo ${linux_runtimes} | tr ' ' ';')" "$(echo ${linux_runtime_check_targets})" |
| |
| premerge-checks-windows: |
| name: Windows Premerge Checks (Test Only - Please Ignore Results) |
| if: >- |
| github.repository_owner == 'llvm' && |
| (github.event_name != 'pull_request' || github.event.action != 'closed') |
| runs-on: llvm-premerge-windows-runners |
| defaults: |
| run: |
| shell: bash |
| steps: |
| - name: Checkout LLVM |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |
| with: |
| fetch-depth: 2 |
| - name: Setup ccache |
| uses: hendrikmuhs/ccache-action@a1209f81afb8c005c13b4296c32e363431bffea5 # v1.2.17 |
| with: |
| variant: "sccache" |
| max-size: "2000M" |
| - name: Compute Projects |
| id: vars |
| run: | |
| modified_files=$(git diff --name-only HEAD~1...HEAD) |
| modified_dirs=$(echo "$modified_files" | cut -d'/' -f1 | sort | uniq) |
| |
| echo $modified_files |
| echo $modified_dirs |
| |
| . ./.ci/compute-projects.sh |
| |
| all_projects="bolt clang clang-tools-extra compiler-rt cross-project-tests flang libc libclc lld lldb llvm mlir openmp polly pstl" |
| modified_projects="$(keep-modified-projects ${all_projects})" |
| |
| windows_projects_to_test=$(exclude-windows $(compute-projects-to-test 1 ${modified_projects})) |
| windows_check_targets=$(check-targets ${windows_projects_to_test} | sort | uniq | tr -d '\r' | tr '\n' ' ') |
| windows_projects=$(add-dependencies ${windows_projects_to_test} | sort | uniq | tr -d '\r' | tr '\n' ';') |
| |
| if [[ "${windows_projects}" == "" ]]; then |
| echo "No projects to build" |
| fi |
| |
| echo "Building projects: ${windows_projects}" |
| echo "Running project checks targets: ${windows_check_targets}" |
| |
| echo "windows-projects=${windows_projects}" >> $GITHUB_OUTPUT |
| echo "windows-check-targets=${windows_check_targets}" >> $GITHUB_OUTPUT |
| - name: Build and Test |
| # Mark the job as a success even if the step fails so that people do |
| # not get notified while the new premerge pipeline is in an |
| # experimental state. |
| # TODO(boomanaiden154): Remove this once the pipeline is stable and we |
| # are ready for people to start recieving notifications. |
| continue-on-error: true |
| if: ${{ steps.vars.outputs.windows-projects != '' }} |
| shell: cmd |
| run: | |
| set MAX_PARALLEL_COMPILE_JOBS=64 |
| set MAX_PARALLEL_LINK_JOBS=64 |
| call C:\\BuildTools\\Common7\\Tools\\VsDevCmd.bat -arch=amd64 -host_arch=amd64 |
| bash .ci/monolithic-windows.sh "${{ steps.vars.outputs.windows-projects }}" "${{ steps.vars.outputs.windows-check-targets }}" |
| |
| premerge-check-macos: |
| name: MacOS Premerge Checks |
| runs-on: macos-14 |
| if: >- |
| github.repository_owner == 'llvm' && |
| (startswith(github.ref_name, 'release/') || |
| startswith(github.base_ref, 'release/')) && |
| (github.event_name != 'pull_request' || github.event.action != 'closed') |
| steps: |
| - name: Checkout LLVM |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |
| with: |
| fetch-depth: 2 |
| - name: Setup ccache |
| uses: hendrikmuhs/ccache-action@a1209f81afb8c005c13b4296c32e363431bffea5 # v1.2.17 |
| with: |
| max-size: "2000M" |
| - name: Install Ninja |
| uses: llvm/actions/install-ninja@main |
| - name: Build and Test |
| run: | |
| modified_files=$(git diff --name-only HEAD~1...HEAD) |
| modified_dirs=$(echo "$modified_files" | cut -d'/' -f1 | sort -u) |
| |
| echo $modified_files |
| echo $modified_dirs |
| |
| . ./.ci/compute-projects.sh |
| |
| all_projects="clang clang-tools-extra lld lldb llvm mlir" |
| modified_projects="$(keep-modified-projects ${all_projects})" |
| |
| # We have to disable the runtimes builds due to https://github.com/llvm/llvm-project/issues/90568 |
| # and the lldb tests depend on libcxx, so we need to skip them. |
| mac_check_targets=$(check-targets ${modified_projects} | sort | uniq | tr '\n' ' ' | sed -e 's/check-lldb //g') |
| mac_projects=$(add-dependencies ${modified_projects} | sort | uniq | tr '\n' ' ') |
| |
| mac_runtimes_to_test=$(compute-runtimes-to-test ${modified_projects}) |
| mac_runtime_check_targets=$(check-targets ${mac_runtimes_to_test} | sort | uniq | tr '\n' ' ') |
| mac_runtimes=$(echo ${mac_runtimes_to_test} | tr ' ' '\n' | sort | uniq | tr '\n' ' ') |
| |
| if [[ "${mac_projects}" == "" ]]; then |
| echo "No projects to build" |
| exit 0 |
| fi |
| |
| echo "Projects to test: ${modified_projects}" |
| echo "Runtimes to test: ${mac_runtimes_to_test}" |
| echo "Building projects: ${mac_projects}" |
| echo "Running project checks targets: ${mac_check_targets}" |
| echo "Building runtimes: ${mac_runtimes}" |
| echo "Running runtimes checks targets: ${mac_runtime_check_targets}" |
| |
| # -DLLVM_DISABLE_ASSEMBLY_FILES=ON is for |
| # https://github.com/llvm/llvm-project/issues/81967 |
| # Disable sharding in lit so that the LIT_XFAIL environment var works. |
| cmake -G Ninja \ |
| -B build \ |
| -S llvm \ |
| -DLLVM_ENABLE_PROJECTS="$(echo ${mac_projects} | tr ' ' ';')" \ |
| -DLLVM_DISABLE_ASSEMBLY_FILES=ON \ |
| -DCMAKE_BUILD_TYPE=Release \ |
| -DLLDB_INCLUDE_TESTS=OFF \ |
| -DLLVM_ENABLE_ASSERTIONS=ON \ |
| -DCMAKE_C_COMPILER_LAUNCHER=ccache \ |
| -DCMAKE_CXX_COMPILER_LAUNCHER=ccache |
| |
| # The libcxx tests fail, so we are skipping the runtime targets. |
| ninja -C build $mac_check_targets |