mirror of
https://github.com/starship/starship.git
synced 2026-06-20 02:02:07 +07:00
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 <cappyzawa@gmail.com> * fixup! ci: add install script workflow Signed-off-by: cappyzawa <cappyzawa@gmail.com> * fixup! ci: add install script workflow Signed-off-by: cappyzawa <cappyzawa@gmail.com> * 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 <cappyzawa@gmail.com> --------- Signed-off-by: cappyzawa <cappyzawa@gmail.com>
This commit is contained in:
@@ -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
|
||||
+350
-353
@@ -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 </dev/tty
|
||||
rc=$?
|
||||
set -e
|
||||
if [ $rc -ne 0 ]; then
|
||||
error "Error reading from prompt (please re-run with the '--yes' option)"
|
||||
exit 1
|
||||
fi
|
||||
if [ "$yn" != "y" ] && [ "$yn" != "yes" ]; then
|
||||
error 'Aborting (please answer "yes" to continue)'
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
if [ -z "${FORCE-}" ]; then
|
||||
printf "%s " "${MAGENTA}?${NO_COLOR} $* ${BOLD}[y/N]${NO_COLOR}"
|
||||
set +e
|
||||
read -r yn </dev/tty
|
||||
rc=$?
|
||||
set -e
|
||||
if [ $rc -ne 0 ]; then
|
||||
error "Error reading from prompt (please re-run with the '--yes' option)"
|
||||
exit 1
|
||||
fi
|
||||
if [ "$yn" != "y" ] && [ "$yn" != "yes" ]; then
|
||||
error 'Aborting (please answer "yes" to continue)'
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
check_bin_dir() {
|
||||
bin_dir="${1%/}"
|
||||
bin_dir="${1%/}"
|
||||
|
||||
if [ ! -d "$BIN_DIR" ]; then
|
||||
error "Installation location $BIN_DIR does not appear to be a directory"
|
||||
info "Make sure the location exists and is a directory, then try again."
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
if [ ! -d "$BIN_DIR" ]; then
|
||||
error "Installation location $BIN_DIR does not appear to be a directory"
|
||||
info "Make sure the location exists and is a directory, then try again."
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# https://stackoverflow.com/a/11655875
|
||||
good=$(
|
||||
IFS=:
|
||||
for path in $PATH; do
|
||||
if [ "${path%/}" = "${bin_dir}" ]; then
|
||||
printf 1
|
||||
break
|
||||
fi
|
||||
done
|
||||
)
|
||||
# https://stackoverflow.com/a/11655875
|
||||
good=$(
|
||||
IFS=:
|
||||
for path in $PATH; do
|
||||
if [ "${path%/}" = "${bin_dir}" ]; then
|
||||
printf 1
|
||||
break
|
||||
fi
|
||||
done
|
||||
)
|
||||
|
||||
if [ "${good}" != "1" ]; then
|
||||
warn "Bin directory ${bin_dir} is not in your \$PATH"
|
||||
fi
|
||||
if [ "${good}" != "1" ]; then
|
||||
warn "Bin directory ${bin_dir} is not in your \$PATH"
|
||||
fi
|
||||
}
|
||||
|
||||
print_install() {
|
||||
# if the shell does not fit the default case change the config file
|
||||
# and or the config cmd variable
|
||||
for s in "bash" "zsh" "ion" "tcsh" "xonsh" "fish"
|
||||
do
|
||||
# shellcheck disable=SC2088
|
||||
# we don't want these '~' expanding
|
||||
config_file="~/.${s}rc"
|
||||
config_cmd="eval \"\$(starship init ${s})\""
|
||||
# if the shell does not fit the default case change the config file
|
||||
# and or the config cmd variable
|
||||
for s in "bash" "zsh" "ion" "tcsh" "xonsh" "fish"; do
|
||||
# shellcheck disable=SC2088
|
||||
# we don't want these '~' expanding
|
||||
config_file="~/.${s}rc"
|
||||
config_cmd="eval \"\$(starship init ${s})\""
|
||||
|
||||
case ${s} in
|
||||
ion )
|
||||
# shellcheck disable=SC2088
|
||||
config_file="~/.config/ion/initrc"
|
||||
config_cmd="eval \$(starship init ${s})"
|
||||
;;
|
||||
fish )
|
||||
# shellcheck disable=SC2088
|
||||
config_file="~/.config/fish/config.fish"
|
||||
config_cmd="starship init fish | source"
|
||||
;;
|
||||
tcsh )
|
||||
config_cmd="eval \`starship init ${s}\`"
|
||||
;;
|
||||
xonsh )
|
||||
config_cmd="execx(\$(starship init xonsh))"
|
||||
;;
|
||||
esac
|
||||
case ${s} in
|
||||
ion)
|
||||
# shellcheck disable=SC2088
|
||||
config_file="~/.config/ion/initrc"
|
||||
config_cmd="eval \$(starship init ${s})"
|
||||
;;
|
||||
fish)
|
||||
# shellcheck disable=SC2088
|
||||
config_file="~/.config/fish/config.fish"
|
||||
config_cmd="starship init fish | source"
|
||||
;;
|
||||
tcsh)
|
||||
config_cmd="eval \`starship init ${s}\`"
|
||||
;;
|
||||
xonsh)
|
||||
config_cmd="execx(\$(starship init xonsh))"
|
||||
;;
|
||||
esac
|
||||
|
||||
printf " %s\n Add the following to the end of %s:\n\n\t%s\n\n" \
|
||||
"${BOLD}${UNDERLINE}${s}${NO_COLOR}" \
|
||||
"${BOLD}${config_file}${NO_COLOR}" \
|
||||
"${config_cmd}"
|
||||
done
|
||||
printf " %s\n Add the following to the end of %s:\n\n\t%s\n\n" \
|
||||
"${BOLD}${UNDERLINE}${s}${NO_COLOR}" \
|
||||
"${BOLD}${config_file}${NO_COLOR}" \
|
||||
"${config_cmd}"
|
||||
done
|
||||
|
||||
for s in "elvish" "nushell"
|
||||
do
|
||||
for s in "elvish" "nushell"; do
|
||||
|
||||
warning="${BOLD}Warning${NO_COLOR}"
|
||||
case ${s} in
|
||||
elvish )
|
||||
# shellcheck disable=SC2088
|
||||
config_file="~/.config/elvish/rc.elv"
|
||||
config_cmd="eval (starship init elvish)"
|
||||
warning="${warning} Only elvish v0.17 or higher is supported."
|
||||
;;
|
||||
nushell )
|
||||
# shellcheck disable=SC2088
|
||||
config_file="${BOLD}your nu config file${NO_COLOR} (find it by running ${BOLD}\$nu.config-path${NO_COLOR} in Nushell)"
|
||||
config_cmd="mkdir (\$nu.data-dir | path join \"vendor/autoload\")
|
||||
warning="${BOLD}Warning${NO_COLOR}"
|
||||
case ${s} in
|
||||
elvish)
|
||||
# shellcheck disable=SC2088
|
||||
config_file="~/.config/elvish/rc.elv"
|
||||
config_cmd="eval (starship init elvish)"
|
||||
warning="${warning} Only elvish v0.17 or higher is supported."
|
||||
;;
|
||||
nushell)
|
||||
# shellcheck disable=SC2088
|
||||
config_file="${BOLD}your nu config file${NO_COLOR} (find it by running ${BOLD}\$nu.config-path${NO_COLOR} in Nushell)"
|
||||
config_cmd="mkdir (\$nu.data-dir | path join \"vendor/autoload\")
|
||||
starship init nu | save -f (\$nu.data-dir | path join \"vendor/autoload/starship.nu\")"
|
||||
warning="${warning} This will change in the future.
|
||||
warning="${warning} This will change in the future.
|
||||
Only Nushell v0.96 or higher is supported."
|
||||
;;
|
||||
esac
|
||||
printf " %s\n %s\n And add the following to the end of %s:\n\n\t%s\n\n" \
|
||||
"${BOLD}${UNDERLINE}${s}${NO_COLOR}" \
|
||||
"${warning}" \
|
||||
"${config_file}" \
|
||||
"${config_cmd}"
|
||||
done
|
||||
;;
|
||||
esac
|
||||
printf " %s\n %s\n And add the following to the end of %s:\n\n\t%s\n\n" \
|
||||
"${BOLD}${UNDERLINE}${s}${NO_COLOR}" \
|
||||
"${warning}" \
|
||||
"${config_file}" \
|
||||
"${config_cmd}"
|
||||
done
|
||||
|
||||
printf " %s\n Add the following to the end of %s:\n %s\n\n\t%s\n\n" \
|
||||
"${BOLD}${UNDERLINE}PowerShell${NO_COLOR}" \
|
||||
"${BOLD}Microsoft.PowerShell_profile.ps1${NO_COLOR}" \
|
||||
"You can check the location of this file by querying the \$PROFILE variable in PowerShell.
|
||||
printf " %s\n Add the following to the end of %s:\n %s\n\n\t%s\n\n" \
|
||||
"${BOLD}${UNDERLINE}PowerShell${NO_COLOR}" \
|
||||
"${BOLD}Microsoft.PowerShell_profile.ps1${NO_COLOR}" \
|
||||
"You can check the location of this file by querying the \$PROFILE variable in PowerShell.
|
||||
Typically the path is ~\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 or ~/.config/powershell/Microsoft.PowerShell_profile.ps1 on -Nix." \
|
||||
"Invoke-Expression (&starship init powershell)"
|
||||
"Invoke-Expression (&starship init powershell)"
|
||||
|
||||
printf " %s\n You need to use Clink (v1.2.30+) with Cmd. Add the following to a file %s and place this file in Clink scripts directory:\n\n\t%s\n\n" \
|
||||
"${BOLD}${UNDERLINE}Cmd${NO_COLOR}" \
|
||||
"${BOLD}starship.lua${NO_COLOR}" \
|
||||
"load(io.popen('starship init cmd'):read(\"*a\"))()"
|
||||
printf " %s\n You need to use Clink (v1.2.30+) with Cmd. Add the following to a file %s and place this file in Clink scripts directory:\n\n\t%s\n\n" \
|
||||
"${BOLD}${UNDERLINE}Cmd${NO_COLOR}" \
|
||||
"${BOLD}starship.lua${NO_COLOR}" \
|
||||
"load(io.popen('starship init cmd'):read(\"*a\"))()"
|
||||
|
||||
printf "\n"
|
||||
printf "\n"
|
||||
}
|
||||
|
||||
is_build_available() {
|
||||
arch="$1"
|
||||
platform="$2"
|
||||
target="$3"
|
||||
arch="$1"
|
||||
platform="$2"
|
||||
target="$3"
|
||||
|
||||
good=$(
|
||||
IFS=" "
|
||||
for t in $SUPPORTED_TARGETS; do
|
||||
if [ "${t}" = "${target}" ]; then
|
||||
printf 1
|
||||
break
|
||||
fi
|
||||
done
|
||||
)
|
||||
good=$(
|
||||
IFS=" "
|
||||
for t in $SUPPORTED_TARGETS; do
|
||||
if [ "${t}" = "${target}" ]; then
|
||||
printf 1
|
||||
break
|
||||
fi
|
||||
done
|
||||
)
|
||||
|
||||
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
|
||||
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}"
|
||||
|
||||
@@ -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 <path-to-starship-binary> <path-to-docs-directory> <arch> [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-<version>-<arch>.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 <path-to-starship-binary> <path-to-docs-directory> <arch> [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-<version>-<arch>.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"
|
||||
|
||||
@@ -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 <repo>/docs/.vitepress/dist"
|
||||
echo "Usage: $0 <path-to-starship-binary> <path-to-dist-directory>"
|
||||
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 <repo>/docs/.vitepress/dist"
|
||||
echo "Usage: $0 <path-to-starship-binary> <path-to-dist-directory>"
|
||||
}
|
||||
|
||||
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)"
|
||||
|
||||
@@ -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 <path-to-component-package> <path-to-pkg-resources> <arch>"
|
||||
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 <path-to-component-package> <path-to-pkg-resources> <arch>"
|
||||
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 '<installer-gui-script '; then
|
||||
echo '<welcome file="welcome.html" mime-type="text-html" />'
|
||||
echo '<license file="license.html" mime-type="text-html" />'
|
||||
echo '<conclusion file="conclusion.html" mime-type="text-html" />'
|
||||
echo '<background file="icon.png" scaling="proportional" alignment="bottomleft"/>'
|
||||
fi
|
||||
echo "$line"
|
||||
if echo "$line" | grep -qF '<installer-gui-script '; then
|
||||
echo '<welcome file="welcome.html" mime-type="text-html" />'
|
||||
echo '<license file="license.html" mime-type="text-html" />'
|
||||
echo '<conclusion file="conclusion.html" mime-type="text-html" />'
|
||||
echo '<background file="icon.png" scaling="proportional" alignment="bottomleft"/>'
|
||||
fi
|
||||
done <starship_raw.dist >starship.dist
|
||||
|
||||
# The above script does not correctly take care of the last line. Apply fixup.
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user