From 280d941705d57c99d0af9d1fa8999789edf247d5 Mon Sep 17 00:00:00 2001 From: Patrick Sanders Date: Thu, 26 Aug 2021 13:34:12 -0700 Subject: [PATCH] feat: Add script to build a macOS installer (#83) --- .github/workflows/release.yml | 61 +++++++ .gitignore | 7 +- build/.goreleaser.yml | 4 + build/build_package.sh | 149 ++++++++++++++++++ build/package/macos/application/uninstall.sh | 46 ++++++ build/package/macos/darwin/Distribution.xml | 29 ++++ build/package/macos/darwin/Resources/LICENSE | 1 + .../darwin/Resources/Netflix-OSS-Logo.png | Bin 0 -> 2217 bytes .../package/macos/darwin/Resources/banner.png | Bin 0 -> 17433 bytes .../macos/darwin/Resources/conclusion.html | 50 ++++++ .../macos/darwin/Resources/welcome.html | 25 +++ .../package/macos/darwin/scripts/postinstall | 21 +++ 12 files changed, 390 insertions(+), 3 deletions(-) create mode 100755 build/build_package.sh create mode 100644 build/package/macos/application/uninstall.sh create mode 100755 build/package/macos/darwin/Distribution.xml create mode 120000 build/package/macos/darwin/Resources/LICENSE create mode 100644 build/package/macos/darwin/Resources/Netflix-OSS-Logo.png create mode 100644 build/package/macos/darwin/Resources/banner.png create mode 100644 build/package/macos/darwin/Resources/conclusion.html create mode 100644 build/package/macos/darwin/Resources/welcome.html create mode 100755 build/package/macos/darwin/scripts/postinstall diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c2b3e7c..7fc653b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -41,3 +41,64 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + - + name: Store Binaries + uses: actions/upload-artifact@v2 + with: + name: binaries + path: dist/bin/ + retention-days: 5 + package: + needs: goreleaser + runs-on: macos-latest + environment: Signing + steps: + - + name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + - + name: Retrieve Binaries + uses: actions/download-artifact@v2 + with: + name: binaries + path: dist/bin/ + - + name: Import Signing Certificates + uses: apple-actions/import-codesign-certs@v1 + with: + p12-file-base64: ${{ secrets.CERTIFICATES_P12 }} + p12-password: ${{ secrets.CERTIFICATES_P12_PASSWORD }} + - + name: Build, Sign, & Notarize Package + env: + AC_PASSWORD: ${{ secrets.AC_PASSWORD }} + VERSION: ${{ env.GITHUB_REF }} + run: | + ./build/build_package.sh + - + name: Store Package + uses: actions/upload-artifact@v2 + with: + name: package + path: dist/macos/*.pkg + upload: + needs: package + runs-on: ubuntu-latest + steps: + - + name: Retrieve Package + uses: actions/download-artifact@v2 + with: + name: package + path: dist/macos/ + - + name: Upload package to release + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: dist/macos/*.pkg + file_glob: true + tag: ${{ github.ref }} + overwrite: true \ No newline at end of file diff --git a/.gitignore b/.gitignore index d49aacd..bf999c6 100644 --- a/.gitignore +++ b/.gitignore @@ -13,11 +13,12 @@ dist/ # Output of the go coverage tool, specifically when used with LiteIDE *.out -# Generated source files -pkged.go - # Dependency directories (remove the comment below to include it) # vendor/ # IDE configs .idea/ + +# Build files +build/package/macos/tmp/ +build/package/macos/application/bin/ diff --git a/build/.goreleaser.yml b/build/.goreleaser.yml index f3a3677..74de77b 100644 --- a/build/.goreleaser.yml +++ b/build/.goreleaser.yml @@ -18,6 +18,8 @@ builds: -X github.com/netflix/weep/internal/metadata.Commit={{.CommitDate}} -X github.com/netflix/weep/internal/metadata.Date={{.Date}} mod_timestamp: '{{ .CommitTimestamp }}' + no_unique_dist_dir: true + binary: 'bin/{{ .Target }}/weep' - id: demo env: @@ -35,6 +37,8 @@ builds: -X github.com/netflix/weep/metadata.Commit={{.CommitDate}} -X github.com/netflix/weep/metadata.Date={{.Date}} mod_timestamp: '{{ .CommitTimestamp }}' + no_unique_dist_dir: true + binary: 'bin/demo/{{ .Target }}/weep' archives: - builds: diff --git a/build/build_package.sh b/build/build_package.sh new file mode 100755 index 0000000..74c56de --- /dev/null +++ b/build/build_package.sh @@ -0,0 +1,149 @@ +#!/usr/bin/env bash +############################################################################## +# Build a macOS installer package containing a weep universal binary +# Author: Patrick Sanders +############################################################################## +set -euo pipefail + +BASE_DIR="build/package/macos" +APP_DIR="$BASE_DIR/application" +BIN_DIR="$APP_DIR/bin" +BUILD_DIR="$BASE_DIR/tmp" +PKG_DIR="$BUILD_DIR/darwinpkg" +OUT_DIR="dist/macos" +VERSION=${VERSION:=dev} +FINAL_PACKAGE="$OUT_DIR/weep-installer-macos-$VERSION.pkg" + +rm -rf "$BIN_DIR" +rm -rf "$BUILD_DIR" +mkdir -p "$BIN_DIR" +mkdir -p "$OUT_DIR" +mkdir -p "$PKG_DIR" + +cp -r "$BASE_DIR/darwin" "$BUILD_DIR/" +chmod -R 755 "$BUILD_DIR/darwin/scripts" +chmod 755 "$BUILD_DIR/darwin/Distribution.xml" + +printf "🟢 starting build for %s\n" "$FINAL_PACKAGE" + +function prep_package() { + # Prepare package structure + mkdir -p "$BUILD_DIR/darwinpkg/Library/weep" + cp -a "$APP_DIR/." "$BUILD_DIR/darwinpkg/Library/weep" + chmod -R 755 "$BUILD_DIR/darwinpkg/Library/weep" + + # Replace tokens in package files + sed -i '' -e "s/__VERSION__/$VERSION/g" ${BUILD_DIR}/darwin/Resources/*.html +} + +function combine_binaries() { + printf "🦾 creating universal binary..." + output=$1 + bin1=$2 + bin2=$3 + lipo -create -output "$output" "$bin1" "$bin2" + printf " done ✅ \n" +} + +function sign_binary() { + printf "🔏 signing binary..." + binary=$1 + codesign \ + --options runtime \ + --sign "Developer ID Application: Netflix, Inc." \ + --force \ + --timestamp=http://timestamp.apple.com/ts01 \ + "$binary" > /dev/null 2>&1 + printf " done ✅ \n" +} + +function build_package() { + printf "📦 building package..." + pkgbuild --identifier "com.netflix.weep" \ + --version "$VERSION" \ + --scripts "$BUILD_DIR/darwin/scripts" \ + --root "$BUILD_DIR/darwinpkg" \ + weep.pkg > /dev/null 2>&1 + + productbuild --distribution "$BUILD_DIR/darwin/Distribution.xml" \ + --resources "$BUILD_DIR/darwin/Resources" \ + --package-path "$BUILD_DIR/package" \ + "$OUT_DIR/weep-$VERSION-unsigned.pkg" > /dev/null 2>&1 + printf " done ✅ \n" +} + +function sign_package() { + printf "🔏 signing package..." + productsign --sign "Developer ID Installer: Netflix, Inc." \ + "$OUT_DIR/weep-$VERSION-unsigned.pkg" \ + "$FINAL_PACKAGE" > /dev/null 2>&1 + + pkgutil --check-signature "$FINAL_PACKAGE" > /dev/null 2>&1 + printf " done ✅ \n" +} + +function notarize() { + printf "🔐 notarizing package..." + output=$(xcrun altool \ + --notarize-app \ + --primary-bundle-id "com.netflix.weep" \ + --username "psanders@netflix.com" \ + --password "$AC_PASSWORD" \ + --file "$FINAL_PACKAGE") + printf " done ✅ \n" + request_id=$(echo "$output" | grep RequestUUID | awk '{ print $3 }') + printf "💡 notarize request id is %s\n" "$request_id" + # give the server side a few seconds to sort things out + sleep 3 + while true; do + status=$(check_notarize_status "$request_id") + printf "👀 current status \"%s\"" "$status" + case "$status" in + "success") + printf ", done ✅ \n" + break + ;; + "failure") + printf ", exiting! 🔴\n" + exit 1 + ;; + *) + printf ", not ready yet 😴\n" + sleep 5 + ;; + esac + done +} + +function check_notarize_status() { + request_id=$1 + output=$(xcrun altool \ + --notarization-info "$request_id" \ + --username "psanders@netflix.com" \ + --password "$AC_PASSWORD") + status=$(echo "$output" | grep "Status:" | awk '{ for (i=2; i<=NF; i++) printf("%s ", $i) }' | awk '{$1=$1;print}') + echo "$status" +} + +function staple() { + printf "📎 stapling..." + xcrun stapler staple "$FINAL_PACKAGE" > /dev/null 2>&1 + printf " done ✅ \n" +} + +function cleanup() { + rm dist/macos/*-unsigned.pkg +} + +combine_binaries "$BIN_DIR/weep-universal" \ + dist/bin/darwin_amd64/weep \ + dist/bin/darwin_arm64/weep +sign_binary "$BIN_DIR/weep-universal" +prep_package +build_package +sign_package +notarize +staple +cleanup + +printf "🙌 successfully built and notarized %s 🎉 \n" "$FINAL_PACKAGE" diff --git a/build/package/macos/application/uninstall.sh b/build/package/macos/application/uninstall.sh new file mode 100644 index 0000000..9723778 --- /dev/null +++ b/build/package/macos/application/uninstall.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +#Check running user +if (( $EUID != 0 )); then + echo "Please run as root." + exit +fi + +echo "Welcome to the Weep Uninstaller" +echo "The following packages will be REMOVED:" +echo " weep" +while true; do + read -p "Do you wish to continue [Y/n]?" answer + [[ $answer == "y" || $answer == "Y" || $answer == "" ]] && break + [[ $answer == "n" || $answer == "N" ]] && exit 0 + echo "Please answer with 'y' or 'n'" +done + + +echo "Uninstalling Weep" +# remove binary symlink +if rm -rf "/usr/local/bin/weep" +then + echo "[1/3] [DONE] Successfully deleted shortcut links" +else + echo "[1/3] [ERROR] Could not delete shortcut links" >&2 +fi + +#forget from pkgutil +if pkgutil --forget "com.netflix.weep" > /dev/null 2>&1 +then + echo "[2/3] [DONE] Successfully deleted application information" +else + echo "[2/3] [ERROR] Could not delete application information" >&2 +fi + +#remove application source distribution +if rm -rf "/Library/weep" +then + echo "[3/3] [DONE] Successfully deleted application" +else + echo "[3/3] [ERROR] Could not delete application" >&2 +fi + +echo "Application uninstall process finished" +exit 0 diff --git a/build/package/macos/darwin/Distribution.xml b/build/package/macos/darwin/Distribution.xml new file mode 100755 index 0000000..9b5b5f0 --- /dev/null +++ b/build/package/macos/darwin/Distribution.xml @@ -0,0 +1,29 @@ + + + Weep + + + + + + + + + + + + + + + weep.pkg + diff --git a/build/package/macos/darwin/Resources/LICENSE b/build/package/macos/darwin/Resources/LICENSE new file mode 120000 index 0000000..2a64f9d --- /dev/null +++ b/build/package/macos/darwin/Resources/LICENSE @@ -0,0 +1 @@ +../../../../../LICENSE \ No newline at end of file diff --git a/build/package/macos/darwin/Resources/Netflix-OSS-Logo.png b/build/package/macos/darwin/Resources/Netflix-OSS-Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d0e8275cd3b6c1e6c996e5cc88434771180934c9 GIT binary patch literal 2217 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�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 literal 0 HcmV?d00001 diff --git a/build/package/macos/darwin/Resources/conclusion.html b/build/package/macos/darwin/Resources/conclusion.html new file mode 100644 index 0000000..ec159ba --- /dev/null +++ b/build/package/macos/darwin/Resources/conclusion.html @@ -0,0 +1,50 @@ + + + + + Install Weep + + + +
+

Thank you for installing Weep.

+

Run Weep

+

Open a new terminal and run the following command to get started with Weep:

+   $ weep --help +
+
+
+

Uninstall Weep

+

Run the following command to uninstall Weep:
+
  $ sudo /Library/weep/uninstall.sh
+

+
+ + + diff --git a/build/package/macos/darwin/Resources/welcome.html b/build/package/macos/darwin/Resources/welcome.html new file mode 100644 index 0000000..16866bd --- /dev/null +++ b/build/package/macos/darwin/Resources/welcome.html @@ -0,0 +1,25 @@ + + + + + Install Weep + + + +
+

Weep, the ConsoleMe CLI

+

This will install Weep __VERSION__ on your computer. You will be guided through the steps necessary to install this software.

+

Weep is open source software written and maintained with ❤️ and ☕️ by Netflix and our awesome ✨contributors✨. Interested in getting involved? Check out the project on GitHub!

+
+ + diff --git a/build/package/macos/darwin/scripts/postinstall b/build/package/macos/darwin/scripts/postinstall new file mode 100755 index 0000000..56fcdfa --- /dev/null +++ b/build/package/macos/darwin/scripts/postinstall @@ -0,0 +1,21 @@ +#!/bin/bash + +set -euo pipefail + +#Parameters +PRODUCT_HOME=/Library/weep +APPLICATION_FILE_PATH=bin/weep-universal + +echo "Post installation process started" + +#Change permissions in home directory +echo "Change permissions in product home" +pushd "$PRODUCT_HOME" +chmod -R 755 . +[ -d /usr/local/bin ] || mkdir /usr/local/bin + +#Add application shortcut to /usr/local/bin +rm -f /usr/local/bin/weep +ln -s ${PRODUCT_HOME}/${APPLICATION_FILE_PATH} /usr/local/bin/weep +echo "Post installation process finished" +popd