-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetup.sh
More file actions
222 lines (184 loc) · 5.96 KB
/
setup.sh
File metadata and controls
222 lines (184 loc) · 5.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
#!/bin/bash
# @Author : Vedant Wakalkar (@karna98)
# @Version : 1.0.0
# @Description : Setup script for python-template-parser
# Supported OS List
OS_LIST=("Linux" "Mac" "Cygwin" "Windows")
# Project Directory Name
PTP_DIR="python-template-parser"
# Full path to parent directory of setup.sh (executed)
SETUP_SH_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
# Virtual Environment Name
VENV_NAME="ptp_venv"
# Virtual Environment Path
VENV_PATH=$SETUP_SH_DIR/$VENV_NAME
# Flag to track if not present in required directory
MISMATCH_DIR=0
VAR_DIRECTORY_CHANGE="DIRECTORY_CHANGE"
if [ "$1" = $VAR_DIRECTORY_CHANGE ];
then
MISMATCH_DIR=1
fi
# Detect OS
unameOut="$(uname -s)"
case "${unameOut}" in
Linux*) OS=${OS_LIST[0]};;
Darwin*) OS=${OS_LIST[1]};;
CYGWIN*) OS=${OS_LIST[2]};;
MINGW*) OS=${OS_LIST[3]};;
*) OS="UNKNOWN:${unameOut}"
esac
# Check if setup.sh is not executed inside 'python-template-parser' directory
if [ "${PWD##*/}" != $PTP_DIR ];
then
printf -- "\nERROR : Working in wrong directory (%s).\n" "${PWD##*/}"
printf -- "\nWait I will make it right for you.\nAnyway what am I for :-)\n"
if [ -f "$SETUP_SH_DIR/setup.sh" ]
then
# shellcheck disable=SC2164
cd "$SETUP_SH_DIR" || exit 1
chmod +x setup.sh
./setup.sh "$VAR_DIRECTORY_CHANGE"
fi
exit 0
fi
# Display Message
stage_start() {
printf -- "\n*------------------------------*"
printf -- "\n*------ Stage-%s Setup -------*" "$1"
printf -- "\n*------------------------------*\n"
}
stage_finished() {
printf -- "\n*------------------------------*"
printf -- "\n*--- Stage-%s Setup Finished ---*" "$1"
printf -- "\n*------------------------------*\n"
}
stage_aborted() {
printf -- "\n*------------------------------*"
printf -- "\n*------ Stage-%s Aborted -------*" "$1"
printf -- "\n*------------------------------*\n"
exit 1
}
# Display activate virtual environment message
activate_venv_msg() {
if [ "$1" != 0 ]
then
printf -- "\nERROR: Activate virtual environment '%s' and run setup.sh for 'Stage-$1' again.\n" "$VENV_NAME"
fi
printf -- "\n-- Activate virtual environment by running following command :"
if [ "$OS" = "${OS_LIST[0]}" ];
then
ACTIVATE_PATH="/bin/activate"
elif [ "$OS" = "${OS_LIST[3]}" ];
then
ACTIVATE_PATH="/Scripts/activate"
fi
if [ "$OS" = "${OS_LIST[1]}" ];
then
printf -- "\n\n > . %s" "$VENV_PATH$ACTIVATE_PATH"
else
printf -- "\n\n > source %s" "$VENV_PATH$ACTIVATE_PATH"
if [ $MISMATCH_DIR = 0 ];
then
printf -- "\n\n OR "
printf -- "\n\n > source %s" "$VENV_NAME$ACTIVATE_PATH"
fi
fi
}
# Stage-1 Setup
stage_1(){
# 1.1 Detect Virtual Environment
printf -- "\n1. Detecting 'virtualenv'\n"
if ! [ -x "$(command -v virtualenv)" ];
then
printf -- "\n-- No 'virtualenv' command found."
printf -- "\n-- Installing 'virtualenv' ...\n"
if [ "$OS" = "${OS_LIST[0]}" ];
then
sudo apt-get install python3-pip
elif [ "$OS" = "${OS_LIST[3]}" ];
then
py -3 -m ensurepip
python -m pip install --upgrade pip
fi
pip3 install virtualenv
printf -- "\n-- Successfully installed 'virtualenv'."
fi
printf -- "\n-- 'virtualenv' detected!!"
printf -- "\n-- 'virtualenv' version %s" "$(virtualenv --version | perl -pe '($_)=/([0-9]+([.][0-9]+)+)/')"
# 1.2 Create Virtual Environment
printf -- "\n\n2. Creating Virtual Environment"
printf -- "\n\n-- virtualenv name : %s " $VENV_NAME
printf -- "\n-- virtualenv path : %s \n" "$VENV_PATH"
if [ -d "$VENV_PATH" ];
then
printf -- "\n-- Environment (%s) exists !!\n" "$VENV_NAME"
read -rp " Do you want to setup virtual environment by removing existing one ? [y|N] " yesNo
if [[ $yesNo =~ ^(y|Y)$ ]]
then
printf -- "\n"
if [ "$OS" = "${OS_LIST[0]}" ];
then
sudo rm -r "$VENV_PATH"
else
rm -r "$VENV_PATH"
fi
fi
fi
if [ ! -d "$VENV_PATH" ];
then
virtualenv "$VENV_PATH" --python=python3
printf -- "\n-- Virtual Environment (%s) created successfully !!" "$VENV_NAME"
fi
activate_venv_msg 0
printf -- "\n\nAfter activating Virtual Environment, run setup.sh for Stage-2 Setup.\n"
}
# Stage-2 Setup
stage_2() {
# 2.1 Detect Virtual Environment
printf -- "\n1. Detecting (%s) virtual environment\n" "$VENV_NAME"
if [ "$VIRTUAL_ENV" = "$VENV_PATH" ];
then
printf -- "\n-- Detected Virtual Environment : %s \n" "$VENV_NAME"
else
activate_venv_msg 2
stage_aborted 2
fi
# 2.2 Install Dependencies
printf -- "\n2. Installing required dependencies \n"
pip3 install -r requirements.txt
printf -- "\nSuccessfully installed required dependencies\n"
}
# Packing start message, function call and finished message for each stage
stage_pack() {
stage_start "$1"
stage_"$1"
stage_finished "$1"
exit 0
}
# Display Header message
printf -- "\n*------ %s Project Setup ------*\n" "$PTP_DIR"
printf -- "\n*-------------------------------------------------*"
printf -- "\n*--- Select option to get started with setup ---*"
printf -- "\n*-------------------------------------------------*\n"
# Prompt user to select option
# 1. Stage 1 Setup
# 2. Stage 2 Setup (run inside virtualenv)
PS3="Option : "
options=("Stage 1 Setup" "Stage 2 Setup (run inside virtualenv)" "Quit")
select opt in "${options[@]}"
do
case $opt in
"Stage 1"*)
stage_pack 1
;;
"Stage 2"*)
stage_pack 2
;;
"Quit")
printf -- "\nExiting Project Setup !!\n"
break
;;
*) printf -- "\nInvalid option %s\n" "$REPLY";;
esac
done