dk et dkbuild: support .composer.yaml et setup_image

This commit is contained in:
Jephté Clain 2024-01-03 20:37:21 +04:00
parent 0bf0f48ad0
commit 5cc1826744
2 changed files with 93 additions and 37 deletions

54
dk
View File

@ -230,6 +230,7 @@ COMMANDES
spécifiées y sont lancées. Ce container est réutilisé à chaque fois.
Ce paramétrage est utilisé pour par exemple installer certains
packages nécessaire au projet.
* COMPOSER_SETUP_IMAGE -- nom final de l'image pour COMPOSER_SETUP
La commande 'rshell' est une extension qui lance un shell bash au lieu
de lancer la commande composer, ce qui permet de faire des opérations
plus complexes si le besoin s'en fait sentir. NB: le shell est lancé
@ -267,6 +268,7 @@ COMMANDES
spécifiées y sont lancées. Ce container est réutilisé à chaque fois.
Ce paramétrage est utilisé pour par exemple installer certains
packages nécessaire au projet.
* MAVEN_SETUP_IMAGE -- nom final de l'image pour MAVEN_SETUP
La commande 'rshell' est une extension qui lance un shell bash au lieu
de lancer la commande mvn, ce qui permet de faire des opérations
plus complexes si le besoin s'en fait sentir. NB: le shell est lancé
@ -1083,10 +1085,10 @@ 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 composer_php composer_php_max composer_image composer_cmd composer_setup composer_setup_image composer_action
local -a composer_vars composer_args
for cvname in composer_php composer_php_max composer_image composer_cmd composer_setup; do
for cvname in composer_php composer_php_max composer_image composer_cmd composer_setup composer_setup_image; do
cvvalue="${var}_${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}"
[ -n "$cvvalue" ] || { cvvalue="${var}_${cvname^^}"; cvvalue="${!cvvalue}"; }
[ -n "$cvvalue" ] || { cvvalue="${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}"; }
@ -1122,10 +1124,10 @@ function build_update_apps() {
fi
elif [ "$TYPE" == maven ]; then
local cvname cvvalue
local maven_java maven_image maven_cmd maven_setup maven_action
local maven_java maven_image maven_cmd maven_setup maven_setup_image maven_action
local -a maven_vars maven_args
for cvname in maven_java maven_image maven_cmd maven_setup; do
for cvname in maven_java maven_image maven_cmd maven_setup maven_setup_image; do
cvvalue="${var}_${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}"
[ -n "$cvvalue" ] || { cvvalue="${var}_${cvname^^}"; cvvalue="${!cvvalue}"; }
[ -n "$cvvalue" ] || { cvvalue="${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}"; }
@ -1979,6 +1981,7 @@ function default_docker_composer() {
-e group="$group"
-e projdir="$projdir"
-e setup="$COMPOSER_SETUP"
-e setup_image="$COMPOSER_SETUP_IMAGE"
-e composer="$COMPOSER_CMD"
-e args="$args"
)
@ -2008,35 +2011,36 @@ fi
if [ -n "$COMPOSER_SETUP" ]; then
# lancement dans un container docker à préparer
local NAME project_name container_name dkid
local NAME setup_image project_name container_name dkid
if [ -f docker-compose.yml ]; then
compose_set_project_name set_container_name
else
NAME="$(basename -- "$(pwd)")"
docker_check_name set_container_name
fi
container_name="dk_composer_${container_name}"
setup_image="$COMPOSER_SETUP_IMAGE"
[ -n "$setup_image" ] || setup_image="dk_composer_${container_name}_image"
# vérifier l'existence de l'image
setx dkid=docker image ls --format '{{.ID}}' "${container_name}_image"
setx dkid=docker image ls --format '{{.ID}}' "$setup_image"
# créer le container le cas échéant
if [ -z "$dkid" ]; then
estep "Création du container $container_name avec l'image $COMPOSER_IMAGE"
estep "Création de l'image $setup_image à partir de $COMPOSER_IMAGE"
cmd=(
"$DOCKER" create -it --name "${container_name}_ct"
"$DOCKER" create -it --name "${setup_image}_tmpct"
"${basecmd[@]}"
"$COMPOSER_IMAGE"
bash -c "$setupscript"
)
setx dkid="${cmd[@]}" || return 1
"$DOCKER" container start -ai "$dkid" || return 1
"$DOCKER" container commit "$dkid" "${container_name}_image" || return 1
"$DOCKER" container commit "$dkid" "$setup_image" || return 1
"$DOCKER" container rm "$dkid" || return 1
fi
# prendre comme image le container créé
COMPOSER_IMAGE="${container_name}_image"
COMPOSER_IMAGE="$setup_image"
fi
cmd=(
@ -2062,13 +2066,16 @@ function auto_composer() {
local COMPOSER_MACHINE=-u
local COMPOSER_CMD=
local COMPOSER_SETUP=
local COMPOSER_SETUP_IMAGE=
if [ -f .composer.yaml ]; then
local registry
eval "$(<.composer.yaml grep ^composer_ |
sed 's/^composer_php_min: /COMPOSER_PHP=/;
s/^composer_php_max: /COMPOSER_PHP_MAX=/;
s/^composer_registry: /registry=/;
s/^composer_image: \(.*\)/COMPOSER_IMAGE="${registry:-$REGISTRY}\/\1"/')"
sed 's/^composer_php_min: /COMPOSER_PHP=/
s/^composer_php_max: /COMPOSER_PHP_MAX=/
s/^composer_registry: /registry=/
s/^composer_image: \(.*\)/COMPOSER_IMAGE="${registry:-$REGISTRY}\/\1"/
s/^composer_setup: /COMPOSER_SETUP=/
s/^composer_setup_image: /COMPOSER_SETUP_IMAGE=/')"
elif [ -f .composer.conf ]; then
source ./.composer.conf
fi
@ -2213,6 +2220,7 @@ function default_docker_maven() {
-e group="$group"
-e projdir="$projdir"
-e setup="$MAVEN_SETUP"
-e setup_image="$MAVEN_SETUP_IMAGE"
-e maven="$MAVEN_CMD"
-e args="$args"
${MAVEN_JAVA:+-e JAVA="$MAVEN_JAVA"}
@ -2237,35 +2245,36 @@ cd "$projdir"
if [ -n "$MAVEN_SETUP" ]; then
# lancement dans un container docker à préparer
local NAME project_name container_name dkid
local NAME setup_image project_name container_name dkid
if [ -f docker-compose.yml ]; then
compose_set_project_name set_container_name
else
NAME="$(basename -- "$(pwd)")"
docker_check_name set_container_name
fi
container_name="dk_maven_${container_name}"
setup_image="$MAVEN_SETUP_IMAGE"
[ -n "$setup_image" ] || setup_image="dk_maven_${container_name}_image"
# vérifier l'existence de l'image
setx dkid=docker image ls --format '{{.ID}}' "${container_name}_image"
setx dkid=docker image ls --format '{{.ID}}' "$setup_image"
# créer le container le cas échéant
if [ -z "$dkid" ]; then
estep "Création du container $container_name avec l'image $MAVEN_IMAGE"
estep "Création de l'image $setup_image à partir de $MAVEN_IMAGE"
cmd=(
"$DOCKER" create -it --name "${container_name}_ct"
"$DOCKER" create -it --name "${setup_image}_tmpct"
"${basecmd[@]}"
"$MAVEN_IMAGE"
bash -c "$setupscript"
)
setx dkid="${cmd[@]}" || return 1
"$DOCKER" container start -ai "$dkid" || return 1
"$DOCKER" container commit "$dkid" "${container_name}_image" || return 1
"$DOCKER" container commit "$dkid" "$setup_image" || return 1
"$DOCKER" container rm "$dkid" || return 1
fi
# prendre comme image le container créé
MAVEN_IMAGE="${container_name}_image"
MAVEN_IMAGE="$setup_image"
fi
cmd=(
@ -2290,6 +2299,7 @@ function auto_maven() {
local MAVEN_MACHINE=-u
local MAVEN_CMD=
local MAVEN_SETUP=
local MAVEN_SETUP_IMAGE=
[ -f .maven.conf ] && source ./.maven.conf
# les premiers arguments peuvent servir à redéfinir les variables
while [ $# -gt 0 ]; do

76
dkbuild
View File

@ -786,18 +786,29 @@ Les paramètres optionnels sont
commandes spécifiées y sont lancées. Ce container est réutilisé à chaque fois.
Ce paramétrage est utilisé par exemple pour installer certains packages
nécessaire au projet.
* setup-image=SETUP_IMAGE
forcer le nom de l'image pour setup= (la valeur de project-name= est ignorée)
* project-name=PROJECT_NAME
si setup= est défini, nommer l'image sur la base de ce nom. par défaut, le nom
est calculé automatiquement
Si un fichier .composer.conf existe dans le répertoire du projet, il est sourcé
pour obtenir les valeurs par défaut des paramètres:
Si un fichier .composer.yaml existe dans le répertoire du projet, il est analysé
pour obtenir les valeurs par défaut des paramètres suivants:
* composer_php_min: valeur par défaut de php=
* composer_php_max: valeur par défaut de php-max=
* composer_registry: ET composer_image: valeur par défaut de image=
* composer_setup: valeur par défaut de setup=
* composer_setup_image: valeur par défaut de setup-image=
Sinon, si un fichier .composer.conf existe dans le répertoire du projet, il est
sourcé pour obtenir les valeurs par défaut des paramètres:
* COMPOSER_PHP -- valeur par défaut de php=
* COMPOSER_PHP_MAX -- valeur par défaut de php-max=
* COMPOSER_IMAGE -- valeur par défaut de image=
* COMPOSER_MACHINE -- valeur par défaut de machine=
* COMPOSER_CMD -- valeur par défaut de composer=
* COMPOSER_SETUP -- valeur par défaut de setup=
* COMPOSER_SETUP_IMAGE -- valeur par défaut de setup-image=
## mvn -- construire projet maven
@ -859,6 +870,8 @@ Les paramètres optionnels sont
commandes spécifiées y sont lancées. Ce container est réutilisé à chaque fois.
Ce paramétrage est utilisé par exemple pour installer certains packages
nécessaire au projet.
* setup-image=SETUP_IMAGE
forcer le nom de l'image pour setup= (la valeur de project-name= est ignorée)
* project-name=PROJECT_NAME
si setup= est défini, nommer l'image sur la base de ce nom. par défaut, le nom
est calculé automatiquement
@ -870,6 +883,7 @@ pour obtenir les valeurs par défaut des paramètres:
* MAVEN_MACHINE -- valeur par défaut de machine=
* MAVEN_CMD -- valeur par défaut de mvn=
* MAVEN_SETUP -- valeur par défaut de setup=
* MAVEN_SETUP_IMAGE -- valeur par défaut de setup-image=
## run -- lancer des commandes
@ -2214,6 +2228,7 @@ function define_functions_cmd() {
-e group="$group"
-e projdir="$projdir"
-e setup="$setup"
-e setup_image="$setup_image"
-e composer="$composer"
-e args="$args"
)
@ -2243,32 +2258,33 @@ fi
if [ -n "$setup" ]; then
local project_name container_name ctid
local setup_image="$setup_image"
# lancement dans un container docker à préparer
[ -n "$project_name" ] || setx project_name=get_project_name
setx container_name=get_container_name "$project_name"
container_name="dkbuild_composer_${container_name}"
[ -n "$setup_image" ] || setup_image="dkbuild_composer_${container_name}_image"
# vérifier l'existence de l'image
setx ctid=docker image ls --format '{{.ID}}' "${container_name}_image"
setx ctid=docker image ls --format '{{.ID}}' "$setup_image"
# créer le container le cas échéant
if [ -z "$ctid" ]; then
estep "Création du container $container_name à partir de l'image $image"
estep "Création de l'image $setup_image à partir de $image"
cmd=(
docker create -it --name "${container_name}_ct"
docker create -it --name "${setup_image}_tmpct"
"${basecmd[@]}"
"$image"
bash -c "$setupscript"
)
setx ctid="${cmd[@]}" &&
docker container start -ai "$ctid" &&
docker container commit "$ctid" "${container_name}_image" &&
docker container commit "$ctid" "$setup_image" &&
docker container rm "$ctid" || die
fi
# prendre comme image le container créé
image="${container_name}_image"
image="$setup_image"
fi
case "$action" in
@ -2317,8 +2333,29 @@ fi
[ "$host_mappings" == __UNDEFINED__ ] && host_mappings="${DEFAULTS[docker_host-mappings]}"
local composer="${DEFAULTS[composer_composer]}"
local setup="${DEFAULTS[composer_setup]}"
local setup_image="${DEFAULTS[composer_setup-image]}"
local project_name="${DEFAULTS[composer_project-name]}"
if [ -f "$destdir/.composer.conf" ]; then
if [ -f "$destdir/.composer.yaml" ]; then
eval "$(
COMPOSER_PHP=
COMPOSER_PHP_MAX=
COMPOSER_IMAGE="$COMPOSER_IMAGE"
COMPOSER_SETUP=
COMPOSER_SETUP_IMAGE=
eval "$(<"$destdir/.composer.yaml" grep ^composer_ |
sed 's/^composer_php_min: /COMPOSER_PHP=/
s/^composer_php_max: /COMPOSER_PHP_MAX=/
s/^composer_registry: /registry=/
s/^composer_image: \(.*\)/COMPOSER_IMAGE="${registry:-$REGISTRY}\/\1"/
s/^composer_setup: /COMPOSER_SETUP=/
s/^composer_setup_image: /COMPOSER_SETUP_IMAGE=/')"
[ -z "$php" ] && echo_setv php="$COMPOSER_PHP"
[ -z "$php_max" ] && echo_setv php_max="$COMPOSER_PHP_MAX"
[ -z "$image" ] && echo_setv image="$COMPOSER_IMAGE"
[ -z "$setup" ] && echo_setv setup="$COMPOSER_SETUP"
[ -z "$setup_image" ] && echo_setv setup_image="$COMPOSER_SETUP_IMAGE"
)"
elif [ -f "$destdir/.composer.conf" ]; then
eval "$(
COMPOSER_PHP=
COMPOSER_PHP_MAX=
@ -2326,6 +2363,7 @@ fi
COMPOSER_MACHINE=-u
COMPOSER_CMD=
COMPOSER_SETUP=
COMPOSER_SETUP_IMAGE=
source "$destdir/.composer.conf"
[ -z "$php" ] && echo_setv php="$COMPOSER_PHP"
[ -z "$php_max" ] && echo_setv php_max="$COMPOSER_PHP_MAX"
@ -2333,6 +2371,7 @@ fi
[ -z "$machine" ] && echo_setv machine="$COMPOSER_MACHINE"
[ -z "$composer" ] && echo_setv composer="$COMPOSER_CMD"
[ -z "$setup" ] && echo_setv setup="$COMPOSER_SETUP"
[ -z "$setup_image" ] && echo_setv setup_image="$COMPOSER_SETUP_IMAGE"
)"
fi
@ -2348,6 +2387,7 @@ fi
host-mappings=*) host_mappings="${1#host-mappings=}";;
composer=*) composer="${1#composer=}";;
setup=*) setup="${1#setup=}";;
setup-image=*) setup_image="${1#setup-image=}";;
project-name=*) project_name="${1#project-name=}";;
*=*) ewarn "composer: $1: argument ignoré";;
*) break;;
@ -2513,6 +2553,7 @@ exit((PHP_VERSION_ID < $version)? 0: 1);
-e group="$group"
-e projdir="$projdir"
-e setup="$setup"
-e setup_image="$setup_image"
-e mvn="$mvn"
-e args="$args"
${java:+-e JAVA="$java"}
@ -2538,32 +2579,33 @@ cd "$projdir"
if [ -n "$setup" ]; then
local project_name container_name ctid
local setup_image="$setup_image"
# lancement dans un container docker à préparer
[ -n "$project_name" ] || setx project_name=get_project_name
setx container_name=get_container_name "$project_name"
container_name="dkbuild_maven_${container_name}"
[ -n "$setup_image" ] || setup_image="dkbuild_maven_${container_name}_image"
# vérifier l'existence de l'image
setx ctid=docker image ls --format '{{.ID}}' "${container_name}_image"
setx ctid=docker image ls --format '{{.ID}}' "$setup_image"
# créer le container le cas échéant
if [ -z "$ctid" ]; then
estep "Création du container $container_name à partir de l'image $image"
estep "Création de l'image $setup_image à partir de $image"
cmd=(
docker create -it --name "${container_name}_ct"
docker create -it --name "${setup_image}_tmpct"
"${basecmd[@]}"
"$image"
bash -c "$setupscript"
)
setx ctid="${cmd[@]}" &&
docker container start -ai "$ctid" &&
docker container commit "$ctid" "${container_name}_image" &&
docker container commit "$ctid" "$setup_image" &&
docker container rm "$ctid" || die
fi
# prendre comme image le container créé
image="${container_name}_image"
image="$setup_image"
fi
case "$action" in
@ -2608,6 +2650,7 @@ cd "$projdir"
[ "$host_mappings" == __UNDEFINED__ ] && host_mappings="${DEFAULTS[docker_host-mappings]}"
local mvn="${DEFAULTS[mvn_mvn]}"
local setup="${DEFAULTS[mvn_setup]}"
local setup_image="${DEFAULTS[mvn_setup-image]}"
local project_name="${DEFAULTS[mvn_project-name]}"
if [ -f "$destdir/.maven.conf" ]; then
eval "$(
@ -2616,12 +2659,14 @@ cd "$projdir"
MAVEN_MACHINE=-u
MAVEN_CMD=
MAVEN_SETUP=
MAVEN_SETUP_IMAGE=
source "$destdir/.maven.conf"
[ -z "$java" ] && echo_setv java="$MAVEN_JAVA"
[ -z "$image" ] && echo_setv image="$MAVEN_IMAGE"
[ -z "$machine" ] && echo_setv machine="$MAVEN_MACHINE"
[ -z "$mvn" ] && echo_setv mvn="$MAVEN_CMD"
[ -z "$setup" ] && echo_setv setup="$MAVEN_SETUP"
[ -z "$setup_image" ] && echo_setv setup_image="$MAVEN_SETUP_IMAGE"
)"
fi
@ -2636,6 +2681,7 @@ cd "$projdir"
host-mappings=*) host_mappings="${1#host-mappings=}";;
mvn=*) mvn="${1#mvn=}";;
setup=*) setup="${1#setup=}";;
setup-image=*) setup_image="${1#setup-image=}";;
project-name=*) project_name="${1#project-name=}";;
*=*) ewarn "mvn: $1: argument ignoré";;
*) break;;