{{- if (ne .host.distro.family "windows") -}} #!/usr/bin/env bash # @file Homebrew / Xcode Tools Installation # @brief Ensures Xcode tools are installed on macOS and ensures Homebrew is installed on either Linux or macOS # @description # This script ensures macOS has tools like `git` by installing the Xcode command-line developer tools if they are # not already installed. Then, on both Linux and macOS, it ensures Homebrew is installed. # # ## Homebrew Requirement # # Install Doctor relies on Homebrew for many tools that are currently only available via Homebrew. Removing the dependency # would be a nice-to-have but there are currently no plans for supporting systems without Homebrew installed. {{ includeTemplate "universal/profile-before" }} {{ includeTemplate "universal/logg-before" }} ### System upgrade on macOS if [ -d /Applications ] && [ -d /Library ]; then if command -v gtimeout > /dev/null; then # Allow 8 minutes for system updates logg info 'Ensuring system software is upgraded (timing out after 8 minutes if system upgrade fails)' sudo gtimeout 480 softwareupdate -i -a || logg warn 'The system update command timed out after 8 minutes' else # If gtimeout is unavailable, then attempt system upgrade without a timeout (which usually works on fresh systems) logg info 'Applying OS upgrades (if available)' sudo softwareupdate -i -a || logg error 'Failed to perform a system update via `sudo softwareupdate -i -a`' fi logg info 'If system updates were downloaded / installed, a reboot might be required.' fi ### Install Xcode CLI tools on macOS if [ -d /Applications ] && [ -d /Library ]; then logg info 'Ensuring xcode-select is installed for developer tools' xcode-select -p >/dev/null 2>&1 || sudo xcode-select --install fi ### Install Homebrew ensurePackageManagerHomebrew() { if ! command -v brew > /dev/null; then if command -v sudo > /dev/null && sudo -n true; then echo | bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" else logg info 'Homebrew is not installed. Password may be required.' bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" || BREW_EXIT_CODE="$?" if [ -n "$BREW_EXIT_CODE" ]; then if command -v brew > /dev/null; then logg warn 'Homebrew was installed but part of the installation failed. Attempting to fix..' BREW_DIRS="share/man share/doc share/zsh/site-functions etc/bash_completion.d" for BREW_DIR in $BREW_DIRS; do if [ -d "$(brew --prefix)/$BREW_DIR" ]; then sudo chown -R "$(whoami)" "$(brew --prefix)/$BREW_DIR" fi done brew update --force --quiet fi fi fi fi } ensurePackageManagerHomebrew {{ end -}}