-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathINSTALL.sh
executable file
·125 lines (105 loc) · 2.6 KB
/
INSTALL.sh
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
#!/usr/bin/env sh
NORMAL="\033[m"
UNDERLINE="\033[4m"
COLOR_COLOR_ERROR="\033[37;41m"
COLOR_COLOR_SUCCESS="\033[0;32m"
COLOR_MSG="\033[0;37m"
PWD=`pwd`
MARKER_PREFIX=" → "
MARKER_SUBTAB=" "
marker_error ()
{
local CHAR_KO='✖'
printf "\033[0;31m${CHAR_KO}\033[m"
}
set_error ()
{
printf "%s%s\n" `move_cursor "$[ ${#1} - 2]"` `marker_error`
}
marker_success ()
{
local CHAR_OK='✓'
printf "\033[0;32m${CHAR_OK}\033[m"
}
set_success ()
{
printf "%s%s\n" `move_cursor "$[ ${#1} - 2]"` `marker_success`
}
move_cursor ()
{
printf "\033[%dD" "$1"
}
check_cmd ()
{
local indicator="${MARKER_PREFIX}$1"
local cmd_loc=
local msg_title="La commande '$2' est introuvable."
local msg_txt="Reportez-vous au chapitre ${3-1} pour suivre la procédure d'installation."
printf "$indicator"
if ! cmd_loc="$(type -p "$2")" || [ -z "$cmd_loc" ]; then
set_error "$indicator"
echo "${MARKER_SUBTAB}${COLOR_MSG}$msg_title\n${MARKER_SUBTAB}$msg_txt${NORMAL}"
print_resume
exit 1
else
set_success "$indicator"
fi
}
check_gem ()
{
local indicator="${MARKER_PREFIX}$1"
local cmd_loc=
local msg_title="La gem '$2' est absente de votre poste."
local msg_txt="Reportez-vous au chapitre ${3-1} pour suivre la procédure d'installation."
printf "$indicator"
grep -q "^$2\b" <<< "$GEMLIST"
if [ "$?" -ne "0" ]; then
set_error "$indicator"
echo "${MARKER_SUBTAB}${COLOR_MSG}$msg_title\n${MARKER_SUBTAB}$msg_txt${NORMAL}"
print_resume
exit 1
else
set_success "$indicator"
fi
}
install_source ()
{
local chapter="$1"
local indicator="${MARKER_PREFIX}Installation du dossier ${chapter#ch}"
local error=
printf "$indicator"
error=$(bundle install --gemfile="${GEMFILE}" --path "$PWD/.vendors" 2>&1)
if [ "$?" -ne "0" ]; then
set_error "$indicator"
echo "${MARKER_SUBTAB}${COLOR_MSG}Une erreur s'est produite :\n${MARKER_SUBTAB}$error${NORMAL}"
print_resume
exit 1
else
set_success "$indicator"
fi
}
print_title ()
{
echo "\n${UNDERLINE}$1${NORMAL}\n"
}
print_resume ()
{
echo
}
print_title "Vérification des pré-requis"
check_cmd "Ruby" "ruby"
check_cmd "RubyGems" "gem"
# RubyGems est installé, nous pouvons charger la liste des Gems et tester la
# présence des gems requises.
GEMLIST=`gem list`
check_cmd "Bundler" "bundle" 7
check_gem "Rubygems Bundler" "rubygems-bundler" 1
print_title "Initialisation de l'environnement des codes sources"
for GEMFILE in $(find . -type f -name Gemfile | grep -v .vendors)
do
if [ -e "$GEMFILE" ] && [ ! -z "$GEMFILE" ]; then
install_source `dirname $GEMFILE`
fi
done
print_resume
exit 0