update.sh
6.58 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
#!/bin/bash
# ----------------------------------------------------------------------------------------------------------------
# Ce script permet de mettre à jour automatiquement le code source du logiciel, ainsi que la BD (si besoin).
# C'est une bonne pratique de l'exécuter assez régulièrement pour garder un logiciel bien à jour.
# Il ne fait essentiellement qu'un "git pull" suivi de la mise à jour de la BD (si besoin).
# La BD est mise à jour SEULEMENT s'il existe au moins 1 NOUVEAU script de mise à jour db-update-YYYY-MM-DD.sh
# récupéré avec git pull (dans le dossier database/update/).
# S'il y en a plusieurs, ils sont exécutés dans l'ordre chronologique.
# ----------------------------------------------------------------------------------------------------------------
# (Bash Arrays : cf https://www.cyberciti.biz/faq/finding-bash-shell-array-length-elements/)
# Normal mode
TEST=0
# Test mode
#TEST=1
db_update_scripts_folder="../database/update"
db_update_scripts_folder_tmp=/tmp/database_update
function abort() {
echo "******************************************************"
echo "!!! Script $0 aborté à cause d'une erreur d'exécution !!!"
echo "******************************************************"
exit 1
}
# TEST only
[[ $TEST == 1 ]] && (rm ../database/update/test.txt ; rm ../database/update/db-update-2014-*.sh ; touch ../database/update/db-update-2014-08-23.sh)
#mv ../database/update/db-update-2019-01-12.sh /tmp/
# ----------------------------------------
# 0) Sauvegarde de certains éléments (dans /tmp)
# (pour voir s'ils vont changer après le "git pull")
# ----------------------------------------
# a) Sauvegarde du fichier composer.json
cp -fp ../composer.json /tmp/ || abort
[[ $TEST == 1 ]] && cp ../composer.lock /tmp/composer.json
composer_json_prev=/tmp/composer.json
# b) Sauvegarde du dossier database/update/
#db_update_scripts_before=( "key1" "key2" "key3" "key4" "key5" "key6" "key7" "key8" "key9" "key10" )
rm -rf $db_update_scripts_folder_tmp/ || abort
mkdir $db_update_scripts_folder_tmp/ || abort
cp -fp $db_update_scripts_folder/db-update-????-??-??.sh $db_update_scripts_folder_tmp/ || abort
cd $db_update_scripts_folder_tmp/ || abort
db_update_scripts_before=$(ls -1 db-update-????-??-??.sh) || abort
cd - >/dev/null || abort
#echo ; echo ${db_update_scripts_before[@]}
# ----------------------------------------
# 1) Mise à jour du code source (git pull)
# ----------------------------------------
#db_update_scripts_after=( "key1" "key2" "key3" "key4" "key5" "key6" "key7" "key8" "key9" "key10" "key0" "key11" )
echo
echo "* 1) Mise à jour du code source (git pull) (o/n) ? [o]"
read do_it ; [[ -z $do_it ]] && do_it="o"
#echo $do_it
[[ $do_it != "o" ]] && exit 0
cd ../ || abort
# TODO: AVIRER dès que ca a été fait au moins 1 fois (dans tous les labos utilisateurs)
# Temporairement nécessaire pour nettoyer définitivement vendor/
#rm -rf vendor/*
#git pull || abort
git -c http.sslVerify=false pull || abort
# Utile à faire si pb avec docs attachés
chmod 777 webroot/files/
chmod 777 webroot/img/photos/
cd - >/dev/null || abort
# ----------------------------------------
# 2) Mise a jour des plugins php (dossier vendor/) si nécessaire
# (seulement si le fichier composer.json a changé)
# ----------------------------------------
echo
echo "* 2) Mise à jour des plugins php (seulement si nécessaire) :"
plugins_dir=../vendor
# Creation dossier vendor/ si n'existe pas encore
if [ ! -d $plugins_dir ] ; then
mkdir $plugins_dir
chmod 777 $plugins_dir
fi
chmod +x plugins_set.sh
chmod +x plugins_install.sh
diff ../composer.json $composer_json_prev >/dev/null
# Attention, ne pas faire "update" mais "install"
# car "install" n'installe que les NOUVEAUX plugins non déjà installés
# et "update" risquerait aussi d'installer des versions plus récentes
# que les plugins qui sont déjà installés (et donc pas encore testés)
##[[ $? == 1 ]] && ./plugins_install.sh
if [[ $? == 0 ]] ; then
echo "==> PAS NÉCESSAIRE"
else
#echo "OUI"
./plugins_install.sh
fi
# ----------------------------------------
# 3) Mise a jour de la BD (si nécessaire)
# (seulement s'il y a au moins 1 nouveau script db-update-YYYY-MM-DD.sh dans database/update/)
# ----------------------------------------
echo
echo "* 3) Mise à jour de la Base de Données (seulement si nécessaire) :"
# a) On fait la différence entre les fichiers de mise à jour BD présents après le git et avant
# TEST only
[[ $TEST == 1 ]] && (rm ../database/update/db-update-2014-08-23.sh ; touch ../database/update/test.txt ; touch ../database/update/db-update-2014-08-24.sh ; touch ../database/update/db-update-2014-08-25.sh; chmod +x ../database/update/db-update-2014-*.sh)
#mv /tmp/db-update-2019-01-12.sh ../database/update/
cd $db_update_scripts_folder/ || abort
db_update_scripts_after=$(ls -1 db-update-????-??-??.sh) || abort
cd - >/dev/null || abort
#echo ; echo ${db_update_scripts_after[@]}
db_update_scripts_new=$( echo ${db_update_scripts_before[@]} ${db_update_scripts_after[@]} | tr ' ' '\n' | sort | uniq -u ) || abort
#temp=() ; for t in ${db_update_scripts_new[@]} ; do temp+=($t) ; done ; temp+=('toto') ; db_update_scripts_new=$temp
#echo ${#db_update_scripts_new[@]} ; echo ${db_update_scripts_new[@]}
# Pas de nouveau script de mise à jour BD à exécuter => exit
#[[ $db_update_scripts_new == '' ]] && echo "==> PAS NÉCESSAIRE" ; exit 0
if [[ $db_update_scripts_new == '' ]] ; then
echo "==> PAS NÉCESSAIRE"
echo
exit 0
fi
#nb_scripts=${#db_update_scripts_new[@]}
#[[ $nb_scripts == 0 ]] && exit 0
# b) Mise a jour de la BD
echo "Voici le(s) script(s) à exécuter :"
echo ${db_update_scripts_new[@]}
# Remove files that were DELETED by "git pull"
for db_update_script_new in ${db_update_scripts_new[@]} ; do
[[ ! -f ../database/update/$db_update_script_new ]] && echo "$db_update_script_new sera ignoré car supprimé par le 'git pull'" # TODO: supprimer cet element du tableau
done
cd $db_update_scripts_folder/ || abort
for db_update_script_new in ${db_update_scripts_new[@]} ; do
# Ignorer les fichiers supprimés par le "git pull"
[[ ! -f $db_update_script_new ]] && continue
echo ; echo
#echo "- Execution du script de mise à jour de la BD $db_update_scripts_folder/$db_update_script_new (o/n) ? [o]"
echo "- Execution du script de mise à jour de la BD $db_update_scripts_folder/$db_update_script_new"
#read do_it ; [[ -z $do_it ]] && do_it="o" ; echo $do_it
#if [[ $do_it == "o" ]] ; then
#ls -l ./$db_update_script_new_ || abort
./$db_update_script_new || abort
#fi
done
[[ $TEST == 1 ]] && (rm test.txt ; rm db-update-2014-*.sh)
cd - >/dev/null
echo
#echo "=> MISE À JOUR TERMINÉE"