name: CI 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: - 'release/**' concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} cancel-in-progress: true jobs: premerge-checks-linux: name: Build and Test Linux 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. run: | git config --global --add safe.directory '*' source <(git diff --name-only HEAD~1...HEAD | python3 .ci/compute_projects.py) if [[ "${projects_to_build}" == "" ]]; then echo "No projects to build" exit 0 fi echo "Building projects: ${projects_to_build}" echo "Running project checks targets: ${project_check_targets}" echo "Building runtimes: ${runtimes_to_build}" echo "Running runtimes checks targets: ${runtimes_check_targets}" echo "Running runtimes checks requiring reconfiguring targets: ${runtimes_check_targets_needs_reconfig}" export CC=/opt/llvm/bin/clang export CXX=/opt/llvm/bin/clang++ ./.ci/monolithic-linux.sh "${projects_to_build}" "${project_check_targets}" "${runtimes_to_build}" "${runtimes_check_targets}" "${runtimes_check_targets_needs_reconfig}" - name: Upload Artifacts uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: Premerge Artifacts (Linux) path: artifacts/ retention-days: 5 include-hidden-files: 'true' premerge-checks-windows: name: Build and Test Windows 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: | source <(git diff --name-only HEAD~1...HEAD | python .ci/compute_projects.py) if [[ "${projects_to_build}" == "" ]]; then echo "No projects to build" fi echo "Building projects: ${projects_to_build}" echo "Running project checks targets: ${project_check_targets}" echo "windows-projects=${projects_to_build}" >> $GITHUB_OUTPUT echo "windows-check-targets=${project_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. 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 }}" - name: Upload Artifacts uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: Premerge Artifacts (Windows) path: artifacts/ retention-days: 5 include-hidden-files: 'true' 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: | source <(git diff --name-only HEAD~2..HEAD | python3 .ci/compute_projects.py) if [[ "${projects_to_build}" == "" ]]; then echo "No projects to build" exit 0 fi echo "Building projects: ${projects_to_build}" echo "Running project checks targets: ${project_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="${projects_to_build}" \ -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 ${project_check_targets}