#!/bin/bash -ex # # script/brew_core_update # mas # # Updates mas Homebrew core formula: # https://github.com/Homebrew/homebrew-core/blob/master/Formula/mas.rb # # brew bump-formula-pr --help # CORE_TAP_PATH="$(brew --repository homebrew/core)" CORE_MAS_FORMULA_FILE="${CORE_TAP_PATH}/Formula/m/mas.rb" PROJECT_PATH="$(git rev-parse --show-toplevel)" LOCAL_MAS_FORMULA_PATH="${PROJECT_PATH}/Homebrew/mas.rb" function usage { echo "Usage: brew_core_update [-d] v0.0 [sha1_hash]" echo " -d option enables dry run mode" echo " version will be inferred using version script if not provided" echo " sha will be inferred from the current commit if not provided" exit 1 } # Max 3 arguments if [[ $# -gt 3 ]]; then usage 1>&2 fi echo='' dry_run='' # Detect presence of `-d` dry run option while getopts "d" o; do case "${o}" in d) echo='echo (DRY-RUN):' dry_run='-d' ;; *) usage 1>&2 ;; esac done shift $((OPTIND - 1)) # DRY_RUN environment variable # shellcheck disable=SC2153 if [[ $DRY_RUN == 'true' ]]; then echo='echo (DRY-RUN):' dry_run='-d' fi # arg 1 - version tag if [[ -n "${1}" ]]; then MAS_VERSION="${1}" else MAS_VERSION="v$(script/version)" fi echo "MAS_VERSION: ${MAS_VERSION}" # arg 2 - revision (commit hash) if [[ -n "${2}" ]]; then REVISION="${2}" else # Derive revision from version. Fails if MAS_VERSION is not a tag. REVISION=$(git rev-parse "${MAS_VERSION}") fi echo "REVISION: ${REVISION}" ################################################################################ # # Preflight checks # # Uninstall if necessary brew remove mas 2>/dev/null || true brew remove mas-cli/tap/mas 2>/dev/null || true # Uninstall if still found on path if command -v mas >/dev/null; then script/uninstall || true fi # Ensure core is tapped if ! [[ -d "${CORE_TAP_PATH}" ]]; then brew tap homebrew/core fi brew update ################################################################################ # # Build the formula for the current macOS version and architecture. # # Update mas formula in core (temporary) cp -v "${LOCAL_MAS_FORMULA_PATH}" "${CORE_MAS_FORMULA_FILE}" # Install mas from source # HOMEBREW_NO_INSTALL_FROM_API: # Force brew to use the local repository instead of the API. # Disable API before any install, reinstall or upgrade commands. HOMEBREW_NO_INSTALL_FROM_API=1 \ brew install mas \ --build-from-source \ --verbose # Audit formula brew audit --strict mas brew style mas # Revert core formula change after testing pushd "${CORE_TAP_PATH}" git diff git checkout . popd ################################################################################ # # Update Homebrew # # echo "Checking to see if this update can be a simple bump." # diff "${LOCAL_MAS_FORMULA_PATH}" "${CORE_MAS_FORMULA_FILE}" echo "==> 🧪 Updating homebrew-core formula mas (${MAS_VERSION}, ${REVISION})" echo "Validating formula" brew bump-formula-pr \ --tag="${MAS_VERSION}" \ --revision="${REVISION}" \ --strict \ --verbose \ --no-browse \ --fork-org mas-cli \ --dry-run \ mas # brew exit status status=$? if [[ ${status} -ne 0 ]]; then echo "Formula did not validate using 'brew bump-formula-pr'" exit ${status} fi if [[ $dry_run == '-d' ]]; then exit 0 fi pushd "${CORE_TAP_PATH}" echo "Updating homebrew/core formula with a PR" $echo brew bump-formula-pr \ --tag="${MAS_VERSION}" \ --revision="${REVISION}" \ --strict \ --verbose \ --online \ --no-browse \ --fork-org mas-cli \ mas popd