Browse Source

chore(musare.sh): fixed all shellcheck errors/warnings, implemented all recommendations

Kristian Vos 3 years ago
parent
commit
85bd7eec4e
1 changed files with 71 additions and 62 deletions
  1. 71 62
      musare.sh

+ 71 - 62
musare.sh

@@ -8,29 +8,35 @@ YELLOW='\033[0;93m'
 GREEN='\033[0;32m'
 NC='\033[0m'
 
-scriptLocation="$(dirname -- $(readlink -fn -- "$0"; echo x))"
-cd "${scriptLocation%x}"
+scriptLocation=$(dirname -- "$(readlink -fn -- "$0"; echo x)")
+cd "${scriptLocation%x}" || exit
 
 handleServices()
 {
     validServices=(backend frontend mongo redis)
-    services=()
+    servicesArray=()
     invalidServices=false
-    for x in $@; do
-        if [[ ${validServices[@]} =~ (^|[[:space:]])"$x"($|[[:space:]]) ]]; then
-            if ! [[ ${services[@]} =~ (^|[[:space:]])"$x"($|[[:space:]]) ]]; then
-                services+=("${x}")
-            fi
-        else
-            if [[ $invalidServices == false ]]; then
-                invalidServices="${x}"
+    for x in "$@"; do
+        for validService in "${validServices[@]}"
+        do
+            if [[ ${validService} =~ (^|[[:space:]])"$x"($|[[:space:]]) ]]; then
+                for service in "${servicesArray[@]}"
+                do
+                    if ! [[ "$service" =~ (^|[[:space:]])"$x"($|[[:space:]]) ]]; then
+                        servicesArray+=("$x")
+                    fi
+                done
             else
-                invalidServices="${invalidServices} ${x}"
+                if [[ $invalidServices == false ]]; then
+                    invalidServices="${x}"
+                else
+                    invalidServices="${invalidServices} ${x}"
+                fi
             fi
-        fi
+        done
     done
-    if [[ $invalidServices == false && ${#services[@]} > 0 ]]; then
-        echo "1|${services[@]}"
+    if [[ $invalidServices == false && ${#servicesArray[@]} -gt 0 ]]; then
+        echo "1|" "${servicesArray[@]}"
     elif [[ $invalidServices == false ]]; then
         echo "1|all"
     else
@@ -42,60 +48,60 @@ if [[ -x "$(command -v docker)" && -x "$(command -v docker-compose)" ]]; then
     case $1 in
     start)
         echo -e "${CYAN}Musare | Start Services${NC}"
-        services=$(handleServices "${@:2}")
-        if [[ ${services:0:1} == 1 && ${services:2:4} == "all" ]]; then
+        servicesString=$(handleServices "${@:2}")
+        if [[ ${servicesString:0:1} == 1 && ${servicesString:2:4} == "all" ]]; then
             docker-compose up -d
-        elif [[ ${services:0:1} == 1 ]]; then
-            docker-compose up -d ${services:2}
+        elif [[ ${servicesString:0:1} == 1 ]]; then
+            docker-compose up -d "${servicesString:2}"
         else
-            echo -e "${RED}${services:2}\n${YELLOW}Usage: $(basename $0) start [backend, frontend, mongo, redis]${NC}"
+            echo -e "${RED}${servicesString:2}\n${YELLOW}Usage: $(basename "$0") start [backend, frontend, mongo, redis]${NC}"
         fi
         ;;
 
     stop)
         echo -e "${CYAN}Musare | Stop Services${NC}"
-        services=$(handleServices "${@:2}")
-        if [[ ${services:0:1} == 1 && ${services:2:4} == "all" ]]; then
+        servicesString=$(handleServices "${@:2}")
+        if [[ ${servicesString:0:1} == 1 && ${servicesString:2:4} == "all" ]]; then
             docker-compose stop
-        elif [[ ${services:0:1} == 1 ]]; then
-            docker-compose stop ${services:2}
+        elif [[ ${servicesString:0:1} == 1 ]]; then
+            docker-compose stop "${servicesString:2}"
         else
-            echo -e "${RED}${services:2}\n${YELLOW}Usage: $(basename $0) stop [backend, frontend, mongo, redis]${NC}"
+            echo -e "${RED}${servicesString:2}\n${YELLOW}Usage: $(basename "$0") stop [backend, frontend, mongo, redis]${NC}"
         fi
         ;;
 
     restart)
         echo -e "${CYAN}Musare | Restart Services${NC}"
-        services=$(handleServices "${@:2}")
-        if [[ ${services:0:1} == 1 && ${services:2:4} == "all" ]]; then
+        servicesString=$(handleServices "${@:2}")
+        if [[ ${servicesString:0:1} == 1 && ${servicesString:2:4} == "all" ]]; then
             docker-compose stop
             docker-compose up -d
-        elif [[ ${services:0:1} == 1 ]]; then
-            docker-compose stop ${services:2}
-            docker-compose up -d ${services:2}
+        elif [[ ${servicesString:0:1} == 1 ]]; then
+            docker-compose stop "${servicesString:2}"
+            docker-compose up -d "${servicesString:2}"
         else
-            echo -e "${RED}${services:2}\n${YELLOW}Usage: $(basename $0) restart [backend, frontend, mongo, redis]${NC}"
+            echo -e "${RED}${servicesString:2}\n${YELLOW}Usage: $(basename "$0") restart [backend, frontend, mongo, redis]${NC}"
         fi
         ;;
 
     build)
         echo -e "${CYAN}Musare | Build Services${NC}"
-        services=$(handleServices "${@:2}")
-        if [[ ${services:0:1} == 1 && ${services:2:4} == "all" ]]; then
+        servicesString=$(handleServices "${@:2}")
+        if [[ ${servicesString:0:1} == 1 && ${servicesString:2:4} == "all" ]]; then
             docker-compose build
-        elif [[ ${services:0:1} == 1 ]]; then
-            docker-compose build ${services:2}
+        elif [[ ${servicesString:0:1} == 1 ]]; then
+            docker-compose build "${servicesString:2}"
         else
-            echo -e "${RED}${services:2}\n${YELLOW}Usage: $(basename $0) build [backend, frontend, mongo, redis]${NC}"
+            echo -e "${RED}${servicesString:2}\n${YELLOW}Usage: $(basename "$0") build [backend, frontend, mongo, redis]${NC}"
         fi
         ;;
 
     reset)
         echo -e "${CYAN}Musare | Reset Services${NC}"
-        services=$(handleServices "${@:2}")
-        if [[ ${services:0:1} == 1 && ${services:2:4} == "all" ]]; then
+        servicesString=$(handleServices "${@:2}")
+        if [[ ${servicesString:0:1} == 1 && ${servicesString:2:4} == "all" ]]; then
             echo -e "${GREEN}Are you sure you want to reset all data? ${YELLOW}[y,n]: ${NC}"
-            read confirm
+            read -r confirm
             if [[ "${confirm}" == y* ]]; then
                 docker-compose stop
                 docker-compose rm -v --force
@@ -108,23 +114,23 @@ if [[ -x "$(command -v docker)" && -x "$(command -v docker-compose)" ]]; then
             else
                 echo -e "${RED}Cancelled reset${NC}"
             fi
-        elif [[ ${services:0:1} == 1 ]]; then
-            echo -e "${GREEN}Are you sure you want to reset all data for $(echo ${services:2} | tr ' ' ',')? ${YELLOW}[y,n]: ${NC}"
-            read confirm
+        elif [[ ${servicesString:0:1} == 1 ]]; then
+            echo -e "${GREEN}Are you sure you want to reset all data for $(echo "${servicesString:2}" | tr ' ' ',')? ${YELLOW}[y,n]: ${NC}"
+            read -r confirm
             if [[ "${confirm}" == y* ]]; then
-                docker-compose stop ${services:2}
-                docker-compose rm -v --force ${services:2}
-                if [[ "${services:2}" == *redis* && -d ".redis" ]]; then
+                docker-compose stop "${servicesString:2}"
+                docker-compose rm -v --force "${servicesString:2}"
+                if [[ "${servicesString:2}" == *redis* && -d ".redis" ]]; then
                     rm -rf .redis
                 fi
-                if [[ "${services:2}" == *mongo* && -d ".db" ]]; then
+                if [[ "${servicesString:2}" == *mongo* && -d ".db" ]]; then
                     rm -rf .db
                 fi
             else
                 echo -e "${RED}Cancelled reset${NC}"
             fi
         else
-            echo -e "${RED}${services:2}\n${YELLOW}Usage: $(basename $0) build [backend, frontend, mongo, redis]${NC}"
+            echo -e "${RED}${servicesString:2}\n${YELLOW}Usage: $(basename "$0") build [backend, frontend, mongo, redis]${NC}"
         fi
         ;;
 
@@ -135,10 +141,10 @@ if [[ -x "$(command -v docker)" && -x "$(command -v docker-compose)" ]]; then
             if [[ -z $containerId ]]; then
                 echo -e "${RED}Error: Backend offline, please start to attach.${NC}"
             else
-                docker attach $containerId
+                docker attach "$containerId"
             fi
         else
-            echo -e "${RED}Invalid service $2\n${YELLOW}Usage: $(basename $0) attach backend${NC}"
+            echo -e "${RED}Invalid service $2\n${YELLOW}Usage: $(basename "$0") attach backend${NC}"
         fi
         ;;
 
@@ -161,7 +167,7 @@ if [[ -x "$(command -v docker)" && -x "$(command -v docker-compose)" ]]; then
                 docker-compose exec backend npx eslint app/logic $fix
                 ;;
             *)
-                echo -e "${RED}Invalid service $2\n${YELLOW}Usage: $(basename $0) eslint [backend, frontend] [fix]${NC}"
+                echo -e "${RED}Invalid service $2\n${YELLOW}Usage: $(basename "$0") eslint [backend, frontend] [fix]${NC}"
                 ;;
         esac
         ;;
@@ -169,12 +175,12 @@ if [[ -x "$(command -v docker)" && -x "$(command -v docker-compose)" ]]; then
     update)
         echo -e "${CYAN}Musare | Update${NC}"
         git fetch
-        if [[ $(git rev-parse HEAD) == $(git rev-parse @{u}) ]]; then
+        if [[ $(git rev-parse HEAD) == $(git rev-parse @\{u\}) ]]; then
             echo -e "${GREEN}Already up to date${NC}"
         else
-            dbChange=$(git log --name-only --oneline HEAD..origin/$(git rev-parse --abbrev-ref HEAD) | grep "backend/logic/db/schemas")
-            fcChange=$(git log --name-only --oneline HEAD..origin/$(git rev-parse --abbrev-ref HEAD) | grep "frontend/dist/config/template.json")
-            bcChange=$(git log --name-only --oneline HEAD..origin/$(git rev-parse --abbrev-ref HEAD) | grep "backend/config/template.json")
+            dbChange=$(git log --name-only --oneline HEAD..origin/"$(git rev-parse --abbrev-ref HEAD)" | grep "backend/logic/db/schemas")
+            fcChange=$(git log --name-only --oneline HEAD..origin/"$(git rev-parse --abbrev-ref HEAD)" | grep "frontend/dist/config/template.json")
+            bcChange=$(git log --name-only --oneline HEAD..origin/"$(git rev-parse --abbrev-ref HEAD)" | grep "backend/config/template.json")
             if [[ ( $2 == "auto" && -z $dbChange && -z $fcChange && -z $bcChange ) || -z $2 ]]; then
                 echo -e "${CYAN}Updating...${NC}"
                 git pull
@@ -199,12 +205,13 @@ if [[ -x "$(command -v docker)" && -x "$(command -v docker-compose)" ]]; then
 
     logs)
         echo -e "${CYAN}Musare | Logs${NC}"
-        docker-compose logs ${@:2}
+        docker-compose logs "${@:2}"
         ;;
 
     backup)
         echo -e "${CYAN}Musare | Backup${NC}"
         if [[ -f .env ]]; then
+            # shellcheck disable=SC1091
             source .env
             if [[ ! -d "${scriptLocation%x}/backups" ]]; then
                 echo -e "${YELLOW}Creating backup directory at ${scriptLocation%x}/backups${NC}"
@@ -220,10 +227,11 @@ if [[ -x "$(command -v docker)" && -x "$(command -v docker-compose)" ]]; then
     restore)
         echo -e "${CYAN}Musare | Restore${NC}"
         if [[ -f .env ]]; then
+            # shellcheck disable=SC1091
             source .env
             if [[ -z $2 ]]; then
                 echo -e "${GREEN}Please enter the full path of the dump you wish to restore: ${NC}"
-                read restoreFile
+                read -r restoreFile
             else
                 restoreFile=$2
             fi
@@ -234,7 +242,7 @@ if [[ -x "$(command -v docker)" && -x "$(command -v docker-compose)" ]]; then
             elif [[ ! -f ${restoreFile} ]]; then
                 echo -e "${RED}Error: no file at restore path given, cancelled restoration.${NC}"
             else
-                docker-compose exec -T mongo sh -c "mongorestore --authenticationDatabase musare -u ${MONGO_USER_USERNAME} -p ${MONGO_USER_PASSWORD} --archive" < ${restoreFile}
+                docker-compose exec -T mongo sh -c "mongorestore --authenticationDatabase musare -u ${MONGO_USER_USERNAME} -p ${MONGO_USER_PASSWORD} --archive" < "${restoreFile}"
             fi
         else
             echo -e "${RED}Error: .env does not exist${NC}"
@@ -244,33 +252,34 @@ if [[ -x "$(command -v docker)" && -x "$(command -v docker-compose)" ]]; then
     admin)
         echo -e "${CYAN}Musare | Add Admin${NC}"
         if [[ -f .env ]]; then
+            # shellcheck disable=SC1091
             source .env
             if [[ $2 == "add" ]]; then
                 if [[ -z $3 ]]; then
                     echo -e "${GREEN}Please enter the username of the user you wish to make an admin: ${NC}"
-                    read adminUser
+                    read -r adminUser
                 else
                     adminUser=$3
                 fi
                 if [[ -z $adminUser ]]; then
                     echo -e "${RED}Error: Username for new admin not provided.${NC}"
                 else
-                    docker-compose exec mongo mongo musare -u ${MONGO_USER_USERNAME} -p ${MONGO_USER_PASSWORD} --eval "db.users.update({username: '${adminUser}'}, {\$set: {role: 'admin'}})"
+                    docker-compose exec mongo mongo musare -u "${MONGO_USER_USERNAME}" -p "${MONGO_USER_PASSWORD}" --eval "db.users.update({username: '${adminUser}'}, {\$set: {role: 'admin'}})"
                 fi
             elif [[ $2 == "remove" ]]; then
                 if [[ -z $3 ]]; then
                     echo -e "${GREEN}Please enter the username of the user you wish to remove as admin: ${NC}"
-                    read adminUser
+                    read -r adminUser
                 else
                     adminUser=$3
                 fi
                 if [[ -z $adminUser ]]; then
                     echo -e "${RED}Error: Username for new admin not provided.${NC}"
                 else
-                    docker-compose exec mongo mongo musare -u ${MONGO_USER_USERNAME} -p ${MONGO_USER_PASSWORD} --eval "db.users.update({username: '${adminUser}'}, {\$set: {role: 'default'}})"
+                    docker-compose exec mongo mongo musare -u "${MONGO_USER_USERNAME}" -p "${MONGO_USER_PASSWORD}" --eval "db.users.update({username: '${adminUser}'}, {\$set: {role: 'default'}})"
                 fi
             else
-                echo -e "${RED}Invalid command $2\n${YELLOW}Usage: $(basename $0) admin [add,remove] username${NC}"
+                echo -e "${RED}Invalid command $2\n${YELLOW}Usage: $(basename "$0") admin [add,remove] username${NC}"
             fi
         else
             echo -e "${RED}Error: .env does not exist${NC}"