Backend/scripts/run.sh
2022-07-28 16:24:53 +00:00

187 lines
7.1 KiB
Bash

#!/bin/bash
set -Eeuo pipefail
trap cleanup SIGINT SIGTERM ERR EXIT
script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P)
usage() {
cat << EOF # remove the space between << and EOF, this is due to web plugin issue
Usage: $(basename "${BASH_SOURCE[0]}") [-h] [-build_docker] [-build_and_run_docker] [-stop_docker] [-run_app] [-run_test] [-run_lint] [-deploy_on_kubernetes]
This script helps you to runn the application in different forms. below you can get the full list of available options.
Available options:
-h, --help Print this help and exit
-build_docker Build the docker image called "freeland:latest"
-build_and_run_docker Build the docker image and run on local machine
-stop_docker Stop running docker container named "freeland"
-run_app Run application with npm in usual way for development
-run_test Run npm test
-run_lint Run npm lint
-generate_doc Generate the code documentation
-deploy_on_kubernetes you need to have a kubernetes cluster already up and running on the machine.
EOF
exit
}
#=============================================================================================================================================================================
cleanup() {
trap - SIGINT SIGTERM ERR EXIT
# script cleanup here
}
#=============================================================================================================================================================================
setup_colors() {
if [[ -t 2 ]] && [[ -z "${NO_COLOR-}" ]] && [[ "${TERM-}" != "dumb" ]]; then
NOFORMAT='\033[0m' RED='\033[0;31m' GREEN='\033[0;32m' ORANGE='\033[0;33m' BLUE='\033[0;34m' PURPLE='\033[0;35m' CYAN='\033[0;36m' YELLOW='\033[1;33m'
else
NOFORMAT='' RED='' GREEN='' ORANGE='' BLUE='' PURPLE='' CYAN='' YELLOW=''
fi
}
#=============================================================================================================================================================================
msg() {
echo >&2 -e "${1-}"
}
#=============================================================================================================================================================================
die() {
local msg=$1
local code=${2-1} # default exit status 1
msg "$msg"
exit "$code"
}
#=============================================================================================================================================================================
checkIfHelmIsInstalled()
{
echo "Checking Helm ..."
if command which helm > /dev/null; then
echo "Helm is not installed! :("
echo "Installing Helm ..."
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
sudo chmod 700 get_helm.sh
./get_helm.sh
echo "Checking secrets helm plugin..."
helm plugin install https://github.com/jkroepke/helm-secrets --version v3.12.0 || true
echo "helm is installed, skipping..."
else
echo "Helm is installed :) ..."
sleep 1
fi
}
checkIfSkaffoldIsInstalled()
{
echo "Checking Skaffold ..."
if command which helm > /dev; then
echo "Skaffold is not installed! :("
echo "Installing Skaffold ..."
curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64 && \
sudo install skaffold /usr/local/bin/
echo "Skaffold is installed, skipping..."
else
echo "Helm is installed :) ..."
sleep 1
fi
}
#=============================================================================================================================================================================
runOnKubernetes(){
checkIfHelmIsInstalled
checkIfSkaffoldIsInstalled
cd ..
make
}
#=============================================================================================================================================================================
runTheApp()
{
cd ..
npm install
npm start
}
#=============================================================================================================================================================================
runTheTests()
{
cd ..
npm install
npm test
}
#=============================================================================================================================================================================
runtheLint()
{
cd ..
npm install
npm run lint
}
#=============================================================================================================================================================================
runDockerImage(){
cd ..
docker-compose up -d
}
#=============================================================================================================================================================================
stopDockerImage(){
cd ..
docker-compose down
}
#=============================================================================================================================================================================
generateDoc(){
cd ..
npm install
npm run doc
}
#=============================================================================================================================================================================
buildDockerImage()
{
echo "Checking Docker ..."
if [[ $(which docker) && $(docker --version) ]]; then
echo "Docker is installed :) ..."
sleep 1
else
echo "Docker is not installed! :("
echo "Installing Docker ..."
sudo apt install docker.io || true
sudo usermod -aG docker $USER
newgrp docker
fi
echo "Checking docker-compose ..."
if [[ $(which docker-compose) && $(docker-compose --version) ]]; then
echo "docker-compose is installed :) ..."
sleep 1
else
echo "docker-compose is not installed! :("
echo "Installing Docker ..."
sudo apt install docker-compose || true
fi
}
init(){
sudo chmod 666 /var/run/docker.sock
}
#=============================================================================================================================================================================
parse_params() {
# default values of variables set from params
while :; do
case "${1-}" in
-h | --help) usage ;;
-build_docker) buildDockerImage ;;
-build_and_run_docker) runDockerImage ;;
-stop_docker) stopDockerImage ;;
-run_app) runTheApp ;;
-run_test) runTheTests ;;
-run_lint) runtheLint ;;
-generate_doc) generateDoc;;
-deploy_on_kubernetes) runOnKubernetes ;;
-v | --verbose) set -x ;;
--no-color) NO_COLOR=1 ;;
-?*) die "Unknown option: $1" ;;
*) break ;;
esac
shift
done
args=("$@")
return 0
}
#=============================================================================================================================================================================
clear
setup_colors
init
parse_params "$@"
#=============================================================================================================================================================================