Blame view

install/update.sh 5.04 KB
ed60c45e   Etienne Pallier   Nouveau script in...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/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/)

73a53a2e   Etienne Pallier   bugfix script UPDATE
16
# Normal mode
0cb205fe   Etienne Pallier   bugfix and improv...
17
TEST=0
73a53a2e   Etienne Pallier   bugfix script UPDATE
18
# Test mode
0a1fcee9   Etienne Pallier   bugfix UPDATE
19
#TEST=1
ed60c45e   Etienne Pallier   Nouveau script in...
20
21
22
23
24
25

db_update_scripts_folder="../database/update"
db_update_scripts_folder_tmp=/tmp/database_update

function abort() {
	echo "******************************************************"
0cb205fe   Etienne Pallier   bugfix and improv...
26
	echo "!!! Script $0 aborté à cause d'une erreur d'exécution !!!"	
ed60c45e   Etienne Pallier   Nouveau script in...
27
28
29
30
31
	echo "******************************************************"
	exit 1
}

# TEST only
73a53a2e   Etienne Pallier   bugfix script UPDATE
32
[[ $TEST == 1 ]] && (rm ../database/update/test.txt ; rm ../database/update/db-update-2014-*.sh ; touch ../database/update/db-update-2014-08-23.sh)
0cb205fe   Etienne Pallier   bugfix and improv...
33
#mv ../database/update/db-update-2019-01-12.sh /tmp/ 
ed60c45e   Etienne Pallier   Nouveau script in...
34
35


e717688b   Etienne Pallier   cleanup installat...
36
# ----------------------------------------
ed60c45e   Etienne Pallier   Nouveau script in...
37
# 0) Sauvegarde de l'état actuel du dossier database/update/ (dans /tmp)
e717688b   Etienne Pallier   cleanup installat...
38
# ----------------------------------------
ed60c45e   Etienne Pallier   Nouveau script in...
39
40
41
42
43
44
45
46
47
48
#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[@]}


73a53a2e   Etienne Pallier   bugfix script UPDATE
49
# ----------------------------------------
ed60c45e   Etienne Pallier   Nouveau script in...
50
# 1) Mise à jour du code source (git pull)
73a53a2e   Etienne Pallier   bugfix script UPDATE
51
# ----------------------------------------
ed60c45e   Etienne Pallier   Nouveau script in...
52
53
54
55
56
57
58
#db_update_scripts_after=( "key1" "key2" "key3" "key4" "key5" "key6" "key7" "key8" "key9" "key10" "key0" "key11" )
echo
echo "* 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
dd7e2a12   Etienne Pallier   git avec option h...
59
60
#git pull || abort
git -c http.sslVerify=false pull || abort
e717688b   Etienne Pallier   cleanup installat...
61
62
63
64
65

# Utile à faire si pb avec docs attachés
chmod 777 webroot/files/
chmod 777 webroot/img/photos/

ed60c45e   Etienne Pallier   Nouveau script in...
66
67
cd - >/dev/null || abort

e717688b   Etienne Pallier   cleanup installat...
68
69
70
71
72

# ----------------------------------------
# 2) On fait la différence entre les fichiers de mise à jour BD présents après le git et avant
# ----------------------------------------

ed60c45e   Etienne Pallier   Nouveau script in...
73
# TEST only
73a53a2e   Etienne Pallier   bugfix script UPDATE
74
[[ $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)
0cb205fe   Etienne Pallier   bugfix and improv...
75
#mv /tmp/db-update-2019-01-12.sh ../database/update/
ed60c45e   Etienne Pallier   Nouveau script in...
76
77
78
79
80
81
82

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[@]}
echo "=> Fait"

ed60c45e   Etienne Pallier   Nouveau script in...
83
84
85
86
87
88
89
90
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 == '' ]] && exit 0
#nb_scripts=${#db_update_scripts_new[@]}
#[[ $nb_scripts == 0 ]] && exit 0

e717688b   Etienne Pallier   cleanup installat...
91
92
93
94
95
96
97


# ----------------------------------------
# 3) (Optionnel) Mise a jour de la BD 
# (seulement s'il y a au moins 1 nouveau script db-update-YYYY-MM-DD.sh dans database/update/)
# ----------------------------------------

ed60c45e   Etienne Pallier   Nouveau script in...
98
99
100
101
echo
echo "* Mise à jour de la Base de Données :"
echo "Voici le(s) script(s) à exécuter :" 
echo ${db_update_scripts_new[@]}
73a53a2e   Etienne Pallier   bugfix script UPDATE
102
103
104
105
# 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
ed60c45e   Etienne Pallier   Nouveau script in...
106
107
cd $db_update_scripts_folder/ || abort
for db_update_script_new in ${db_update_scripts_new[@]} ; do
73a53a2e   Etienne Pallier   bugfix script UPDATE
108
109
	# Ignorer les fichiers supprimés par le "git pull"
	[[ ! -f $db_update_script_new ]] && continue
ed60c45e   Etienne Pallier   Nouveau script in...
110
111
112
113
114
115
116
117
	echo ; echo
	echo "- Execution du script de mise à jour de la BD $db_update_scripts_folder/$db_update_script_new (o/n) ? [o]"
	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
73a53a2e   Etienne Pallier   bugfix script UPDATE
118
[[ $TEST == 1 ]] && (rm test.txt ; rm db-update-2014-*.sh)
ed60c45e   Etienne Pallier   Nouveau script in...
119
120
cd - >/dev/null

73a53a2e   Etienne Pallier   bugfix script UPDATE
121
122
# Test only

ed60c45e   Etienne Pallier   Nouveau script in...
123
124
echo
echo "=> Fait"