#!/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 "Installing $LOCATION/$name..." chmod 755 "$temp_location" && \ sudo chown root:root "$temp_location" && \ sudo mkdir -p "$LOCATION" && \ sudo mv "$temp_location" "$LOCATION/$name" if [[ $? != 0 ]]; then echo "Error: Failed to install $name" >&2 fail fi } 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) install "warp-packer" "$WARP_LINK" && \ install "warp4j" "$WARP4J_LINK" && \ echo "Successfully installed"