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 -g, --ug, --no-update-apps
ne pas mettre à jour les dépôts dépendants. ces dépôts sont définis dans 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: le fichier update-apps.conf qui a le format suivant:
DEFAULT_DEVEL_SRCDIR= ## valeurs par défaut
DEFAULT_ORIGIN= DEFAULT_DEVEL_SRCDIR= # répertoire de base des dépôts
DEFAULT_BRANCH= DEFAULT_BRANCH= # branche par défaut pour les checkouts
DEFAULT_COMPOSER_ACTION= DEFAULT_ORIGIN= # origine par défaut des branches
PROFILE_CLEAN= # fonction de nettoyage spécifique au profil CLEAN= # fonction de nettoyage
CLEAN= # ou... fonction de nettoyage par défaut APPS=() # applications à mettre à jour
APPS=() # applications à mettre à jour par défaut ## valeurs par défaut pour les projets composer
PROFILE_APPS=() # ou... spécifique au profil 'PROFILE' COMPOSER_ACTION= # action projet composer (install|update|none)
app_URL= # url du dépôt COMPOSER_ARGS=() # arguments de composer install|update
app_DEVEL_SRCDIR= # répertoire source du dépôt en mode devel COMPOSER_PHP=
app_SRC= # répertoire/fichier source (si URL='') COMPOSER_PHP_MAX=
app_DEST= # répertoire dans lequel faire le checkout COMPOSER_IMAGE=
# ou destination si synchro avec app_SRC COMPOSER_CMD=
app_NAME= # nom du répertoire dest si checkout; par COMPOSER_SETUP=
# défaut prendre la valeur 'app' ## pour chaque application définie dans APPS
app_RSYNC_OPTS= # options de rsync si synchro (avec app_SRC {app}_URL= # url du dépôt
# ou app_DEVEL_SRCDIR) {app}_DEVEL_SRCDIR= # répertoire source du dépôt en mode devel
app_PROFILE_ORIGIN= # origine spécifique au profil 'PROFILE' {app}_SRC= # répertoire/fichier source (si URL='')
app_ORIGIN= # ou... origine par défaut de la branche {app}_DEST= # répertoire dans lequel faire le checkout
app_PROFILE_BRANCH= # branche spécifique au profil 'PROFILE' # ou destination si synchro avec {app}_SRC
app_BRANCH= # ou... branche par défaut {app}_NAME= # nom du répertoire dest si checkout; par
app_TYPE= # type de projet (composer|none) # défaut prendre la valeur {app}
app_AFTER_UPDATE=() # liste de commandes à lancer après le checkout {app}_RSYNC_OPTS= # options de rsync si synchro avec {app}_SRC
app_COMPOSER_ACTION= # action projet composer (install|update|none) # ou {app}_DEVEL_SRCDIR
app_COMPOSER_ARGS=() # arguments de composer install|update {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 -u, --uu, --update-apps-only
Ne faire que la mise à jour depuis les dépôts dépendants. Ne faire que la mise à jour depuis les dépôts dépendants.
-w, --ww, --update-apps-devel -w, --ww, --update-apps-devel
@ -340,7 +371,7 @@ VARIABLES de update-apps.conf
SRC SRC
répertoire/fichier source, si URL n'est pas défini. si ce chemin est 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. 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 checkout, mais le répertoire destination pour la synchro
DEVEL_SRCDIR DEVEL_SRCDIR
répertoire source pour le mode devel. attention, il s'agit du répertoire 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")/' sed -r 's/([^=]+)=(.*)/\1=\2; replace_build_args+=(--build-arg \1="$\1")/'
} }
function docker_parse_env_args() { 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)" [ -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" ] && 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() { function docker_set_env_args() {
[ -f .build.env ] && source ./.build.env [ -f .build.env ] && source ./.build.env # DEPRECATED
[ -f build.env ] && source ./build.env [ -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" ] && source "./build.$PROFILE.env"
[ -n "$PROFILE" -a -f "build.$PROFILE.env.local" ] && source "./build.$PROFILE.env.local"
} }
function docker_check_name() { 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 if [ "$1" == set_container_name ]; then
project_name="$NAME" project_name="$NAME"
@ -754,8 +789,7 @@ function build_update_apps() {
fi fi
etitle "Mise à jour des dépendances" 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 app var URL SRC DEVEL_SRCDIR DEST NAME have_RSYNC_OPTS RSYNC_OPTS ORIGIN BRANCH TYPE after_update after_updates
local -a composer_args
for app in "${APPS[@]}"; do for app in "${APPS[@]}"; do
etitle "$app" etitle "$app"
@ -935,13 +969,27 @@ function build_update_apps() {
estep "Type de dépôt: $TYPE" estep "Type de dépôt: $TYPE"
if [ "$TYPE" == composer ]; then 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}" 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="${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" composer_args="${var}_${PROFILE}_COMPOSER_ARGS"
is_defined "$composer_args" || composer_args="${var}_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}") composer_args="${composer_args}[@]"; composer_args=("${!composer_args}")
if [ -z "$BUILD_UPDATE_DEVEL" ]; then if [ -z "$BUILD_UPDATE_DEVEL" ]; then
@ -955,7 +1003,7 @@ function build_update_apps() {
setx cwd=pwd setx cwd=pwd
cd "$DEST" cd "$DEST"
estep "Installation des dépendances composer" 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" cd "$cwd"
fi fi
fi fi
@ -1826,7 +1874,7 @@ function auto_composer() {
local COMPOSER_CMD= local COMPOSER_CMD=
local COMPOSER_SETUP= local COMPOSER_SETUP=
[ -f .composer.conf ] && source ./.composer.conf [ -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 while [ $# -gt 0 ]; do
case "$1" in case "$1" in
COMPOSER_PHP=*) setv "$1"; shift;; COMPOSER_PHP=*) setv "$1"; shift;;
@ -1840,7 +1888,9 @@ function auto_composer() {
done done
local use_image 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 # Vérifier la version de PHP
php -r ' php -r '
$version = $argv[1]; $version = $argv[1];
@ -1856,8 +1906,6 @@ exit((PHP_VERSION_ID > $version)? 0: 1);
elif [ -z "$COMPOSER_PHP" ]; then elif [ -z "$COMPOSER_PHP" ]; then
# pas de version minimum, tester simplement la valeur de COMPOSER_IMAGE # pas de version minimum, tester simplement la valeur de COMPOSER_IMAGE
[ "$COMPOSER_IMAGE" != none ] && use_image=1 [ "$COMPOSER_IMAGE" != none ] && use_image=1
elif [ "$COMPOSER_PHP" == force -o "$COMPOSER_PHP" == any ]; then
use_image=1
else else
# Vérifier la version de PHP # Vérifier la version de PHP
php -r ' php -r '
@ -1966,7 +2014,7 @@ fi
DEFAULT_PROFILE=devel DEFAULT_PROFILE=devel
# pour le moment ne pas lancer composer dans un container par défaut # 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= PROFILE=
DM_ALIASES=() DM_ALIASES=()
DM_PROFILES=() DM_PROFILES=()