UNPKG

4.03 kBapplication/x-shView Raw
1#!/bin/bash
2
3### Shell script to spin up a docker container for mysql.
4
5## color codes
6RED='\033[1;31m'
7GREEN='\033[1;32m'
8YELLOW='\033[1;33m'
9CYAN='\033[1;36m'
10PLAIN='\033[0m'
11
12## variables
13MYSQL_CONTAINER="mysql_c"
14HOST="localhost"
15USER="root"
16PASSWORD="pass"
17PORT=3306
18DATABASE="testdb"
19if [ "$1" ]; then
20 HOST=$1
21fi
22if [ "$2" ]; then
23 PORT=$2
24fi
25if [ "$3" ]; then
26 USER=$3
27fi
28if [ "$4" ]; then
29 PASSWORD=$4
30fi
31if [ "$5" ]; then
32 DATABASE=$5
33fi
34
35## check if docker exists
36printf "\n${RED}>> Checking for docker${PLAIN} ${GREEN}...${PLAIN}"
37docker -v > /dev/null 2>&1
38DOCKER_EXISTS=$?
39if [ "$DOCKER_EXISTS" -ne 0 ]; then
40 printf "\n\n${CYAN}Status: ${PLAIN}${RED}Docker not found. Terminating setup.${PLAIN}\n\n"
41 exit 1
42fi
43printf "\n${CYAN}Found docker. Moving on with the setup.${PLAIN}\n"
44
45
46## cleaning up previous builds
47printf "\n${RED}>> Finding old builds and cleaning up${PLAIN} ${GREEN}...${PLAIN}"
48docker rm -f $MYSQL_CONTAINER > /dev/null 2>&1
49printf "\n${CYAN}Clean up complete.${PLAIN}\n"
50
51DOCKER_IMAGE=mysql:8.0
52
53## pull latest mysql image
54printf "\n${RED}>> Pulling ${DOCKER_IMAGE} image${PLAIN} ${GREEN}...${PLAIN}"
55
56docker pull ${DOCKER_IMAGE} > /dev/null 2>&1
57printf "\n${CYAN}Image successfully built.${PLAIN}\n"
58
59## run the mysql container
60printf "\n${RED}>> Starting the mysql container${PLAIN} ${GREEN}...${PLAIN}"
61CONTAINER_STATUS=$(docker run --name $MYSQL_CONTAINER -e MYSQL_ROOT_USER=$USER -e MYSQL_ROOT_PASSWORD=$PASSWORD -p $PORT:3306 -d ${DOCKER_IMAGE} 2>&1)
62if [[ "$CONTAINER_STATUS" == *"Error"* ]]; then
63 printf "\n\n${CYAN}Status: ${PLAIN}${RED}Error starting container. Terminating setup.${PLAIN}\n\n"
64 exit 1
65fi
66docker cp ./test/schema.sql $MYSQL_CONTAINER:/home/ > /dev/null 2>&1
67printf "\n${CYAN}Container is up and running.${PLAIN}\n"
68
69## export the schema to the mysql database
70printf "\n${RED}>> Exporting default schema${PLAIN} ${GREEN}...${PLAIN}\n"
71
72## command to export schema
73docker exec -it $MYSQL_CONTAINER /bin/sh -c "mysql -u$USER -p$PASSWORD < /home/schema.sql" > /dev/null 2>&1
74
75## variables needed to health check export schema
76OUTPUT=$?
77TIMEOUT=120
78TIME_PASSED=0
79WAIT_STRING="."
80
81printf "\n${GREEN}Waiting for mysql to respond with updated schema $WAIT_STRING${PLAIN}"
82while [ "$OUTPUT" -ne 0 ] && [ "$TIMEOUT" -gt 0 ]
83 do
84 docker exec -it $MYSQL_CONTAINER /bin/sh -c "mysql -u$USER -p$PASSWORD < /home/schema.sql" > /dev/null 2>&1
85 OUTPUT=$?
86 sleep 1s
87 TIMEOUT=$((TIMEOUT - 1))
88 TIME_PASSED=$((TIME_PASSED + 1))
89
90 if [ "$TIME_PASSED" -eq 5 ]; then
91 printf "${GREEN}.${PLAIN}"
92 TIME_PASSED=0
93 fi
94 done
95
96if [ "$TIMEOUT" -le 0 ]; then
97 printf "\n\n${CYAN}Status: ${PLAIN}${RED}Failed to export schema. Terminating setup.${PLAIN}\n\n"
98 exit 1
99fi
100printf "\n${CYAN}Successfully exported schema to database.${PLAIN}\n"
101
102## create the database
103printf "\n${RED}>> Creating the database${PLAIN} ${GREEN}...${PLAIN}"
104docker exec -it $MYSQL_CONTAINER /bin/sh -c "mysql -u$USER -p$PASSWORD -e \"DROP DATABASE IF EXISTS $DATABASE\"" > /dev/null 2>&1
105docker exec -it $MYSQL_CONTAINER /bin/sh -c "mysql -u$USER -p$PASSWORD -e \"CREATE DATABASE $DATABASE\"" > /dev/null 2>&1
106DATABASE_CREATED=$?
107if [ "$DATABASE_CREATED" -ne 0 ]; then
108 printf "\n\n${CYAN}Status: ${PLAIN}${RED}Database could not be created. Terminating setup.${PLAIN}\n\n"
109 exit 1
110fi
111printf "\n${CYAN}Successfully created the database.${PLAIN}\n"
112
113## set env variables for running test
114printf "\n${RED}>> Setting env variables to run test${PLAIN} ${GREEN}...${PLAIN}"
115export MYSQL_HOST=$HOST
116export MYSQL_PORT=$PORT
117export MYSQL_USER=$USER
118export MYSQL_PASSWORD=$PASSWORD
119export MYSQL_DATABASE=$DATABASE
120printf "\n${CYAN}Env variables set.${PLAIN}\n"
121
122printf "\n${CYAN}Status: ${PLAIN}${GREEN}Set up completed successfully.${PLAIN}\n"
123printf "\n${CYAN}Instance url: ${YELLOW}mysql://$USER:$PASSWORD@$HOST/$DATABASE${PLAIN}\n"
124printf "\n${CYAN}To run the test suite:${PLAIN} ${YELLOW}npm test${PLAIN}\n\n"