1
- name : Bob the Builder
1
+ name : Build
2
2
3
3
on :
4
- pull_request :
5
- types : [opened, synchronize, reopened, labeled]
6
- push :
7
- branches :
8
- - main
9
4
workflow_dispatch :
10
5
inputs :
11
- minimal :
12
- description : ' Build minimal defconfigs '
6
+ flavor :
7
+ description : ' Optional build flavor (e.g. _minimal) '
13
8
required : false
14
- default : true
15
- type : boolean
16
- parallell :
9
+ default : ' '
10
+ type : string
11
+ parallel :
17
12
description : ' Massive parallel build of each image'
18
13
required : false
19
14
default : true
20
15
type : boolean
16
+ infix_repo :
17
+ description : ' Repo to checkout (for spin overrides)'
18
+ required : false
19
+ default : kernelkit/infix
20
+ type : string
21
+
22
+
23
+ workflow_call :
24
+ inputs :
25
+ target :
26
+ required : true
27
+ type : string
28
+ name :
29
+ required : true
30
+ type : string
31
+ flavor :
32
+ required : false
33
+ type : string
34
+ default : ' '
35
+ infix_repo :
36
+ required : false
37
+ type : string
38
+ default : kernelkit/infix
39
+
40
+ env :
41
+ FLV : ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.flavor || inputs.flavor }}
42
+ INFIX_REPO : ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.infix_repo || inputs.infix_repo }}
43
+
21
44
jobs :
22
45
build :
23
- name : Build Infix ${{ matrix .target }}
46
+ name : Build ${{ inputs.name }} ${{ inputs .target }}
24
47
runs-on : [ self-hosted, latest ]
25
48
strategy :
26
- matrix :
27
- target : [aarch64, x86_64]
28
49
fail-fast : false
29
50
outputs :
30
51
build_id : ${{ steps.vars.outputs.INFIX_BUILD_ID }}
36
57
rm -rf ./.??* || true
37
58
ls -la ./
38
59
39
- - uses : actions/checkout@v4
60
+ - name : Checkout infix repo
61
+ uses : actions/checkout@v4
40
62
with :
63
+ repository : ${{ env.INFIX_REPO }}
64
+ ref : ${{ github.ref }}
41
65
clean : true
42
66
fetch-depth : 0
43
67
submodules : recursive
@@ -55,26 +79,13 @@ jobs:
55
79
"${{ github.event.number }}" "${{ github.event.pull_request.head.sha }}" \
56
80
| tee -a $GITHUB_OUTPUT $GITHUB_ENV
57
81
fi
58
- if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
59
- if [ "${{ github.event.inputs.minimal }}" == "true" ]; then
60
- flavor="_minimal"
61
- fi
62
- else
63
- # Ensure 'release' job get the proper image when building main
64
- if [ "$GITHUB_REF_NAME" != "main" ]; then
65
- flavor="_minimal"
66
- else
67
- flavor=""
68
- fi
69
- if ${{ contains(github.event.pull_request.labels.*.name, 'ci:main') }}; then
70
- flavor=""
71
- fi
72
- fi
73
- target=${{ matrix.target }}
74
- echo "dir=infix-$target" >> $GITHUB_OUTPUT
75
- echo "tgz=infix-$target.tar.gz" >> $GITHUB_OUTPUT
76
- echo "flv=$flavor" >> $GITHUB_OUTPUT
77
- echo "Building target ${target}${flavor}_defconfig"
82
+
83
+ target=${{ inputs.target }}
84
+ name=${{ inputs.name }}
85
+ echo "dir=${name}-${target}" >> $GITHUB_OUTPUT
86
+ echo "tgz=${name}-${target}.tar.gz" >> $GITHUB_OUTPUT
87
+ echo "flv=$FLV" >> $GITHUB_OUTPUT
88
+ echo "Building target ${target}${FLV}_defconfig"
78
89
79
90
- name : Restore Cache of dl/
80
91
uses : actions/cache@v4
@@ -88,16 +99,16 @@ jobs:
88
99
uses : actions/cache@v4
89
100
with :
90
101
path : .ccache/
91
- key : ccache-${{ matrix .target }}-${{ hashFiles('.git/modules/buildroot/HEAD', 'package/*/*.hash') }}
102
+ key : ccache-${{ inputs .target }}-${{ hashFiles('.git/modules/buildroot/HEAD', 'package/*/*.hash') }}
92
103
restore-keys : |
93
- ccache-${{ matrix .target }}-
104
+ ccache-${{ inputs .target }}-
94
105
ccache-
95
106
96
- - name : Configure ${{ matrix .target }}${{ steps.vars.outputs.flv }}
107
+ - name : Configure ${{ inputs .target }}${{ steps.vars.outputs.flv }}
97
108
run : |
98
- make ${{ matrix .target }}${{ steps.vars.outputs.flv }}_defconfig
109
+ make ${{ inputs .target }}${{ steps.vars.outputs.flv }}_defconfig
99
110
100
- - name : Unit Test ${{ matrix .target }}
111
+ - name : Unit Test ${{ inputs .target }}
101
112
run : |
102
113
make test-unit
103
114
@@ -115,9 +126,9 @@ jobs:
115
126
fi
116
127
echo "MAKE=$MAKE" >> $GITHUB_OUTPUT
117
128
118
- - name : Build ${{ matrix .target }}${{ steps.vars.outputs.flv }}
129
+ - name : Build ${{ inputs .target }}${{ steps.vars.outputs.flv }}
119
130
run : |
120
- echo "Building ${{ matrix .target }}${{ steps.vars.outputs.flv }}_defconfig ..."
131
+ echo "Building ${{ inputs .target }}${{ steps.vars.outputs.flv }}_defconfig ..."
121
132
eval "${{ steps.parallel.outputs.MAKE }}"
122
133
123
134
- name : Check SBOM from Build
@@ -139,7 +150,7 @@ jobs:
139
150
printf "Size of output/images/: "
140
151
ls -l output/images/
141
152
142
- - name : Prepare ${{ matrix .target }} Artifact
153
+ - name : Prepare ${{ inputs .target }} Artifact
143
154
run : |
144
155
cd output/
145
156
mv images ${{ steps.vars.outputs.dir }}
@@ -149,111 +160,4 @@ jobs:
149
160
- uses : actions/upload-artifact@v4
150
161
with :
151
162
path : output/${{ steps.vars.outputs.tgz }}
152
- name : artifact-${{ matrix.target }}
153
-
154
- test :
155
- name : Regression Test of Infix x86_64
156
- needs : build
157
- runs-on : [ self-hosted, regression ]
158
- steps :
159
- - uses : actions/checkout@v4
160
- with :
161
- clean : true
162
- submodules : recursive
163
-
164
- - name : Set Build Variables
165
- id : vars
166
- run : |
167
- if [ -n "${{ needs.build.outputs.build_id }}" ]; then
168
- echo "INFIX_BUILD_ID=${{ needs.build.outputs.build_id }}" \
169
- >>$GITHUB_ENV
170
- fi
171
-
172
- if [ "$GITHUB_REF_NAME" != "main" ]; then
173
- flavor="_minimal"
174
- else
175
- flavor=""
176
- fi
177
- echo "flv=$flavor" >> $GITHUB_OUTPUT
178
-
179
- - name : Configure x86_64${{ steps.vars.outputs.flv }}
180
- run : |
181
- make x86_64${{ steps.vars.outputs.flv }}_defconfig
182
-
183
- - uses : actions/download-artifact@v4
184
- with :
185
- pattern : " artifact-*"
186
- merge-multiple : true
187
-
188
- - name : Restore x86-64${{ steps.vars.outputs.flv }} output/
189
- run : |
190
- ls -l
191
- mkdir -p output
192
- mv infix-x86_64.tar.gz output/
193
- cd output/
194
- tar xf infix-x86_64.tar.gz
195
- ln -s infix-x86_64 images
196
-
197
- - name : Regression Test x86_64${{ steps.vars.outputs.flv }}
198
- run : |
199
- make test
200
-
201
- - name : Publish Test Result for x86_64${{ steps.vars.outputs.flv }}
202
- # Ensure this runs even if Regression Test fails
203
- if : always()
204
- run : cat test/.log/last/result-gh.md >> $GITHUB_STEP_SUMMARY
205
-
206
- - name : Generate Test Report for x86_64${{ steps.vars.outputs.flv }}
207
- # Ensure this runs even if Regression Test fails
208
- if : always()
209
- run : |
210
- asciidoctor-pdf \
211
- --theme test/9pm/report/theme.yml \
212
- -a pdf-fontsdir=test/9pm/report/fonts \
213
- test/.log/last/report.adoc \
214
- -o test/.log/last/report.pdf
215
-
216
- - name : Upload Test Report as Artifact
217
- uses : actions/upload-artifact@v4
218
- with :
219
- name : test-report
220
- path : test/.log/last/report.pdf
221
-
222
- release :
223
- if : ${{github.repository_owner == 'kernelkit' && github.ref_name == 'main'}}
224
- name : Upload Latest Build
225
- needs : test
226
- runs-on : ubuntu-latest
227
- permissions :
228
- contents : write
229
- steps :
230
- - uses : actions/download-artifact@v4
231
- with :
232
- pattern : " artifact-*"
233
- merge-multiple : true
234
-
235
- - name : Create checksums ...
236
- run : |
237
- for file in *.tar.gz; do
238
- sha256sum $file > $file.sha256
239
- done
240
-
241
- - uses : ncipollo/release-action@v1
242
- with :
243
- allowUpdates : true
244
- omitName : true
245
- omitBody : true
246
- omitBodyDuringUpdate : true
247
- prerelease : true
248
- tag : " latest"
249
- token : ${{ secrets.GITHUB_TOKEN }}
250
- artifacts : " *.tar.gz*"
251
-
252
- - name : Summary
253
- run : |
254
- cat <<EOF >> $GITHUB_STEP_SUMMARY
255
- # Latest Build Complete! :rocket:
256
-
257
- For the public download links of these build artifacts, please see:
258
- <https://github.com/kernelkit/infix/releases/tag/latest>
259
- EOF
163
+ name : artifact-${{ inputs.target }}
0 commit comments