From d611c95edb491bcbb13cdf9eb6ac8e8d6dd465d4 Mon Sep 17 00:00:00 2001 From: moeidtopcoder Date: Thu, 28 Jul 2022 16:24:53 +0000 Subject: [PATCH] Add 'scripts/run.sh' --- scripts/run.sh | 186 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 scripts/run.sh diff --git a/scripts/run.sh b/scripts/run.sh new file mode 100644 index 0000000..b3759ee --- /dev/null +++ b/scripts/run.sh @@ -0,0 +1,186 @@ +#!/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 "$@" +#=============================================================================================================================================================================