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 }}
1616 CORE_HASH : ${{ env.CORE_HASH }}
1717 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
@@ -54,32 +56,54 @@ jobs:
5456 run : |
5557 ./extra/build_all.sh -f
5658
57- - name : Package core
59+ - name : Package cores
5860 run : |
59- PACKAGE=zephyr
60- CORE_ARTIFACT=ArduinoCore-$PACKAGE-${CORE_HASH}
61- ./extra/package_core.sh ${CORE_TAG} distrib/${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
6265
63- - name : Archive core
66+ - name : Archive cores
6467 uses : actions/upload-artifact@v4
6568 with :
66- name : ArduinoCore-zephyr -${{ env.CORE_HASH }}
69+ name : ArduinoCore-archives -${{ env.CORE_HASH }}
6770 path : distrib/*.tar.bz2
6871
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
88+ with :
89+ name : ${{ env.CORE_ARTIFACT }}
90+ path : ${{ env.CORE_ARTIFACT }}.tar.bz2
91+
6992 test-core :
70- name : Test on ${{ matrix.board }}
93+ name : Test ${{ matrix.subarch }}: ${{ matrix.board }}
7194 runs-on : ubuntu-latest
7295 needs :
7396 - package-core
97+ - split-core
7498 strategy :
7599 matrix :
76100 include :
77101 ${{ fromJSON( needs.package-core.outputs.ALL_BOARD_DATA ) }}
78102 fail-fast : false
79103 env :
80- PLAT : arduino:zephyr
81- FQBN : arduino:zephyr :${{ matrix.board }}
82- CORE_ARTIFACT : ArduinoCore-zephyr -${{ needs.package-core.outputs.CORE_HASH }}
104+ PLAT : arduino:${{ matrix.subarch }}
105+ FQBN : arduino:${{ matrix.subarch }} :${{ matrix.board }}
106+ CORE_ARTIFACT : ArduinoCore-${{ matrix.artifact }} -${{ needs.package-core.outputs.CORE_HASH }}
83107 steps :
84108 - uses : actions/download-artifact@v4
85109 with :
@@ -127,7 +151,7 @@ jobs:
127151 repo: context.repo.repo,
128152 run_id: context.runId
129153 });
130- const job_name = `Test on ${{ matrix.board }}`
154+ const job_name = `Test ${{ matrix.subarch }}: ${{ matrix.board }}`
131155 return workflow_run.jobs.find((job) => job.name === job_name).id;
132156
133157 - name : Prepare log
@@ -159,37 +183,41 @@ jobs:
159183 merge-multiple : true
160184
161185 - run : |
162- echo "### Core test results:" >> "$GITHUB_STEP_SUMMARY"
163- jq -c '.[]' <<< "$ALL_BOARD_DATA" | while read -r BOARD_DATA; do
164- BOARD=$(echo $BOARD_DATA | jq -cr '.board')
165- VARIANT=$(echo $BOARD_DATA | jq -cr '.variant')
166- FQBN="arduino:zephyr:$BOARD"
167- REPORT_FILE="$(echo $FQBN | tr ':' '-').json"
168- if [ ! -f $REPORT_FILE ]; then
169- echo "* :x: $BOARD (`$VARIANT`) - No report found?" >> "$GITHUB_STEP_SUMMARY"
170- else
171- REPORT=$(jq -cr '.boards[0].sketches[0]' $REPORT_FILE)
172- JOB_ID=$(echo $REPORT | jq -cr '.job_id')
173- JOB_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}/job/${JOB_ID}#step:5:2"
174- if ! $(echo $REPORT | jq -cr '.compilation_success') ; then
175- 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"
176197 else
177- WARNINGS=$(echo $REPORT | jq -cr '.warnings.current.absolute // 0')
178- if [ $WARNINGS -eq 0 ]; then
179- 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"
180203 else
181- echo >> "$GITHUB_STEP_SUMMARY"
182- echo "<details><summary> :warning: <a href=\"$JOB_URL\">$BOARD</a> (<tt>$VARIANT</tt>) - $WARNINGS warnings:</summary>" >> "$GITHUB_STEP_SUMMARY"
183- echo >> "$GITHUB_STEP_SUMMARY"
184- echo "\`\`\`" >> "$GITHUB_STEP_SUMMARY"
185- echo $REPORT | jq -cr '.warnings_log[]' >> "$GITHUB_STEP_SUMMARY"
186- echo "\`\`\`" >> "$GITHUB_STEP_SUMMARY"
187- echo >> "$GITHUB_STEP_SUMMARY"
188- echo "</details>" >> "$GITHUB_STEP_SUMMARY"
189- 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
190218 fi
191219 fi
192- fi
220+ done
193221 done
194222
195223 - name : Clean up intermediate artifacts
@@ -220,11 +248,11 @@ jobs:
220248 id-token : write
221249 contents : read
222250 env :
223- CORE_ARTIFACT : ArduinoCore-zephyr -${{ needs.package-core.outputs.CORE_HASH }}
251+ ALL_CORES_ARTIFACT : ArduinoCore-archives -${{ needs.package-core.outputs.CORE_HASH }}
224252 steps :
225253 - uses : actions/download-artifact@v4
226254 with :
227- name : ${{ env.CORE_ARTIFACT }}
255+ name : ${{ env.ALL_CORES_ARTIFACT }}
228256
229257 - name : Configure AWS credentials
230258 uses : aws-actions/configure-aws-credentials@v4
@@ -236,37 +264,52 @@ jobs:
236264 run : aws s3 cp ArduinoCore-*.tar.bz2 s3://${{ secrets.S3_BUCKET }}/
237265
238266 publish-json :
239- name : Publish json
267+ name : Publish jsons
240268 runs-on : ubuntu-latest
241269 if : ${{ github.event_name == 'push' && github.repository == 'arduino/ArduinoCore-zephyr' }}
242270 needs :
243271 - package-core
244272 - test-core
245273 env :
246- CORE_ARTIFACT : ArduinoCore-zephyr -${{ needs.package-core.outputs.CORE_HASH }}
274+ ALL_CORES_ARTIFACT : ArduinoCore-archives -${{ needs.package-core.outputs.CORE_HASH }}
247275 CORE_TAG : ${{ needs.package-core.outputs.CORE_TAG }}
276+ CORE_HASH : ${{ needs.package-core.outputs.CORE_HASH }}
277+ ARTIFACTS : ${{ needs.package-core.outputs.ARTIFACTS }}
248278 steps :
249279 - uses : actions/checkout@v4
250280 with :
251281 fetch-depth : 0
252282 persist-credentials : false
253- sparse-checkout : |
254- extra/gen_package_index_json.sh
255- extra/zephyr-core-template.json
283+ fetch-tags : true
256284
257285 - uses : actions/download-artifact@v4
258286 with :
259- name : ${{ env.CORE_ARTIFACT }}
287+ name : ${{ env.ALL_CORES_ARTIFACT }}
260288
261- - name : Prepare package index snippet
289+ - name : Prepare package index snippets
262290 run : |
263- PACKAGE=zephyr
264- ARTIFACT_FILE=ArduinoCore-${PACKAGE}-${CORE_HASH}.tar.bz2
265- PACKAGE_JSON=ArduinoCore-${PACKAGE}-${CORE_TAG}.json
266- ./extra/gen_package_index_json.sh ${CORE_TAG} ${ARTIFACT_FILE} > ${PACKAGE_JSON}
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
267296
268- - name : Archive package index snippet
297+ - name : Archive package index snippets
269298 uses : actions/upload-artifact@v4
270299 with :
271300 name : ArduinoCore-zephyr-${{ env.CORE_TAG }}-jsons
272301 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+ 313+ with :
314+ name : ArduinoCore-archives-${{ needs.package-core.outputs.CORE_HASH }}
315+ failOnError : false
0 commit comments