143 lines
3.4 KiB
Bash
Executable File
143 lines
3.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# helper functions
|
|
yell() { echo -e "${RED}FAILED> $* ${NC}" >&2; }
|
|
die() { yell "$*"; exit 1; }
|
|
try() { "$@" || die "failed executing: $*"; }
|
|
log() { echo -e "--> $*"; }
|
|
maybe_sudo() { $([ $NEED_SUDO ] && echo sudo) "$@"; }
|
|
|
|
# console colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
PURPLE='\033[0;35m'
|
|
BLUE='\033[0;34m'
|
|
YELLOW='\033[0;33m'
|
|
NC='\033[0m'
|
|
|
|
# basic variables
|
|
INSTALL_PATH=${INSTALL_PATH:-"/usr/local/bin"}
|
|
NEED_SUDO=${NEED_SUDO:-1}
|
|
REPO="nhost/nhost"
|
|
|
|
# check for existing installation
|
|
hasCli=$(which nhost)
|
|
if [ "$?" = "0" ]; then
|
|
log ""
|
|
log "${GREEN}You already have the Nhost CLI at '${hasCli}'${NC}"
|
|
export n=3
|
|
log "${YELLOW}Downloading again in $n seconds... Press Ctrl+C to cancel.${NC}"
|
|
log ""
|
|
sleep $n
|
|
fi
|
|
|
|
# check for curl
|
|
hasCurl=$(which curl)
|
|
if [ "$?" = "1" ]; then
|
|
die "You need to install curl to use this script."
|
|
fi
|
|
|
|
# get release version
|
|
version=${1:-latest}
|
|
log "Getting $version version..."
|
|
if [[ "$version" == "latest" ]]; then
|
|
release=$(curl --silent https://api.github.com/repos/nhost/nhost/releases\?per_page=100 | grep tag_name | grep \"cli\@ | head -n 1 | sed 's/.*"tag_name": "\([^"]*\)".*/\1/')
|
|
version=$( echo $release | sed 's/.*@//')
|
|
else
|
|
release="cli@$version"
|
|
fi
|
|
|
|
# check version exists
|
|
if [ ! $version ]; then
|
|
log "${YELLOW}"
|
|
log "Failed while attempting to install Nhost CLI. Please manually install:"
|
|
log ""
|
|
log "1. Open your web browser and go to https://github.com/$REPO/releases/latest"
|
|
log "2. Download the CLI from latest release for your platform. Name it 'nhost'."
|
|
log "3. chmod +x ./cli"
|
|
log "4. mv ./cli /usr/local/bin/nhost"
|
|
log "${NC}"
|
|
die "exiting..."
|
|
fi
|
|
|
|
# show latest version
|
|
if [[ "$release" == "latest" ]]; then
|
|
log "Latest version is $version"
|
|
fi
|
|
|
|
# get platform
|
|
platform='unknown'
|
|
unamestr=`uname`
|
|
if [[ "$unamestr" == 'Linux' ]]; then
|
|
platform='linux'
|
|
elif [[ "$unamestr" == 'Darwin' ]]; then
|
|
platform='darwin'
|
|
elif [[ "$unamestr" == 'Windows' ]]; then
|
|
platform='windows'
|
|
fi
|
|
|
|
# die for unknown platform
|
|
if [[ "$platform" == 'unknown' ]]; then
|
|
die "Unknown OS platform"
|
|
fi
|
|
|
|
# set arch
|
|
arch='unknown'
|
|
archstr=`uname -m`
|
|
if [[ "$archstr" == 'x86_64' ]]; then
|
|
arch='amd64'
|
|
elif [[ "$archstr" == 'arm64' || "$archstr" == 'aarch64' ]]; then
|
|
arch='arm64'
|
|
else
|
|
arch='386'
|
|
fi
|
|
|
|
# some variables
|
|
suffix="-${platform}-${arch}"
|
|
|
|
if [[ "$platform" != 'windows' ]]; then
|
|
extension=".tar.gz"
|
|
else
|
|
extension='.zip'
|
|
fi
|
|
|
|
# variables for install
|
|
targetFile="cli-$version$suffix$extension"
|
|
|
|
encodedRelease=$(echo $release | sed 's/@/%40/g')
|
|
url="https://github.com/${REPO}/releases/download/${encodedRelease}/${targetFile}"
|
|
|
|
# remove previous download
|
|
if [ -e $targetFile ]; then
|
|
rm $targetFile
|
|
fi
|
|
|
|
# tell what we are downloading
|
|
log "${PURPLE}Downloading Nhost ${version} for ${platform}-${arch} to ${targetFile}${NC}"
|
|
|
|
# download and extract files
|
|
try curl -L -f -o $targetFile "$url"
|
|
try chmod +x $targetFile
|
|
|
|
if [[ "$platform" != 'windows' ]]; then
|
|
try tar -xvf $targetFile
|
|
else
|
|
try unzip $targetFile
|
|
fi
|
|
|
|
try rm ./$targetFile
|
|
|
|
# install and test
|
|
log "${GREEN}Download complete!${NC}"
|
|
echo
|
|
|
|
if [[ "$platform" != 'windows' ]]; then
|
|
try sudo mv ./cli ${INSTALL_PATH}/nhost
|
|
nhost --version
|
|
echo
|
|
log "${BLUE}Use Nhost CLI with: nhost --help${NC}"
|
|
else
|
|
try mv cli.exe nhost.exe
|
|
log "${BLUE}Please copy nhost.exe in a directory covered by your Windows path"
|
|
fi
|