Skip to content

Instantly share code, notes, and snippets.

@vladholubiev
Last active September 15, 2021 09:53
Show Gist options
  • Save vladholubiev/961e8b1d279267d5870195134239aa98 to your computer and use it in GitHub Desktop.
Save vladholubiev/961e8b1d279267d5870195134239aa98 to your computer and use it in GitHub Desktop.
Copy of script behind slss.io/install, but without logic for China region. This helps to avoid timeouts in CI environment, when originals script tries to install from China mirror by mistake.
#!/usr/bin/env bash
#
# Download and install standalone binary.
# The binary version can be specified by setting a VERSION variable.
# e.g. VERSION=2.21.1 bash install.sh
# If VERSION is unspecified it will download the latest version.
set -e
reset="\033[0m"
red="\033[31m"
green="\033[32m"
yellow="\033[33m"
cyan="\033[36m"
white="\033[37m"
printf "\n$yellow Installing Serverless!$reset\n\n"
PLATFORM="linux"
ARCH='x64'
if [[ -z "${VERSION}" ]]
then
# Get latest tag
TAG=`curl -L --silent https://api.github.com/repos/serverless/serverless/releases/latest 2>&1 | grep 'tag_name' | grep -oE "v[0-9]+\.[0-9]+\.[0-9]+"`
VERSION=${TAG:1}
else
TAG=v$VERSION
fi
BINARY_URL=https://github.com/serverless/serverless/releases/download/$TAG/serverless-$PLATFORM-$ARCH
# Download binary
BINARIES_DIR_PATH=$HOME/.serverless/bin
BINARY_PATH=$BINARIES_DIR_PATH/serverless
mkdir -p $BINARIES_DIR_PATH
printf "$yellow Downloading binary for version $VERSION...$reset\n"
version_error_msg (){
echo "Could not download binary. Is the version correct?"
}
trap version_error_msg ERR
curl --fail -L -o $BINARY_PATH.tmp $BINARY_URL
trap - ERR
mv $BINARY_PATH.tmp $BINARY_PATH
chmod +x $BINARY_PATH
# Ensure aliases
ln -sf serverless $BINARIES_DIR_PATH/sls
# Add to $PATH
SOURCE_STR="# Added by serverless binary installer\nexport PATH=\"\$HOME/.serverless/bin:\$PATH\"\n"
add_to_path () {
command printf "\n$SOURCE_STR" >> "$1"
printf "\n$yellow Added the following to $1:\n\n$SOURCE_STR$reset"
}
SHELLTYPE="$(basename "/$SHELL")"
if [[ $SHELLTYPE = "fish" ]]; then
command fish -c 'set -U fish_user_paths $fish_user_paths ~/.serverless/bin'
printf "\n$yellow Added ~/.serverless/bin to fish_user_paths universal variable$reset."
elif [[ $SHELLTYPE = "zsh" ]]; then
SHELL_CONFIG=$HOME/.zshrc
if [ ! -r $SHELL_CONFIG ] || (! `grep -q '.serverless/bin' $SHELL_CONFIG`); then
add_to_path $SHELL_CONFIG
fi
else
SHELL_CONFIG=$HOME/.bashrc
if [ ! -r $SHELL_CONFIG ] || (! `grep -q '.serverless/bin' $SHELL_CONFIG`); then
add_to_path $SHELL_CONFIG
fi
SHELL_CONFIG=$HOME/.bash_profile
if [[ -r $SHELL_CONFIG ]]; then
if [[ ! $(grep -q '.serverless/bin' $SHELL_CONFIG) ]]; then
add_to_path $SHELL_CONFIG
fi
else
SHELL_CONFIG=$HOME/.bash_login
if [[ -r $SHELL_CONFIG ]]; then
if [[ ! $(grep -q '.serverless/bin' $SHELL_CONFIG) ]]; then
add_to_path $SHELL_CONFIG
fi
else
SHELL_CONFIG=$HOME/.profile
if [ ! -r $SHELL_CONFIG ] || (! `grep -q '.serverless/bin' $SHELL_CONFIG`); then
add_to_path $SHELL_CONFIG
fi
fi
fi
fi
$HOME/.serverless/bin/serverless binary-postinstall
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment