@@ -24,17 +24,45 @@ concurrency:
2424
2525jobs :
2626 premerge-checks-linux :
27- name : Build and Test Linux
27+ name : Build and Test Linux${{ (startsWith(matrix.runs-on, 'depot-ubuntu-24.04-arm') && ' AArch64') || '' }}
2828 if : >-
2929 github.repository_owner == 'llvm' &&
3030 (github.event_name != 'pull_request' || github.event.action != 'closed')
31- runs-on : llvm-premerge-linux-runners
31+ strategy :
32+ fail-fast : false
33+ matrix :
34+ runs-on :
35+ - depot-ubuntu-24.04-arm-16
36+ - llvm-premerge-linux-runners
37+ runs-on : ${{ matrix.runs-on }}
38+ container :
39+ # The llvm-premerge agents are already containers and running the
40+ # this same image, so we can't use a container for the github action
41+ # job. The depot containers are running on VMs, so we can use a
42+ # container. This helps ensure the build environment is as close
43+ # as possible on both the depot runners and the llvm-premerge runners.
44+ image : ${{ (startsWith(matrix.runs-on, 'depot-ubuntu-24.04-arm') && format('ghcr.io/{0}/arm64v8/ci-ubuntu-24.04',github.repository_owner) ) || null }}
45+ # --privileged is needed to run the lldb tests that disable aslr.
46+ # The SCCACHE environment variables are need to be copied from the host
47+ # to the container to make sure it is configured correctly to use the
48+ # depot cache.
49+ options : >-
50+ --privileged
51+ --env SCCACHE_WEBDAV_ENDPOINT
52+ --env SCCACHE_WEBDAV_TOKEN
53+ defaults :
54+ run :
55+ # The run step defaults to using sh as the shell when running in a
56+ # container, so make bash the default to ensure consistency between
57+ # container and non-container jobs.
58+ shell : bash
3259 steps :
3360 - name : Checkout LLVM
3461 uses : actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
3562 with :
3663 fetch-depth : 2
3764 - name : Build and Test
65+ continue-on-error : ${{ runner.arch == 'ARM64' }}
3866 run : |
3967 git config --global --add safe.directory '*'
4068
@@ -54,11 +82,16 @@ jobs:
5482 export CC=/opt/llvm/bin/clang
5583 export CXX=/opt/llvm/bin/clang++
5684
57- # This environment variable is passes into the container through the
58- # runner pod definition. This differs between our two clusters which
59- # why we do not hardcode it.
60- export SCCACHE_GCS_BUCKET=$CACHE_GCS_BUCKET
61- export SCCACHE_GCS_RW_MODE=READ_WRITE
85+ # The linux-premerge runners are hosted on GCP and have a different
86+ # cache setup than the depot runners.
87+ if [[ "${{ matrix.runs-on }}" = "llvm-premerge-linux-runners" ]]; then
88+ # This environment variable is passes into the container through the
89+ # runner pod definition. This differs between our two clusters which
90+ # why we do not hardcode it.
91+ export SCCACHE_GCS_BUCKET=$CACHE_GCS_BUCKET
92+ export SCCACHE_GCS_RW_MODE=READ_WRITE
93+ fi
94+ env
6295
6396 # Set the idle timeout to zero to ensure sccache runs for the
6497 # entire duration of the job. Otherwise it might stop if we run
78111 if : ' !cancelled()'
79112 uses : actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
80113 with :
81- name : Premerge Artifacts (Linux)
114+ name : Premerge Artifacts (Linux ${{ runner.arch }} )
82115 path : artifacts/
83116 retention-days : 5
84117 include-hidden-files : ' true'
0 commit comments