From c0c740b12cad056c2f0cd3b8fe5b96f1fac9bc82 Mon Sep 17 00:00:00 2001 From: umbynos Date: Tue, 7 Jun 2022 17:03:55 +0200 Subject: [PATCH 1/9] add support for macos arm64 build in the taskfile --- DistTasks.yml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/DistTasks.yml b/DistTasks.yml index b1aa984644e..86476672ef0 100644 --- a/DistTasks.yml +++ b/DistTasks.yml @@ -34,6 +34,7 @@ tasks: - task: Linux_ARMv7 - task: Linux_ARM64 - task: macOS_64bit + - task: macOS_ARM64 Windows_32bit: desc: Builds Windows 32 bit binaries @@ -251,3 +252,25 @@ tasks: CONTAINER_TAG: "{{.GO_VERSION}}-darwin-debian10" PACKAGE_PLATFORM: "macOS_64bit" PACKAGE_NAME: "{{.PROJECT_NAME}}_{{.VERSION}}_{{.PACKAGE_PLATFORM}}.tar.gz" + + macOS_ARM64: + desc: Builds Mac OS X ARM64 binaries + dir: "{{.DIST_DIR}}" + cmds: + - | + docker run -v `pwd`/..:/home/build -w /home/build \ + -e CGO_ENABLED=1 \ + {{.CONTAINER}}:{{.CONTAINER_TAG}} \ + --build-cmd "{{.BUILD_COMMAND}}" \ + -p "{{.BUILD_PLATFORM}}" + + tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}} + sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}} + + vars: + PLATFORM_DIR: "{{.PROJECT_NAME}}_osx_darwin_arm64" + BUILD_COMMAND: "go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}} {{.LDFLAGS}}" + BUILD_PLATFORM: "darwin/arm64" + CONTAINER_TAG: "{{.GO_VERSION}}-darwin-arm64-debian10" + PACKAGE_PLATFORM: "macOS_ARM64" + PACKAGE_NAME: "{{.PROJECT_NAME}}_{{.VERSION}}_{{.PACKAGE_PLATFORM}}.tar.gz" From e1af8bd7875eefa7ae6469816ab6c1046eada0fb Mon Sep 17 00:00:00 2001 From: Umberto Baldi Date: Thu, 16 Jun 2022 12:58:01 +0200 Subject: [PATCH 2/9] update workflows to handle darwin_arm64 notarization - the gon config is now hardcoded in the workflow (it allows customization) - the notarization step is run in parallel now - the updated checksum is passed to the `create-release` job - the `create-release` job handles the checksum update in `checksum.txt` file --- .github/workflows/publish-go-nightly-task.yml | 57 +++++++++++++++--- .github/workflows/publish-go-tester-task.yml | 2 + .github/workflows/release-go-task.yml | 58 ++++++++++++++++--- gon.config.hcl | 14 ----- 4 files changed, 103 insertions(+), 28 deletions(-) delete mode 100644 gon.config.hcl diff --git a/.github/workflows/publish-go-nightly-task.yml b/.github/workflows/publish-go-nightly-task.yml index 75f81d6cc4d..0140843f3c9 100644 --- a/.github/workflows/publish-go-nightly-task.yml +++ b/.github/workflows/publish-go-nightly-task.yml @@ -45,8 +45,20 @@ jobs: path: ${{ env.DIST_DIR }} notarize-macos: + name: notarize-${{ matrix.artifact.name }} runs-on: macos-latest needs: create-nightly-artifacts + outputs: + checksum-darwin_amd64: ${{ steps.re-package.outputs.checksum-darwin_amd64 }} + checksum-darwin_arm64: ${{ steps.re-package.outputs.checksum-darwin_arm64 }} + + strategy: + matrix: + artifact: + - name: darwin_amd64 + path: "macOS_64bit.tar.gz" + - name: darwin_arm64 + path: "macOS_ARM64.tar.gz" steps: - name: Checkout repository @@ -86,6 +98,25 @@ jobs: wget -q https://github.com/mitchellh/gon/releases/download/v0.2.3/gon_macos.zip unzip gon_macos.zip -d /usr/local/bin + - name: Write gon config to file + # gon does not allow env variables in config file (https://github.com/mitchellh/gon/issues/20) + run: | + cat > gon.config.hcl < gon.config.hcl < Date: Thu, 16 Jun 2022 17:21:31 +0200 Subject: [PATCH 3/9] use working-directory, this should simplify a bit the workflow --- .github/workflows/publish-go-nightly-task.yml | 11 ++++++----- .github/workflows/release-go-task.yml | 11 ++++++----- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/.github/workflows/publish-go-nightly-task.yml b/.github/workflows/publish-go-nightly-task.yml index 0140843f3c9..056ae78ae8b 100644 --- a/.github/workflows/publish-go-nightly-task.yml +++ b/.github/workflows/publish-go-nightly-task.yml @@ -126,6 +126,7 @@ jobs: - name: Re-package binary and output checksum id: re-package + working-directory: ${{ env.DIST_DIR }} # This step performs the following: # 1. Repackage the signed binary replaced in place by Gon (ignoring the output zip file) # 2. Recalculate package checksum @@ -133,12 +134,12 @@ jobs: run: | # GitHub's upload/download-artifact@v2 actions don't preserve file permissions, # so we need to add execution permission back until the action is made to do this. - chmod +x "${{ env.DIST_DIR }}/${{ env.PROJECT_NAME }}_osx_${{ matrix.artifact.name }}/${{ env.PROJECT_NAME }}" - PACKAGE_FILENAME="$(basename ${{ env.DIST_DIR }}/${{ env.PROJECT_NAME }}_nightly-*${{ matrix.artifact.path }})" - tar -czvf "${{ env.DIST_DIR }}/$PACKAGE_FILENAME" \ - -C "${{ env.DIST_DIR }}/${{ env.PROJECT_NAME }}_osx_${{ matrix.artifact.name }}/" "${{ env.PROJECT_NAME }}" \ + chmod +x "${{ env.PROJECT_NAME }}_osx_${{ matrix.artifact.name }}/${{ env.PROJECT_NAME }}" + PACKAGE_FILENAME="${{ env.PROJECT_NAME }}_nightly-*${{ matrix.artifact.path }}" + tar -czvf "$PACKAGE_FILENAME" \ + -C "${{ env.PROJECT_NAME }}_osx_${{ matrix.artifact.name }}/" "${{ env.PROJECT_NAME }}" \ -C ../../ LICENSE.txt - CHECKSUM_LINE="$(shasum -a 256 ${{ env.DIST_DIR }}/$PACKAGE_FILENAME)" + CHECKSUM_LINE="$(shasum -a 256 $PACKAGE_FILENAME)" echo "::set-output name=checksum-${{ matrix.artifact.name }}::$CHECKSUM_LINE" - name: Upload artifacts diff --git a/.github/workflows/release-go-task.yml b/.github/workflows/release-go-task.yml index 84e30280f81..577c7462949 100644 --- a/.github/workflows/release-go-task.yml +++ b/.github/workflows/release-go-task.yml @@ -131,6 +131,7 @@ jobs: - name: Re-package binary and output checksum id: re-package + working-directory: ${{ env.DIST_DIR }} # This step performs the following: # 1. Repackage the signed binary replaced in place by Gon (ignoring the output zip file) # 2. Recalculate package checksum @@ -138,13 +139,13 @@ jobs: run: | # GitHub's upload/download-artifact@v2 actions don't preserve file permissions, # so we need to add execution permission back until the action is made to do this. - chmod +x "${{ env.DIST_DIR }}/${{ env.PROJECT_NAME }}_osx_${{ matrix.artifact.name }}/${{ env.PROJECT_NAME }}" + chmod +x "${{ env.PROJECT_NAME }}_osx_${{ matrix.artifact.name }}/${{ env.PROJECT_NAME }}" TAG="${GITHUB_REF/refs\/tags\//}" - PACKAGE_FILENAME="$(basename ${{ env.DIST_DIR }}/${{ env.PROJECT_NAME }}_${TAG}_${{ matrix.artifact.path }})" - tar -czvf "${{ env.DIST_DIR }}/$PACKAGE_FILENAME" \ - -C "${{ env.DIST_DIR }}/${{ env.PROJECT_NAME }}_osx_${{ matrix.artifact.name }}/" "${{ env.PROJECT_NAME }}" \ + PACKAGE_FILENAME="${{ env.PROJECT_NAME }}_${TAG}_${{ matrix.artifact.path }}" + tar -czvf "$PACKAGE_FILENAME" \ + -C "${{ env.PROJECT_NAME }}_osx_${{ matrix.artifact.name }}/" "${{ env.PROJECT_NAME }}" \ -C ../../ LICENSE.txt - CHECKSUM_LINE="$(shasum -a 256 ${{ env.DIST_DIR }}/$PACKAGE_FILENAME)" + CHECKSUM_LINE="$(shasum -a 256 $PACKAGE_FILENAME)" echo "::set-output name=checksum-${{ matrix.artifact.name }}::$CHECKSUM_LINE" - name: Upload artifacts From 2a8f8f96d3434df5aa9116a624e72f0834d79359 Mon Sep 17 00:00:00 2001 From: Umberto Baldi Date: Thu, 16 Jun 2022 17:43:08 +0200 Subject: [PATCH 4/9] we cannot upload all the artifacts since the job is being parallelized --- .github/workflows/publish-go-nightly-task.yml | 3 ++- .github/workflows/release-go-task.yml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish-go-nightly-task.yml b/.github/workflows/publish-go-nightly-task.yml index 056ae78ae8b..dd086dc8019 100644 --- a/.github/workflows/publish-go-nightly-task.yml +++ b/.github/workflows/publish-go-nightly-task.yml @@ -140,6 +140,7 @@ jobs: -C "${{ env.PROJECT_NAME }}_osx_${{ matrix.artifact.name }}/" "${{ env.PROJECT_NAME }}" \ -C ../../ LICENSE.txt CHECKSUM_LINE="$(shasum -a 256 $PACKAGE_FILENAME)" + echo "PACKAGE_FILENAME=$PACKAGE_FILENAME" >> $GITHUB_ENV echo "::set-output name=checksum-${{ matrix.artifact.name }}::$CHECKSUM_LINE" - name: Upload artifacts @@ -147,7 +148,7 @@ jobs: with: if-no-files-found: error name: ${{ env.ARTIFACT_NAME }} - path: ${{ env.DIST_DIR }} + path: ${{ env.DIST_DIR }}/${{ env.PACKAGE_FILENAME }} publish-nightly: runs-on: ubuntu-latest diff --git a/.github/workflows/release-go-task.yml b/.github/workflows/release-go-task.yml index 577c7462949..6e1a08edfb3 100644 --- a/.github/workflows/release-go-task.yml +++ b/.github/workflows/release-go-task.yml @@ -146,6 +146,7 @@ jobs: -C "${{ env.PROJECT_NAME }}_osx_${{ matrix.artifact.name }}/" "${{ env.PROJECT_NAME }}" \ -C ../../ LICENSE.txt CHECKSUM_LINE="$(shasum -a 256 $PACKAGE_FILENAME)" + echo "PACKAGE_FILENAME=$PACKAGE_FILENAME" >> $GITHUB_ENV echo "::set-output name=checksum-${{ matrix.artifact.name }}::$CHECKSUM_LINE" - name: Upload artifacts @@ -153,7 +154,7 @@ jobs: with: if-no-files-found: error name: ${{ env.ARTIFACT_NAME }} - path: ${{ env.DIST_DIR }} + path: ${{ env.DIST_DIR }}/${{ env.PACKAGE_FILENAME }} create-release: runs-on: ubuntu-latest From 65534e1824fe31493363c22aeca7f87529865ebb Mon Sep 17 00:00:00 2001 From: Umberto Baldi Date: Thu, 16 Jun 2022 15:34:48 +0200 Subject: [PATCH 5/9] disable s3 push for testing --- .github/workflows/release-go-task.yml | 32 +++++++++++++-------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/release-go-task.yml b/.github/workflows/release-go-task.yml index 6e1a08edfb3..fc39e4f04da 100644 --- a/.github/workflows/release-go-task.yml +++ b/.github/workflows/release-go-task.yml @@ -197,19 +197,19 @@ jobs: # (all the files we need are in the DIST_DIR root) artifacts: ${{ env.DIST_DIR }}/* - - name: Upload release files on Arduino downloads servers - uses: docker://plugins/s3 - env: - PLUGIN_SOURCE: "${{ env.DIST_DIR }}/*" - PLUGIN_TARGET: ${{ env.AWS_PLUGIN_TARGET }} - PLUGIN_STRIP_PREFIX: "${{ env.DIST_DIR }}/" - PLUGIN_BUCKET: ${{ secrets.DOWNLOADS_BUCKET }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - - - name: Update Homebrew formula - if: steps.prerelease.outputs.IS_PRE != 'true' - uses: dawidd6/action-homebrew-bump-formula@v3 - with: - token: ${{ secrets.ARDUINOBOT_GITHUB_TOKEN }} - formula: arduino-cli + # - name: Upload release files on Arduino downloads servers + # uses: docker://plugins/s3 + # env: + # PLUGIN_SOURCE: "${{ env.DIST_DIR }}/*" + # PLUGIN_TARGET: ${{ env.AWS_PLUGIN_TARGET }} + # PLUGIN_STRIP_PREFIX: "${{ env.DIST_DIR }}/" + # PLUGIN_BUCKET: ${{ secrets.DOWNLOADS_BUCKET }} + # AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + # AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + + # - name: Update Homebrew formula + # if: steps.prerelease.outputs.IS_PRE != 'true' + # uses: dawidd6/action-homebrew-bump-formula@v3 + # with: + # token: ${{ secrets.ARDUINOBOT_GITHUB_TOKEN }} + # formula: arduino-cli From 74889c3d6c540aefaaf26cba75618f535850ebdc Mon Sep 17 00:00:00 2001 From: Umberto Baldi Date: Thu, 16 Jun 2022 15:44:48 +0200 Subject: [PATCH 6/9] Revert "disable s3 push for testing" This reverts commit c4fd700802e6aba3307cf71445d40b6b4bcabb54. --- .github/workflows/release-go-task.yml | 32 +++++++++++++-------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/release-go-task.yml b/.github/workflows/release-go-task.yml index fc39e4f04da..6e1a08edfb3 100644 --- a/.github/workflows/release-go-task.yml +++ b/.github/workflows/release-go-task.yml @@ -197,19 +197,19 @@ jobs: # (all the files we need are in the DIST_DIR root) artifacts: ${{ env.DIST_DIR }}/* - # - name: Upload release files on Arduino downloads servers - # uses: docker://plugins/s3 - # env: - # PLUGIN_SOURCE: "${{ env.DIST_DIR }}/*" - # PLUGIN_TARGET: ${{ env.AWS_PLUGIN_TARGET }} - # PLUGIN_STRIP_PREFIX: "${{ env.DIST_DIR }}/" - # PLUGIN_BUCKET: ${{ secrets.DOWNLOADS_BUCKET }} - # AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - # AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - - # - name: Update Homebrew formula - # if: steps.prerelease.outputs.IS_PRE != 'true' - # uses: dawidd6/action-homebrew-bump-formula@v3 - # with: - # token: ${{ secrets.ARDUINOBOT_GITHUB_TOKEN }} - # formula: arduino-cli + - name: Upload release files on Arduino downloads servers + uses: docker://plugins/s3 + env: + PLUGIN_SOURCE: "${{ env.DIST_DIR }}/*" + PLUGIN_TARGET: ${{ env.AWS_PLUGIN_TARGET }} + PLUGIN_STRIP_PREFIX: "${{ env.DIST_DIR }}/" + PLUGIN_BUCKET: ${{ secrets.DOWNLOADS_BUCKET }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + + - name: Update Homebrew formula + if: steps.prerelease.outputs.IS_PRE != 'true' + uses: dawidd6/action-homebrew-bump-formula@v3 + with: + token: ${{ secrets.ARDUINOBOT_GITHUB_TOKEN }} + formula: arduino-cli From c39b2406bda5e4b041b46b391178da7b51091020 Mon Sep 17 00:00:00 2001 From: Umberto Baldi <34278123+umbynos@users.noreply.github.com> Date: Wed, 22 Jun 2022 14:28:16 +0200 Subject: [PATCH 7/9] Apply suggestions from code review Co-authored-by: per1234 --- .github/workflows/publish-go-nightly-task.yml | 12 ++++++++---- .github/workflows/release-go-task.yml | 12 ++++++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/.github/workflows/publish-go-nightly-task.yml b/.github/workflows/publish-go-nightly-task.yml index dd086dc8019..619f5ec9be5 100644 --- a/.github/workflows/publish-go-nightly-task.yml +++ b/.github/workflows/publish-go-nightly-task.yml @@ -45,13 +45,16 @@ jobs: path: ${{ env.DIST_DIR }} notarize-macos: - name: notarize-${{ matrix.artifact.name }} + name: Notarize ${{ matrix.artifact.name }} runs-on: macos-latest needs: create-nightly-artifacts outputs: checksum-darwin_amd64: ${{ steps.re-package.outputs.checksum-darwin_amd64 }} checksum-darwin_arm64: ${{ steps.re-package.outputs.checksum-darwin_arm64 }} + env: + GON_CONFIG_PATH: gon.config.hcl + strategy: matrix: artifact: @@ -101,7 +104,7 @@ jobs: - name: Write gon config to file # gon does not allow env variables in config file (https://github.com/mitchellh/gon/issues/20) run: | - cat > gon.config.hcl < "${{ env.GON_CONFIG_PATH }}" < gon.config.hcl < "${{ env.GON_CONFIG_PATH }}" < Date: Wed, 22 Jun 2022 14:45:33 +0200 Subject: [PATCH 8/9] add macos arm 64 download links in `installation.md` --- docs/installation.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/installation.md b/docs/installation.md index 57297540c9e..95ca7da2936 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -63,7 +63,7 @@ in your [`PATH`](https://en.wikipedia.org/wiki/PATH%5F%28variable%29) or add the | Linux | [32 bit][linux32] | [64 bit][linux64] | | Linux ARM | [32 bit][linuxarm32] | [64 bit][linuxarm64] | | Windows | [32 bit][windows32] | [64 bit][windows64] | -| macOS | | [64 bit][macos] | +| macOS | [ARM][macosarm64] | [64 bit][macos64] | [linux64]: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Linux_64bit.tar.gz [linux32]: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Linux_32bit.tar.gz @@ -71,7 +71,8 @@ in your [`PATH`](https://en.wikipedia.org/wiki/PATH%5F%28variable%29) or add the [linuxarm32]: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Linux_ARMv7.tar.gz [windows64]: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Windows_64bit.zip [windows32]: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Windows_32bit.zip -[macos]: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_macOS_64bit.tar.gz +[macos64]: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_macOS_64bit.tar.gz +[macosarm64]: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_macOS_ARM64.tar.gz > **Deprecation notice**: links in the form > `http://downloads.arduino.cc/arduino-cli/arduino-cli-latest-.tar.bz2` won’t be further updated. That URL @@ -91,7 +92,7 @@ to get the latest nightly build available for the supported platform, use the fo | Linux | [32 bit][linux32-nightly] | [64 bit][linux64-nightly] | | Linux ARM | [32 bit][linuxarm32-nightly] | [64 bit][linuxarm64-nightly] | | Windows | [32 bit][windows32-nightly] | [64 bit][windows64-nightly] | -| macOS | | [64 bit][macos-nightly] | +| macOS | [ARM][macosarm64-nightly] | [64 bit][macos64-nightly] | [linux64-nightly]: https://downloads.arduino.cc/arduino-cli/nightly/arduino-cli_nightly-latest_Linux_64bit.tar.gz [linux32-nightly]: https://downloads.arduino.cc/arduino-cli/nightly/arduino-cli_nightly-latest_Linux_32bit.tar.gz @@ -99,7 +100,8 @@ to get the latest nightly build available for the supported platform, use the fo [linuxarm32-nightly]: https://downloads.arduino.cc/arduino-cli/nightly/arduino-cli_nightly-latest_Linux_ARMv7.tar.gz [windows64-nightly]: https://downloads.arduino.cc/arduino-cli/nightly/arduino-cli_nightly-latest_Windows_64bit.zip [windows32-nightly]: https://downloads.arduino.cc/arduino-cli/nightly/arduino-cli_nightly-latest_Windows_32bit.zip -[macos-nightly]: https://downloads.arduino.cc/arduino-cli/nightly/arduino-cli_nightly-latest_macOS_64bit.tar.gz +[macos64-nightly]: https://downloads.arduino.cc/arduino-cli/nightly/arduino-cli_nightly-latest_macOS_64bit.tar.gz +[macosarm64-nightly]: https://downloads.arduino.cc/arduino-cli/nightly/arduino-cli_nightly-latest_macOS_ARM64.tar.gz > These links return a `302: Found` response, redirecting to latest generated builds by replacing `latest` with the > latest available build date, using the format YYYYMMDD (i.e for 2019-08-06 `latest` is replaced with `20190806` ) From 8a8ad0ed09bba23b3841be4f584ce641aee25241 Mon Sep 17 00:00:00 2001 From: Umberto Baldi <34278123+umbynos@users.noreply.github.com> Date: Wed, 22 Jun 2022 15:49:52 +0200 Subject: [PATCH 9/9] Apply suggestions from code review Co-authored-by: per1234 --- docs/installation.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/installation.md b/docs/installation.md index 95ca7da2936..9677997ac43 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -63,7 +63,8 @@ in your [`PATH`](https://en.wikipedia.org/wiki/PATH%5F%28variable%29) or add the | Linux | [32 bit][linux32] | [64 bit][linux64] | | Linux ARM | [32 bit][linuxarm32] | [64 bit][linuxarm64] | | Windows | [32 bit][windows32] | [64 bit][windows64] | -| macOS | [ARM][macosarm64] | [64 bit][macos64] | +| macOS | | [64 bit][macos64] | +| macOS ARM | | [64 bit][macosarm64] | [linux64]: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Linux_64bit.tar.gz [linux32]: https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Linux_32bit.tar.gz @@ -92,7 +93,8 @@ to get the latest nightly build available for the supported platform, use the fo | Linux | [32 bit][linux32-nightly] | [64 bit][linux64-nightly] | | Linux ARM | [32 bit][linuxarm32-nightly] | [64 bit][linuxarm64-nightly] | | Windows | [32 bit][windows32-nightly] | [64 bit][windows64-nightly] | -| macOS | [ARM][macosarm64-nightly] | [64 bit][macos64-nightly] | +| macOS | | [64 bit][macos64-nightly] | +| macOS ARM | | [64 bit][macosarm64-nightly] | [linux64-nightly]: https://downloads.arduino.cc/arduino-cli/nightly/arduino-cli_nightly-latest_Linux_64bit.tar.gz [linux32-nightly]: https://downloads.arduino.cc/arduino-cli/nightly/arduino-cli_nightly-latest_Linux_32bit.tar.gz