-
Notifications
You must be signed in to change notification settings - Fork 0
269 lines (240 loc) · 8.9 KB
/
ci.yml
File metadata and controls
269 lines (240 loc) · 8.9 KB
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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
name: IWD CI
#
# The basic flow of the CI is as follows:
#
# 1. Get all inputs, or default values, and set as 'setup' job output
# 2. Find any cached binaries (hostapd, wpa_supplicant, kernel etc)
# 3. Checkout all dependent repositories
# 4. Tar all local files. This is an unfortunate requirement since github jobs
# cannot share local files. Since there are multiple CI's acting on the same
# set of repositories it makes more sense to retain these and re-download
# them for each CI job.
# 5. Run each CI, currently 'main' and 'musl'.
# * 'main' is the default IWD CI which runs all the build steps as well
# as test-runner
# * 'musl' uses an alpine docker image to test the build on musl-libc
#
# Both CI's use the 'iwd-ci' repo which calls into 'ci-docker'. The
# 'ci-docker' action essentially re-implements the native Github docker
# action but allows arbitrary options to be passed in (e.g. privileged or
# mounting non-standard directories)
#
on:
pull_request:
workflow_dispatch:
inputs:
tests:
description: Tests to run (comma separated, no spaces)
default: all
kernel:
description: Kernel version
default: '6.2'
hostapd_version:
description: Hostapd and wpa_supplicant version
default: 'hostap_2_11'
ell_ref:
description: ELL reference
default: refs/heads/workflow
repository_dispatch:
types: [ell-dispatch]
jobs:
setup:
runs-on: ubuntu-22.04
outputs:
tests: ${{ steps.inputs.outputs.tests }}
kernel: ${{ steps.inputs.outputs.kernel }}
hostapd_version: ${{ steps.inputs.outputs.hostapd_version }}
ell_ref: ${{ steps.inputs.outputs.ell_ref }}
repository: ${{ steps.inputs.outputs.repository }}
ref_branch: ${{ steps.inputs.outputs.ref_branch }}
steps:
#
# This makes CI inputs consistent depending on how the CI was invoked:
# * pull_request trigger won't have any inputs, so these need to be set
# to default values.
# * workflow_dispatch sets all inputs from the user input
# * repository_dispatch sets all inputs based on the JSON payload of
# the request.
#
- name: Setup Inputs
id: inputs
run: |
if [ ${{ github.event_name }} == 'workflow_dispatch' ]
then
TESTS=${{ github.event.inputs.tests }}
KERNEL=${{ github.event.inputs.kernel }}
HOSTAPD_VERSION=${{ github.event.inputs.hostapd_version }}
ELL_REF=${{ github.event.inputs.ell_ref }}
REF="$GITHUB_REF"
REPO="$GITHUB_REPOSITORY"
elif [ ${{ github.event_name }} == 'repository_dispatch' ]
then
TESTS=all
KERNEL=5.19
HOSTAPD_VERSION=09a281e52a25b5461c4b08d261f093181266a554
ELL_REF=${{ github.event.client_payload.ref }}
REF=$ELL_REF
REPO=${{ github.event.client_payload.repo }}
else
TESTS=all
KERNEL=5.19
HOSTAPD_VERSION=09a281e52a25b5461c4b08d261f093181266a554
ELL_REF="refs/heads/workflow"
REF="$GITHUB_REF"
REPO="$GITHUB_REPOSITORY"
fi
#
# Now that the inputs are sorted, set the output of this step to these
# values so future jobs can refer to them.
#
echo "tests=$TESTS" >> $GITHUB_OUTPUT
echo "kernel=$KERNEL" >> $GITHUB_OUTPUT
echo "hostapd_version=$HOSTAPD_VERSION" >> $GITHUB_OUTPUT
echo "ell_ref=$ELL_REF" >> $GITHUB_OUTPUT
echo "repository=$REPO" >> $GITHUB_OUTPUT
echo "ref_branch=$REF" >> $GITHUB_OUTPUT
- name: Cache UML Kernel
id: cache-uml-kernel
uses: actions/cache@v3
with:
path: ${{ github.workspace }}/cache/um-linux-${{ steps.inputs.outputs.kernel }}
key: um-linux-${{ steps.inputs.outputs.kernel }}_ubuntu22
- name: Cache Hostapd
id: cache-hostapd
uses: actions/cache@v3
with:
path: |
${{ github.workspace }}/cache/hostapd_${{ steps.inputs.outputs.hostapd_version }}
${{ github.workspace }}/cache/hostapd_cli_${{ steps.inputs.outputs.hostapd_version }}
key: hostapd_${{ steps.inputs.outputs.hostapd_version }}_ssl3
- name: Cache WpaSupplicant
id: cache-wpas
uses: actions/cache@v3
with:
path: |
${{ github.workspace }}/cache/wpa_supplicant_${{ steps.inputs.outputs.hostapd_version }}
${{ github.workspace }}/cache/wpa_cli_${{ steps.inputs.outputs.hostapd_version }}
key: wpa_supplicant_${{ steps.inputs.outputs.hostapd_version }}_ssl3
- name: Checkout IWD
uses: actions/checkout@v3
with:
path: iwd
repository: IWDTestBot/iwd
token: ${{ secrets.ACTION_TOKEN }}
- name: Checkout ELL
uses: actions/checkout@v3
with:
path: ell
repository: IWDTestBot/ell
ref: ${{ steps.inputs.outputs.ell_ref }}
- name: Checkout CiBase
uses: actions/checkout@v3
with:
repository: IWDTestBot/cibase
path: cibase
- name: Checkout CI
uses: actions/checkout@v3
with:
repository: IWDTestBot/iwd-ci
path: iwd-ci
- name: Tar files
run: |
FILES="iwd ell cibase iwd-ci"
if [ "${{ steps.cache-uml-kernel.outputs.cache-hit }}" == 'true' ]
then
FILES+=" ${{ github.workspace }}/cache/um-linux-${{ steps.inputs.outputs.kernel }}"
fi
if [ "${{ steps.cache-hostapd.outputs.cache-hit }}" == 'true' ]
then
FILES+=" ${{ github.workspace }}/cache/hostapd_${{ steps.inputs.outputs.hostapd_version }}"
FILES+=" ${{ github.workspace }}/cache/hostapd_cli_${{ steps.inputs.outputs.hostapd_version }}"
fi
if [ "${{ steps.cache-wpas.outputs.cache-hit }}" == 'true' ]
then
FILES+=" ${{ github.workspace }}/cache/wpa_supplicant_${{ steps.inputs.outputs.hostapd_version }}"
FILES+=" ${{ github.workspace }}/cache/wpa_cli_${{ steps.inputs.outputs.hostapd_version }}"
fi
tar -cvf archive.tar $FILES
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: iwd-artifacts
path: |
archive.tar
iwd-alpine-ci:
runs-on: ubuntu-22.04
needs: setup
steps:
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: iwd-artifacts
- name: Untar
run: tar -xf archive.tar
- name: Modprobe pkcs8_key_parser
run: |
sudo modprobe pkcs8_key_parser
- name: Alpine CI
uses: IWDTestBot/iwd-ci@master
with:
ref_branch: ${{ needs.setup.outputs.ref_branch }}
repository: ${{ needs.setup.outputs.repository }}
github_token: ${{ secrets.ACTION_TOKEN }}
email_token: ${{ secrets.EMAIL_TOKEN }}
patchwork_token: ${{ secrets.PATCHWORK_TOKEN }}
ci: musl
iwd-ci:
runs-on: ubuntu-22.04
needs: setup
steps:
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: iwd-artifacts
- name: Untar
run: tar -xf archive.tar
- name: Cache UML Kernel
id: cache-uml-kernel
uses: actions/cache@v3
with:
path: ${{ github.workspace }}/cache/um-linux-${{ needs.setup.outputs.kernel }}
key: um-linux-${{ needs.setup.outputs.kernel }}_ubuntu22
- name: Cache Hostapd
id: cache-hostapd
uses: actions/cache@v3
with:
path: |
${{ github.workspace }}/cache/hostapd_${{ needs.setup.outputs.hostapd_version }}
${{ github.workspace }}/cache/hostapd_cli_${{ needs.setup.outputs.hostapd_version }}
key: hostapd_${{ needs.setup.outputs.hostapd_version }}_ssl3
- name: Cache WpaSupplicant
id: cache-wpas
uses: actions/cache@v3
with:
path: |
${{ github.workspace }}/cache/wpa_supplicant_${{ needs.setup.outputs.hostapd_version }}
${{ github.workspace }}/cache/wpa_cli_${{ needs.setup.outputs.hostapd_version }}
key: wpa_supplicant_${{ needs.setup.outputs.hostapd_version }}_ssl3
- name: Modprobe pkcs8_key_parser
run: |
sudo modprobe pkcs8_key_parser
echo ${{ needs.setup.outputs.ref_branch }}
echo ${{ needs.setup.outputs.repository }}
- name: Run CI
uses: IWDTestBot/iwd-ci@master
with:
ref_branch: ${{ needs.setup.outputs.ref_branch }}
repository: ${{ needs.setup.outputs.repository }}
tests: ${{ needs.setup.outputs.tests }}
kernel: ${{ needs.setup.outputs.kernel }}
hostapd_version: ${{ needs.setup.outputs.hostapd_version }}
github_token: ${{ secrets.ACTION_TOKEN }}
email_token: ${{ secrets.EMAIL_TOKEN }}
patchwork_token: ${{ secrets.PATCHWORK_TOKEN }}
ci: main
- name: Upload Logs
if: always()
uses: actions/upload-artifact@v4
with:
name: test-runner-logs
path: ${{ github.workspace }}/log