| 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${{ (startsWith(matrix.runs-on, 'depot-ubuntu-24.04-arm') && ' AArch64') || '' }} |
| if: >- |
| github.repository_owner == 'llvm' && |
| (github.event_name != 'pull_request' || github.event.action != 'closed') |
| strategy: |
| fail-fast: false |
| matrix: |
| runs-on: |
| - depot-ubuntu-24.04-arm-16 |
| - llvm-premerge-linux-runners |
| runs-on: ${{ matrix.runs-on }} |
| container: |
| # The llvm-premerge agents are already containers and running the |
| # this same image, so we can't use a container for the github action |
| # job. The depot containers are running on VMs, so we can use a |
| # container. This helps ensure the build environment is as close |
| # as possible on both the depot runners and the llvm-premerge runners. |
| image: ${{ (startsWith(matrix.runs-on, 'depot-ubuntu-24.04-arm') && format('ghcr.io/{0}/arm64v8/ci-ubuntu-24.04',github.repository_owner) ) || null }} |
| # --privileged is needed to run the lldb tests that disable aslr. |
| # The SCCACHE environment variables are need to be copied from the host |
| # to the container to make sure it is configured correctly to use the |
| # depot cache. |
| options: >- |
| --privileged |
| --env SCCACHE_WEBDAV_ENDPOINT |
| --env SCCACHE_WEBDAV_TOKEN |
| defaults: |
| run: |
| # The run step defaults to using sh as the shell when running in a |
| # container, so make bash the default to ensure consistency between |
| # container and non-container jobs. |
| shell: bash |
| steps: |
| - name: Checkout LLVM |
| uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 |
| with: |
| fetch-depth: 2 |
| - name: Build and Test |
| timeout-minutes: 120 |
| env: |
| GITHUB_TOKEN: ${{ github.token }} |
| GITHUB_PR_NUMBER: ${{ github.event.pull_request.number }} |
| 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++ |
| |
| # The linux-premerge runners are hosted on GCP and have a different |
| # cache setup than the depot runners. |
| if [[ "${{ matrix.runs-on }}" = "llvm-premerge-linux-runners" ]]; then |
| # This environment variable is passes into the container through the |
| # runner pod definition. This differs between our two clusters which |
| # why we do not hardcode it. |
| export SCCACHE_GCS_BUCKET=$CACHE_GCS_BUCKET |
| export SCCACHE_GCS_RW_MODE=READ_WRITE |
| fi |
| env |
| |
| # Set the idle timeout to zero to ensure sccache runs for the |
| # entire duration of the job. Otherwise it might stop if we run |
| # several test suites in a row and discard statistics that we want |
| # to save in the end. |
| export SCCACHE_IDLE_TIMEOUT=0 |
| mkdir artifacts |
| SCCACHE_LOG=info SCCACHE_ERROR_LOG=$(pwd)/artifacts/sccache.log sccache --start-server |
| |
| ./.ci/monolithic-linux.sh "${projects_to_build}" "${project_check_targets}" "${runtimes_to_build}" "${runtimes_check_targets}" "${runtimes_check_targets_needs_reconfig}" "${enable_cir}" |
| - name: Upload Artifacts |
| # In some cases, Github will fail to upload the artifact. We want to |
| # continue anyways as a failed artifact upload is an infra failure, not |
| # a checks failure. |
| # https://github.com/actions/upload-artifact/issues/569 |
| continue-on-error: true |
| if: '!cancelled()' |
| uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 |
| with: |
| name: Premerge Artifacts (Linux ${{ runner.arch }}) |
| path: artifacts/ |
| retention-days: 5 |
| include-hidden-files: 'true' |
| - name: Upload Comment |
| uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 |
| if: ${{ always() && !startsWith(matrix.runs-on, 'depot-ubuntu-24.04-arm') }} |
| continue-on-error: true |
| with: |
| name: workflow-args-x86-linux |
| path: | |
| comments-Linux-x86_64 |
| |
| 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-2022-runners |
| defaults: |
| run: |
| shell: bash |
| steps: |
| - name: Checkout LLVM |
| uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 |
| with: |
| fetch-depth: 2 |
| - 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 "Building runtimes: ${runtimes_to_build}" |
| echo "Running runtimes checks targets: ${runtimes_check_targets}" |
| |
| echo "windows-projects=${projects_to_build}" >> $GITHUB_OUTPUT |
| echo "windows-check-targets=${project_check_targets}" >> $GITHUB_OUTPUT |
| echo "windows-runtimes=${runtimes_to_build}" >> $GITHUB_OUTPUT |
| echo "windows-runtimes-check-targets=${runtimes_check_targets}" >> $GITHUB_OUTPUT |
| - name: Build and Test |
| timeout-minutes: 180 |
| if: ${{ steps.vars.outputs.windows-projects != '' }} |
| shell: cmd |
| env: |
| GITHUB_TOKEN: ${{ github.token }} |
| GITHUB_PR_NUMBER: ${{ github.event.pull_request.number }} |
| run: | |
| call C:\\BuildTools\\Common7\\Tools\\VsDevCmd.bat -arch=amd64 -host_arch=amd64 |
| # See the comments above in the Linux job for why we define each of |
| # these environment variables. |
| bash -c "export SCCACHE_GCS_BUCKET=$CACHE_GCS_BUCKET; export SCCACHE_GCS_RW_MODE=READ_WRITE; export SCCACHE_IDLE_TIMEOUT=0; mkdir artifacts; SCCACHE_LOG=info SCCACHE_ERROR_LOG=$(pwd)/artifacts/sccache.log sccache --start-server; .ci/monolithic-windows.sh \"${{ steps.vars.outputs.windows-projects }}\" \"${{ steps.vars.outputs.windows-check-targets }}\" \"${{ steps.vars.outputs.windows-runtimes }}\" \"${{ steps.vars.outputs.windows-runtimes-check-targets }}\"" |
| - name: Upload Artifacts |
| # In some cases, Github will fail to upload the artifact. We want to |
| # continue anyways as a failed artifact upload is an infra failure, not |
| # a checks failure. |
| # https://github.com/actions/upload-artifact/issues/569 |
| continue-on-error: true |
| if: '!cancelled()' |
| uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 |
| with: |
| name: Premerge Artifacts (Windows) |
| path: artifacts/ |
| retention-days: 5 |
| include-hidden-files: 'true' |
| - name: Upload Comment |
| uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 |
| if: always() |
| continue-on-error: true |
| with: |
| name: workflow-args-windows |
| path: | |
| comments-Windows-AMD64 |
| |
| 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@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 |
| with: |
| fetch-depth: 2 |
| - name: Setup ccache |
| uses: hendrikmuhs/ccache-action@5ebbd400eff9e74630f759d94ddd7b6c26299639 # v1.2.20 |
| with: |
| max-size: "2000M" |
| - name: Install Ninja |
| run: | |
| brew install ninja |
| - name: Build and Test |
| run: | |
| 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}" |
| |
| # -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} |