Expand Up @@ -6,11 +6,9 @@ on: jobs: package-core : name:Build and package cores build-env : name:Prepare build environment runs-on: ubuntu-latest env: CCACHE_IGNOREOPTIONS: -specs=* outputs: CORE_TAG: ${{ env.CORE_TAG }} CORE_HASH: ${{ env.CORE_HASH }} Expand Down Expand Up @@ -46,64 +44,156 @@ jobs: 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" (cd && tar cphf - .cmake work zephyr-sdk-* | zstd > build-env.tar.zstd) tar cphf - cores/arduino/api | zstd > arduino-api.tar.zstd - name: Archive build environment uses: actions/upload-artifact@v4 with: name: build-env path: ~/build-env.tar.zstd - name: Archive API snapshot uses: actions/upload-artifact@v4 with: name: arduino-api path: arduino-api.tar.zstd build-board: name: Build loader for ${{ matrix.board }} runs-on: ubuntu-latest needs: - build-env env: CCACHE_IGNOREOPTIONS: -specs=* OUTPUT_ARTIFACT: binaries-${{ matrix.board }}-${{ needs.build-env.outputs.CORE_HASH }} strategy: matrix: include: ${{ fromJSON( needs.build-env.outputs.ALL_BOARD_DATA ) }} fail-fast: false steps: - uses: actions/download-artifact@v4 with: path: /home/runner name: build-env - name: Restore build environment run: | (cd ~ && tar --use-compress-program=unzstd -xpf build-env.tar.zstd && rm build-env.tar.zstd) - name: ccache uses: hendrikmuhs/ccache-action@v1.2 with: verbose: 1 - name: Buildvariants - name: Buildloader shell: bash run: | ./extra/build_all.sh -f if ! ./extra/build.sh ${{ matrix.board }} 2> >(tee error.log) ; then echo "### :x: ${{ matrix.board }} (\`${{ matrix.variant }}\`) build errors" > $GITHUB_STEP_SUMMARY echo >> $GITHUB_STEP_SUMMARY echo "\`\`\`" >> $GITHUB_STEP_SUMMARY cat error.log >> $GITHUB_STEP_SUMMARY echo "\`\`\`" >> $GITHUB_STEP_SUMMARY exit 1 fi - name: Package cores - name: Package board binaries if: ${{ !cancelled() }} run: | 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 tar chf - \ firmwares/*${{ matrix.variant }}* \ variants/${{ matrix.variant }}/ \ ${{ (job.status == 'failure') && format('build/{0}/', matrix.variant) }} \ | zstd > ${OUTPUT_ARTIFACT}.tar.zstd - name: Archive cores - name: Archive board binaries if: ${{ !cancelled() }} uses: actions/upload-artifact@v4 with: name:ArduinoCore-archives- ${{ env.CORE_HASH }} path:distrib/*. tar.bz2 name: ${{format('{0}{1}', (job.status == 'failure') && 'failed-' || '', env.OUTPUT_ARTIFACT) }} path:${{ env.OUTPUT_ARTIFACT }}. tar.zstd split -core: name:Split off ${{ matrix.artifact }} package -core: name:Package ${{ matrix.artifact }} runs-on: ubuntu-latest needs: package-core needs: - build-env - build-board env: ALL_CORES_ARTIFACT : ArduinoCore-archives -${{ needs.package-core .outputs.CORE_HASH }}CORE_ARTIFACT: ArduinoCore- ${{matrix.artifact }}-${{ needs.package-core .outputs.CORE_HASH }}CORE_ARTIFACT : ArduinoCore-${{ matrix.artifact }} -${{ needs.build-env .outputs.CORE_HASH }}CORE_TAG: ${{ needs.build-env .outputs.CORE_TAG }} strategy: matrix: artifact: ${{ fromJSON( needs.package-core.outputs.ARTIFACTS ) }} artifact: ${{ fromJSON( needs.build-env.outputs.ARTIFACTS ) }} fail-fast: false if: ${{ !cancelled() && needs.build-env.result == 'success' }} steps: - uses: actions/checkout@v4 with: submodules: 'recursive' fetch-depth: 0 persist-credentials: false fetch-tags: true - uses: actions/download-artifact@v4 with: name: ${{ env.ALL_CORES_ARTIFACT }} path: . name: arduino-api - uses: actions/download-artifact@v4 with: path: . pattern: binaries-* merge-multiple: true - name: Package core run: | rm -f cores/arduino/api # remove broken symlink tar --use-compress-program=unzstd -xpf arduino-api.tar.zstd for f in binaries-*.tar.zstd ; do tar --use-compress-program=unzstd -xpf $f done ./extra/package_core.sh ${{ matrix.artifact }} ${CORE_TAG} distrib/${CORE_ARTIFACT}.tar.bz2 - uses: actions/upload-artifact@v4 if: ${{ success() || failure() }} with: name: ${{ env.CORE_ARTIFACT }} path: ${{ env.CORE_ARTIFACT }}.tar.bz2 path: distrib/${{ env.CORE_ARTIFACT }}.tar.bz2 cleanup-build: name: Clean up intermediates runs-on: ubuntu-latest needs: - package-core if: always() steps: - uses: geekyeggo/delete-artifact@v5.1.0 with: name: | arduino-api binaries-* build-env failOnError: false test-core: name: Test ${{ matrix.subarch }}:${{ matrix.board }} runs-on: ubuntu-latest needs: - build-env - package-core - split-core strategy: matrix: include: ${{ fromJSON( needs.package-core .outputs.ALL_BOARD_DATA ) }} ${{ fromJSON( needs.build-env .outputs.ALL_BOARD_DATA ) }} fail-fast: false env: PLAT: arduino:${{ matrix.subarch }} FQBN: arduino:${{ matrix.subarch }}:${{ matrix.board }} CORE_ARTIFACT: ArduinoCore-${{ matrix.artifact }}-${{ needs.package-core.outputs.CORE_HASH }} CORE_ARTIFACT: ArduinoCore-${{ matrix.artifact }}-${{ needs.build-env.outputs.CORE_HASH }} if: ${{ !cancelled() && needs.build-env.result == 'success' }} steps: - uses: actions/download-artifact@v4 with: Expand Down Expand Up @@ -163,18 +253,19 @@ jobs: - uses: actions/upload-artifact@v4 if: ${{ success() || failure() }} with: name: test-report-${{ needs.package-core .outputs.CORE_TAG }}-${{ matrix.board }} name: test-report-${{ needs.build-env .outputs.CORE_TAG }}-${{ matrix.board }} path: sketches-reports/* collect-logs: name: Collect logs runs-on: ubuntu-latest needs: - build-env - package-core - test-core if: ${{ !cancelled() && needs.package-core .result == 'success' }} if: ${{ !cancelled() && needs.build-env .result == 'success' }} env: ALL_BOARD_DATA: ${{ needs.package-core .outputs.ALL_BOARD_DATA }} ALL_BOARD_DATA: ${{ needs.build-env .outputs.ALL_BOARD_DATA }} steps: - uses: actions/download-artifact@v4 with: Expand Down Expand Up @@ -230,9 +321,10 @@ jobs: runs-on: ubuntu-latest if: cancelled() || contains(needs.*.result, 'failure') needs: - build-env - package-core - test-core steps: steps: - name: Notify failure run: exit 1 Expand All @@ -241,18 +333,19 @@ jobs: runs-on: ubuntu-latest if: ${{ github.event_name == 'push' && github.repository == 'arduino/ArduinoCore-zephyr' }} needs: - build-env - package-core - test-core environment: production permissions: id-token: write contents: read env: ALL_CORES_ARTIFACT: ArduinoCore-archives-${{ needs.package-core.outputs.CORE_HASH }} steps: - uses: actions/download-artifact@v4 with: name: ${{ env.ALL_CORES_ARTIFACT }} path: . pattern: ArduinoCore-* merge-multiple: true - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 Expand All @@ -266,18 +359,17 @@ jobs: aws s3 cp $f s3://${{ secrets.S3_BUCKET }}/ done publish -json: name:Publish jsons prepare -json: name:Prepare jsons runs-on: ubuntu-latest if: ${{ github.repository == 'arduino/ArduinoCore-zephyr' }} needs: - build-env - package-core - test-core env: ALL_CORES_ARTIFACT: ArduinoCore-archives-${{ needs.package-core.outputs.CORE_HASH }} CORE_TAG: ${{ needs.package-core.outputs.CORE_TAG }} CORE_HASH: ${{ needs.package-core.outputs.CORE_HASH }} ARTIFACTS: ${{ needs.package-core.outputs.ARTIFACTS }} CORE_TAG: ${{ needs.build-env.outputs.CORE_TAG }} CORE_HASH: ${{ needs.build-env.outputs.CORE_HASH }} ARTIFACTS: ${{ needs.build-env.outputs.ARTIFACTS }} steps: - uses: actions/checkout@v4 with: Expand All @@ -287,7 +379,9 @@ jobs: - uses: actions/download-artifact@v4 with: name: ${{ env.ALL_CORES_ARTIFACT }} path: . pattern: ArduinoCore-* merge-multiple: true - name: Prepare package index snippets run: | Expand All @@ -302,17 +396,3 @@ jobs: with: 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/delete-artifact@v5.1.0 with: name: ArduinoCore-archives-${{ needs.package-core.outputs.CORE_HASH }} failOnError: false