-
Notifications
You must be signed in to change notification settings - Fork 11.7k
156 lines (137 loc) · 4.58 KB
/
ci-tests.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
name: "CI Tests"
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
branches:
- 'release/**'
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
cancel-in-progress: True
jobs:
compute-test-configs:
name: "Compute Configurations to Test"
if: >-
github.repository_owner == 'llvm' &&
github.event.action != 'closed'
runs-on: ubuntu-22.04
outputs:
projects: ${{ steps.vars.outputs.projects }}
check-targets: ${{ steps.vars.outputs.check-targets }}
test-build: ${{ steps.vars.outputs.check-targets != '' }}
test-platforms: ${{ steps.platforms.outputs.result }}
steps:
- name: Fetch LLVM sources
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Compute projects to test
id: vars
uses: ./.github/workflows/compute-projects-to-test
- name: Compute platforms to test
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea #v7.0.1
id: platforms
with:
script: |
linuxConfig = {
name: "linux-x86_64",
runs_on: "ubuntu-22.04"
}
windowsConfig = {
name: "windows-x86_64",
runs_on: "windows-2022"
}
macConfig = {
name: "macos-x86_64",
runs_on: "macos-13"
}
macArmConfig = {
name: "macos-aarch64",
runs_on: "macos-14"
}
configs = []
const base_ref = process.env.GITHUB_BASE_REF;
if (base_ref.startsWith('release/')) {
// This is a pull request against a release branch.
configs.push(macConfig)
configs.push(macArmConfig)
}
return configs;
ci-build-test:
# If this job name is changed, then we need to update the job-name
# paramater for the timeout-save step below.
name: "Build"
needs:
- compute-test-configs
permissions:
actions: write #pr-sccache-save may delete artifacts.
runs-on: ${{ matrix.runs_on }}
strategy:
fail-fast: false
matrix:
include: ${{ fromJson(needs.compute-test-configs.outputs.test-platforms) }}
if: needs.compute-test-configs.outputs.test-build == 'true'
steps:
- name: Fetch LLVM sources
uses: actions/checkout@v4
- name: Timeout Restore
id: timeout
uses: ./.github/workflows/timeout-restore
with:
artifact-name-suffix: ${{ matrix.name }}
- name: Setup Windows
uses: llvm/actions/setup-windows@main
if: ${{ runner.os == 'Windows' }}
with:
arch: amd64
- name: Install Ninja
uses: llvm/actions/install-ninja@main
- name: Setup sccache
uses: hendrikmuhs/ccache-action@v1
with:
max-size: 2G
variant: sccache
key: ci-${{ matrix.name }}
- name: Restore sccache from previous PR run
uses: ./.github/workflows/pr-sccache-restore
with:
artifact-name-suffix: ${{ matrix.name }}
- name: Configure
if: ${{ steps.timeout.outputs.exists != 'true' }}
shell: bash
run: |
cmake -B build -GNinja \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_PROJECTS="${{ needs.compute-test-configs.outputs.projects }}" \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DLLVM_LIT_ARGS="-v --no-progress-bar" \
-DCMAKE_C_COMPILER_LAUNCHER=sccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=sccache \
-S llvm
- name: Build
shell: bash
timeout-minutes: 330
run: |
ninja -C build -k 0 ${{ needs.compute-test-configs.outputs.check-targets }}
- name: Timeout Save
if: always()
uses: ./.github/workflows/timeout-save
with:
job-name: "Build (${{ matrix.name }}, ${{ matrix.runs_on }})"
artifact-name-suffix: ${{ matrix.name }}
timeout-step: "Build"
timeout-minutes: 330
- name: Save sccache for next PR run
if: always()
uses: ./.github/workflows/pr-sccache-save
with:
artifact-name-suffix: ${{ matrix.name }}