#!/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 l'état actuel du dossier database/update/ (dans /tmp) #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 "* 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 #git pull || abort git -c http.sslVerify=false pull || abort cd - >/dev/null || abort # 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[@]} echo "=> Fait" # ---------------------------------------- # 2) (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/) # ---------------------------------------- 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 echo echo "* Mise à jour de la Base de Données :" 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]" 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 # Test only echo echo "=> Fait"