From d611c95edb491bcbb13cdf9eb6ac8e8d6dd465d4 Mon Sep 17 00:00:00 2001
From: moeidtopcoder <moeidtopcoder2@gmail.com>
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 "$@"
+#=============================================================================================================================================================================