#!/usr/bin/env bash # install location LOCATION=/usr/local/bin # exit top level program from subshell trap "exit 1" TERM export TOP_PID=$$ function fail() { kill -s TERM $TOP_PID } # platform IDs LIN=linux MAC=macos WIN=windows # returns this platform ID function get_this_platform() { local this_platform="$(uname -s)" case $this_platform in Linux*) echo $LIN ;; Darwin*) echo $MAC ;; *) echo "Error: Unsupported platform $this_platform" >&2 fail ;; esac } # actually sets this platform THIS_PLATFORM=$(get_this_platform) # fetches latest release download link for the platform function get_latest_warp_link() { local this_platform=$1 local info info=$(curl -fsSL https://api.github.com/repos/dgiagio/warp/releases) if [[ $? != 0 ]]; then echo "Error: Failed to get information about releases" >&2 fail fi echo "$info" \ | grep "browser_download_url" \ | grep "$this_platform-x64.warp-packer" \ | head -n 1 \ | awk '{print $2}' \ | sed -e 's/"//g' } # downloads and installs single binary function install() { local name=$1 local link=$2 local temp_location="/tmp/$name" echo "Downloading $name..." curl -fsSL -o "$temp_location" "$link" if [[ $? != 0 ]]; then echo "Error: Failed to download $name" >&2 fail fi echo "Creating $LOCATION/$name..." sudo install -D \ --mode=755 \ --owner=root \ --group=root \ "$temp_location" "$LOCATION" if [[ $? != 0 ]]; then echo "Error: Failed to install $name" >&2 fail fi } # returns missing dependencies function get_missing_deps() { local deps=( "awk" \ "curl" \ "grep" \ "sed" \ "sort" \ "tar" \ "unzip" \ "zip" \ ) for d in ${deps[@]}; do if ! command -v $d &> /dev/null ; then echo -n "$d " fi done } WARP4J_LINK="https://raw.githubusercontent.com/guziks/warp4j/master/warp4j" echo "Getting information about warp-packer releases..." WARP_LINK=$(get_latest_warp_link $THIS_PLATFORM) MISSING_DEPS=$(get_missing_deps) install "warp-packer" "$WARP_LINK" && \ install "warp4j" "$WARP4J_LINK" if [[ -z $MISSING_DEPS ]]; then echo "Successfully installed" else echo "Main tools successfully installed" echo "Please install following with your package manager:" for d in ${MISSING_DEPS[@]}; do echo -n "$d " done echo exit 1 fi