#!/bin/sh set -e # Code generated by godownloader on 2024-10-21T13:02:39Z. DO NOT EDIT. # usage() { this=$1 cat < "$_progress_file" _total_size=$(curl -sLI "${TARBALL_URL}" 2>/dev/null | grep -i content-length | tail -1 | tr -d '\r' | awk '{print $2}') _total_size=${_total_size:-0} log_debug "expected download size: ${_total_size} bytes" ( http_download "${_download_file}" "${TARBALL_URL}" > /dev/null 2>&1 || exit 1 echo "extract" > "$_progress_file" (cd "${tmpdir}" && untar "${TARBALL}") > /dev/null 2>&1 || exit 1 echo "install" > "$_progress_file" if [ ! -d "${BINDIR}" ]; then install -d "${BINDIR}"; fi for binexe in $BINARIES; do if [ "$OS" = "windows" ] || [ "$OS" = "Windows" ]; then binexe="${binexe}.exe" fi install "${tmpdir}/${binexe}" "${BINDIR}/" || exit 1 done ) & _install_pid=$! _download_progress "$_install_pid" "$_download_file" "$_total_size" "$_progress_file" wait "$_install_pid" _install_exit=$? rm -rf "${tmpdir}" if [ "$_install_exit" -ne 0 ]; then printf "\r %s %s\n" "|" "${RED}Failed to install bruin ${VERSION}${RESET}" >&2 printf " %s\n" "|" _print_footer "${RED}Installation failed${RESET}" return 1 fi printf " %s\n" "|" _print_success "bruin ${VERSION} installed successfully!" else # Non-interactive or Windows: run synchronously with plain output log_info "downloading bruin ${VERSION}..." http_download "${tmpdir}/${TARBALL}" "${TARBALL_URL}" srcdir="${tmpdir}" (cd "${tmpdir}" && untar "${TARBALL}") if [ ! -d "${BINDIR}" ]; then install -d "${BINDIR}"; fi log_debug "installing to ${BINDIR}" for binexe in $BINARIES; do if [ "$OS" = "windows" ] || [ "$OS" = "Windows" ]; then binexe="${binexe}.exe" fi install "${srcdir}/${binexe}" "${BINDIR}/" log_debug "installed ${BINDIR}/${binexe}" done _install_exit=0 rm -rf "${tmpdir}" if [ "$_install_exit" -ne 0 ]; then log_err "Failed to install bruin ${VERSION}" return 1 fi log_info "bruin ${VERSION} installed to ${BINDIR}" fi # Configure PATH current_shell=$(basename "$SHELL") case "$current_shell" in bash|sh) export_command="export PATH=\"\$PATH:${BINDIR}\"" eval "$export_command" if ! grep -q "export PATH=\"\$PATH:${BINDIR}\"" "$HOME/.${current_shell}rc"; then echo "$export_command" >> "$HOME/.${current_shell}rc" fi ;; zsh) export_command="export PATH=\"\$PATH:${BINDIR}\"" eval "$export_command" if ! grep -q "export PATH=\"\$PATH:${BINDIR}\"" "$HOME/.zshrc"; then echo "$export_command" >> "$HOME/.zshrc" fi ;; fish) export_command="set -gx PATH \$PATH ${BINDIR}" fish -c "$export_command" if ! grep -q "set -gx PATH \$PATH ${BINDIR}" "$HOME/.config/fish/config.fish" 2>/dev/null; then echo "$export_command" >> "$HOME/.config/fish/config.fish" fi ;; *) export_command="export PATH=\"\$PATH:${BINDIR}\"" eval "$export_command" log_info "# Unable to automatically add to your shell's configuration file." log_info "# Please manually add the following line to your shell's configuration file to make it permanent:" log_info "# $export_command" ;; esac if [ "$_use_fancy" = "true" ]; then case "$current_shell" in fish) _print_footer "Please restart your shell or run: ${YELLOW}source ~/.config/fish/config.fish${RESET}" ;; *) _print_footer "Please restart your shell or run: ${YELLOW}source ~/.${current_shell}rc${RESET}" ;; esac else echo "" echo " bruin ${VERSION} has been installed successfully!" case "$current_shell" in fish) echo " Please restart your shell or run: source ~/.config/fish/config.fish" ;; *) echo " Please restart your shell or run: source ~/.${current_shell}rc" ;; esac echo "" fi } get_binaries() { case "$PLATFORM" in darwin/amd64) BINARIES="bruin" ;; darwin/arm64) BINARIES="bruin" ;; linux/amd64) BINARIES="bruin" ;; linux/arm64) BINARIES="bruin" ;; windows/386) BINARIES="bruin" ;; windows/amd64) BINARIES="bruin" ;; *) log_crit "platform $PLATFORM is not supported. Make sure this script is up-to-date and file request at https://github.com/${PREFIX}/issues/new" exit 1 ;; esac } tag_to_version() { if [ -z "${TAG}" ]; then log_info "checking GitHub for latest tag" else log_info "checking GitHub for tag '${TAG}'" fi log_debug "will get github for "$OWNER/$REPO" and tag '${TAG}'" REALTAG=$(github_release "$OWNER/$REPO" "${TAG}") && true log_debug "REALTAG is '${REALTAG}'" if test -z "$REALTAG"; then log_crit "unable to find '${TAG}' - use 'latest' or see https://github.com/${PREFIX}/releases for details" exit 1 fi log_debug "will run for tag ${REALTAG}, version -> ${TAG#v}" # if version starts with 'v', remove it TAG="$REALTAG" VERSION=${TAG#v} } adjust_format() { # change format (tar.gz or zip) based on OS case ${OS} in windows) FORMAT=zip ;; esac true } adjust_os() { # adjust archive name based on OS case ${OS} in 386) OS=i386 ;; amd64) OS=x86_64 ;; darwin) OS=Darwin ;; linux) OS=Linux ;; windows) OS=Windows ;; esac true } adjust_arch() { # adjust archive name based on ARCH case ${ARCH} in 386) ARCH=i386 ;; amd64) ARCH=x86_64 ;; darwin) ARCH=Darwin ;; linux) ARCH=Linux ;; windows) ARCH=Windows ;; esac true } cat /dev/null </dev/null } echoerr() { echo "$@" 1>&2 } log_prefix() { echo "$0" } _logp=6 log_set_priority() { _logp="$1" } log_priority() { if test -z "$1"; then echo "$_logp" return fi [ "$1" -le "$_logp" ] } # check if stdout is a terminal... if test -t 1; then # see if it supports colors... ncolors=$(tput colors) if test -n "$ncolors" && test $ncolors -ge 8; then RESET="$(tput sgr0)" RED="$(tput setaf 1)" GREEN="$(tput setaf 2)" YELLOW="$(tput setaf 3)" BLUE="$(tput setaf 4)" CYAN="$(tput setaf 6)" fi fi CORAL="${RED}" BOLD="" FAINT="" if test -t 1 && test -n "$RESET"; then BOLD="$(tput bold)" FAINT="$(tput dim 2>/dev/null)" || FAINT="" fi _bruin_banner() { printf "\n" printf " %s\n" "${CORAL} _ _${RESET}" printf " %s\n" "${CORAL} | |__ _ __ _ _ _ _ __${RESET}" printf " %s\n" "${CORAL} | '_ \\| '__| | | | | '_ \\${RESET}" printf " %s\n" "${CORAL} | |_) | | | |_| | | | | |${RESET}" printf " %s\n" "${CORAL} |_.__/|_| \\__,_|_|_| |_|${RESET}" printf "\n" } _print_header() { printf " %s %s%s%s\n" "+" "$BOLD" "$1" "$RESET" printf " %s\n" "|" } _print_step() { printf " %s %s\n" "${CORAL}*${RESET}" "$1" printf " %s\n" "|" } _print_progress() { printf "\r %s %s" "|" "$1" } _print_success() { printf " %s %s\n" "${GREEN}<>${RESET}" "${GREEN}$1${RESET}" printf " %s\n" "|" } _print_footer() { printf " %s %s\n" "+" "$1" printf "\n" } _file_size() { wc -c < "$1" 2>/dev/null | tr -d ' ' } _format_mb() { awk "BEGIN {printf \"%.1f\", $1 / 1048576}" } _download_progress() { _dp_pid=$1 _dp_download_file=$2 _dp_total_size=$3 _dp_phase_file=$4 while kill -0 "$_dp_pid" 2>/dev/null; do _dp_phase=$(cat "$_dp_phase_file" 2>/dev/null) case "$_dp_phase" in extract) printf "\r %s Extracting archive... \n" "|" # Wait for install phase while kill -0 "$_dp_pid" 2>/dev/null; do _dp_phase2=$(cat "$_dp_phase_file" 2>/dev/null) if [ "$_dp_phase2" = "install" ]; then printf " %s Installing to %s...\n" "|" "${FAINT}${BINDIR}${RESET}" break fi sleep 0.1 done # Wait for completion while kill -0 "$_dp_pid" 2>/dev/null; do sleep 0.1 done break ;; *) # During download, show MB progress if [ "${_dp_total_size:-0}" -gt 0 ] 2>/dev/null && [ -f "$_dp_download_file" ]; then _dp_current=$(_file_size "$_dp_download_file") _dp_current=${_dp_current:-0} _dp_current_mb=$(_format_mb "$_dp_current") _dp_total_mb=$(_format_mb "$_dp_total_size") _dp_pct=$(( _dp_current * 100 / _dp_total_size )) if [ "$_dp_pct" -gt 100 ]; then _dp_pct=100; fi printf "\r %s Downloading: %s MB / %s MB (%s%%)" "|" "$_dp_current_mb" "$_dp_total_mb" "$_dp_pct" fi ;; esac sleep 0.1 done } log_tag() { case $1 in 2) echo "${BLUE}crit${RESET}" ;; 3) echo "${RED}err${RESET}" ;; 6) echo "${YELLOW}info${RESET}" ;; 7) echo "${CYAN}debug${RESET}" ;; 8) echo "${GREEN}success${RESET}" ;; # Added success tag *) echo "$1" ;; esac } log_debug() { log_priority 7 || return 0 echoerr "$(log_prefix)" "$(log_tag 7)" "$@" } log_info() { log_priority 6 || return 0 echoerr "$(log_prefix)" "$(log_tag 6)" "$@" } log_err() { log_priority 3 || return 0 echoerr "$(log_prefix)" "$(log_tag 5)" "$@" } log_crit() { log_priority 2 || return 0 echoerr "$(log_prefix)" "$(log_tag 2)" "$@" } log_success() { log_priority 5 || return 0 echoerr "$(log_prefix)" "$(log_tag 8)" "$@" } uname_os() { os=$(uname -s | tr '[:upper:]' '[:lower:]') case "$os" in cygwin_nt*) os="windows" ;; mingw*) os="windows" ;; msys_nt*) os="windows" ;; esac echo "$os" } uname_arch() { arch=$(uname -m) case $arch in x86_64) arch="amd64" ;; x86) arch="386" ;; i686) arch="386" ;; i386) arch="386" ;; aarch64) arch="arm64" ;; armv5*) arch="armv5" ;; armv6*) arch="armv6" ;; armv7*) arch="armv7" ;; esac echo ${arch} } uname_os_check() { os=$(uname_os) case "$os" in darwin) return 0 ;; dragonfly) return 0 ;; freebsd) return 0 ;; linux) return 0 ;; android) return 0 ;; nacl) return 0 ;; netbsd) return 0 ;; openbsd) return 0 ;; plan9) return 0 ;; solaris) return 0 ;; windows) return 0 ;; esac log_crit "uname_os_check '$(uname -s)' got converted to '$os' which is not a GOOS value. Please file bug at https://github.com/client9/shlib" return 1 } uname_arch_check() { arch=$(uname_arch) case "$arch" in 386) return 0 ;; amd64) return 0 ;; arm64) return 0 ;; armv5) return 0 ;; armv6) return 0 ;; armv7) return 0 ;; ppc64) return 0 ;; ppc64le) return 0 ;; mips) return 0 ;; mipsle) return 0 ;; mips64) return 0 ;; mips64le) return 0 ;; s390x) return 0 ;; amd64p32) return 0 ;; esac log_crit "uname_arch_check '$(uname -m)' got converted to '$arch' which is not a GOARCH value. Please file bug report at https://github.com/client9/shlib" return 1 } untar() { tarball=$1 case "${tarball}" in *.tar.gz | *.tgz) tar --no-same-owner -xzf "${tarball}" ;; *.tar) tar --no-same-owner -xf "${tarball}" ;; *.zip) unzip "${tarball}" ;; *) log_err "untar unknown archive format for ${tarball}" return 1 ;; esac } http_download_curl() { local_file=$1 source_url=$2 header=$3 if [ -z "$header" ]; then log_debug "Executing: curl -sL -o \"$local_file\" \"$source_url\"" code=$(curl -sL -o "$local_file" "$source_url") else log_debug "Executing: curl -sL -H \"$header\" -o \"$local_file\" \"$source_url\"" code=$(curl -sL -H "$header" -o "$local_file" "$source_url") fi log_debug "http_download_curl received HTTP status $code, return code $?" if [ $? -ne 0 ]; then log_err "Failed to download from $source_url" return 1 # Return 1 for failure fi return 0 } http_download_wget() { local_file=$1 source_url=$2 header=$3 if [ -z "$header" ]; then wget -q -O "$local_file" "$source_url" else wget -q --header "$header" -O "$local_file" "$source_url" fi } http_download() { log_debug "http_download $2" if is_command curl; then http_download_curl "$@" return elif is_command wget; then http_download_wget "$@" return fi log_crit "http_download unable to find wget or curl" return 1 } http_copy() { tmp=$(mktemp) http_download "${tmp}" "$1" "$2" || return 1 body=$(cat "$tmp") rm -f "${tmp}" echo "$body" } github_release() { owner_repo=$1 version=$2 test -z "$version" && version="latest" giturl="https://github.com/${owner_repo}/releases/${version}" log_debug "will get github releases from ${giturl}" json=$(http_copy "$giturl" "Accept:application/json") log_debug "json release info is $json" test -z "$json" && return 1 version=$(echo "$json" | tr -s '\n' ' ' | sed 's/.*"tag_name":"//' | sed 's/".*//') log_debug "Version found : '$version'" test -z "$version" && return 1 echo "$version" } hash_sha256() { TARGET=${1:-/dev/stdin} if is_command gsha256sum; then hash=$(gsha256sum "$TARGET") || return 1 echo "$hash" | cut -d ' ' -f 1 elif is_command sha256sum; then hash=$(sha256sum "$TARGET") || return 1 echo "$hash" | cut -d ' ' -f 1 elif is_command shasum; then hash=$(shasum -a 256 "$TARGET" 2>/dev/null) || return 1 echo "$hash" | cut -d ' ' -f 1 elif is_command openssl; then hash=$(openssl -dst openssl dgst -sha256 "$TARGET") || return 1 echo "$hash" | cut -d ' ' -f a else log_crit "hash_sha256 unable to find command to compute sha-256 hash" return 1 fi } hash_sha256_verify() { TARGET=$1 checksums=$2 if [ -z "$checksums" ]; then log_err "hash_sha256_verify checksum file not specified in arg2" return 1 fi BASENAME=${TARGET##*/} want=$(grep "${BASENAME}" "${checksums}" 2>/dev/null | tr '\t' ' ' | cut -d ' ' -f 1) if [ -z "$want" ]; then log_err "hash_sha256_verify unable to find checksum for '${TARGET}' in '${checksums}'" return 1 fi got=$(hash_sha256 "$TARGET") if [ "$want" != "$got" ]; then log_err "hash_sha256_verify checksum for '$TARGET' did not verify ${want} vs $got" return 1 fi } cat /dev/null <