#!/bin/bash -e # # script/bottle # mas # # Builds bottles of mas Homebrew formula for custom tap: # https://github.com/mas-cli/homebrew-tap # ################################################################################ # # Variables # BUILD_DIR="$PWD/build" BOTTLE_DIR="$BUILD_DIR/bottles" VERSION=$(script/version) ROOT_URL="https://dl.bintray.com/phatblat/mas-bottles" # Supports macOS versions 11.0 (arm64 & x86_64), 10.15, 10.14, 10.13, 10.12, 10.11 OS_NAMES=(arm64_big_sur big_sur catalina mojave high_sierra sierra el_capitan) # Semantic version number split into a list using Ugly, bash 3 compatible syntax # https://github.com/koalaman/shellcheck/wiki/SC2207 IFS=" " read -r -a CURRENT_OS_VERSION <<< "$(sw_vers -productVersion | sed 's/\./ /g'))" CURRENT_OS_VERSION_MAJOR=${CURRENT_OS_VERSION[0]} CURRENT_OS_VERSION_MINOR=${CURRENT_OS_VERSION[1]} echo "CURRENT_OS_VERSION_MAJOR: $CURRENT_OS_VERSION_MAJOR" echo "CURRENT_OS_VERSION_MINOR: $CURRENT_OS_VERSION_MINOR" if [[ ${CURRENT_OS_VERSION_MAJOR} == "11" ]]; then # Big Sur if [[ "x86_64" == "$(uname -m)" ]]; then CURRENT_PLATFORM=big_sur else CURRENT_PLATFORM=arm64_big_sur fi elif [[ ${CURRENT_OS_VERSION_MAJOR} == "10" && ${CURRENT_OS_VERSION_MINOR} == "15" ]]; then CURRENT_PLATFORM=catalina else echo "Unsupported macOS version. This script requires Catalina or better." exit 1 fi echo "CURRENT_PLATFORM: ${CURRENT_PLATFORM}" # Output filename from build-bottle command OLD_FILENAME="mas--${VERSION}.${CURRENT_PLATFORM}.bottle.tar.gz" ################################################################################ # # Preflight checks # # Ensure core formula isn't shadowed by custom tap brew tap --list-pinned | grep mas-cli/tap && brew tap-unpin mas-cli/tap # Uninstall if necessary if brew ls --versions mas >/dev/null; then brew unlink mas fi # Uninstall if still found on path if command -v mas >/dev/null; then script/uninstall || true # ignore failure fi # Purge the Carthage cache to avoid this error from Homebrew sandboxing: # A shell task (/usr/bin/env git checkout --quiet --force 0.15.0 (launched in /Users/ben/Library/Caches/org.carthage.CarthageKit/dependencies/Commandant)) failed with exit code 128: # fatal: Unable to create '/Users/ben/Library/Caches/org.carthage.CarthageKit/dependencies/Commandant/./index.lock': Operation not permitted rm -rf ~/Library/Caches/org.carthage.CarthageKit ################################################################################ # # Build the formula for the current macOS version and architecture. # echo "==> 🍼 Bottling mas ${VERSION} for: ${OS_NAMES[*]}" brew install --build-bottle mas # Generate bottle do block, dropping last 2 lines brew bottle --verbose --no-rebuild --root-url=$ROOT_URL mas SHA256=$(shasum --algorithm 256 "${OLD_FILENAME}" | cut -f 1 -d ' ' -) mkdir -p "$BOTTLE_DIR" # Start of bottle block BOTTLE_BLOCK=$( cat <<-EOF bottle do root_url "$ROOT_URL" EOF ) ################################################################################ # # Copy the bottle for all macOS version + architecture combinations. # # Fix filename for os in ${OS_NAMES[*]}; do new_filename="mas-${VERSION}.${os}.bottle.tar.gz" cp -v "${OLD_FILENAME}" "${BOTTLE_DIR}/${new_filename}" # Append each os # BOTTLE_BLOCK="$(printf "${BOTTLE_BLOCK}\n sha256 cellar: :any, %-15s %s" "${os}:" "${SHA256}")" BOTTLE_BLOCK="$BOTTLE_BLOCK"$( cat <<-EOF sha256 cellar: :any, $os: "$SHA256" EOF ) done # End of bottle block BOTTLE_BLOCK=$( cat <<-EOF end EOF ) rm "${OLD_FILENAME}" ls -l "${BOTTLE_DIR}" echo "${BOTTLE_BLOCK}"