|
@@ -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}"
|