From 6e6664dea641b937e0999368d83819da6737bc64 Mon Sep 17 00:00:00 2001 From: Shu Kutsuzawa Date: Mon, 29 Dec 2025 05:19:25 +0900 Subject: [PATCH] ci: add install script workflow (#7159) * ci: add install script workflow Add GitHub Actions workflow to test install.sh script. This prevents regressions like the one reported in issue #7133 where changes to the install script broke the recommended installation method. The workflow includes: - shellcheck for script linting (temporarily excludes SC3045) - Integration test using curl piped to sh as documented on starship.rs Signed-off-by: cappyzawa * fixup! ci: add install script workflow Signed-off-by: cappyzawa * fixup! ci: add install script workflow Signed-off-by: cappyzawa * ci: add shfmt check and format install scripts Add shfmt job to install-script workflow for consistent shell script formatting. Apply shfmt to all scripts under install/ directory. Signed-off-by: cappyzawa --------- Signed-off-by: cappyzawa --- .github/workflows/install-script.yml | 52 ++ install/install.sh | 703 +++++++++--------- install/macos_packages/build_and_notarize.sh | 42 +- .../macos_packages/build_component_package.sh | 36 +- .../build_distribution_package.sh | 38 +- install/macos_packages/common.sh | 44 +- 6 files changed, 482 insertions(+), 433 deletions(-) create mode 100644 .github/workflows/install-script.yml diff --git a/.github/workflows/install-script.yml b/.github/workflows/install-script.yml new file mode 100644 index 000000000..ca99774d0 --- /dev/null +++ b/.github/workflows/install-script.yml @@ -0,0 +1,52 @@ +name: Install Script +on: + push: + paths: + - "install/**" + pull_request: + paths: + - "install/**" + +jobs: + shellcheck: + name: Shellcheck [Linter] + runs-on: ubuntu-latest + steps: + - name: Setup | Checkout + uses: actions/checkout@v6 + + - name: Lint | Run shellcheck + run: shellcheck --severity=warning install/**/*.sh + + shfmt: + name: Shfmt [Formatter] + runs-on: ubuntu-latest + steps: + - name: Setup | Checkout + uses: actions/checkout@v6 + + - name: Setup | Install shfmt + run: | + curl -sS https://webi.sh/shfmt | sh + echo "$HOME/.local/bin" >> "$GITHUB_PATH" + + - name: Format | Check shfmt + run: shfmt -d install/**/*.sh + + test_install_script: + name: Test Install Script + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest] + runs-on: ${{ matrix.os }} + steps: + - name: Setup | Checkout + uses: actions/checkout@v6 + + - name: Test | Piped execution with curl + run: | + # Test the installation method described at https://starship.rs/ + mkdir -p "$HOME/.test-install" + curl -sS "file://$(pwd)/install/install.sh" | sh -s -- --yes --bin-dir "$HOME/.test-install" + "$HOME/.test-install/starship" --version diff --git a/install/install.sh b/install/install.sh index 20e63c78f..fe1daa0de 100755 --- a/install/install.sh +++ b/install/install.sh @@ -21,181 +21,181 @@ SUPPORTED_TARGETS="x86_64-unknown-linux-gnu x86_64-unknown-linux-musl \ x86_64-unknown-freebsd" info() { - printf '%s\n' "${BOLD}${GREY}>${NO_COLOR} $*" + printf '%s\n' "${BOLD}${GREY}>${NO_COLOR} $*" } warn() { - printf '%s\n' "${YELLOW}! $*${NO_COLOR}" + printf '%s\n' "${YELLOW}! $*${NO_COLOR}" } error() { - printf '%s\n' "${RED}x $*${NO_COLOR}" >&2 + printf '%s\n' "${RED}x $*${NO_COLOR}" >&2 } completed() { - printf '%s\n' "${GREEN}✓${NO_COLOR} $*" + printf '%s\n' "${GREEN}✓${NO_COLOR} $*" } has() { - command -v "$1" 1>/dev/null 2>&1 + command -v "$1" 1>/dev/null 2>&1 } curl_is_snap() { - curl_path="$(command -v curl)" - case "$curl_path" in - /snap/*) return 0 ;; - *) return 1 ;; - esac + curl_path="$(command -v curl)" + case "$curl_path" in + /snap/*) return 0 ;; + *) return 1 ;; + esac } # Make sure user is not using zsh or non-POSIX-mode bash, which can cause issues verify_shell_is_posix_or_exit() { - if [ -n "${ZSH_VERSION+x}" ]; then - error "Running installation script with \`zsh\` is known to cause errors." - error "Please use \`sh\` instead." - exit 1 - elif [ -n "${BASH_VERSION+x}" ] && [ -z "${POSIXLY_CORRECT+x}" ]; then - error "Running installation script with non-POSIX \`bash\` may cause errors." - error "Please use \`sh\` instead." - exit 1 - else - true # No-op: no issues detected - fi + if [ -n "${ZSH_VERSION+x}" ]; then + error "Running installation script with \`zsh\` is known to cause errors." + error "Please use \`sh\` instead." + exit 1 + elif [ -n "${BASH_VERSION+x}" ] && [ -z "${POSIXLY_CORRECT+x}" ]; then + error "Running installation script with non-POSIX \`bash\` may cause errors." + error "Please use \`sh\` instead." + exit 1 + else + true # No-op: no issues detected + fi } get_tmpfile() { - suffix="$1" - if has mktemp; then - printf "%s.%s" "$(mktemp)" "${suffix}" - else - # No really good options here--let's pick a default + hope - printf "/tmp/starship.%s" "${suffix}" - fi + suffix="$1" + if has mktemp; then + printf "%s.%s" "$(mktemp)" "${suffix}" + else + # No really good options here--let's pick a default + hope + printf "/tmp/starship.%s" "${suffix}" + fi } # Test if a location is writeable by trying to write to it. Windows does not let # you test writeability other than by writing: https://stackoverflow.com/q/1999988 test_writeable() { - path="${1:-}/test.txt" - if touch "${path}" 2>/dev/null; then - rm "${path}" - return 0 - else - return 1 - fi + path="${1:-}/test.txt" + if touch "${path}" 2>/dev/null; then + rm "${path}" + return 0 + else + return 1 + fi } download() { - file="$1" - url="$2" + file="$1" + url="$2" - if has curl && curl_is_snap; then - warn "curl installed through snap cannot download starship." - warn "See https://github.com/starship/starship/issues/5403 for details." - warn "Searching for other HTTP download programs..." - fi + if has curl && curl_is_snap; then + warn "curl installed through snap cannot download starship." + warn "See https://github.com/starship/starship/issues/5403 for details." + warn "Searching for other HTTP download programs..." + fi - if has curl && ! curl_is_snap; then - cmd="curl --fail --silent --location --output $file $url" - elif has wget; then - cmd="wget --quiet --output-document=$file $url" - elif has fetch; then - cmd="fetch --quiet --output=$file $url" - else - error "No HTTP download program (curl, wget, fetch) found, exiting…" - return 1 - fi + if has curl && ! curl_is_snap; then + cmd="curl --fail --silent --location --output $file $url" + elif has wget; then + cmd="wget --quiet --output-document=$file $url" + elif has fetch; then + cmd="fetch --quiet --output=$file $url" + else + error "No HTTP download program (curl, wget, fetch) found, exiting…" + return 1 + fi - $cmd && return 0 || rc=$? + $cmd && return 0 || rc=$? - error "Command failed (exit code $rc): ${BLUE}${cmd}${NO_COLOR}" - printf "\n" >&2 - info "This is likely due to Starship not yet supporting your configuration." - info "If you would like to see a build for your configuration," - info "please create an issue requesting a build for ${MAGENTA}${TARGET}${NO_COLOR}:" - info "${BOLD}${UNDERLINE}https://github.com/starship/starship/issues/new/${NO_COLOR}" - return $rc + error "Command failed (exit code $rc): ${BLUE}${cmd}${NO_COLOR}" + printf "\n" >&2 + info "This is likely due to Starship not yet supporting your configuration." + info "If you would like to see a build for your configuration," + info "please create an issue requesting a build for ${MAGENTA}${TARGET}${NO_COLOR}:" + info "${BOLD}${UNDERLINE}https://github.com/starship/starship/issues/new/${NO_COLOR}" + return $rc } unpack() { - archive=$1 - bin_dir=$2 - sudo=${3-} + archive=$1 + bin_dir=$2 + sudo=${3-} - case "$archive" in - *.tar.gz) - flags=$(test -n "${VERBOSE-}" && echo "-xzvof" || echo "-xzof") - ${sudo} tar "${flags}" "${archive}" -C "${bin_dir}" - return 0 - ;; - *.zip) - flags=$(test -z "${VERBOSE-}" && echo "-qqo" || echo "-o") - UNZIP="${flags}" ${sudo} unzip "${archive}" -d "${bin_dir}" - return 0 - ;; - esac + case "$archive" in + *.tar.gz) + flags=$(test -n "${VERBOSE-}" && echo "-xzvof" || echo "-xzof") + ${sudo} tar "${flags}" "${archive}" -C "${bin_dir}" + return 0 + ;; + *.zip) + flags=$(test -z "${VERBOSE-}" && echo "-qqo" || echo "-o") + UNZIP="${flags}" ${sudo} unzip "${archive}" -d "${bin_dir}" + return 0 + ;; + esac - error "Unknown package extension." - printf "\n" - info "This almost certainly results from a bug in this script--please file a" - info "bug report at https://github.com/starship/starship/issues" - return 1 + error "Unknown package extension." + printf "\n" + info "This almost certainly results from a bug in this script--please file a" + info "bug report at https://github.com/starship/starship/issues" + return 1 } usage() { - printf "%s\n" \ - "install.sh [option]" \ - "" \ - "Fetch and install the latest version of starship, if starship is already" \ - "installed it will be updated to the latest version." + printf "%s\n" \ + "install.sh [option]" \ + "" \ + "Fetch and install the latest version of starship, if starship is already" \ + "installed it will be updated to the latest version." - printf "\n%s\n" "Options" - printf "\t%s\n\t\t%s\n\n" \ - "-V, --verbose" "Enable verbose output for the installer" \ - "-f, -y, --force, --yes" "Skip the confirmation prompt during installation" \ - "-p, --platform" "Override the platform identified by the installer [default: ${PLATFORM}]" \ - "-b, --bin-dir" "Override the bin installation directory [default: ${BIN_DIR}]" \ - "-a, --arch" "Override the architecture identified by the installer [default: ${ARCH}]" \ - "-B, --base-url" "Override the base URL used for downloading releases [default: ${BASE_URL}]" \ - "-v, --version" "Install a specific version of starship [default: ${VERSION}]" \ - "-h, --help" "Display this help message" + printf "\n%s\n" "Options" + printf "\t%s\n\t\t%s\n\n" \ + "-V, --verbose" "Enable verbose output for the installer" \ + "-f, -y, --force, --yes" "Skip the confirmation prompt during installation" \ + "-p, --platform" "Override the platform identified by the installer [default: ${PLATFORM}]" \ + "-b, --bin-dir" "Override the bin installation directory [default: ${BIN_DIR}]" \ + "-a, --arch" "Override the architecture identified by the installer [default: ${ARCH}]" \ + "-B, --base-url" "Override the base URL used for downloading releases [default: ${BASE_URL}]" \ + "-v, --version" "Install a specific version of starship [default: ${VERSION}]" \ + "-h, --help" "Display this help message" } elevate_priv() { - if ! has sudo; then - error 'Could not find the command "sudo", needed to get permissions for install.' - info "If you are on Windows, please run your shell as an administrator, then" - info "rerun this script. Otherwise, please run this script as root, or install" - info "sudo." - exit 1 - fi - if ! sudo -v; then - error "Superuser not granted, aborting installation" - exit 1 - fi + if ! has sudo; then + error 'Could not find the command "sudo", needed to get permissions for install.' + info "If you are on Windows, please run your shell as an administrator, then" + info "rerun this script. Otherwise, please run this script as root, or install" + info "sudo." + exit 1 + fi + if ! sudo -v; then + error "Superuser not granted, aborting installation" + exit 1 + fi } install() { - ext="$1" + ext="$1" - if test_writeable "${BIN_DIR}"; then - sudo="" - msg="Installing Starship, please wait…" - else - warn "Escalated permissions are required to install to ${BIN_DIR}" - elevate_priv - sudo="sudo" - msg="Installing Starship as root, please wait…" - fi - info "$msg" + if test_writeable "${BIN_DIR}"; then + sudo="" + msg="Installing Starship, please wait…" + else + warn "Escalated permissions are required to install to ${BIN_DIR}" + elevate_priv + sudo="sudo" + msg="Installing Starship as root, please wait…" + fi + info "$msg" - archive=$(get_tmpfile "$ext") + archive=$(get_tmpfile "$ext") - # download to the temp file - download "${archive}" "${URL}" + # download to the temp file + download "${archive}" "${URL}" - # unpack the temp file to the bin dir, using sudo if required - unpack "${archive}" "${BIN_DIR}" "${sudo}" + # unpack the temp file to the bin dir, using sudo if required + unpack "${archive}" "${BIN_DIR}" "${sudo}" } # Currently supporting: @@ -205,20 +205,20 @@ install() { # - linux_musl (Alpine) # - freebsd detect_platform() { - platform="$(uname -s | tr '[:upper:]' '[:lower:]')" + platform="$(uname -s | tr '[:upper:]' '[:lower:]')" - case "${platform}" in - msys_nt*) platform="pc-windows-msvc" ;; - cygwin_nt*) platform="pc-windows-msvc";; - # mingw is Git-Bash - mingw*) platform="pc-windows-msvc" ;; - # use the statically compiled musl bins on linux to avoid linking issues. - linux) platform="unknown-linux-musl" ;; - darwin) platform="apple-darwin" ;; - freebsd) platform="unknown-freebsd" ;; - esac + case "${platform}" in + msys_nt*) platform="pc-windows-msvc" ;; + cygwin_nt*) platform="pc-windows-msvc" ;; + # mingw is Git-Bash + mingw*) platform="pc-windows-msvc" ;; + # use the statically compiled musl bins on linux to avoid linking issues. + linux) platform="unknown-linux-musl" ;; + darwin) platform="apple-darwin" ;; + freebsd) platform="unknown-freebsd" ;; + esac - printf '%s' "${platform}" + printf '%s' "${platform}" } # Currently supporting: @@ -227,203 +227,200 @@ detect_platform() { # - arm # - arm64 detect_arch() { - arch="$(uname -m | tr '[:upper:]' '[:lower:]')" + arch="$(uname -m | tr '[:upper:]' '[:lower:]')" - case "${arch}" in - amd64) arch="x86_64" ;; - armv*) arch="arm" ;; - arm64) arch="aarch64" ;; - esac + case "${arch}" in + amd64) arch="x86_64" ;; + armv*) arch="arm" ;; + arm64) arch="aarch64" ;; + esac - # `uname -m` in some cases mis-reports 32-bit OS as 64-bit, so double check - if [ "${arch}" = "x86_64" ] && [ "$(getconf LONG_BIT)" -eq 32 ]; then - arch=i686 - elif [ "${arch}" = "aarch64" ] && [ "$(getconf LONG_BIT)" -eq 32 ]; then - arch=arm - fi + # `uname -m` in some cases mis-reports 32-bit OS as 64-bit, so double check + if [ "${arch}" = "x86_64" ] && [ "$(getconf LONG_BIT)" -eq 32 ]; then + arch=i686 + elif [ "${arch}" = "aarch64" ] && [ "$(getconf LONG_BIT)" -eq 32 ]; then + arch=arm + fi - printf '%s' "${arch}" + printf '%s' "${arch}" } detect_target() { - arch="$1" - platform="$2" - target="$arch-$platform" + arch="$1" + platform="$2" + target="$arch-$platform" - if [ "${target}" = "arm-unknown-linux-musl" ]; then - target="${target}eabihf" - fi + if [ "${target}" = "arm-unknown-linux-musl" ]; then + target="${target}eabihf" + fi - printf '%s' "${target}" + printf '%s' "${target}" } - confirm() { - if [ -z "${FORCE-}" ]; then - printf "%s " "${MAGENTA}?${NO_COLOR} $* ${BOLD}[y/N]${NO_COLOR}" - set +e - read -r yn &2 - info "If you would like to see a build for your configuration," - info "please create an issue requesting a build for ${MAGENTA}${target}${NO_COLOR}:" - info "${BOLD}${UNDERLINE}https://github.com/starship/starship/issues/new/${NO_COLOR}" - printf "\n" - exit 1 - fi + if [ "${good}" != "1" ]; then + error "${arch} builds for ${platform} are not yet available for Starship" + printf "\n" >&2 + info "If you would like to see a build for your configuration," + info "please create an issue requesting a build for ${MAGENTA}${target}${NO_COLOR}:" + info "${BOLD}${UNDERLINE}https://github.com/starship/starship/issues/new/${NO_COLOR}" + printf "\n" + exit 1 + fi } # defaults if [ -z "${PLATFORM-}" ]; then - PLATFORM="$(detect_platform)" + PLATFORM="$(detect_platform)" fi if [ -z "${BIN_DIR-}" ]; then - BIN_DIR=/usr/local/bin + BIN_DIR=/usr/local/bin fi if [ -z "${ARCH-}" ]; then - ARCH="$(detect_arch)" + ARCH="$(detect_arch)" fi if [ -z "${BASE_URL-}" ]; then - BASE_URL="https://github.com/starship/starship/releases" + BASE_URL="https://github.com/starship/starship/releases" fi if [ -z "${VERSION-}" ]; then - VERSION="latest" + VERSION="latest" fi # Non-POSIX shells can break once executing code due to semantic differences @@ -431,76 +428,76 @@ verify_shell_is_posix_or_exit # parse argv variables while [ "$#" -gt 0 ]; do - case "$1" in - -p | --platform) - PLATFORM="$2" - shift 2 - ;; - -b | --bin-dir) - BIN_DIR="$2" - shift 2 - ;; - -a | --arch) - ARCH="$2" - shift 2 - ;; - -B | --base-url) - BASE_URL="$2" - shift 2 - ;; - -v | --version) - VERSION="$2" - shift 2 - ;; + case "$1" in + -p | --platform) + PLATFORM="$2" + shift 2 + ;; + -b | --bin-dir) + BIN_DIR="$2" + shift 2 + ;; + -a | --arch) + ARCH="$2" + shift 2 + ;; + -B | --base-url) + BASE_URL="$2" + shift 2 + ;; + -v | --version) + VERSION="$2" + shift 2 + ;; - -V | --verbose) - VERBOSE=1 - shift 1 - ;; - -f | -y | --force | --yes) - FORCE=1 - shift 1 - ;; - -h | --help) - usage - exit - ;; + -V | --verbose) + VERBOSE=1 + shift 1 + ;; + -f | -y | --force | --yes) + FORCE=1 + shift 1 + ;; + -h | --help) + usage + exit + ;; - -p=* | --platform=*) - PLATFORM="${1#*=}" - shift 1 - ;; - -b=* | --bin-dir=*) - BIN_DIR="${1#*=}" - shift 1 - ;; - -a=* | --arch=*) - ARCH="${1#*=}" - shift 1 - ;; - -B=* | --base-url=*) - BASE_URL="${1#*=}" - shift 1 - ;; - -v=* | --version=*) - VERSION="${1#*=}" - shift 1 - ;; - -V=* | --verbose=*) - VERBOSE="${1#*=}" - shift 1 - ;; - -f=* | -y=* | --force=* | --yes=*) - FORCE="${1#*=}" - shift 1 - ;; + -p=* | --platform=*) + PLATFORM="${1#*=}" + shift 1 + ;; + -b=* | --bin-dir=*) + BIN_DIR="${1#*=}" + shift 1 + ;; + -a=* | --arch=*) + ARCH="${1#*=}" + shift 1 + ;; + -B=* | --base-url=*) + BASE_URL="${1#*=}" + shift 1 + ;; + -v=* | --version=*) + VERSION="${1#*=}" + shift 1 + ;; + -V=* | --verbose=*) + VERBOSE="${1#*=}" + shift 1 + ;; + -f=* | -y=* | --force=* | --yes=*) + FORCE="${1#*=}" + shift 1 + ;; - *) - error "Unknown option: $1" - usage - exit 1 - ;; - esac + *) + error "Unknown option: $1" + usage + exit 1 + ;; + esac done TARGET="$(detect_target "${ARCH}" "${PLATFORM}")" @@ -514,23 +511,23 @@ info "${BOLD}Arch${NO_COLOR}: ${GREEN}${ARCH}${NO_COLOR}" # non-empty VERBOSE enables verbose untarring if [ -n "${VERBOSE-}" ]; then - VERBOSE=v - info "${BOLD}Verbose${NO_COLOR}: yes" + VERBOSE=v + info "${BOLD}Verbose${NO_COLOR}: yes" else - VERBOSE= + VERBOSE= fi printf '\n' EXT=tar.gz if [ "${PLATFORM}" = "pc-windows-msvc" ]; then - EXT=zip + EXT=zip fi if [ "${VERSION}" != "latest" ]; then - URL="${BASE_URL}/download/${VERSION}/starship-${TARGET}.${EXT}" + URL="${BASE_URL}/download/${VERSION}/starship-${TARGET}.${EXT}" else - URL="${BASE_URL}/latest/download/starship-${TARGET}.${EXT}" + URL="${BASE_URL}/latest/download/starship-${TARGET}.${EXT}" fi info "Tarball URL: ${UNDERLINE}${BLUE}${URL}${NO_COLOR}" diff --git a/install/macos_packages/build_and_notarize.sh b/install/macos_packages/build_and_notarize.sh index 768b09350..bdb3bd88a 100644 --- a/install/macos_packages/build_and_notarize.sh +++ b/install/macos_packages/build_and_notarize.sh @@ -16,48 +16,48 @@ set -euo pipefail # INSTALLATION_KEY_IDENT=E525359D0B5AE97B7B6F5BB465FEC872C117D681 usage() { - echo "Builds, signs, and notarizes starship." - echo "Read readme.md in the script directory to see the assumptions the script makes." - echo "Usage: $0 [pkgname]" - echo " Example: $0 target/release/starship docs/ x64" - echo " Example: $0 target/debug/starship docs/ arm64 starship-1.2.1-arm64.pkg" - echo "" - echo "If no pkgname is provided, the package will be named starship--.pkg" + echo "Builds, signs, and notarizes starship." + echo "Read readme.md in the script directory to see the assumptions the script makes." + echo "Usage: $0 [pkgname]" + echo " Example: $0 target/release/starship docs/ x64" + echo " Example: $0 target/debug/starship docs/ arm64 starship-1.2.1-arm64.pkg" + echo "" + echo "If no pkgname is provided, the package will be named starship--.pkg" } script_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" source "$script_dir/common.sh" if [[ -z ${KEYCHAIN_ENTRY+x} ]]; then - error "Environmental variable KEYCHAIN_ENTRY must be set." + error "Environmental variable KEYCHAIN_ENTRY must be set." fi if [[ -z ${RUNNER_TEMP+x} ]]; then - error "Environmental variable RUNNER_TEMP must be set." + error "Environmental variable RUNNER_TEMP must be set." fi if [[ -z ${KEYCHAIN_FILENAME+x} ]]; then - error "Environmental variable KEYCHAIN_FILENAME must be set." + error "Environmental variable KEYCHAIN_FILENAME must be set." fi keychain_path="$RUNNER_TEMP/$KEYCHAIN_FILENAME" if [[ ! -f "$keychain_path" ]]; then - error "Could not find keychain at $keychain_path" + error "Could not find keychain at $keychain_path" fi if [[ -z ${APPLICATION_KEY_IDENT+x} ]]; then - APPLICATION_KEY_IDENT=E03290CABE09E9E42341C8FC82608E91241FAD4A - echo "APPLICATION_KEY_IDENT not set. Using default value of $APPLICATION_KEY_IDENT" + APPLICATION_KEY_IDENT=E03290CABE09E9E42341C8FC82608E91241FAD4A + echo "APPLICATION_KEY_IDENT not set. Using default value of $APPLICATION_KEY_IDENT" fi if [[ -z ${INSTALLATION_KEY_IDENT+x} ]]; then - INSTALLATION_KEY_IDENT=E525359D0B5AE97B7B6F5BB465FEC872C117D681 - echo "INSTALLATION_KEY_IDENT not set. Using default value of $INSTALLATION_KEY_IDENT" + INSTALLATION_KEY_IDENT=E525359D0B5AE97B7B6F5BB465FEC872C117D681 + echo "INSTALLATION_KEY_IDENT not set. Using default value of $INSTALLATION_KEY_IDENT" fi if [[ -z ${3+x} ]]; then - usage - exit 1 + usage + exit 1 fi starship_binary="$1" @@ -66,7 +66,7 @@ arch="$3" pkgname="${4:-}" if [[ ! -d "$starship_docs_dir/.vitepress/dist" ]]; then - error "Documentation does not appear to have been built!" + error "Documentation does not appear to have been built!" fi echo ">>>> Signing binary" @@ -74,7 +74,7 @@ codesign --timestamp --keychain "$keychain_path" --sign "$APPLICATION_KEY_IDENT" # Make ZIP file to notarize binary if [ "$starship_binary" != "starship" ]; then - cp "$starship_binary" starship + cp "$starship_binary" starship fi zip starship.zip starship @@ -107,8 +107,8 @@ xcrun stapler staple starship.pkg # Rename to expected name if [ "$pkgname" = "" ]; then - version="$(starship_version "$starship_binary")" - pkgname="starship-$version-$arch.pkg" + version="$(starship_version "$starship_binary")" + pkgname="starship-$version-$arch.pkg" fi echo ">>>> Placing final output at $pkgname" diff --git a/install/macos_packages/build_component_package.sh b/install/macos_packages/build_component_package.sh index 2ac4daa3d..4f0b15baa 100644 --- a/install/macos_packages/build_component_package.sh +++ b/install/macos_packages/build_component_package.sh @@ -9,45 +9,45 @@ set -euo pipefail # it is being run from within a starship repository if $1 is not provided. usage() { - echo "Builds a component package for macOS." - echo "Assumes that the following items already exist:" - echo " - A starship binary which has already been notarized" - echo " - Documentation created by \`npm run build\`, usually in a dist" - echo " directory at /docs/.vitepress/dist" - echo "Usage: $0 " + echo "Builds a component package for macOS." + echo "Assumes that the following items already exist:" + echo " - A starship binary which has already been notarized" + echo " - Documentation created by \`npm run build\`, usually in a dist" + echo " directory at /docs/.vitepress/dist" + echo "Usage: $0 " } script_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" source "$script_dir/common.sh" cleanup_server() { - if [[ -n "${server_pid-}" ]]; then - echo "Killing HTTP server ($server_pid) to clean up." - kill "$server_pid" - rm "x86_64-apple-darwin-simple-http-server" - else - echo "No server found, exiting normally." - fi + if [[ -n "${server_pid-}" ]]; then + echo "Killing HTTP server ($server_pid) to clean up." + kill "$server_pid" + rm "x86_64-apple-darwin-simple-http-server" + else + echo "No server found, exiting normally." + fi } if [[ "$OSTYPE" != 'darwin'* ]]; then - error "This script only works on MacOS" + error "This script only works on MacOS" fi if [[ "${2-undefined}" = "undefined" ]]; then - usage - exit 1 + usage + exit 1 fi starship_program_file="$1" starship_documentation_dir="$2" if [ ! -f "$starship_program_file" ]; then - error "Could not find starship binary at $starship_program_file" + error "Could not find starship binary at $starship_program_file" fi if [ ! -d "$starship_documentation_dir" ]; then - error "Could not find starship documentation at $starship_documentation_dir" + error "Could not find starship documentation at $starship_documentation_dir" fi pkgdir="$(mktemp -d)" diff --git a/install/macos_packages/build_distribution_package.sh b/install/macos_packages/build_distribution_package.sh index 4d3368c66..ddd17d8f6 100644 --- a/install/macos_packages/build_distribution_package.sh +++ b/install/macos_packages/build_distribution_package.sh @@ -5,33 +5,33 @@ resources="$2" arch="$3" usage() { - echo "Builds a distribution package for macOS." - echo "Assumes that the following items already exist:" - echo " - A starship component package" - echo " - Resources in a pkg_resources directory" - echo "Usage: $0 " - echo " where arch is one of \"arm64\" or \"x86_64\"" + echo "Builds a distribution package for macOS." + echo "Assumes that the following items already exist:" + echo " - A starship component package" + echo " - Resources in a pkg_resources directory" + echo "Usage: $0 " + echo " where arch is one of \"arm64\" or \"x86_64\"" } script_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" source "$script_dir/common.sh" if [[ "$OSTYPE" != 'darwin'* ]]; then - error "This script only works on MacOS" + error "This script only works on MacOS" fi if [[ "${3-undefined}" = "undefined" ]]; then - usage - exit 1 + usage + exit 1 fi # Generate a distribution file with the appropriate architecture plists if [[ "$arch" == "x86_64" || "$arch" == "x64" ]]; then - archplist="$script_dir/x86_64.plist" + archplist="$script_dir/x86_64.plist" elif [[ "$arch" == "arm64" || "$arch" == "aarch64" ]]; then - archplist="$script_dir/aarch64.plist" + archplist="$script_dir/aarch64.plist" else - error "Invalid architecture: $arch" + error "Invalid architecture: $arch" fi productbuild --synthesize --package starship-component.pkg --product "$archplist" starship_raw.dist @@ -41,13 +41,13 @@ productbuild --synthesize --package starship-component.pkg --product "$archplist # Solution taken from https://www.theunixschool.com/2012/06/insert-line-before-or-after-pattern.html while read -r line; do - echo "$line" - if echo "$line" | grep -qF '' - echo '' - echo '' - echo '' - fi + echo "$line" + if echo "$line" | grep -qF '' + echo '' + echo '' + echo '' + fi done starship.dist # The above script does not correctly take care of the last line. Apply fixup. diff --git a/install/macos_packages/common.sh b/install/macos_packages/common.sh index a7efb2c3a..03ef1e663 100644 --- a/install/macos_packages/common.sh +++ b/install/macos_packages/common.sh @@ -1,30 +1,30 @@ #!/bin/bash error() { - echo "[ERROR]: $1" - exit 1 + echo "[ERROR]: $1" + exit 1 } starship_version() { - starship_program_file="$1" - # Check if this is a relative path: if so, prepend './' to it - if [ "$1" = "${1#/}" ]; then - starship_program_file="./$starship_program_file" - fi + starship_program_file="$1" + # Check if this is a relative path: if so, prepend './' to it + if [ "$1" = "${1#/}" ]; then + starship_program_file="./$starship_program_file" + fi - # Try to get the version from three sources in the following order: - # - the STARSHIP_VERSION envar (usually set by the CI) - # - Running the binary file - # - By cutting out the first version tag in Cargo.toml - # These get increasingly fragile as we go down the list---ideally CI should - # always run with STARSHIP_VERSION set to avoid issues in determining version. - if [ "$STARSHIP_VERSION" != "" ]; then - echo "$STARSHIP_VERSION" | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+' - elif "$starship_program_file" -V >/dev/null 2>&1; then - "$starship_program_file" -V 2> /dev/null | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+' - else - pushd "$(git rev-parse --show-toplevel)" &> /dev/null || true - grep '^version = \"\(.*\)\"' Cargo.toml | head -n 1 | cut -f 2 -d '"' | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+' - popd &> /dev/null || true - fi + # Try to get the version from three sources in the following order: + # - the STARSHIP_VERSION envar (usually set by the CI) + # - Running the binary file + # - By cutting out the first version tag in Cargo.toml + # These get increasingly fragile as we go down the list---ideally CI should + # always run with STARSHIP_VERSION set to avoid issues in determining version. + if [ "$STARSHIP_VERSION" != "" ]; then + echo "$STARSHIP_VERSION" | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+' + elif "$starship_program_file" -V >/dev/null 2>&1; then + "$starship_program_file" -V 2>/dev/null | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+' + else + pushd "$(git rev-parse --show-toplevel)" &>/dev/null || true + grep '^version = \"\(.*\)\"' Cargo.toml | head -n 1 | cut -f 2 -d '"' | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+' + popd &>/dev/null || true + fi }