Skip to content

Instantly share code, notes, and snippets.

@scriptonist
Created April 20, 2021 10:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save scriptonist/50d33a74870beccbc252a03923fb8435 to your computer and use it in GitHub Desktop.
Save scriptonist/50d33a74870beccbc252a03923fb8435 to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
# Some helpful functions
yell() { echo -e "${RED}FAILED> $* ${NC}" >&2; }
die() { yell "$*"; exit 1; }
try() { "$@" || die "failed executing: $*"; }
log() { echo -e "--> $*"; }
# Colors for colorizing
RED='\033[0;31m'
GREEN='\033[0;32m'
PURPLE='\033[0;35m'
BLUE='\033[0;34m'
YELLOW='\033[0;33m'
NC='\033[0m'
INSTALL_PATH=${INSTALL_PATH:-"/usr/local/bin"}
NEED_SUDO=0
function maybe_sudo() {
if [[ "$NEED_SUDO" == '1' ]]; then
sudo "$@"
else
"$@"
fi
}
# check for curl
hasCurl=$(which curl)
if [ "$?" = "1" ]; then
die "You need to install curl to use this script."
fi
release=${1:-latest}
log "Getting $release version..."
# adapted from https://github.com/openfaas/faas-cli/blob/master/get.sh
version=`echo $(curl -s -f -H 'Content-Type: application/json' https://releases.hasura.io/graphql-engine?agent=cli-get.sh) | sed -n -e "s/^.*\"$release\":\"\([^\",}]*\)\".*$/\1/p"`
if [ ! $version ]; then
log "${YELLOW}"
log "Failed while attempting to install hasura graphql-engine cli. Please manually install:"
log ""
log "2. Open your web browser and go to https://github.com/hasura/graphql-engine/releases"
log "2. Download the cli from latest release for your platform. Name it 'hasura'."
log "3. chmod +x ./hasura"
log "4. mv ./hasura /usr/local/bin"
log "${NC}"
die "exiting..."
fi
log "Latest version is $version"
# check for existing hasura installation
hasCli=$(which hasura)
if [ "$?" = "0" ]; then
log ""
log "${GREEN}You already have the hasura cli at '${hasCli}'${NC}"
export n=3
log "${YELLOW}Downloading again in $n seconds... Press Ctrl+C to cancel.${NC}"
log ""
sleep $n
fi
# get platform and arch
platform='unknown'
unamestr=`uname`
if [[ "$unamestr" == 'Linux' ]]; then
platform='linux'
elif [[ "$unamestr" == 'Darwin' ]]; then
platform='darwin'
fi
if [[ "$platform" == 'unknown' ]]; then
die "Unknown OS platform"
fi
arch='unknown'
archstr=`uname -m`
if [[ "$archstr" == 'x86_64' ]]; then
arch='amd64'
elif [[ "$archstr" == 'arm64' ]] && [[ "$platform" == 'darwin' ]]; then
# use amd64 builds on M1 Macs
arch='amd64'
else
arch='386'
fi
# some variables
suffix="-${platform}-${arch}"
targetFile="/tmp/cli-hasura$suffix"
if [ -e $targetFile ]; then
rm $targetFile
fi
log "${PURPLE}Downloading hasura for $platform-$arch to ${targetFile}${NC}"
url=https://github.com/hasura/graphql-engine/releases/download/$version/cli-hasura$suffix
try curl -L# -f -o $targetFile "$url"
try chmod +x $targetFile
log "${GREEN}Download complete!${NC}"
# check for sudo
needSudo=$(touch ${INSTALL_PATH}/.hasurainstall &> /dev/null)
if [[ "$?" == "1" ]]; then
NEED_SUDO=1
fi
rm ${INSTALL_PATH}/.hasurainstall &> /dev/null
if [[ "$NEED_SUDO" == '1' ]]; then
log
log "${YELLOW}Path '$INSTALL_PATH' requires root access to write."
log "${YELLOW}This script will attempt to execute the move command with sudo.${NC}"
log "${YELLOW}Are you ok with that? (y/N)${NC}"
read a
if [[ $a == "Y" || $a == "y" || $a = "" ]]; then
log
else
log
log " ${BLUE}sudo mv $targetFile ${INSTALL_PATH}/hasura${NC}"
log
die "Please move the binary manually using the command above."
fi
fi
log "Moving cli from $targetFile to ${INSTALL_PATH}"
try maybe_sudo mv $targetFile ${INSTALL_PATH}/hasura
log
log "${GREEN}hasura cli installed to ${INSTALL_PATH}${NC}"
log
if [ -e $targetFile ]; then
rm $targetFile
fi
hasura version
if ! $(echo "$PATH" | grep -q "$INSTALL_PATH"); then
log
log "${YELLOW}$INSTALL_PATH not found in \$PATH, you might need to add it${NC}"
log
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment