support des mises à jour en mode devel

This commit is contained in:
Jephté Clain 2019-06-20 14:58:00 +04:00
parent 60a4c73857
commit f508dae60f
1 changed files with 57 additions and 19 deletions

76
dk
View File

@ -122,9 +122,12 @@ OPTIONS build
-g, --ug, --no-update-apps
ne pas mettre à jour les dépôts dépendants. ces dépôts sont définis dans
le fichier update-apps.conf qui a le format suivant:
DEFAULT_ORIGIN=
DEFAULT_BRANCH=
DEFAULT_DEVEL_SRCDIR=
APPS=() # liste d'applications à mettre à jour
app_URL= # url du dépôt
app_DEVEL_SRCDIR= # répertoire source en mode devel
app_DEST= # répertoire dans lequel faire le checkout
app_PROFILE_ORIGIN= # origine spécifique à un profil
app_PROFILE_BRANCH= # branche spécifique à un profil
@ -134,6 +137,10 @@ OPTIONS build
app_AFTER_UPDATE=() # liste de commandes à lancer après le checkout
-u, --uu, --update-apps-only
Ne faire que la mise à jour depuis les dépôts dépendants.
-w, --ww, --update-apps-devel
Faire la mise à jour en mode devel: le projet ainsi que ses fichiers des
répertoires vendor/lib et vendor/ur sont synchronisés via rsync depuis
\$DEFAULT_DEVEL_SRCDIR qui vaut par défaut \$HOME/wop/php
--uo, --update-apps-origin ORIGIN
Spécifier l'origine par défaut pour update-apps
--ub, --update-apps-branch BRANCH
@ -145,6 +152,10 @@ OPTIONS deploy
(c'est à dire ne pas utiliser l'option --with-registry-auth)
VARIABLES de update-apps.conf
DEVEL_SRCDIR
répertoire source pour le mode devel. attention, il s'agit du répertoire
du projet, alors que DEFAULT_DEVEL_SRCDIR est le répertoire de base par
défaut des projets
ORIGIN
vaut 'origin' par défaut
BRANCH
@ -355,11 +366,12 @@ BUILD_BUILD=
UPDATE_APPS_ORIGIN=
UPDATE_APPS_BRANCH=
function build_set_options() {
case "$1" in
u) BUILD_UPDATE_APPS=1; BUILD_BUILD=;;
b) BUILD_UPDATE_APPS=; BUILD_BUILD=1;;
*) BUILD_UPDATE_APPS=1; BUILD_BUILD=1;;
esac
BUILD_BUILD=
BUILD_UPDATE_APPS=
BUILD_UPDATE_DEVEL=
[[ "$1" == *b* ]] && BUILD_BUILD=1
[[ "$1" == *u* ]] && BUILD_UPDATE_APPS=1
[[ "$1" == *w* ]] && BUILD_UPDATE_DEVEL=1
UPDATE_APPS_ORIGIN="$2"
UPDATE_APPS_BRANCH="$3"
}
@ -403,6 +415,7 @@ function build_update_apps() {
#XXX à terme, on déploiera la branche master en prod
[ -z "$DEFAULT_BRANCH" -a "$PROFILE" == prod ] && DEFAULT_BRANCH=develop #master
[ -z "$DEFAULT_BRANCH" ] && DEFAULT_BRANCH=develop
DEFAULT_DEVEL_SRCDIR="$HOME/wop/php"
APPS=()
[ -f update-apps.conf ] && source ./update-apps.conf
[ ${#APPS[*]} -gt 0 ] || return 0
@ -415,7 +428,7 @@ function build_update_apps() {
esac
etitle "Mise à jour des dépendances"
local app var type url dest branch after_update after_updates
local app var type url devel_srcdir dest branch after_update after_updates
for app in "${APPS[@]}"; do
etitle "$app"
@ -427,6 +440,9 @@ function build_update_apps() {
eend; return 1
}
devel_srcdir="${var}_DEVEL_SRCDIR"; devel_srcdir="${!devel_srcdir}"
[ -n "$devel_srcdir" ] || devel_srcdir="$DEFAULT_DEVEL_SRCDIR/${url##*/}"
dest="${var}_DEST"; dest="${!dest}"
[ -n "$dest" ] || dest="$app/b"
mkdir -p "$dest" || { eend; return 1; }
@ -440,18 +456,35 @@ function build_update_apps() {
[ -n "$branch" ] || branch="$DEFAULT_BRANCH"
dest="$dest/$app"
if [ ! -d "$dest" ]; then
# clonage initial
estep "Clonage $url:$branch --> $dest"
git clone -o "$origin" -b "$branch" "$url" "$dest" || { eend; return 1; }
if [ -n "$BUILD_UPDATE_DEVEL" ]; then
# synchronisation en mode devel
local -a rsync_opts; rsync_opts=(-a --delete --exclude .git/ --delete-excluded)
estep "Synchro $devel_srcdir --> $dest"
rsync "${rsync_opts[@]}" "$devel_srcdir/" "$dest" || { eend; return 1; }
local -a depdirs; local depdir pname
setx -a depdirs=ls -d "$dest/vendor/"{lib,ur}/* 2>/dev/null
for depdir in "${depdirs[@]}"; do
[ -L "$depdir" ] && rm "$depdir"
pname="${depdir#$dest/vendor/}"; pname="${pname/\//-}"
estep "Synchro $DEFAULT_DEVEL_SRCDIR/$pname --> $depdir"
rsync "${rsync_opts[@]}" --exclude /vendor/ "$DEFAULT_DEVEL_SRCDIR/$pname/" "$depdir"
done
else
# mise à jour
estep "Maj dépôt $url:$branch --> $dest"
setx cwd=pwd
cd "$dest"
git fetch --all -p -f || { eend; return 1; }
git reset --hard "$origin/$branch" || { eend; return 1; }
cd "$cwd"
if [ -d "$dest" -a -d "$dest/.git" ]; then
# mise à jour
estep "Maj dépôt $url:$branch --> $dest"
setx cwd=pwd
cd "$dest"
git fetch --all -p -f || { eend; return 1; }
git reset --hard "$origin/$branch" || { eend; return 1; }
cd "$cwd"
else
# reliquat mode devel?
[ -d "$dest" ] && rm -rf "$dest"
# clonage initial
estep "Clonage $url:$branch --> $dest"
git clone -o "$origin" -b "$branch" "$url" "$dest" || { eend; return 1; }
fi
fi
type="${var}_TYPE"; type="${!type}"
@ -477,8 +510,10 @@ function build_update_apps() {
composer=/usr/bin/composer
[ -x "$dest/composer.phar" ] && composer="$dest/composer.phar"
estep "Installation des dépendances composer"
"$composer" -d"$dest" install ${PRODUCTION:+--no-dev -o} || { eend; return 1; }
if [ -z "$BUILD_UPDATE_DEVEL" ]; then
estep "Installation des dépendances composer"
"$composer" -d"$dest" install ${PRODUCTION:+--no-dev -o} || { eend; return 1; }
fi
fi
for after_update in "${after_updates[@]}"; do
@ -944,6 +979,7 @@ NO_CACHE=
HOST=
WITH_REGISTRY_AUTH=1
update_apps_mode=ub
update_apps_devel=
update_apps_origin=
update_apps_branch=
args=(
@ -960,6 +996,7 @@ args=(
-h:,--host: HOST=
-g,--ug,--no-update-apps update_apps_mode=b
-u,--uu,--update-apps-only update_apps_mode=u
-w,--uw,--update-apps-devel update_apps_devel=1
--uo:,--update-apps-origin: update_apps_origin=
--ub:,--update-apps-branch: update_apps_branch=
-l,--without-registry-auth WITH_REGISTRY_AUTH=
@ -987,6 +1024,7 @@ fi
[ -n "$PROFILE" ] || PROFILE="$DEFAULT_PROFILE"
[ -n "$chdir" ] && { cd "$chdir" || die; }
update_apps_mode="${update_apps_mode}${update_apps_devel:+w}"
while [ $# -gt 0 ]; do
[ "$1" == -- ] && { shift; continue; }