From 082c7a552ba65659b8441218b1e67b4365e2c20a Mon Sep 17 00:00:00 2001 From: Mya Date: Wed, 15 Dec 2021 16:26:59 -0700 Subject: [PATCH] feat: support darwin arm64 (#10239) --- .circleci/config.yml | 34 +++++++++--- Makefile | 18 +++++-- docs/NIGHTLIES.md | 19 +++---- scripts/mac-signing.sh | 119 ++++++++++++++++++++++------------------- 4 files changed, 113 insertions(+), 77 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index c7821fab6..07ae54f15 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -206,7 +206,7 @@ jobs: - package-build: type: windows nightly: << parameters.nightly >> - darwin-package: + darwin-amd64-package: parameters: nightly: type: boolean @@ -214,7 +214,17 @@ jobs: executor: go-1_17 steps: - package-build: - type: darwin + type: darwin-amd64 + nightly: << parameters.nightly >> + darwin-arm64-package: + parameters: + nightly: + type: boolean + default: false + executor: go-1_17 + steps: + - package-build: + type: darwin-arm64 nightly: << parameters.nightly >> i386-package: parameters: @@ -453,7 +463,10 @@ workflows: - 'windows-package': requires: - 'test-go-windows' - - 'darwin-package': + - 'darwin-amd64-package': + requires: + - 'test-go-mac' + - 'darwin-arm64-package': requires: - 'test-go-mac' - 'i386-package': @@ -509,7 +522,8 @@ workflows: - 'amd64-package' - 'mipsel-package' - 'mips-package' - - 'darwin-package' + - 'darwin-amd64-package' + - 'darwin-arm64-package' - 'windows-package' - 'static-package' - 'arm64-package' @@ -562,8 +576,13 @@ workflows: nightly: true requires: - 'test-go-windows' - - 'darwin-package': - name: 'darwin-package-nightly' + - 'darwin-amd64-package': + name: 'darwin-amd64-package-nightly' + nightly: true + requires: + - 'test-go-mac' + - 'darwin-arm64-package': + name: 'darwin-arm64-package-nightly' nightly: true requires: - 'test-go-mac' @@ -626,7 +645,8 @@ workflows: - 'amd64-package-nightly' - 'mipsel-package-nightly' - 'mips-package-nightly' - - 'darwin-package-nightly' + - 'darwin-amd64-package-nightly' + - 'darwin-arm64-package-nightly' - 'windows-package-nightly' - 'static-package-nightly' - 'arm64-package-nightly' diff --git a/Makefile b/Makefile index d6471a3c4..7ef40b122 100644 --- a/Makefile +++ b/Makefile @@ -284,12 +284,17 @@ windows += windows_i386.zip windows_amd64.zip .PHONY: windows windows: @ echo $(windows) -darwin += darwin_amd64.tar.gz -.PHONY: darwin -darwin: - @ echo $(darwin) +darwin-amd64 += darwin_amd64.tar.gz +.PHONY: darwin-amd64 +darwin-amd64: + @ echo $(darwin-amd64) -include_packages := $(mips) $(mipsel) $(arm64) $(amd64) $(static) $(armel) $(armhf) $(s390x) $(ppc64le) $(i386) $(windows) $(darwin) +darwin-arm64 += darwin_arm64.tar.gz +.PHONY: darwin-arm64 +darwin-arm64: + @ echo $(darwin-arm64) + +include_packages := $(mips) $(mipsel) $(arm64) $(amd64) $(static) $(armel) $(armhf) $(s390x) $(ppc64le) $(i386) $(windows) $(darwin-amd64) $(darwin-arm64) .PHONY: package package: $(include_packages) @@ -401,6 +406,9 @@ windows_amd64.zip: export GOARCH := amd64 darwin_amd64.tar.gz: export GOOS := darwin darwin_amd64.tar.gz: export GOARCH := amd64 +darwin_arm64.tar.gz: export GOOS := darwin +darwin_arm64.tar.gz: export GOARCH := arm64 + windows_i386.zip: export GOOS := windows windows_i386.zip: export GOARCH := 386 diff --git a/docs/NIGHTLIES.md b/docs/NIGHTLIES.md index a11b2bdfe..459124188 100644 --- a/docs/NIGHTLIES.md +++ b/docs/NIGHTLIES.md @@ -5,15 +5,16 @@ These builds are generated from the master branch each night: | DEB | RPM | TAR GZ | ZIP | | --------------- | --------------- | ------------------------------| --- | -| [amd64.deb](https://dl.influxdata.com/telegraf/nightlies/telegraf_nightly_amd64.deb) | [aarch64.rpm](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly.aarch64.rpm) | [darwin_amd64.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_darwin_amd64.tar.gz) | [windows_amd64.zip](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_windows_amd64.zip) | -| [arm64.deb](https://dl.influxdata.com/telegraf/nightlies/telegraf_nightly_arm64.deb) | [armel.rpm](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly.armel.rpm) | [freebsd_amd64.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_freebsd_amd64.tar.gz) | [windows_i386.zip](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_windows_i386.zip) | -| [armel.deb](https://dl.influxdata.com/telegraf/nightlies/telegraf_nightly_armel.deb) | [armv6hl.rpm](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly.armv6hl.rpm) | [freebsd_armv7.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_freebsd_armv7.tar.gz) | | -| [armhf.deb](https://dl.influxdata.com/telegraf/nightlies/telegraf_nightly_armhf.deb) | [i386.rpm](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly.i386.rpm) | [freebsd_i386.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_freebsd_i386.tar.gz) | | -| [i386.deb](https://dl.influxdata.com/telegraf/nightlies/telegraf_nightly_i386.deb) | [ppc64le.rpm](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly.ppc64le.rpm) | [linux_amd64.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_linux_amd64.tar.gz) | | -| [mips.deb](https://dl.influxdata.com/telegraf/nightlies/telegraf_nightly_mips.deb) | [s390x.rpm](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly.s390x.rpm) | [linux_arm64.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_linux_arm64.tar.gz) | | -| [mipsel.deb](https://dl.influxdata.com/telegraf/nightlies/telegraf_nightly_mipsel.deb) | [x86_64.rpm](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly.x86_64.rpm) | [linux_armel.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_linux_armel.tar.gz) | | -| [ppc64el.deb](https://dl.influxdata.com/telegraf/nightlies/telegraf_nightly_ppc64el.deb) | | [linux_armhf.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_linux_armhf.tar.gz) | | -| [s390x.deb](https://dl.influxdata.com/telegraf/nightlies/telegraf_nightly_s390x.deb) | | [linux_i386.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_linux_i386.tar.gz) | | +| [amd64.deb](https://dl.influxdata.com/telegraf/nightlies/telegraf_nightly_amd64.deb) | [aarch64.rpm](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly.aarch64.rpm) | [darwin_amd64.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_darwin_amd64.tar.gz) | [windows_amd64.zip](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_windows_amd64.zip) | +| [arm64.deb](https://dl.influxdata.com/telegraf/nightlies/telegraf_nightly_arm64.deb) | [armel.rpm](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly.armel.rpm) | [darwin_arm64.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_darwin_arm64.tar.gz) | [windows_i386.zip](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_windows_i386.zip) | +| [armel.deb](https://dl.influxdata.com/telegraf/nightlies/telegraf_nightly_armel.deb) | [armv6hl.rpm](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly.armv6hl.rpm) | [freebsd_amd64.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_freebsd_amd64.tar.gz) | | +| [armhf.deb](https://dl.influxdata.com/telegraf/nightlies/telegraf_nightly_armhf.deb) | [i386.rpm](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly.i386.rpm) | [freebsd_armv7.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_freebsd_armv7.tar.gz) | | +| [i386.deb](https://dl.influxdata.com/telegraf/nightlies/telegraf_nightly_i386.deb) | [ppc64le.rpm](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly.ppc64le.rpm) | [freebsd_i386.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_freebsd_i386.tar.gz) | | +| [mips.deb](https://dl.influxdata.com/telegraf/nightlies/telegraf_nightly_mips.deb) | [s390x.rpm](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly.s390x.rpm) | [linux_amd64.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_linux_amd64.tar.gz) | | +| [mipsel.deb](https://dl.influxdata.com/telegraf/nightlies/telegraf_nightly_mipsel.deb) | [x86_64.rpm](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly.x86_64.rpm) | [linux_arm64.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_linux_arm64.tar.gz) | | +| [ppc64el.deb](https://dl.influxdata.com/telegraf/nightlies/telegraf_nightly_ppc64el.deb) | | [linux_armel.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_linux_armel.tar.gz) | | +| [s390x.deb](https://dl.influxdata.com/telegraf/nightlies/telegraf_nightly_s390x.deb) | | [linux_armhf.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_linux_armhf.tar.gz) | | +| | | [linux_i386.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_linux_i386.tar.gz) | | | | | [linux_mips.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_linux_mips.tar.gz) | | | | | [linux_mipsel.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_linux_mipsel.tar.gz) | | | | | [linux_ppc64le.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_linux_ppc64le.tar.gz) | | diff --git a/scripts/mac-signing.sh b/scripts/mac-signing.sh index dc0630fc8..afec6e79c 100644 --- a/scripts/mac-signing.sh +++ b/scripts/mac-signing.sh @@ -4,69 +4,76 @@ sudo security import MacCertificate.p12 -k /Library/Keychains/System.keychain -P base64 -D -o AppleSigningAuthorityCertificate.cer <<< $AppleSigningAuthorityCertificate sudo security import AppleSigningAuthorityCertificate.cer -k '/Library/Keychains/System.keychain' -A -# Extract the built mac binary and sign it. cd dist -tarFile=$(find . -name "*darwin_amd64.tar*") -tar -xzvf $tarFile -baseName=$(basename $tarFile .tar.gz) -cd $(find . -name "*telegraf-*" -type d) -cd usr/bin -codesign -s "Developer ID Application: InfluxData Inc. (M7DN9H35QT)" --timestamp --options=runtime telegraf -codesign -v telegraf +amdFile=$(find . -name "*darwin_amd64.tar*") +armFile=$(find . -name "*darwin_arm64.tar*") +macFiles=(${amdFile} ${armFile}) -# Reset back out to the main directory. -cd -cd project/dist -extractedFolder=$(find . -name "*telegraf-*" -type d) -# Sign the 'telegraf entry' script, which is required to open Telegraf upon opening the .app bundle. -codesign -s "Developer ID Application: InfluxData Inc. (M7DN9H35QT)" --timestamp --options=runtime ../scripts/telegraf_entry_mac -codesign -v ../scripts/telegraf_entry_mac +for tarFile in ${macFiles[@]}; +do + # Extract the built mac binary and sign it. + tar -xzvf $tarFile + baseName=$(basename $tarFile .tar.gz) + cd $(find . -name "*telegraf-*" -type d) + cd usr/bin + codesign -s "Developer ID Application: InfluxData Inc. (M7DN9H35QT)" --timestamp --options=runtime telegraf + codesign -v telegraf -# Create the .app bundle. -mkdir Telegraf -cd Telegraf -mkdir Contents -cd Contents -mkdir MacOS -mkdir Resources -cd ../.. -cp ../info.plist Telegraf/Contents -cp -R "$extractedFolder"/ Telegraf/Contents/Resources -cp ../scripts/telegraf_entry_mac Telegraf/Contents/MacOS -cp ../assets/icon.icns Telegraf/Contents/Resources -chmod +x Telegraf/Contents/MacOS/telegraf_entry_mac -mv Telegraf Telegraf.app + # Reset back out to the main directory. + cd + cd project/dist + extractedFolder=$(find . -name "*telegraf-*" -type d) -# Sign the entire .app bundle, and wrap it in a DMG. -codesign -s "Developer ID Application: InfluxData Inc. (M7DN9H35QT)" --timestamp --options=runtime --deep --force Telegraf.app -hdiutil create -size 500m -volname Telegraf -srcfolder Telegraf.app "$baseName".dmg -codesign -s "Developer ID Application: InfluxData Inc. (M7DN9H35QT)" --timestamp --options=runtime "$baseName".dmg + # Sign the 'telegraf entry' script, which is required to open Telegraf upon opening the .app bundle. + codesign -s "Developer ID Application: InfluxData Inc. (M7DN9H35QT)" --timestamp --options=runtime ../scripts/telegraf_entry_mac + codesign -v ../scripts/telegraf_entry_mac -# Send the DMG to be notarized. -uuid=$(xcrun altool --notarize-app --primary-bundle-id "com.influxdata.telegraf" --username "$AppleUsername" --password "$ApplePassword" --file "$baseName".dmg | awk '/RequestUUID/ { print $NF; }') -echo $uuid -if [[ $uuid == "" ]]; then - echo "Could not upload for notarization." - exit 1 -fi + # Create the .app bundle. + mkdir Telegraf + cd Telegraf + mkdir Contents + cd Contents + mkdir MacOS + mkdir Resources + cd ../.. + cp ../info.plist Telegraf/Contents + cp -R "$extractedFolder"/ Telegraf/Contents/Resources + cp ../scripts/telegraf_entry_mac Telegraf/Contents/MacOS + cp ../assets/icon.icns Telegraf/Contents/Resources + chmod +x Telegraf/Contents/MacOS/telegraf_entry_mac + mv Telegraf Telegraf.app -# Wait until the status returns something other than 'in progress'. -request_status="in progress" -while [[ "$request_status" == "in progress" ]]; do - sleep 10 - request_status=$(xcrun altool --notarization-info $uuid --username "$AppleUsername" --password "$ApplePassword" 2>&1 | awk -F ': ' '/Status:/ { print $2; }' ) -done + # Sign the entire .app bundle, and wrap it in a DMG. + codesign -s "Developer ID Application: InfluxData Inc. (M7DN9H35QT)" --timestamp --options=runtime --deep --force Telegraf.app + hdiutil create -size 500m -volname Telegraf -srcfolder Telegraf.app "$baseName".dmg + codesign -s "Developer ID Application: InfluxData Inc. (M7DN9H35QT)" --timestamp --options=runtime "$baseName".dmg -if [[ $request_status != "success" ]]; then - echo "Failed to notarize." - exit 1 -fi + # Send the DMG to be notarized. + uuid=$(xcrun altool --notarize-app --primary-bundle-id "com.influxdata.telegraf" --username "$AppleUsername" --password "$ApplePassword" --file "$baseName".dmg | awk '/RequestUUID/ { print $NF; }') + echo $uuid + if [[ $uuid == "" ]]; then + echo "Could not upload for notarization." + exit 1 + fi -# Attach the notarization to the DMG. -xcrun stapler staple "$baseName".dmg -rm -rf Telegraf.app -rm -rf $extractedFolder -ls + # Wait until the status returns something other than 'in progress'. + request_status="in progress" + while [[ "$request_status" == "in progress" ]]; do + sleep 10 + request_status=$(xcrun altool --notarization-info $uuid --username "$AppleUsername" --password "$ApplePassword" 2>&1 | awk -F ': ' '/Status:/ { print $2; }' ) + done -echo "Signed and notarized!" + if [[ $request_status != "success" ]]; then + echo "Failed to notarize." + exit 1 + fi + + # Attach the notarization to the DMG. + xcrun stapler staple "$baseName".dmg + rm -rf Telegraf.app + rm -rf $extractedFolder + ls + + echo "$tarFile Signed and notarized!" +done \ No newline at end of file