dk: support build dans une image pour les projets composer

This commit is contained in:
Jephté Clain 2021-01-27 17:15:36 +04:00
parent 40d6605472
commit ad44a1c2e5
1 changed files with 89 additions and 41 deletions

130
dk
View File

@ -295,31 +295,62 @@ 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_DEVEL_SRCDIR=
DEFAULT_ORIGIN=
DEFAULT_BRANCH=
DEFAULT_COMPOSER_ACTION=
PROFILE_CLEAN= # fonction de nettoyage spécifique au profil
CLEAN= # ou... fonction de nettoyage par défaut
APPS=() # applications à mettre à jour par défaut
PROFILE_APPS=() # ou... spécifique au profil 'PROFILE'
app_URL= # url du dépôt
app_DEVEL_SRCDIR= # répertoire source du dépôt en mode devel
app_SRC= # répertoire/fichier source (si URL='')
app_DEST= # répertoire dans lequel faire le checkout
# ou destination si synchro avec app_SRC
app_NAME= # nom du répertoire dest si checkout; par
# défaut prendre la valeur 'app'
app_RSYNC_OPTS= # options de rsync si synchro (avec app_SRC
# ou app_DEVEL_SRCDIR)
app_PROFILE_ORIGIN= # origine spécifique au profil 'PROFILE'
app_ORIGIN= # ou... origine par défaut de la branche
app_PROFILE_BRANCH= # branche spécifique au profil 'PROFILE'
app_BRANCH= # ou... branche par défaut
app_TYPE= # type de projet (composer|none)
app_AFTER_UPDATE=() # liste de commandes à lancer après le checkout
app_COMPOSER_ACTION= # action projet composer (install|update|none)
app_COMPOSER_ARGS=() # arguments de composer install|update
## valeurs par défaut
DEFAULT_DEVEL_SRCDIR= # répertoire de base des dépôts
DEFAULT_BRANCH= # branche par défaut pour les checkouts
DEFAULT_ORIGIN= # origine par défaut des branches
CLEAN= # fonction de nettoyage
APPS=() # applications à mettre à jour
## valeurs par défaut pour les projets composer
COMPOSER_ACTION= # action projet composer (install|update|none)
COMPOSER_ARGS=() # arguments de composer install|update
COMPOSER_PHP=
COMPOSER_PHP_MAX=
COMPOSER_IMAGE=
COMPOSER_CMD=
COMPOSER_SETUP=
## pour chaque application définie dans APPS
{app}_URL= # url du dépôt
{app}_DEVEL_SRCDIR= # répertoire source du dépôt en mode devel
{app}_SRC= # répertoire/fichier source (si URL='')
{app}_DEST= # répertoire dans lequel faire le checkout
# ou destination si synchro avec {app}_SRC
{app}_NAME= # nom du répertoire dest si checkout; par
# défaut prendre la valeur {app}
{app}_RSYNC_OPTS= # options de rsync si synchro avec {app}_SRC
# ou {app}_DEVEL_SRCDIR
{app}_BRANCH= # branche à sélectionner pour le checkout
{app}_ORIGIN= # origine de la branche à sélectionner
{app}_TYPE= # type de projet (composer|none)
{app}_AFTER_UPDATE=() # liste de commandes à lancer après le checkout
# valeurs pour les projets composer. ces valeurs remplacent le cas
# échéant celles définies dans le fichier .composer.conf du projet
{app}_COMPOSER_ACTION=
{app}_COMPOSER_ARGS=()
{app}_COMPOSER_PHP=
{app}_COMPOSER_PHP_MAX=
{app}_COMPOSER_IMAGE=
{app}_COMPOSER_CMD=
{app}_COMPOSER_SETUP=
Certaines valeurs peuvent être valuées selon le profil
{profile}_CLEAN=
{profile}_APPS=()
{profile}_COMPOSER_ACTION=
{profile}_COMPOSER_ARGS=()
{profile}_COMPOSER_PHP=
{profile}_COMPOSER_PHP_MAX=
{profile}_COMPOSER_IMAGE=
{profile}_COMPOSER_CMD=
{profile}_COMPOSER_SETUP=
{app}_{profile}_ORIGIN=
{app}_{profile}_BRANCH=
{app}_{profile}_COMPOSER_ACTION=
{app}_{profile}_COMPOSER_ARGS=()
{app}_{profile}_COMPOSER_PHP=
{app}_{profile}_COMPOSER_PHP_MAX=
{app}_{profile}_COMPOSER_IMAGE=
{app}_{profile}_COMPOSER_CMD=
{app}_{profile}_COMPOSER_SETUP=
-u, --uu, --update-apps-only
Ne faire que la mise à jour depuis les dépôts dépendants.
-w, --ww, --update-apps-devel
@ -340,7 +371,7 @@ VARIABLES de update-apps.conf
SRC
répertoire/fichier source, si URL n'est pas défini. si ce chemin est
relatif, il doit être exprimé par rapport au répertoire du projet.
IMPORTANT: dans ce cas, DEST n'est pas le répertoire de base du
IMPORTANT: si SRC est définit, DEST n'est pas le répertoire de base du
checkout, mais le répertoire destination pour la synchro
DEVEL_SRCDIR
répertoire source pour le mode devel. attention, il s'agit du répertoire
@ -446,19 +477,23 @@ function docker_parse_build_args() {
sed -r 's/([^=]+)=(.*)/\1=\2; replace_build_args+=(--build-arg \1="$\1")/'
}
function docker_parse_env_args() {
[ -f .build.env ] && eval "$(docker_parse_build_args .build.env)"
[ -f .build.env ] && eval "$(docker_parse_build_args .build.env)" # DEPRECATED
[ -f build.env ] && eval "$(docker_parse_build_args build.env)"
[ -n "$PROFILE" -a -f ".build.$PROFILE.env" ] && eval "$(docker_parse_build_args ".build.$PROFILE.env")"
[ -f build.env.local ] && eval "$(docker_parse_build_args build.env.local)"
[ -n "$PROFILE" -a -f ".build.$PROFILE.env" ] && eval "$(docker_parse_build_args ".build.$PROFILE.env")" # DEPRECATED
[ -n "$PROFILE" -a -f "build.$PROFILE.env" ] && eval "$(docker_parse_build_args "build.$PROFILE.env")"
[ -n "$PROFILE" -a -f "build.$PROFILE.env.local" ] && eval "$(docker_parse_build_args "build.$PROFILE.env.local")"
}
function docker_set_env_args() {
[ -f .build.env ] && source ./.build.env
[ -f .build.env ] && source ./.build.env # DEPRECATED
[ -f build.env ] && source ./build.env
[ -n "$PROFILE" -a -f ".build.$PROFILE.env" ] && source "./.build.$PROFILE.env"
[ -f build.env.local ] && source ./build.env.local
[ -n "$PROFILE" -a -f ".build.$PROFILE.env" ] && source "./.build.$PROFILE.env" # DEPRECATED
[ -n "$PROFILE" -a -f "build.$PROFILE.env" ] && source "./build.$PROFILE.env"
[ -n "$PROFILE" -a -f "build.$PROFILE.env.local" ] && source "./build.$PROFILE.env.local"
}
function docker_check_name() {
[ -n "$NAME" ] || die "Vous devez définir NAME dans .build.env"
[ -n "$NAME" ] || die "Vous devez définir NAME dans build.env"
if [ "$1" == set_container_name ]; then
project_name="$NAME"
@ -754,8 +789,7 @@ function build_update_apps() {
fi
etitle "Mise à jour des dépendances"
local app var URL SRC DEVEL_SRCDIR DEST NAME have_RSYNC_OPTS RSYNC_OPTS ORIGIN BRANCH TYPE after_update after_updates composer_action
local -a composer_args
local app var URL SRC DEVEL_SRCDIR DEST NAME have_RSYNC_OPTS RSYNC_OPTS ORIGIN BRANCH TYPE after_update after_updates
for app in "${APPS[@]}"; do
etitle "$app"
@ -935,13 +969,27 @@ function build_update_apps() {
estep "Type de dépôt: $TYPE"
if [ "$TYPE" == composer ]; then
local cvname cvvalue
local composer_php composer_php_max composer_image composer_cmd composer_setup composer_action
local -a composer_vars composer_args
for cvname in composer_php composer_php_max composer_image composer_cmd composer_setup; do
cvvalue="${var}_${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}"
[ -n "$cvvalue" ] || { cvvalue="${var}_${cvname^^}"; cvvalue="${!cvvalue}"; }
[ -n "$cvvalue" ] || { cvvalue="${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}"; }
[ -n "$cvvalue" ] || { cvvalue="${cvname^^}"; cvvalue="${!cvvalue}"; }
[ -n "$cvvalue" ] && composer_vars+=("${cvname^^}=$cvvalue")
done
composer_action="${var}_${PROFILE}_COMPOSER_ACTION"; composer_action="${!composer_action}"
[ -n "$composer_action" ] || { composer_action="${var}_COMPOSER_ACTION"; composer_action="${!composer_action}"; }
[ -n "$composer_action" ] || composer_action="$DEFAULT_COMPOSER_ACTION"
[ -n "$composer_action" ] || { composer_action="${PROFILE}_COMPOSER_ACTION"; composer_action="${!composer_action}"; }
[ -n "$composer_action" ] || composer_action="$COMPOSER_ACTION"
composer_args="${var}_${PROFILE}_COMPOSER_ARGS"
is_defined "$composer_args" || composer_args="${var}_COMPOSER_ARGS"
is_defined "$composer_args" || composer_args="DEFAULT_COMPOSER_ARGS"
is_defined "$composer_args" || composer_args="${PROFILE}_COMPOSER_ARGS"
is_defined "$composer_args" || composer_args="COMPOSER_ARGS"
composer_args="${composer_args}[@]"; composer_args=("${!composer_args}")
if [ -z "$BUILD_UPDATE_DEVEL" ]; then
@ -955,7 +1003,7 @@ function build_update_apps() {
setx cwd=pwd
cd "$DEST"
estep "Installation des dépendances composer"
auto_composer "$composer_action" "${composer_args[@]}" || { eend; return 1; }
auto_composer "${composer_vars[@]}" "$composer_action" "${composer_args[@]}" || { eend; return 1; }
cd "$cwd"
fi
fi
@ -1826,7 +1874,7 @@ function auto_composer() {
local COMPOSER_CMD=
local COMPOSER_SETUP=
[ -f .composer.conf ] && source ./.composer.conf
# les premiers arguments peuvent service à redéfinir les variables
# les premiers arguments peuvent servir à redéfinir les variables
while [ $# -gt 0 ]; do
case "$1" in
COMPOSER_PHP=*) setv "$1"; shift;;
@ -1840,7 +1888,9 @@ function auto_composer() {
done
local use_image
if [ -n "$COMPOSER_PHP_MAX" -a "$COMPOSER_PHP_MAX" != none ]; then
if [ "$COMPOSER_PHP" == force -o "$COMPOSER_PHP" == any ]; then
use_image=1
elif [ -n "$COMPOSER_PHP_MAX" -a "$COMPOSER_PHP_MAX" != none ]; then
# Vérifier la version de PHP
php -r '
$version = $argv[1];
@ -1856,8 +1906,6 @@ exit((PHP_VERSION_ID > $version)? 0: 1);
elif [ -z "$COMPOSER_PHP" ]; then
# pas de version minimum, tester simplement la valeur de COMPOSER_IMAGE
[ "$COMPOSER_IMAGE" != none ] && use_image=1
elif [ "$COMPOSER_PHP" == force -o "$COMPOSER_PHP" == any ]; then
use_image=1
else
# Vérifier la version de PHP
php -r '
@ -1966,7 +2014,7 @@ fi
DEFAULT_PROFILE=devel
# pour le moment ne pas lancer composer dans un container par défaut
DEFAULT_COMPOSER_IMAGE=none #docker.univ-reunion.fr/image/apache-php-myiccas-utils:d10
DEFAULT_COMPOSER_IMAGE=none #docker.univ-reunion.fr/image/phpbuilder
PROFILE=
DM_ALIASES=()
DM_PROFILES=()