@@ -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