Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
189 changes: 122 additions & 67 deletions .github/workflows/package_core.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,21 @@ on:
jobs:

package-core:
name: Build and package core
name: Build and package cores
runs-on: ubuntu-latest
env:
CCACHE_IGNOREOPTIONS: -specs=*
outputs:
CORE_TAG: ${{ env.CORE_TAG }}
CORE_ARTIFACT: ${{ env.CORE_ARTIFACT }}
BOARD_VARIANTS: ${{ env.BOARD_VARIANTS }}
CORE_HASH: ${{ env.CORE_HASH }}
ALL_BOARD_DATA: ${{ env.ALL_BOARD_DATA }}
ARTIFACTS: ${{ env.ARTIFACTS }}
SUB_ARCHES: ${{ env.SUB_ARCHES }}
steps:
- name: Install OS dependencies
working-directory: /opt
run: |
sudo apt-get remove --purge man-db -y # skips the mandb triggers
sudo apt-get update
sudo apt-get install -y --no-install-recommends git cmake wget python3-pip ninja-build ccache

Expand All @@ -32,9 +35,16 @@ jobs:
- name: Initialize Zephyr environment
run: |
yes | ./extra/bootstrap.sh -o=--filter=tree:0
echo "CORE_TAG=$(git describe --tags --exact-match || git describe --always)" >> "$GITHUB_ENV"
echo "CORE_ARTIFACT=ArduinoCore-zephyr-$(git describe --always)" >> "$GITHUB_ENV"
echo "BOARD_VARIANTS=$(extra/get_board_details.sh | jq -cr 'sort_by(.variant)')" >> "$GITHUB_ENV"
echo "CORE_HASH=$(git describe --always)" >> "$GITHUB_ENV"
echo "ALL_BOARD_DATA=$(extra/get_board_details.sh | jq -c 'sort_by(.variant)')" >> "$GITHUB_ENV"
echo "## Building \`$(extra/get_core_version.sh)\`" >> "$GITHUB_STEP_SUMMARY"

- name: Map output packages
# needs the above env vars to be usable
run: |
echo "CORE_TAG=$(git describe --tags --exact-match 2>/dev/null || echo $CORE_HASH)" >> "$GITHUB_ENV"
echo "ARTIFACTS=$(jq -c '["zephyr"] + (map(.artifact) | unique)' <<< ${ALL_BOARD_DATA})" >> "$GITHUB_ENV"
echo "SUB_ARCHES=$(jq -c 'map(.subarch) | unique' <<< ${ALL_BOARD_DATA})" >> "$GITHUB_ENV"

- name: ccache
uses: hendrikmuhs/[email protected]
Expand All @@ -46,36 +56,63 @@ jobs:
run: |
./extra/build_all.sh -f

- name: Package core
- name: Package cores
run: |
./extra/package_core.sh ${{ env.CORE_TAG }} distrib/${{ env.CORE_ARTIFACT }}.tar.bz2
jq -cr '.[]' <<< ${ARTIFACTS} | while read -r artifact; do
ARTIFACT_NAME=ArduinoCore-${artifact}-${CORE_HASH}
./extra/package_core.sh ${artifact} ${CORE_TAG} distrib/${ARTIFACT_NAME}.tar.bz2
done

- name: Archive core
- name: Archive cores
uses: actions/upload-artifact@v4
with:
name: ArduinoCore-archives-${{ env.CORE_HASH }}
path: distrib/*.tar.bz2

split-core:
name: Split off ${{ matrix.artifact }}
runs-on: ubuntu-latest
needs: package-core
env:
ALL_CORES_ARTIFACT: ArduinoCore-archives-${{ needs.package-core.outputs.CORE_HASH }}
CORE_ARTIFACT: ArduinoCore-${{ matrix.artifact }}-${{ needs.package-core.outputs.CORE_HASH }}
strategy:
matrix:
artifact: ${{ fromJSON( needs.package-core.outputs.ARTIFACTS ) }}
steps:
- uses: actions/download-artifact@v4
with:
name: ${{ env.ALL_CORES_ARTIFACT }}

- uses: actions/upload-artifact@v4
with:
name: ${{ env.CORE_ARTIFACT }}
path: distrib/${{ env.CORE_ARTIFACT }}.tar.bz2
path: ${{ env.CORE_ARTIFACT }}.tar.bz2

test-core:
name: Test on ${{ matrix.board }}
name: Test ${{ matrix.subarch }}:${{ matrix.board }}
runs-on: ubuntu-latest
needs: package-core
needs:
- package-core
- split-core
strategy:
matrix:
include:
${{ fromJSON( needs.package-core.outputs.BOARD_VARIANTS ) }}
${{ fromJSON( needs.package-core.outputs.ALL_BOARD_DATA ) }}
fail-fast: false
env:
FQBN: arduino:zephyr:${{ matrix.board }}
REPORT_FILE: arduino-zephyr-${{ matrix.board }}.json
PLAT: arduino:${{ matrix.subarch }}
FQBN: arduino:${{ matrix.subarch }}:${{ matrix.board }}
CORE_ARTIFACT: ArduinoCore-${{ matrix.artifact }}-${{ needs.package-core.outputs.CORE_HASH }}
steps:
- uses: actions/download-artifact@v4
with:
name: ${{ needs.package-core.outputs.CORE_ARTIFACT }}
name: ${{ env.CORE_ARTIFACT }}

- name: Set up core
run: |
tar xf ${{ needs.package-core.outputs.CORE_ARTIFACT }}.tar.bz2
tar xf ${CORE_ARTIFACT}.tar.bz2 # will create ArduinoCore-zephyr/
echo "REPORT_FILE=$(echo ${FQBN} | tr ':' '-').json" >> $GITHUB_ENV

- name: Create Blink sketch
run: |
Expand All @@ -90,7 +127,7 @@ jobs:
# Use Board Manager to install the latest release of Arduino Zephyr Boards to get the toolchain
- name: "arduino:zephyr"
source-url: "https://downloads.arduino.cc/packages/package_zephyr_index.json"
- name: "arduino:zephyr"
- name: ${{ env.PLAT }}
source-path: "ArduinoCore-zephyr"
sketch-paths: Blink
cli-compile-flags: |
Expand All @@ -114,7 +151,7 @@ jobs:
repo: context.repo.repo,
run_id: context.runId
});
const job_name = `Test on ${{ matrix.board }}`
const job_name = `Test ${{ matrix.subarch }}:${{ matrix.board }}`
return workflow_run.jobs.find((job) => job.name === job_name).id;

- name: Prepare log
Expand All @@ -137,7 +174,7 @@ jobs:
- test-core
if: ${{ !cancelled() && needs.package-core.result == 'success' }}
env:
BOARD_VARIANTS: ${{ needs.package-core.outputs.BOARD_VARIANTS }}
ALL_BOARD_DATA: ${{ needs.package-core.outputs.ALL_BOARD_DATA }}
steps:
- uses: actions/download-artifact@v4
with:
Expand All @@ -146,37 +183,41 @@ jobs:
merge-multiple: true

- run: |
echo "### Core test results:" >> "$GITHUB_STEP_SUMMARY"
jq -c '.[]' <<< "$BOARD_VARIANTS" | while read -r BOARD_VARIANT; do
BOARD=$(echo $BOARD_VARIANT | jq -cr '.board')
VARIANT=$(echo $BOARD_VARIANT | jq -cr '.variant')
FQBN="arduino:zephyr:$BOARD"
REPORT_FILE="arduino-zephyr-$BOARD.json"
if [ ! -f $REPORT_FILE ]; then
echo "* :x: $BOARD (`$VARIANT`) - No report found?" >> "$GITHUB_STEP_SUMMARY"
else
REPORT=$(jq -cr '.boards[0].sketches[0]' $REPORT_FILE)
JOB_ID=$(echo $REPORT | jq -cr '.job_id')
JOB_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}/job/${JOB_ID}#step:5:2"
if ! $(echo $REPORT | jq -cr '.compilation_success') ; then
echo "* :x: [$BOARD]($JOB_URL) (\`$VARIANT\`) - Build failed" >> "$GITHUB_STEP_SUMMARY"
ARTIFACTS=$(jq -cr 'map(.artifact) | unique | .[]' <<< ${ALL_BOARD_DATA}) # this avoids the 'zephyr' artifact
for artifact in $ARTIFACTS ; do
echo "### \`$artifact\` test results:" >> "$GITHUB_STEP_SUMMARY"
jq -c "map(select(.artifact == \"$artifact\")) | .[]" <<< ${ALL_BOARD_DATA} | while read -r BOARD_DATA; do
BOARD=$(echo $BOARD_DATA | jq -cr '.board')
VARIANT=$(echo $BOARD_DATA | jq -cr '.variant')
SUBARCH=$(echo $BOARD_DATA | jq -cr '.subarch')
FQBN="arduino:$SUBARCH:$BOARD"
REPORT_FILE="$(echo $FQBN | tr ':' '-').json"
if [ ! -f $REPORT_FILE ]; then
echo "* :x: $BOARD (\`$VARIANT\`) - No report found?" >> "$GITHUB_STEP_SUMMARY"
else
WARNINGS=$(echo $REPORT | jq -cr '.warnings.current.absolute // 0')
if [ $WARNINGS -eq 0 ]; then
echo "* :white_check_mark: $BOARD (\`$VARIANT\`) - Build successful" >> "$GITHUB_STEP_SUMMARY"
REPORT=$(jq -cr '.boards[0].sketches[0]' $REPORT_FILE)
JOB_ID=$(echo $REPORT | jq -cr '.job_id')
JOB_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}/job/${JOB_ID}#step:5:2"
if ! $(echo $REPORT | jq -cr '.compilation_success') ; then
echo "* :x: [$BOARD]($JOB_URL) (\`$VARIANT\`) - Build failed" >> "$GITHUB_STEP_SUMMARY"
else
echo >> "$GITHUB_STEP_SUMMARY"
echo "<details><summary>&nbsp;&nbsp; :warning: <a href=\"$JOB_URL\">$BOARD</a> (<tt>$VARIANT</tt>) - $WARNINGS warnings:</summary>" >> "$GITHUB_STEP_SUMMARY"
echo >> "$GITHUB_STEP_SUMMARY"
echo "\`\`\`" >> "$GITHUB_STEP_SUMMARY"
echo $REPORT | jq -cr '.warnings_log[]' >> "$GITHUB_STEP_SUMMARY"
echo "\`\`\`" >> "$GITHUB_STEP_SUMMARY"
echo >> "$GITHUB_STEP_SUMMARY"
echo "</details>" >> "$GITHUB_STEP_SUMMARY"
echo >> "$GITHUB_STEP_SUMMARY"
WARNINGS=$(echo $REPORT | jq -cr '.warnings.current.absolute // 0')
if [ $WARNINGS -eq 0 ]; then
echo "* :white_check_mark: $BOARD (\`$VARIANT\`) - Build successful" >> "$GITHUB_STEP_SUMMARY"
else
echo >> "$GITHUB_STEP_SUMMARY"
echo "<details><summary>&nbsp;&nbsp; :warning: <a href=\"$JOB_URL\">$BOARD</a> (<tt>$VARIANT</tt>) - $WARNINGS warnings:</summary>" >> "$GITHUB_STEP_SUMMARY"
echo >> "$GITHUB_STEP_SUMMARY"
echo "\`\`\`" >> "$GITHUB_STEP_SUMMARY"
echo $REPORT | jq -cr '.warnings_log[]' >> "$GITHUB_STEP_SUMMARY"
echo "\`\`\`" >> "$GITHUB_STEP_SUMMARY"
echo >> "$GITHUB_STEP_SUMMARY"
echo "</details>" >> "$GITHUB_STEP_SUMMARY"
echo >> "$GITHUB_STEP_SUMMARY"
fi
fi
fi
fi
done
done

- name: Clean up intermediate artifacts
Expand Down Expand Up @@ -207,12 +248,11 @@ jobs:
id-token: write
contents: read
env:
CORE_ARTIFACT: ${{ needs.package-core.outputs.CORE_ARTIFACT }}
ARTIFACT_FILE: ${{ needs.package-core.outputs.CORE_ARTIFACT }}.tar.bz2
ALL_CORES_ARTIFACT: ArduinoCore-archives-${{ needs.package-core.outputs.CORE_HASH }}
steps:
- uses: actions/download-artifact@v4
with:
name: ${{ env.CORE_ARTIFACT }}
name: ${{ env.ALL_CORES_ARTIFACT }}

- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
Expand All @@ -221,40 +261,55 @@ jobs:
aws-region: ${{ secrets.AWS_REGION }}

- name: Upload artifact
run: aws s3 cp ${{ env.ARTIFACT_FILE }} s3://${{ secrets.S3_BUCKET }}/
run: aws s3 cp ArduinoCore-*.tar.bz2 s3://${{ secrets.S3_BUCKET }}/

publish-json:
name: Publish json
name: Publish jsons
runs-on: ubuntu-latest
if: ${{ github.event_name == 'push' && github.repository == 'arduino/ArduinoCore-zephyr' }}
if: ${{ github.repository == 'arduino/ArduinoCore-zephyr' }}
needs:
- package-core
- test-core
- publish-core
env:
CORE_ARTIFACT: ${{ needs.package-core.outputs.CORE_ARTIFACT }}
ARTIFACT_FILE: ${{ needs.package-core.outputs.CORE_ARTIFACT }}.tar.bz2
ALL_CORES_ARTIFACT: ArduinoCore-archives-${{ needs.package-core.outputs.CORE_HASH }}
CORE_TAG: ${{ needs.package-core.outputs.CORE_TAG }}
PACKAGE_INDEX_JSON: zephyr-core-${{ needs.package-core.outputs.CORE_TAG }}.json
CORE_HASH: ${{ needs.package-core.outputs.CORE_HASH }}
ARTIFACTS: ${{ needs.package-core.outputs.ARTIFACTS }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
persist-credentials: false
sparse-checkout: |
extra/gen_package_index_json.sh
extra/zephyr-core-template.json
fetch-tags: true

- uses: actions/download-artifact@v4
with:
name: ${{ env.CORE_ARTIFACT }}
name: ${{ env.ALL_CORES_ARTIFACT }}

# uses: ARTIFACT_FILE CORE_TAG PACKAGE_INDEX_JSON
- name: Prepare package index snippet
run: ./extra/gen_package_index_json.sh
- name: Prepare package index snippets
run: |
jq -cr '.[]' <<< ${ARTIFACTS} | while read -r artifact; do
ARTIFACT_FILE=ArduinoCore-${artifact}-${CORE_HASH}.tar.bz2
PACKAGE_JSON=ArduinoCore-${artifact}-${CORE_TAG}.json
./extra/gen_package_index_json.sh ${artifact} ${ARTIFACT_FILE} ${PACKAGE_JSON}
done

- name: Archive package index snippet
- name: Archive package index snippets
uses: actions/upload-artifact@v4
with:
name: ${{ env.PACKAGE_INDEX_JSON }}
path: ${{ env.PACKAGE_INDEX_JSON }}
name: ArduinoCore-zephyr-${{ env.CORE_TAG }}-jsons
path: ArduinoCore-*-${{ env.CORE_TAG }}.json

cleanup-artifacts:
runs-on: ubuntu-latest
needs:
- package-core
- publish-core
- publish-json
if: ${{ !cancelled() }}
steps:
- name: Clean up intermediate artifacts
uses: geekyeggo/[email protected]
with:
name: ArduinoCore-archives-${{ needs.package-core.outputs.CORE_HASH }}
failOnError: false
16 changes: 12 additions & 4 deletions boards.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ giga.build.zephyr_target=arduino_giga_r1//m7
giga.build.zephyr_args=--shield arduino_giga_display_shield
giga.build.zephyr_hals=hal_stm32 hal_infineon
giga.build.variant=arduino_giga_r1_stm32h747xx_m7
giga.build.artifact=zephyr_main
giga.build.mcu=cortex-m7
giga.build.fpu=-mfpu=fpv5-d16
giga.build.architecture=cortex-m7
Expand Down Expand Up @@ -78,6 +79,7 @@ nano33ble.menu.debug.true.build.zsk_args.debug=-debug
nano33ble.build.zephyr_target=arduino_nano_33_ble//sense
nano33ble.build.zephyr_args=
nano33ble.build.zephyr_hals=hal_nordic
nano33ble.build.artifact=zephyr_main
nano33ble.build.variant=arduino_nano_33_ble_nrf52840_sense
nano33ble.build.mcu=cortex-m4
nano33ble.build.fpu=-mfpu=fpv4-sp-d16
Expand Down Expand Up @@ -126,7 +128,7 @@ nano33ble.debug.cortex-debug.custom.request=attach

##############################################################################################################

ek_ra8d1.name=EK_RA8D1
ek_ra8d1.name=Renesas RA8D1 EK
ek_ra8d1.build.core=arduino
ek_ra8d1.build.crossprefix=arm-zephyr-eabi-
ek_ra8d1.build.compiler_path={runtime.tools.arm-zephyr-eabi-0.16.8.path}/bin/
Expand Down Expand Up @@ -180,7 +182,7 @@ ek_ra8d1.bootloader.target=R7FA8D1AH

##############################################################################################################

frdm_mcxn947.name=MCXN947
frdm_mcxn947.name=NXP FRDM MCXN947
frdm_mcxn947.build.core=arduino
frdm_mcxn947.build.crossprefix=arm-zephyr-eabi-
frdm_mcxn947.build.compiler_path={runtime.tools.arm-zephyr-eabi-0.16.8.path}/bin/
Expand Down Expand Up @@ -241,6 +243,7 @@ portentah7.menu.debug.true.build.zsk_args.debug=-debug
[email protected]//m7
portentah7.build.zephyr_args=
portentah7.build.zephyr_hals=hal_stm32 hal_infineon
portentah7.build.artifact=zephyr_main
portentah7.build.variant=arduino_portenta_h7_stm32h747xx_m7
portentah7.build.mcu=cortex-m7
portentah7.build.fpu=-mfpu=fpv5-d16
Expand Down Expand Up @@ -291,7 +294,7 @@ portentah7.debug.svd_file={runtime.platform.path}/svd/STM32H747_CM7.svd

##############################################################################################################

frdm_rw612.name=RW612
frdm_rw612.name=NXP FRDM RW612
frdm_rw612.build.core=arduino
frdm_rw612.build.crossprefix=arm-zephyr-eabi-
frdm_rw612.build.compiler_path={runtime.tools.arm-zephyr-eabi-0.16.8.path}/bin/
Expand Down Expand Up @@ -351,6 +354,7 @@ niclasense.menu.debug.true.build.zsk_args.debug=-debug
niclasense.build.zephyr_target=arduino_nicla_sense_me
niclasense.build.zephyr_args=
niclasense.build.zephyr_hals=hal_nordic
niclasense.build.artifact=zephyr_main
niclasense.build.variant=arduino_nicla_sense_me_nrf52832
niclasense.build.mcu=cortex-m4
niclasense.build.fpu=-mfpu=fpv4-sp-d16
Expand Down Expand Up @@ -405,7 +409,7 @@ niclasense.debug.cortex-debug.custom.request=attach

##########################################################################################

portentac33.name=Portenta C33
portentac33.name=Arduino Portenta C33
portentac33.build.core=arduino
portentac33.build.crossprefix=arm-zephyr-eabi-
portentac33.build.compiler_path={runtime.tools.arm-zephyr-eabi-0.16.8.path}/bin/
Expand All @@ -422,6 +426,7 @@ portentac33.menu.link_mode.static.upload.extension=bin-zsk.bin
portentac33.build.zephyr_target=arduino_portenta_c33
portentac33.build.zephyr_args=
portentac33.build.zephyr_hals=hal_renesas nanopb
portentac33.build.artifact=zephyr_main
portentac33.build.variant=arduino_portenta_c33_r7fa6m5bh3cfc
portentac33.build.mcu=cortex-m33
portentac33.build.fpu=-mfpu=fpv5-sp-d16
Expand Down Expand Up @@ -473,6 +478,7 @@ opta.menu.debug.true.build.zsk_args.debug=-debug
opta.build.zephyr_target=arduino_opta//m7
opta.build.zephyr_args=
opta.build.zephyr_hals=hal_stm32 hal_infineon
opta.build.artifact=zephyr_main
opta.build.variant=arduino_opta_stm32h747xx_m7
opta.build.mcu=cortex-m7
opta.build.fpu=-mfpu=fpv5-d16
Expand Down Expand Up @@ -541,6 +547,8 @@ unoq.menu.flash_mode.ram.openocd_cfg=flash_sketch_ram.cfg
unoq.build.zephyr_target=arduino_uno_q
unoq.build.zephyr_args=
unoq.build.variant=arduino_uno_q_stm32u585xx
unoq.build.artifact=zephyr_unoq
unoq.build.subarch=zephyr
unoq.build.mcu=cortex-m33
unoq.build.fpu=-mfpu=fpv5-sp-d16
unoq.build.architecture=cortex-m33
Expand Down
File renamed without changes.
Loading