77jobs :
88
99 package-core :
10- name : Build and package core
10+ name : Build and package cores
1111 runs-on : ubuntu-latest
1212 env :
1313 CCACHE_IGNOREOPTIONS : -specs=*
1414 outputs :
1515 CORE_TAG : ${{ env.CORE_TAG }}
16- CORE_ARTIFACT : ${{ env.CORE_ARTIFACT }}
17- BOARD_VARIANTS : ${{ env.BOARD_VARIANTS }}
16+ CORE_HASH : ${{ env.CORE_HASH }}
17+ ALL_BOARD_DATA : ${{ env.ALL_BOARD_DATA }}
18+ ARTIFACTS : ${{ env.ARTIFACTS }}
19+ SUB_ARCHES : ${{ env.SUB_ARCHES }}
1820 steps :
1921 - name : Install OS dependencies
2022 working-directory : /opt
2123 run : |
24+ sudo apt-get remove --purge man-db -y # skips the mandb triggers
2225 sudo apt-get update
2326 sudo apt-get install -y --no-install-recommends git cmake wget python3-pip ninja-build ccache
2427
3235 - name : Initialize Zephyr environment
3336 run : |
3437 yes | ./extra/bootstrap.sh -o=--filter=tree:0
35- echo "CORE_TAG=$(git describe --tags --exact-match || git describe --always)" >> "$GITHUB_ENV"
36- echo "CORE_ARTIFACT=ArduinoCore-zephyr-$(git describe --always)" >> "$GITHUB_ENV"
37- echo "BOARD_VARIANTS=$(extra/get_board_details.sh | jq -cr 'sort_by(.variant)')" >> "$GITHUB_ENV"
38+ echo "CORE_HASH=$(git describe --always)" >> "$GITHUB_ENV"
39+ echo "ALL_BOARD_DATA=$(extra/get_board_details.sh | jq -c 'sort_by(.variant)')" >> "$GITHUB_ENV"
40+ echo "## Building \`$(extra/get_core_version.sh)\`" >> "$GITHUB_STEP_SUMMARY"
41+
42+ - name : Map output packages
43+ # needs the above env vars to be usable
44+ run : |
45+ echo "CORE_TAG=$(git describe --tags --exact-match 2>/dev/null || echo $CORE_HASH)" >> "$GITHUB_ENV"
46+ echo "ARTIFACTS=$(jq -c '["zephyr"] + (map(.artifact) | unique)' <<< ${ALL_BOARD_DATA})" >> "$GITHUB_ENV"
47+ echo "SUB_ARCHES=$(jq -c 'map(.subarch) | unique' <<< ${ALL_BOARD_DATA})" >> "$GITHUB_ENV"
3848
3949 - name : ccache
4050 uses : hendrikmuhs/ccache-action@v1.2
@@ -46,36 +56,63 @@ jobs:
4656 run : |
4757 ./extra/build_all.sh -f
4858
49- - name : Package core
59+ - name : Package cores
5060 run : |
51- ./extra/package_core.sh ${{ env.CORE_TAG }} distrib/${{ env.CORE_ARTIFACT }}.tar.bz2
61+ jq -cr '.[]' <<< ${ARTIFACTS} | while read -r artifact; do
62+ ARTIFACT_NAME=ArduinoCore-${artifact}-${CORE_HASH}
63+ ./extra/package_core.sh ${artifact} ${CORE_TAG} distrib/${ARTIFACT_NAME}.tar.bz2
64+ done
5265
53- - name : Archive core
66+ - name : Archive cores
5467 uses : actions/upload-artifact@v4
68+ with :
69+ name : ArduinoCore-archives-${{ env.CORE_HASH }}
70+ path : distrib/*.tar.bz2
71+ 72+ split-core :
73+ name : Split off ${{ matrix.artifact }}
74+ runs-on : ubuntu-latest
75+ needs : package-core
76+ env :
77+ ALL_CORES_ARTIFACT : ArduinoCore-archives-${{ needs.package-core.outputs.CORE_HASH }}
78+ CORE_ARTIFACT : ArduinoCore-${{ matrix.artifact }}-${{ needs.package-core.outputs.CORE_HASH }}
79+ strategy :
80+ matrix :
81+ artifact : ${{ fromJSON( needs.package-core.outputs.ARTIFACTS ) }}
82+ steps :
83+ - uses : actions/download-artifact@v4
84+ with :
85+ name : ${{ env.ALL_CORES_ARTIFACT }}
86+ 87+ - uses : actions/upload-artifact@v4
5588 with :
5689 name : ${{ env.CORE_ARTIFACT }}
57- path : distrib/ ${{ env.CORE_ARTIFACT }}.tar.bz2
90+ path : ${{ env.CORE_ARTIFACT }}.tar.bz2
5891
5992 test-core :
60- name : Test on ${{ matrix.board }}
93+ name : Test ${{ matrix.subarch }}: ${{ matrix.board }}
6194 runs-on : ubuntu-latest
62- needs : package-core
95+ needs :
96+ - package-core
97+ - split-core
6398 strategy :
6499 matrix :
65100 include :
66- ${{ fromJSON( needs.package-core.outputs.BOARD_VARIANTS ) }}
101+ ${{ fromJSON( needs.package-core.outputs.ALL_BOARD_DATA ) }}
67102 fail-fast : false
68103 env :
69- FQBN : arduino:zephyr:${{ matrix.board }}
70- REPORT_FILE : arduino-zephyr-${{ matrix.board }}.json
104+ PLAT : arduino:${{ matrix.subarch }}
105+ FQBN : arduino:${{ matrix.subarch }}:${{ matrix.board }}
106+ CORE_ARTIFACT : ArduinoCore-${{ matrix.artifact }}-${{ needs.package-core.outputs.CORE_HASH }}
71107 steps :
72108 - uses : actions/download-artifact@v4
73109 with :
74- name : ${{ needs.package-core.outputs .CORE_ARTIFACT }}
110+ name : ${{ env .CORE_ARTIFACT }}
75111
76112 - name : Set up core
77113 run : |
78- tar xf ${{ needs.package-core.outputs.CORE_ARTIFACT }}.tar.bz2
114+ tar xf ${CORE_ARTIFACT}.tar.bz2 # will create ArduinoCore-zephyr/
115+ echo "REPORT_FILE=$(echo ${FQBN} | tr ':' '-').json" >> $GITHUB_ENV
79116
80117 - name : Create Blink sketch
81118 run : |
90127 # Use Board Manager to install the latest release of Arduino Zephyr Boards to get the toolchain
91128 - name: "arduino:zephyr"
92129 source-url: "https://downloads.arduino.cc/packages/package_zephyr_index.json"
93- - name: "arduino:zephyr"
130+ - name: ${{ env.PLAT }}
94131 source-path: "ArduinoCore-zephyr"
95132 sketch-paths : Blink
96133 cli-compile-flags : |
@@ -114,7 +151,7 @@ jobs:
114151 repo: context.repo.repo,
115152 run_id: context.runId
116153 });
117- const job_name = `Test on ${{ matrix.board }}`
154+ const job_name = `Test ${{ matrix.subarch }}: ${{ matrix.board }}`
118155 return workflow_run.jobs.find((job) => job.name === job_name).id;
119156
120157 - name : Prepare log
@@ -137,7 +174,7 @@ jobs:
137174 - test-core
138175 if : ${{ !cancelled() && needs.package-core.result == 'success' }}
139176 env :
140- BOARD_VARIANTS : ${{ needs.package-core.outputs.BOARD_VARIANTS }}
177+ ALL_BOARD_DATA : ${{ needs.package-core.outputs.ALL_BOARD_DATA }}
141178 steps :
142179 - uses : actions/download-artifact@v4
143180 with :
@@ -146,37 +183,41 @@ jobs:
146183 merge-multiple : true
147184
148185 - run : |
149- echo "### Core test results:" >> "$GITHUB_STEP_SUMMARY"
150- jq -c '.[]' <<< "$BOARD_VARIANTS" | while read -r BOARD_VARIANT; do
151- BOARD=$(echo $BOARD_VARIANT | jq -cr '.board')
152- VARIANT=$(echo $BOARD_VARIANT | jq -cr '.variant')
153- FQBN="arduino:zephyr:$BOARD"
154- REPORT_FILE="arduino-zephyr-$BOARD.json"
155- if [ ! -f $REPORT_FILE ]; then
156- echo "* :x: $BOARD (`$VARIANT`) - No report found?" >> "$GITHUB_STEP_SUMMARY"
157- else
158- REPORT=$(jq -cr '.boards[0].sketches[0]' $REPORT_FILE)
159- JOB_ID=$(echo $REPORT | jq -cr '.job_id')
160- JOB_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}/job/${JOB_ID}#step:5:2"
161- if ! $(echo $REPORT | jq -cr '.compilation_success') ; then
162- echo "* :x: [$BOARD]($JOB_URL) (\`$VARIANT\`) - Build failed" >> "$GITHUB_STEP_SUMMARY"
186+ ARTIFACTS=$(jq -cr 'map(.artifact) | unique | .[]' <<< ${ALL_BOARD_DATA}) # this avoids the 'zephyr' artifact
187+ for artifact in $ARTIFACTS ; do
188+ echo "### \`$artifact\` test results:" >> "$GITHUB_STEP_SUMMARY"
189+ jq -c "map(select(.artifact == \"$artifact\")) | .[]" <<< ${ALL_BOARD_DATA} | while read -r BOARD_DATA; do
190+ BOARD=$(echo $BOARD_DATA | jq -cr '.board')
191+ VARIANT=$(echo $BOARD_DATA | jq -cr '.variant')
192+ SUBARCH=$(echo $BOARD_DATA | jq -cr '.subarch')
193+ FQBN="arduino:$SUBARCH:$BOARD"
194+ REPORT_FILE="$(echo $FQBN | tr ':' '-').json"
195+ if [ ! -f $REPORT_FILE ]; then
196+ echo "* :x: $BOARD (\`$VARIANT\`) - No report found?" >> "$GITHUB_STEP_SUMMARY"
163197 else
164- WARNINGS=$(echo $REPORT | jq -cr '.warnings.current.absolute // 0')
165- if [ $WARNINGS -eq 0 ]; then
166- echo "* :white_check_mark: $BOARD (\`$VARIANT\`) - Build successful" >> "$GITHUB_STEP_SUMMARY"
198+ REPORT=$(jq -cr '.boards[0].sketches[0]' $REPORT_FILE)
199+ JOB_ID=$(echo $REPORT | jq -cr '.job_id')
200+ JOB_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}/job/${JOB_ID}#step:5:2"
201+ if ! $(echo $REPORT | jq -cr '.compilation_success') ; then
202+ echo "* :x: [$BOARD]($JOB_URL) (\`$VARIANT\`) - Build failed" >> "$GITHUB_STEP_SUMMARY"
167203 else
168- echo >> "$GITHUB_STEP_SUMMARY"
169- echo "<details><summary> :warning: <a href=\"$JOB_URL\">$BOARD</a> (<tt>$VARIANT</tt>) - $WARNINGS warnings:</summary>" >> "$GITHUB_STEP_SUMMARY"
170- echo >> "$GITHUB_STEP_SUMMARY"
171- echo "\`\`\`" >> "$GITHUB_STEP_SUMMARY"
172- echo $REPORT | jq -cr '.warnings_log[]' >> "$GITHUB_STEP_SUMMARY"
173- echo "\`\`\`" >> "$GITHUB_STEP_SUMMARY"
174- echo >> "$GITHUB_STEP_SUMMARY"
175- echo "</details>" >> "$GITHUB_STEP_SUMMARY"
176- echo >> "$GITHUB_STEP_SUMMARY"
204+ WARNINGS=$(echo $REPORT | jq -cr '.warnings.current.absolute // 0')
205+ if [ $WARNINGS -eq 0 ]; then
206+ echo "* :white_check_mark: $BOARD (\`$VARIANT\`) - Build successful" >> "$GITHUB_STEP_SUMMARY"
207+ else
208+ echo >> "$GITHUB_STEP_SUMMARY"
209+ echo "<details><summary> :warning: <a href=\"$JOB_URL\">$BOARD</a> (<tt>$VARIANT</tt>) - $WARNINGS warnings:</summary>" >> "$GITHUB_STEP_SUMMARY"
210+ echo >> "$GITHUB_STEP_SUMMARY"
211+ echo "\`\`\`" >> "$GITHUB_STEP_SUMMARY"
212+ echo $REPORT | jq -cr '.warnings_log[]' >> "$GITHUB_STEP_SUMMARY"
213+ echo "\`\`\`" >> "$GITHUB_STEP_SUMMARY"
214+ echo >> "$GITHUB_STEP_SUMMARY"
215+ echo "</details>" >> "$GITHUB_STEP_SUMMARY"
216+ echo >> "$GITHUB_STEP_SUMMARY"
217+ fi
177218 fi
178219 fi
179- fi
220+ done
180221 done
181222
182223 - name : Clean up intermediate artifacts
@@ -207,12 +248,11 @@ jobs:
207248 id-token : write
208249 contents : read
209250 env :
210- CORE_ARTIFACT : ${{ needs.package-core.outputs.CORE_ARTIFACT }}
211- ARTIFACT_FILE : ${{ needs.package-core.outputs.CORE_ARTIFACT }}.tar.bz2
251+ ALL_CORES_ARTIFACT : ArduinoCore-archives-${{ needs.package-core.outputs.CORE_HASH }}
212252 steps :
213253 - uses : actions/download-artifact@v4
214254 with :
215- name : ${{ env.CORE_ARTIFACT }}
255+ name : ${{ env.ALL_CORES_ARTIFACT }}
216256
217257 - name : Configure AWS credentials
218258 uses : aws-actions/configure-aws-credentials@v4
@@ -221,40 +261,55 @@ jobs:
221261 aws-region : ${{ secrets.AWS_REGION }}
222262
223263 - name : Upload artifact
224- run : aws s3 cp ${{ env.ARTIFACT_FILE }} s3://${{ secrets.S3_BUCKET }}/
264+ run : aws s3 cp ArduinoCore-*.tar.bz2 s3://${{ secrets.S3_BUCKET }}/
225265
226266 publish-json :
227- name : Publish json
267+ name : Publish jsons
228268 runs-on : ubuntu-latest
229- if : ${{ github.event_name == 'push' && github. repository == 'arduino/ArduinoCore-zephyr' }}
269+ if : ${{ github.repository == 'arduino/ArduinoCore-zephyr' }}
230270 needs :
231271 - package-core
232272 - test-core
233- - publish-core
234273 env :
235- CORE_ARTIFACT : ${{ needs.package-core.outputs.CORE_ARTIFACT }}
236- ARTIFACT_FILE : ${{ needs.package-core.outputs.CORE_ARTIFACT }}.tar.bz2
274+ ALL_CORES_ARTIFACT : ArduinoCore-archives-${{ needs.package-core.outputs.CORE_HASH }}
237275 CORE_TAG : ${{ needs.package-core.outputs.CORE_TAG }}
238- PACKAGE_INDEX_JSON : zephyr-core-${{ needs.package-core.outputs.CORE_TAG }}.json
276+ CORE_HASH : ${{ needs.package-core.outputs.CORE_HASH }}
277+ ARTIFACTS : ${{ needs.package-core.outputs.ARTIFACTS }}
239278 steps :
240279 - uses : actions/checkout@v4
241280 with :
242281 fetch-depth : 0
243282 persist-credentials : false
244- sparse-checkout : |
245- extra/gen_package_index_json.sh
246- extra/zephyr-core-template.json
283+ fetch-tags : true
247284
248285 - uses : actions/download-artifact@v4
249286 with :
250- name : ${{ env.CORE_ARTIFACT }}
287+ name : ${{ env.ALL_CORES_ARTIFACT }}
251288
252- # uses: ARTIFACT_FILE CORE_TAG PACKAGE_INDEX_JSON
253- - name : Prepare package index snippet
254- run : ./extra/gen_package_index_json.sh
289+ - name : Prepare package index snippets
290+ run : |
291+ jq -cr '.[]' <<< ${ARTIFACTS} | while read -r artifact; do
292+ ARTIFACT_FILE=ArduinoCore-${artifact}-${CORE_HASH}.tar.bz2
293+ PACKAGE_JSON=ArduinoCore-${artifact}-${CORE_TAG}.json
294+ ./extra/gen_package_index_json.sh ${artifact} ${ARTIFACT_FILE} ${PACKAGE_JSON}
295+ done
255296
256- - name : Archive package index snippet
297+ - name : Archive package index snippets
257298 uses : actions/upload-artifact@v4
258299 with :
259- name : ${{ env.PACKAGE_INDEX_JSON }}
260- path : ${{ env.PACKAGE_INDEX_JSON }}
300+ name : ArduinoCore-zephyr-${{ env.CORE_TAG }}-jsons
301+ path : ArduinoCore-*-${{ env.CORE_TAG }}.json
302+ 303+ cleanup-artifacts :
304+ runs-on : ubuntu-latest
305+ needs :
306+ - package-core
307+ - publish-core
308+ - publish-json
309+ if : ${{ !cancelled() }}
310+ steps :
311+ - name : Clean up intermediate artifacts
312+ uses : geekyeggo/delete-artifact@v5.1.0
313+ with :
314+ name : ArduinoCore-archives-${{ needs.package-core.outputs.CORE_HASH }}
315+ failOnError : false
0 commit comments