mas/script/bottle

164 lines
3.7 KiB
Text
Raw Normal View History

2019-01-13 07:15:46 +00:00
#!/bin/bash -e
#
# script/bottle
# mas
#
# Builds bottles of mas Homebrew formula for custom tap:
# https://github.com/mas-cli/homebrew-tap
2019-01-13 07:15:46 +00:00
#
# This script should be run _after_ the formula has been updated in Homebrew
#
2019-01-13 07:15:46 +00:00
2021-03-20 18:27:05 +00:00
################################################################################
#
# Variables
#
BUILD_DIR="${PWD}/.build"
BOTTLE_DIR="${BUILD_DIR}/bottles"
2024-03-11 01:32:02 +00:00
CORE_TAP_PATH="$(brew --repository homebrew/core)"
2023-11-25 23:04:18 +00:00
MAS_VERSION=$(script/version)
ROOT_URL="https://github.com/mas-cli/mas/releases/download/v${MAS_VERSION}"
2021-03-20 18:27:05 +00:00
2021-10-25 23:46:56 +00:00
# Supports macOS 10.11 and later
2024-02-18 07:09:44 +00:00
OS_NAMES=(
sonoma
arm64_sonoma
ventura
arm64_ventura
monterey
arm64_monterey
big_sur
arm64_big_sur
catalina
mojave
high_sierra
sierra
el_capitan
)
# Semantic version number split into a list using ugly, bash 3 compatible syntax
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]}
2024-03-11 01:32:02 +00:00
echo "CURRENT_OS_VERSION_MAJOR: ${CURRENT_OS_VERSION_MAJOR}"
echo "CURRENT_OS_VERSION_MINOR: ${CURRENT_OS_VERSION_MINOR}"
case "${CURRENT_OS_VERSION_MAJOR}" in
14)
CURRENT_PLATFORM=sonoma
;;
13)
CURRENT_PLATFORM=ventura
;;
12)
CURRENT_PLATFORM=monterey
;;
11)
CURRENT_PLATFORM=big_sur
;;
10)
CURRENT_PLATFORM=catalina
;;
*)
echo "Unsupported macOS version. This script requires Catalina or better."
exit 1
;;
esac
# Prefix platform with architecture
if [[ "arm64" == "$(uname -m)" ]]; then
CURRENT_PLATFORM="arm64_${CURRENT_PLATFORM}"
2021-03-29 03:05:00 +00:00
fi
2021-03-20 18:27:05 +00:00
echo "CURRENT_PLATFORM: ${CURRENT_PLATFORM}"
2021-03-20 18:27:05 +00:00
# Output filename from build-bottle command
2023-11-25 23:04:18 +00:00
OLD_FILENAME="mas--${MAS_VERSION}.${CURRENT_PLATFORM}.bottle.tar.gz"
2019-01-13 07:15:46 +00:00
2021-03-20 18:27:05 +00:00
################################################################################
#
# Preflight checks
#
2019-01-13 07:15:46 +00:00
# Uninstall if necessary
brew remove mas 2>/dev/null || true
brew remove mas-cli/tap/mas 2>/dev/null || true
2019-01-13 07:15:46 +00:00
# Uninstall if still found on path
2021-03-21 23:50:09 +00:00
if command -v mas >/dev/null; then
script/uninstall || true
fi
# Use formula from custom tap
brew tap mas-cli/tap
brew update
2021-11-05 16:45:35 +00:00
# Audit formula
2021-11-05 16:43:59 +00:00
brew audit --strict mas-cli/tap/mas
2021-11-05 16:45:35 +00:00
brew style mas-cli/tap/mas
2021-03-20 18:27:05 +00:00
################################################################################
#
# Build the formula for the current macOS version and architecture.
#
2023-11-25 23:04:18 +00:00
echo "==> 🍼 Bottling mas ${MAS_VERSION} for: ${OS_NAMES[*]}"
brew install --build-bottle mas-cli/tap/mas
2019-01-13 07:15:46 +00:00
# Generate bottle do block, dropping last 2 lines
2024-03-11 01:32:02 +00:00
brew bottle --verbose --no-rebuild --root-url="${ROOT_URL}" mas-cli/tap/mas
if ! test -e "${OLD_FILENAME}"; then
echo "Bottle not found: ${OLD_FILENAME}"
echo "If an old version is showing in the log and filename, then make sure the formula has been updated in:"
2024-03-11 01:32:02 +00:00
echo "${CORE_TAP_PATH}"
exit 1
fi
2021-03-20 19:11:38 +00:00
SHA256=$(shasum --algorithm 256 "${OLD_FILENAME}" | cut -f 1 -d ' ' -)
2019-01-13 07:48:55 +00:00
2024-03-11 01:32:02 +00:00
mkdir -p "${BOTTLE_DIR}"
2019-01-13 07:48:55 +00:00
# Start of bottle block
2021-03-21 23:50:09 +00:00
BOTTLE_BLOCK=$(
cat <<-EOF
2021-03-20 19:11:38 +00:00
bottle do
2024-03-11 01:32:02 +00:00
root_url "${ROOT_URL}"
2021-03-20 18:27:05 +00:00
EOF
)
2021-03-20 18:27:05 +00:00
################################################################################
#
# Copy the bottle for all macOS version + architecture combinations.
#
2019-01-13 07:48:55 +00:00
# Fix filename
2021-11-08 03:13:01 +00:00
for os in "${OS_NAMES[@]}"; do
2023-11-25 23:04:18 +00:00
new_filename="mas-${MAS_VERSION}.${os}.bottle.tar.gz"
2021-03-21 23:50:09 +00:00
cp -v "${OLD_FILENAME}" "${BOTTLE_DIR}/${new_filename}"
2021-03-21 23:50:09 +00:00
# Append each os
# BOTTLE_BLOCK="$(printf "${BOTTLE_BLOCK}\n sha256 cellar: :any_skip_relocation, %-15s %s" "${os}:" "${SHA256}")"
2024-03-11 01:32:02 +00:00
BOTTLE_BLOCK="${BOTTLE_BLOCK}"$(
2021-03-21 23:50:09 +00:00
cat <<-EOF
2024-03-11 01:32:02 +00:00
sha256 cellar: :any_skip_relocation, ${os}: "${SHA256}"
2021-03-20 18:27:05 +00:00
EOF
2021-03-21 23:50:09 +00:00
)
2019-01-13 07:48:55 +00:00
done
# End of bottle block
2021-03-21 23:50:09 +00:00
BOTTLE_BLOCK=$(
cat <<-EOF
2021-03-20 19:11:38 +00:00
end
2021-03-20 18:27:05 +00:00
EOF
)
2021-03-20 19:11:38 +00:00
rm "${OLD_FILENAME}"
ls -l "${BOTTLE_DIR}"
echo "${BOTTLE_BLOCK}"
brew remove mas-cli/tap/mas