Intégration de la branche release-11.1.0

This commit is contained in:
Jephté Clain 2024-02-01 20:59:56 +04:00
commit 9d8e3c53d1
18 changed files with 429 additions and 154 deletions

View File

@ -1,3 +1,25 @@
## Version 11.1.0 du 01/02/2024-20:59
* `8570d12` pff: les répertoires liés peuvent contenir des fichiers
* `5d6c6b4` synchroniser pff et nulib/pff
* `90bda71` pff: support des répertoires liés
* `7d7b88a` autoriser les feature branches qui commencent par wip/
* `5cc1826` dk et dkbuild: support .composer.yaml et setup_image
* `0bf0f48` dk: support ~/.dkbuild.env
* `b818e11` dkbuild: ajout de --plain
* `ad14de3` dkbuild: configuration profil prod par défaut
* `54a5b54` Sscreen: support des cas où screen n'est pas dans le PATH
* `5a06851` dkbuild: support profil par défaut
* `a855b04` dkbuild: les versions de profil sont ordonnées comme les versions de distribution
* `e531553` dkbuild: sans --all-profiles, ne build que dans le profil par défaut
* `db1467b` bug
* `3123d8e` dkbuild: mappings par défaut
* `d9b1485` charnière entre java 8 et java 11
* `744a3fa` dkbuild: indiquer si la version de Java demandée n'est pas trouvée
* `2803868` dkbuild: marquer plus d'action comme étant du build
* `4f7bc3f` dkbuild: bug avec -u seul
* `8cdc3cb` modifs.mineures sans commentaires
## Version 11.0.0 du 05/09/2023-14:29 ## Version 11.0.0 du 05/09/2023-14:29
* `ddfbc00` maj des images par défaut dk et dkbuild * `ddfbc00` maj des images par défaut dk et dkbuild

18
Sscreen
View File

@ -18,15 +18,25 @@ function __ask() {
} }
function __auto_screen() { function __auto_screen() {
# Si on est déjà dans screen, ne rien faire
[ -z "$STY" ] || return
# Si screen pas installé, ne rien faire # Si screen pas installé, ne rien faire
if [ -z "$(which screen 2>/dev/null)" ]; then local dir screen="$(which screen 2>/dev/null)"
if [ -z "$screen" ]; then
for dir in /usr/local/bin /opt/bin /usr/bin /bin; do
if [ -x "$dir/screen" ]; then
screen="$dir/screen"
PATH="$PATH:$dir"
break
fi
done
fi
if [ -z "$screen" ]; then
echo "${COULEUR_JAUNE}WARNING${COULEUR_NORMALE} screen introuvable. une session bash classique sera lancée" echo "${COULEUR_JAUNE}WARNING${COULEUR_NORMALE} screen introuvable. une session bash classique sera lancée"
exec /bin/bash -l exec /bin/bash -l
fi fi
# Si on est déjà dans screen, ne rien faire
[ -z "$STY" ] || return
# corriger TERM pour les vieilles versions de Linux # corriger TERM pour les vieilles versions de Linux
case "$TERM" in case "$TERM" in
xterm*) TERM=xterm;; xterm*) TERM=xterm;;

View File

@ -1 +1 @@
11.0.0 11.1.0

125
dk
View File

@ -230,6 +230,7 @@ COMMANDES
spécifiées y sont lancées. Ce container est réutilisé à chaque fois. spécifiées y sont lancées. Ce container est réutilisé à chaque fois.
Ce paramétrage est utilisé pour par exemple installer certains Ce paramétrage est utilisé pour par exemple installer certains
packages nécessaire au projet. 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 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 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é 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. spécifiées y sont lancées. Ce container est réutilisé à chaque fois.
Ce paramétrage est utilisé pour par exemple installer certains Ce paramétrage est utilisé pour par exemple installer certains
packages nécessaire au projet. 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 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 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é 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" estep "Type de dépôt: $TYPE"
if [ "$TYPE" == composer ]; then if [ "$TYPE" == composer ]; then
local cvname cvvalue 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 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}" cvvalue="${var}_${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}"
[ -n "$cvvalue" ] || { cvvalue="${var}_${cvname^^}"; cvvalue="${!cvvalue}"; } [ -n "$cvvalue" ] || { cvvalue="${var}_${cvname^^}"; cvvalue="${!cvvalue}"; }
[ -n "$cvvalue" ] || { cvvalue="${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}"; } [ -n "$cvvalue" ] || { cvvalue="${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}"; }
@ -1122,10 +1124,10 @@ function build_update_apps() {
fi fi
elif [ "$TYPE" == maven ]; then elif [ "$TYPE" == maven ]; then
local cvname cvvalue 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 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}" cvvalue="${var}_${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}"
[ -n "$cvvalue" ] || { cvvalue="${var}_${cvname^^}"; cvvalue="${!cvvalue}"; } [ -n "$cvvalue" ] || { cvvalue="${var}_${cvname^^}"; cvvalue="${!cvvalue}"; }
[ -n "$cvvalue" ] || { cvvalue="${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}"; } [ -n "$cvvalue" ] || { cvvalue="${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}"; }
@ -1979,6 +1981,7 @@ function default_docker_composer() {
-e group="$group" -e group="$group"
-e projdir="$projdir" -e projdir="$projdir"
-e setup="$COMPOSER_SETUP" -e setup="$COMPOSER_SETUP"
-e setup_image="$COMPOSER_SETUP_IMAGE"
-e composer="$COMPOSER_CMD" -e composer="$COMPOSER_CMD"
-e args="$args" -e args="$args"
) )
@ -2008,35 +2011,36 @@ fi
if [ -n "$COMPOSER_SETUP" ]; then if [ -n "$COMPOSER_SETUP" ]; then
# lancement dans un container docker à préparer # 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 if [ -f docker-compose.yml ]; then
compose_set_project_name set_container_name compose_set_project_name set_container_name
else else
NAME="$(basename -- "$(pwd)")" NAME="$(basename -- "$(pwd)")"
docker_check_name set_container_name docker_check_name set_container_name
fi 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 # 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 # créer le container le cas échéant
if [ -z "$dkid" ]; then 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=( cmd=(
"$DOCKER" create -it --name "${container_name}_ct" "$DOCKER" create -it --name "${setup_image}_tmpct"
"${basecmd[@]}" "${basecmd[@]}"
"$COMPOSER_IMAGE" "$COMPOSER_IMAGE"
bash -c "$setupscript" bash -c "$setupscript"
) )
setx dkid="${cmd[@]}" || return 1 setx dkid="${cmd[@]}" || return 1
"$DOCKER" container start -ai "$dkid" || 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 "$DOCKER" container rm "$dkid" || return 1
fi fi
# prendre comme image le container créé # prendre comme image le container créé
COMPOSER_IMAGE="${container_name}_image" COMPOSER_IMAGE="$setup_image"
fi fi
cmd=( cmd=(
@ -2062,7 +2066,19 @@ function auto_composer() {
local COMPOSER_MACHINE=-u local COMPOSER_MACHINE=-u
local COMPOSER_CMD= local COMPOSER_CMD=
local COMPOSER_SETUP= local COMPOSER_SETUP=
[ -f .composer.conf ] && source ./.composer.conf 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"/
s/^composer_setup: /COMPOSER_SETUP=/
s/^composer_setup_image: /COMPOSER_SETUP_IMAGE=/')"
elif [ -f .composer.conf ]; then
source ./.composer.conf
fi
# les premiers arguments peuvent servir à 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
@ -2204,6 +2220,7 @@ function default_docker_maven() {
-e group="$group" -e group="$group"
-e projdir="$projdir" -e projdir="$projdir"
-e setup="$MAVEN_SETUP" -e setup="$MAVEN_SETUP"
-e setup_image="$MAVEN_SETUP_IMAGE"
-e maven="$MAVEN_CMD" -e maven="$MAVEN_CMD"
-e args="$args" -e args="$args"
${MAVEN_JAVA:+-e JAVA="$MAVEN_JAVA"} ${MAVEN_JAVA:+-e JAVA="$MAVEN_JAVA"}
@ -2228,35 +2245,36 @@ cd "$projdir"
if [ -n "$MAVEN_SETUP" ]; then if [ -n "$MAVEN_SETUP" ]; then
# lancement dans un container docker à préparer # 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 if [ -f docker-compose.yml ]; then
compose_set_project_name set_container_name compose_set_project_name set_container_name
else else
NAME="$(basename -- "$(pwd)")" NAME="$(basename -- "$(pwd)")"
docker_check_name set_container_name docker_check_name set_container_name
fi 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 # 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 # créer le container le cas échéant
if [ -z "$dkid" ]; then 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=( cmd=(
"$DOCKER" create -it --name "${container_name}_ct" "$DOCKER" create -it --name "${setup_image}_tmpct"
"${basecmd[@]}" "${basecmd[@]}"
"$MAVEN_IMAGE" "$MAVEN_IMAGE"
bash -c "$setupscript" bash -c "$setupscript"
) )
setx dkid="${cmd[@]}" || return 1 setx dkid="${cmd[@]}" || return 1
"$DOCKER" container start -ai "$dkid" || 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 "$DOCKER" container rm "$dkid" || return 1
fi fi
# prendre comme image le container créé # prendre comme image le container créé
MAVEN_IMAGE="${container_name}_image" MAVEN_IMAGE="$setup_image"
fi fi
cmd=( cmd=(
@ -2281,6 +2299,7 @@ function auto_maven() {
local MAVEN_MACHINE=-u local MAVEN_MACHINE=-u
local MAVEN_CMD= local MAVEN_CMD=
local MAVEN_SETUP= local MAVEN_SETUP=
local MAVEN_SETUP_IMAGE=
[ -f .maven.conf ] && source ./.maven.conf [ -f .maven.conf ] && source ./.maven.conf
# les premiers arguments peuvent servir à redéfinir les variables # les premiers arguments peuvent servir à redéfinir les variables
while [ $# -gt 0 ]; do while [ $# -gt 0 ]; do
@ -2413,21 +2432,6 @@ fi
[ -n "$COMPOSE_V1" ] && DOCKER_COMPOSE=(docker-compose) || DOCKER_COMPOSE=(docker compose) [ -n "$COMPOSE_V1" ] && DOCKER_COMPOSE=(docker-compose) || DOCKER_COMPOSE=(docker compose)
DEFAULT_PROFILE=devel
case "$PROFILE" in
jclain)
REGISTRY=docker.jclain.fr
PRIVAREG=docker.jclain.fr
;;
devel)
REGISTRY=docker.devel.self
PRIVAREG=docker.devel.self
;;
prod|test|*)
REGISTRY=pubdocker.univ-reunion.fr
PRIVAREG=pridocker.univ-reunion.fr
;;
esac
PROFILE= PROFILE=
DM_ALIASES=() DM_ALIASES=()
DM_PROFILES=() DM_PROFILES=()
@ -2435,20 +2439,55 @@ CLUSTERDIRS=()
DEFAULT_DEVEL_SRCDIR="$HOME/wop" DEFAULT_DEVEL_SRCDIR="$HOME/wop"
COMPOSER_DEVEL_SRCDIR="$HOME/wop/php" COMPOSER_DEVEL_SRCDIR="$HOME/wop/php"
MAVEN_DEVEL_SRCDIR="$HOME/wop/sn" MAVEN_DEVEL_SRCDIR="$HOME/wop/sn"
DEFAULT_COMPOSER_IMAGE="$REGISTRY/image/phpbuilder:d11" DEFAULT_COMPOSER_IMAGE=
DEFAULT_MAVEN_IMAGE="$REGISTRY/image/javabuilder:d11" DEFAULT_MAVEN_IMAGE=
DEFAULT_HOST_MAPPINGS=() DEFAULT_HOST_MAPPINGS=()
prod_HOST_MAPPINGS=(
pridocker.univ-reunion.fr:10.85.1.56
pubdocker.univ-reunion.fr:10.85.1.57
repos.univ-reunion.fr:10.85.1.57
git.univ-reunion.fr:10.85.1.55
)
test_HOST_MAPPINGS=("${prod_HOST_MAPPINGS[@]}")
set_defaults dk set_defaults dk
export PROFILE export PROFILE
DEFAULT_PROFILE=devel
REGISTRY=
HOST_MAPPINGS=() HOST_MAPPINGS=()
if [ -f ~/.dkbuild.env ]; then
function default_profile() {
DEFAULT_PROFILE="$1"
}
function profile() {
local profile
for profile in "$@"; do
[ "$profile" == "$DEFAULT_PROFILE" ] && return 0
done
return 1
}
function setenv() {
eval "export $1"
}
function default() {
local command="$1"; shift
local nv n v
case "$command" in
docker)
for nv in "$@"; do
[[ "$nv" == *=* ]] || continue
n="${nv%%=*}"
v="${nv#*=}"
case "$n" in
host-mappings)
read -a nv <<<"$v"
for v in "${ns[@]}"; do
HOST_MAPPINGS+=("$v")
done
;;
esac
done
;;
esac
}
source ~/.dkbuild.env
fi
[ -n "$REGISTRY" ] || REGISTRY=pubdocker.univ-reunion.fr
[ -n "$DEFAULT_COMPOSER_IMAGE" ] || DEFAULT_COMPOSER_IMAGE="$REGISTRY/image/php:d11"
[ -n "$DEFAULT_MAVEN_IMAGE" ] || DEFAULT_MAVEN_IMAGE="$REGISTRY/image/javabuilder:d11"
chdir= chdir=
CONFIG= CONFIG=

178
dkbuild
View File

@ -103,6 +103,8 @@ $scriptname build [OPTIONS] [BUILDVARS...]
-E, --dtest -E, --dtest
--devel --devel
Spécifier le profil dans lequel construire l'image Spécifier le profil dans lequel construire l'image
--all-profiles
Construire l'image dans tous les profils définis
-e, --env VAR=VALUE -e, --env VAR=VALUE
Spécifier la valeur d'une variable d'environnement. Cette valeur Spécifier la valeur d'une variable d'environnement. Cette valeur
@ -142,6 +144,8 @@ $scriptname build [OPTIONS] [BUILDVARS...]
Construire les images Construire les images
--no-cache --no-cache
Ne pas utiliser le cache lors du build Ne pas utiliser le cache lors du build
--plain-output
Afficher la sortie complète des containers lors du build
-U, --pull-image -U, --pull-image
Essayer de récupérer une version plus récente de l'image source Essayer de récupérer une version plus récente de l'image source
-p, --push-image -p, --push-image
@ -178,8 +182,9 @@ $scriptname mvn DESTDIR [ACTION [PARAMS] [ARGS]]
$scriptname dump [OPTIONS] $scriptname dump [OPTIONS]
afficher les valeurs des variables afficher les valeurs des variables
Les options --machine, --projdir, --config, --dist, --profile, --env et Les options suivantes ont la même signification que pour l'action build:
--arg ont la même signification que pour l'action build" --machine, --projdir, --config, --dist, --profile, --all-profiles, --env,
--arg"
} }
function display_help_dkbuild() { function display_help_dkbuild() {
@ -257,6 +262,11 @@ Si le profil sélectionné par l'utilisateur n'est pas dans la liste fournie, le
script s'arrête avec une erreur. Le premier profil listé est spécial: c'est le script s'arrête avec une erreur. Le premier profil listé est spécial: c'est le
profil par défaut. profil par défaut.
La commande 'default_profile' permet de spécifier un profil par défaut à
utiliser, exactement comme s'il avait été spécifié avec l'option --profile.
Cette commande est particulièrement appropriée pour le fichier ~/.dkbuild.env
s'il s'agit de définir le profil à utiliser sur un hôte.
La commande 'profile' permet de tester si le profil spécifié en argument a été La commande 'profile' permet de tester si le profil spécifié en argument a été
sélectionné par l'utilisateur. L'argument 'DEFAULT' permet de tester le profil sélectionné par l'utilisateur. L'argument 'DEFAULT' permet de tester le profil
par défaut. par défaut.
@ -286,8 +296,8 @@ la plus récente.
Si les distributions sont utilisées avec des versions, alors c'est une erreur de Si les distributions sont utilisées avec des versions, alors c'est une erreur de
spécifier une version dans le profil spécifier une version dans le profil
Note: 'setprofiles' ne doit être utilisé qu'une seule fois. Les invocations Note: 'setprofiles' et 'default_profile' ne peuvent être utilisés qu'une seule
suivantes sont ignorées. fois. Les invocations suivantes sont ignorées.
## Versions #################################################################### ## Versions ####################################################################
@ -507,6 +517,8 @@ USAGE:
## setprofiles -- spécifier les profils valides ## setprofiles -- spécifier les profils valides
## default_profile -- spécifier le profil à utiliser si aucun profil n'est sélectionné
## profile -- vérifier le profil courant ## profile -- vérifier le profil courant
## setversion -- spécifier la version par défaut ## setversion -- spécifier la version par défaut
@ -774,18 +786,29 @@ Les paramètres optionnels sont
commandes spécifiées y sont lancées. Ce container est réutilisé à chaque fois. 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 Ce paramétrage est utilisé par exemple pour installer certains packages
nécessaire au projet. 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 * project-name=PROJECT_NAME
si setup= est défini, nommer l'image sur la base de ce nom. par défaut, le nom si setup= est défini, nommer l'image sur la base de ce nom. par défaut, le nom
est calculé automatiquement est calculé automatiquement
Si un fichier .composer.conf existe dans le répertoire du projet, il est sourcé 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: 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 -- valeur par défaut de php=
* COMPOSER_PHP_MAX -- valeur par défaut de php-max= * COMPOSER_PHP_MAX -- valeur par défaut de php-max=
* COMPOSER_IMAGE -- valeur par défaut de image= * COMPOSER_IMAGE -- valeur par défaut de image=
* COMPOSER_MACHINE -- valeur par défaut de machine= * COMPOSER_MACHINE -- valeur par défaut de machine=
* COMPOSER_CMD -- valeur par défaut de composer= * COMPOSER_CMD -- valeur par défaut de composer=
* COMPOSER_SETUP -- valeur par défaut de setup= * COMPOSER_SETUP -- valeur par défaut de setup=
* COMPOSER_SETUP_IMAGE -- valeur par défaut de setup-image=
## mvn -- construire projet maven ## mvn -- construire projet maven
@ -847,6 +870,8 @@ Les paramètres optionnels sont
commandes spécifiées y sont lancées. Ce container est réutilisé à chaque fois. 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 Ce paramétrage est utilisé par exemple pour installer certains packages
nécessaire au projet. 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 * project-name=PROJECT_NAME
si setup= est défini, nommer l'image sur la base de ce nom. par défaut, le nom si setup= est défini, nommer l'image sur la base de ce nom. par défaut, le nom
est calculé automatiquement est calculé automatiquement
@ -858,6 +883,7 @@ pour obtenir les valeurs par défaut des paramètres:
* MAVEN_MACHINE -- valeur par défaut de machine= * MAVEN_MACHINE -- valeur par défaut de machine=
* MAVEN_CMD -- valeur par défaut de mvn= * MAVEN_CMD -- valeur par défaut de mvn=
* MAVEN_SETUP -- valeur par défaut de setup= * MAVEN_SETUP -- valeur par défaut de setup=
* MAVEN_SETUP_IMAGE -- valeur par défaut de setup-image=
## run -- lancer des commandes ## run -- lancer des commandes
@ -889,6 +915,7 @@ declare -A PROTECTED_VARS=(
[SETDISTS]=1 [SETDISTS]=1
[SETPROFILES_DONE]=1 [SETPROFILES_DONE]=1
[SETPROFILES]=1 [SETPROFILES]=1
[DEFAULT_PROFILE]=1
[SETVERSION_DONE]=1 [SETVERSION_DONE]=1
[SETVERSION]=1 [SETVERSION]=1
[AUTOBUILD]=1 [AUTOBUILD]=1
@ -906,7 +933,7 @@ SHARED_ARGS1=(
-c:,--config: CONFIG= -c:,--config: CONFIG=
) )
SHARED_LOCALS2="local DIST PROFILE; local -a TMPENVIRON TMPARGS" SHARED_LOCALS2="local DIST PROFILE ALL_PROFILES; local -a TMPENVIRON TMPARGS"
SHARED_ARGS2=( SHARED_ARGS2=(
-d:,--dist: DIST= -d:,--dist: DIST=
-9,--d9 DIST=d9 -9,--d9 DIST=d9
@ -923,6 +950,7 @@ SHARED_ARGS2=(
-E,--dtest PROFILE=dtest -E,--dtest PROFILE=dtest
-J,--jclain PROFILE=jclain -J,--jclain PROFILE=jclain
--devel PROFILE=devel --devel PROFILE=devel
--all-profiles ALL_PROFILES=1
-e:,--env: '$TMPENVIRON+=("$value_")' -e:,--env: '$TMPENVIRON+=("$value_")'
--arg: '$TMPARGS+=("$value_")' --arg: '$TMPARGS+=("$value_")'
@ -933,6 +961,7 @@ TFUNCTIONS=(
section note info debug section note info debug
setdists dist setdists dist
setprofiles profile setprofiles profile
default_profile
setversion version setversion version
setenv resetenv setenv resetenv
setarg resetarg setarg resetarg
@ -1269,14 +1298,37 @@ function define_functions_env() {
return 1 return 1
} }
function profile() { function profile() {
local profile version local profile version default
for profile in "$@"; do for profile in "$@"; do
[ "$profile" == DEFAULT ] && profile="${SETPROFILES[0]}" if [ "$profile" == DEFAULT ]; then
default=1
continue
fi
parse_profile "$profile" profile version parse_profile "$profile" profile version
[ "$profile" == "$PROFILE" ] || continue [ "$profile" == "$PROFILE" ] || continue
[ -z "$version" -o "$version" == "$PVERSION" ] || continue [ -z "$version" -o "$version" == "$PVERSION" ] || continue
return 0 return 0
done done
if [ -n "$default" ]; then
# trouver la dernière occurence du premier profil mentionné. en
# effet, les versions doivent être ordonnées de la plus ancienne à
# la plus récente.
local first_profile last_version
for profile in "${SETPROFILES[@]}"; do
parse_profile "$profile" profile version
if [ -z "$first_profile" ]; then
first_profile="$profile"
last_version="$version"
elif [ "$profile" == "$first_profile" ]; then
last_version="$version"
fi
done
if [ "$first_profile" == "$PROFILE" ]; then
if [ -z "$last_version" -o "$last_version" == "$PVERSION" ]; then
return 0
fi
fi
fi
return 1 return 1
} }
declare -g -A ENVIRON declare -g -A ENVIRON
@ -1405,6 +1457,7 @@ function resolve_dists_profiles() {
SETDISTS=() SETDISTS=()
SETPROFILES_DONE= SETPROFILES_DONE=
SETPROFILES=() SETPROFILES=()
DEFAULT_PROFILE=
SETVERSION_DONE= SETVERSION_DONE=
SETVERSION= SETVERSION=
AUTOBUILD=1 AUTOBUILD=1
@ -1419,6 +1472,9 @@ function resolve_dists_profiles() {
SETPROFILES=("$@") SETPROFILES=("$@")
SETPROFILES_DONE=1 SETPROFILES_DONE=1
} }
function default_profile() {
[ -n "$DEFAULT_PROFILE" ] || DEFAULT_PROFILE="$1"
}
function build() { function build() {
AUTOBUILD= AUTOBUILD=
} }
@ -1427,6 +1483,10 @@ function resolve_dists_profiles() {
} }
load_dkbuild load_dkbuild
if [ -z "$PROFILE" -a -z "$ALL_PROFILES" -a -n "$DEFAULT_PROFILE" ]; then
enote "Auto-sélection du profil $DEFAULT_PROFILE"
PROFILE="$DEFAULT_PROFILE"
fi
local MANUAL_SETPROFILES= local MANUAL_SETPROFILES=
if [ -z "$SETPROFILES_DONE" -a -n "$PROFILE" ]; then if [ -z "$SETPROFILES_DONE" -a -n "$PROFILE" ]; then
# Si l'utilisateur spécifie un profil mais qu'aucun profil n'a été # Si l'utilisateur spécifie un profil mais qu'aucun profil n'a été
@ -1486,7 +1546,7 @@ function resolve_dists_profiles() {
fi fi
parse_profile "$profile" parse_profile "$profile"
if [ "$profile" == "$PROFILE" ]; then if [ "$profile" == "$PROFILE" ]; then
# ou matcher uniquement la distribution # ou matcher uniquement le profil
found=1 found=1
break break
fi fi
@ -1495,8 +1555,16 @@ function resolve_dists_profiles() {
[ -n "$found" ] || die "$PROFILE: profil invalide" [ -n "$found" ] || die "$PROFILE: profil invalide"
# forcer à ne construire que cette distribution # forcer à ne construire que cette distribution
PROFILES=("$PROFILE") PROFILES=("$PROFILE")
elif [ -n "$ALL_PROFILES" ]; then
# prendre tous les profils comme indiqué
for profile in "${SETPROFILES[@]}"; do
parse_profile "$profile"
PROFILES+=("$profile")
done
else else
PROFILES=("${SETPROFILES[@]}") # prendre le profil par défaut
parse_profile "${SETPROFILES[0]}"
PROFILES=("$profile")
fi fi
} }
load_dkbuild load_dkbuild
@ -1834,6 +1902,7 @@ function define_functions_cmd() {
shift shift
done done
[ -n "${DEFAULTS[build_build]-1}" ] || return 0
[ -n "$output" ] || die "genfile: Vous devez spécifier le fichier en sortie" [ -n "$output" ] || die "genfile: Vous devez spécifier le fichier en sortie"
if [ -n "$context" ]; then if [ -n "$context" ]; then
mkdir -p "$context" || die mkdir -p "$context" || die
@ -1869,6 +1938,7 @@ function define_functions_cmd() {
shift shift
done done
[ -n "${DEFAULTS[build_build]-1}" ] || return 0
[ -n "$DOCKERFILE" ] || DOCKERFILE=Dockerfile [ -n "$DOCKERFILE" ] || DOCKERFILE=Dockerfile
DOCKERCONTEXT=. DOCKERCONTEXT=.
if [ -n "$context" ]; then if [ -n "$context" ]; then
@ -1892,6 +1962,7 @@ function define_functions_cmd() {
function add2dockerfile() { function add2dockerfile() {
edebug "$(qvals "$@")" edebug "$(qvals "$@")"
[ -n "${DEFAULTS[build_build]-1}" ] || return 0
[ -n "$DOCKERFILE" ] || return [ -n "$DOCKERFILE" ] || return
echo "$*" >>"$DOCKERFILE" echo "$*" >>"$DOCKERFILE"
} }
@ -2002,6 +2073,7 @@ function define_functions_cmd() {
local avar local avar
local -a args; args=( local -a args; args=(
${no_cache:+--no-cache} ${no_cache:+--no-cache}
${progress:+--progress "$progress"}
${pull:+--pull} ${pull:+--pull}
) )
eval "host_mappings=($host_mappings)" eval "host_mappings=($host_mappings)"
@ -2039,6 +2111,7 @@ function define_functions_cmd() {
function cbuild() { function cbuild() {
edebug "cbuild $(qvals "$@")" edebug "cbuild $(qvals "$@")"
local build="${DEFAULTS[build_build]-1}"
local files="${DEFAULTS[cbuild_files]}" local files="${DEFAULTS[cbuild_files]}"
local project_name="${DEFAULTS[cbuild_project-name]}" local project_name="${DEFAULTS[cbuild_project-name]}"
local no_cache="${DEFAULTS[cbuild_no-cache]}" local no_cache="${DEFAULTS[cbuild_no-cache]}"
@ -2057,6 +2130,7 @@ function define_functions_cmd() {
shift shift
done done
[ -n "$build" ] || return
if [ -n "$files" ]; then if [ -n "$files" ]; then
eval "files=($files)" eval "files=($files)"
else else
@ -2083,6 +2157,7 @@ function define_functions_cmd() {
local avar evar; local -a bargs local avar evar; local -a bargs
bargs=( bargs=(
${no_cache:+--no-cache} ${no_cache:+--no-cache}
${progress:+--progress "$progress"}
${pull:+--pull} ${pull:+--pull}
) )
for avar in "${!ARGS[@]}"; do for avar in "${!ARGS[@]}"; do
@ -2153,6 +2228,7 @@ function define_functions_cmd() {
-e group="$group" -e group="$group"
-e projdir="$projdir" -e projdir="$projdir"
-e setup="$setup" -e setup="$setup"
-e setup_image="$setup_image"
-e composer="$composer" -e composer="$composer"
-e args="$args" -e args="$args"
) )
@ -2182,32 +2258,33 @@ fi
if [ -n "$setup" ]; then if [ -n "$setup" ]; then
local project_name container_name ctid local project_name container_name ctid
local setup_image="$setup_image"
# lancement dans un container docker à préparer # lancement dans un container docker à préparer
[ -n "$project_name" ] || setx project_name=get_project_name [ -n "$project_name" ] || setx project_name=get_project_name
setx container_name=get_container_name "$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 # 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 # créer le container le cas échéant
if [ -z "$ctid" ]; then 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=( cmd=(
docker create -it --name "${container_name}_ct" docker create -it --name "${setup_image}_tmpct"
"${basecmd[@]}" "${basecmd[@]}"
"$image" "$image"
bash -c "$setupscript" bash -c "$setupscript"
) )
setx ctid="${cmd[@]}" && setx ctid="${cmd[@]}" &&
docker container start -ai "$ctid" && docker container start -ai "$ctid" &&
docker container commit "$ctid" "${container_name}_image" && docker container commit "$ctid" "$setup_image" &&
docker container rm "$ctid" || die docker container rm "$ctid" || die
fi fi
# prendre comme image le container créé # prendre comme image le container créé
image="${container_name}_image" image="$setup_image"
fi fi
case "$action" in case "$action" in
@ -2256,8 +2333,29 @@ fi
[ "$host_mappings" == __UNDEFINED__ ] && host_mappings="${DEFAULTS[docker_host-mappings]}" [ "$host_mappings" == __UNDEFINED__ ] && host_mappings="${DEFAULTS[docker_host-mappings]}"
local composer="${DEFAULTS[composer_composer]}" local composer="${DEFAULTS[composer_composer]}"
local setup="${DEFAULTS[composer_setup]}" local setup="${DEFAULTS[composer_setup]}"
local setup_image="${DEFAULTS[composer_setup-image]}"
local project_name="${DEFAULTS[composer_project-name]}" 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 "$( eval "$(
COMPOSER_PHP= COMPOSER_PHP=
COMPOSER_PHP_MAX= COMPOSER_PHP_MAX=
@ -2265,6 +2363,7 @@ fi
COMPOSER_MACHINE=-u COMPOSER_MACHINE=-u
COMPOSER_CMD= COMPOSER_CMD=
COMPOSER_SETUP= COMPOSER_SETUP=
COMPOSER_SETUP_IMAGE=
source "$destdir/.composer.conf" source "$destdir/.composer.conf"
[ -z "$php" ] && echo_setv php="$COMPOSER_PHP" [ -z "$php" ] && echo_setv php="$COMPOSER_PHP"
[ -z "$php_max" ] && echo_setv php_max="$COMPOSER_PHP_MAX" [ -z "$php_max" ] && echo_setv php_max="$COMPOSER_PHP_MAX"
@ -2272,6 +2371,7 @@ fi
[ -z "$machine" ] && echo_setv machine="$COMPOSER_MACHINE" [ -z "$machine" ] && echo_setv machine="$COMPOSER_MACHINE"
[ -z "$composer" ] && echo_setv composer="$COMPOSER_CMD" [ -z "$composer" ] && echo_setv composer="$COMPOSER_CMD"
[ -z "$setup" ] && echo_setv setup="$COMPOSER_SETUP" [ -z "$setup" ] && echo_setv setup="$COMPOSER_SETUP"
[ -z "$setup_image" ] && echo_setv setup_image="$COMPOSER_SETUP_IMAGE"
)" )"
fi fi
@ -2287,6 +2387,7 @@ fi
host-mappings=*) host_mappings="${1#host-mappings=}";; host-mappings=*) host_mappings="${1#host-mappings=}";;
composer=*) composer="${1#composer=}";; composer=*) composer="${1#composer=}";;
setup=*) setup="${1#setup=}";; setup=*) setup="${1#setup=}";;
setup-image=*) setup_image="${1#setup-image=}";;
project-name=*) project_name="${1#project-name=}";; project-name=*) project_name="${1#project-name=}";;
*=*) ewarn "composer: $1: argument ignoré";; *=*) ewarn "composer: $1: argument ignoré";;
*) break;; *) break;;
@ -2375,7 +2476,7 @@ exit((PHP_VERSION_ID < $version)? 0: 1);
function _local_mvn() { function _local_mvn() {
if [ -n "$java" ]; then if [ -n "$java" ]; then
urequire java urequire java
select_java_exact "$java" || die select_java_exact "$java" || die "mvn: Java $java introuvable"
export MVN_JAVA_VERSION="$java" export MVN_JAVA_VERSION="$java"
fi fi
@ -2452,6 +2553,7 @@ exit((PHP_VERSION_ID < $version)? 0: 1);
-e group="$group" -e group="$group"
-e projdir="$projdir" -e projdir="$projdir"
-e setup="$setup" -e setup="$setup"
-e setup_image="$setup_image"
-e mvn="$mvn" -e mvn="$mvn"
-e args="$args" -e args="$args"
${java:+-e JAVA="$java"} ${java:+-e JAVA="$java"}
@ -2477,32 +2579,33 @@ cd "$projdir"
if [ -n "$setup" ]; then if [ -n "$setup" ]; then
local project_name container_name ctid local project_name container_name ctid
local setup_image="$setup_image"
# lancement dans un container docker à préparer # lancement dans un container docker à préparer
[ -n "$project_name" ] || setx project_name=get_project_name [ -n "$project_name" ] || setx project_name=get_project_name
setx container_name=get_container_name "$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 # 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 # créer le container le cas échéant
if [ -z "$ctid" ]; then 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=( cmd=(
docker create -it --name "${container_name}_ct" docker create -it --name "${setup_image}_tmpct"
"${basecmd[@]}" "${basecmd[@]}"
"$image" "$image"
bash -c "$setupscript" bash -c "$setupscript"
) )
setx ctid="${cmd[@]}" && setx ctid="${cmd[@]}" &&
docker container start -ai "$ctid" && docker container start -ai "$ctid" &&
docker container commit "$ctid" "${container_name}_image" && docker container commit "$ctid" "$setup_image" &&
docker container rm "$ctid" || die docker container rm "$ctid" || die
fi fi
# prendre comme image le container créé # prendre comme image le container créé
image="${container_name}_image" image="$setup_image"
fi fi
case "$action" in case "$action" in
@ -2547,6 +2650,7 @@ cd "$projdir"
[ "$host_mappings" == __UNDEFINED__ ] && host_mappings="${DEFAULTS[docker_host-mappings]}" [ "$host_mappings" == __UNDEFINED__ ] && host_mappings="${DEFAULTS[docker_host-mappings]}"
local mvn="${DEFAULTS[mvn_mvn]}" local mvn="${DEFAULTS[mvn_mvn]}"
local setup="${DEFAULTS[mvn_setup]}" local setup="${DEFAULTS[mvn_setup]}"
local setup_image="${DEFAULTS[mvn_setup-image]}"
local project_name="${DEFAULTS[mvn_project-name]}" local project_name="${DEFAULTS[mvn_project-name]}"
if [ -f "$destdir/.maven.conf" ]; then if [ -f "$destdir/.maven.conf" ]; then
eval "$( eval "$(
@ -2555,12 +2659,14 @@ cd "$projdir"
MAVEN_MACHINE=-u MAVEN_MACHINE=-u
MAVEN_CMD= MAVEN_CMD=
MAVEN_SETUP= MAVEN_SETUP=
MAVEN_SETUP_IMAGE=
source "$destdir/.maven.conf" source "$destdir/.maven.conf"
[ -z "$java" ] && echo_setv java="$MAVEN_JAVA" [ -z "$java" ] && echo_setv java="$MAVEN_JAVA"
[ -z "$image" ] && echo_setv image="$MAVEN_IMAGE" [ -z "$image" ] && echo_setv image="$MAVEN_IMAGE"
[ -z "$machine" ] && echo_setv machine="$MAVEN_MACHINE" [ -z "$machine" ] && echo_setv machine="$MAVEN_MACHINE"
[ -z "$mvn" ] && echo_setv mvn="$MAVEN_CMD" [ -z "$mvn" ] && echo_setv mvn="$MAVEN_CMD"
[ -z "$setup" ] && echo_setv setup="$MAVEN_SETUP" [ -z "$setup" ] && echo_setv setup="$MAVEN_SETUP"
[ -z "$setup_image" ] && echo_setv setup_image="$MAVEN_SETUP_IMAGE"
)" )"
fi fi
@ -2575,6 +2681,7 @@ cd "$projdir"
host-mappings=*) host_mappings="${1#host-mappings=}";; host-mappings=*) host_mappings="${1#host-mappings=}";;
mvn=*) mvn="${1#mvn=}";; mvn=*) mvn="${1#mvn=}";;
setup=*) setup="${1#setup=}";; setup=*) setup="${1#setup=}";;
setup-image=*) setup_image="${1#setup-image=}";;
project-name=*) project_name="${1#project-name=}";; project-name=*) project_name="${1#project-name=}";;
*=*) ewarn "mvn: $1: argument ignoré";; *=*) ewarn "mvn: $1: argument ignoré";;
*) break;; *) break;;
@ -2656,9 +2763,10 @@ cd "$projdir"
} }
function runb() { function runb() {
local build="${DEFAULTS[build_build]-1}" local build="${DEFAULTS[build_build]-1}"
if [ -n "$build" ]; then if [ -z "$build" ]; then
run "$@" [ $# -eq 0 ] && return 1 || return 0
fi fi
run "$@"
} }
function call() { function call() {
edebug "call $(qvals "$@")" edebug "call $(qvals "$@")"
@ -2668,9 +2776,10 @@ cd "$projdir"
} }
function callb() { function callb() {
local build="${DEFAULTS[build_build]-1}" local build="${DEFAULTS[build_build]-1}"
if [ -n "$build" ]; then if [ -z "$build" ]; then
call "$@" [ $# -eq 0 ] && return 1 || return 0
fi fi
call "$@"
} }
function dkbuild() { function dkbuild() {
edebug "dkbuild $(qvals "$@")" edebug "dkbuild $(qvals "$@")"
@ -2788,7 +2897,7 @@ function build_action() {
local machine local machine
local clean_update clean_opt=-X local clean_update clean_opt=-X
local clone_src_only update_src_only update_src sync_src local clone_src_only update_src_only update_src sync_src
local build no_cache pull_image local build no_cache progress pull_image
local push_image local push_image
local -a args; args=( local -a args; args=(
"${SHARED_ARGS1[@]}" "${SHARED_ARGS2[@]}" "${SHARED_ARGS1[@]}" "${SHARED_ARGS2[@]}"
@ -2805,6 +2914,7 @@ function build_action() {
--no-sync-src sync_src=no --no-sync-src sync_src=no
-b,--build build=1 -b,--build build=1
--no-cache no_cache=1 --no-cache no_cache=1
--plain-output progress=plain
-U,--pull-image pull_image=1 -U,--pull-image pull_image=1
-p,--push-image push_image=1 -p,--push-image push_image=1
) )
@ -2816,12 +2926,16 @@ function build_action() {
action=update_src action=update_src
else else
action=build action=build
[ -n "$update_src" ] || update_src=1
[ "$update_src" == no ] && update_src=
if [ -z "$clean_update" -a -z "$sync_src" -a -z "$build" -a -z "$push_image" ]; then if [ -z "$clean_update" -a -z "$sync_src" -a -z "$build" -a -z "$push_image" ]; then
sync_src=1 sync_src=1
build=1 build=1
fi fi
if [ -n "$build" ]; then
[ -n "$update_src" ] || update_src=1
[ "$update_src" == no ] && update_src=
else
update_src=
fi
[ "$sync_src" == no ] && sync_src= [ "$sync_src" == no ] && sync_src=
fi fi

View File

@ -20,27 +20,5 @@
#MAVEN_DEVEL_SRCDIR="$HOME/wop/sn" #MAVEN_DEVEL_SRCDIR="$HOME/wop/sn"
# Image à utiliser pour les builds # Image à utiliser pour les builds
#DEFAULT_COMPOSER_IMAGE=pubdocker.univ-reunion.fr/image/phpbuilder:d11 #DEFAULT_COMPOSER_IMAGE=pubdocker.univ-reunion.fr/image/php:d11
#DEFAULT_MAVEN_IMAGE=pubdocker.univ-reunion.fr/image/javabuilder:d11 #DEFAULT_MAVEN_IMAGE=pubdocker.univ-reunion.fr/image/javabuilder:d11
# Mappings d'hôtes à activer pour les builds à base d'image
#DEFAULT_HOST_MAPPINGS=()
#prod_HOST_MAPPINGS=(pridocker.univ-reunion.fr:10.85.1.56 pubdocker.univ-reunion.fr:10.85.1.57 repos.univ-reunion.fr:10.85.1.57 git.univ-reunion.fr:10.85.1.55)
#test_HOST_MAPPINGS=("${prod_HOST_MAPPINGS}")
#case "$PROFILE" in
#jclain)
# REGISTRY=docker.jclain.fr
# PRIVAREG=docker.jclain.fr
# ;;
#devel)
# REGISTRY=docker.devel.self
# PRIVAREG=docker.devel.self
# ;;
#prod|test|*)
# REGISTRY=pubdocker.univ-reunion.fr
# PRIVAREG=pridocker.univ-reunion.fr
# ;;
#esac
#: ${DEFAULT_COMPOSER_IMAGE:=$REGISTRY/image/phpbuilder:d11}
#: ${DEFAULT_MAVEN_IMAGE:=$REGISTRY/image/javabuilder:d11}

View File

@ -1,11 +1,20 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
default_profile "${DKBUILD_PROFILE:-prod}"
if profile jclain; then if profile jclain; then
setenv REGISTRY=docker.jclain.fr setenv REGISTRY=docker.jclain.fr
setenv PRIVAREG=docker.jclain.fr setenv PRIVAREG=docker.jclain.fr
elif profile prod test; then elif profile prod test; then
setenv REGISTRY=pubdocker.univ-reunion.fr setenv REGISTRY=pubdocker.univ-reunion.fr
setenv PRIVAREG=pridocker.univ-reunion.fr setenv PRIVAREG=pridocker.univ-reunion.fr
else host_mappings=(
pridocker.univ-reunion.fr:10.85.1.56
pubdocker.univ-reunion.fr:10.85.1.57
repos.univ-reunion.fr:10.85.1.57
git.univ-reunion.fr:10.85.1.55
)
default docker host-mappings="${host_mappings[*]}"
elif profile devel; then
setenv REGISTRY=docker.devel.self setenv REGISTRY=docker.devel.self
setenv PRIVAREG=docker.devel.self setenv PRIVAREG=docker.devel.self
fi fi

View File

@ -0,0 +1,8 @@
# tests
Lancer un test de cette façon
~~~sh
../../../dkbuild -j test-xxx
~~~
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary

View File

@ -1,2 +1,2 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
setenv REGISTRY=jclain.fr setenv REGISTRY=docker.jclain.fr

View File

@ -0,0 +1,10 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
setdists v1-d11 v2-d11 v1-d10
if dist LATEST; then
info "$DIST est la distribution la plus récente"
fi
info "version=$VERSION"
# pas de build automatique
AUTOBUILD=

View File

@ -0,0 +1,10 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
setprofiles v1-prod v2-prod test
if profile DEFAULT; then
info "$PROFILE est le profil par défaut"
fi
info "version=$VERSION"
# pas de build automatique
AUTOBUILD=

View File

@ -68,6 +68,9 @@ if [ "$UINST_LOCAL_PROFILES" != auto ]; then
export UTOOLS_LOCAL_PROFILES=$(qvalr "$UINST_LOCAL_PROFILES")" ~/.nutoolsrc export UTOOLS_LOCAL_PROFILES=$(qvalr "$UINST_LOCAL_PROFILES")" ~/.nutoolsrc
fi fi
# copier .dkbuild.env
[ -f ~/.dkbuild.env ] || cp lib/dkbuild/dot-dkbuild.env ~/.dkbuild.env
# identification du système # identification du système
echo "##@before *" >lib/profile.d/0nutools echo "##@before *" >lib/profile.d/0nutools
echo_setv UNAME_SYSTEM "$UNAME_SYSTEM" >>lib/profile.d/0nutools echo_setv UNAME_SYSTEM "$UNAME_SYSTEM" >>lib/profile.d/0nutools

View File

@ -500,37 +500,37 @@ function select_java() {
case "$1" in case "$1" in
1.3|1.3+) 1.3|1.3+)
for v in 1_3 1_4 5 6 7 8 11; do for v in 1_3 1_4 5 6 7 8; do
__java_select "$v" "$2" && return 0 __java_select "$v" "$2" && return 0
done done
;; ;;
1.4|1.4+) 1.4|1.4+)
for v in 1_4 5 6 7 8 11; do for v in 1_4 5 6 7 8; do
__java_select "$v" "$2" && return 0 __java_select "$v" "$2" && return 0
done done
;; ;;
1.5|1.5+|5|5+) 1.5|1.5+|5|5+)
for v in 5 6 7 8 11; do for v in 5 6 7 8; do
__java_select "$v" "$2" && return 0 __java_select "$v" "$2" && return 0
done done
;; ;;
1.6|1.6+|6|6+) 1.6|1.6+|6|6+)
for v in 6 7 8 11; do for v in 6 7 8; do
__java_select "$v" "$2" && return 0 __java_select "$v" "$2" && return 0
done done
;; ;;
1.7|1.7+|7|7+) 1.7|1.7+|7|7+)
for v in 7 8 11; do for v in 7 8; do
__java_select "$v" "$2" && return 0 __java_select "$v" "$2" && return 0
done done
;; ;;
1.8|1.8+|8|8+) 1.8|1.8+|8|8+)
for v in 8 11; do for v in 8; do
__java_select "$v" "$2" && return 0 __java_select "$v" "$2" && return 0
done done
;; ;;
11|11+) 11|11+)
for v in 11; do for v in 11 17; do
__java_select "$v" "$2" && return 0 __java_select "$v" "$2" && return 0
done done
;; ;;
@ -556,7 +556,7 @@ function select_java_exact() {
__java_select 1_3 && return 0 __java_select 1_3 && return 0
;; ;;
1.3+) 1.3+)
for v in 1_3 1_4 5 6 7 8 11; do for v in 1_3 1_4 5 6 7 8; do
__java_select "$v" "$2" && return 0 __java_select "$v" "$2" && return 0
done done
;; ;;
@ -564,7 +564,7 @@ function select_java_exact() {
__java_select 1_4 && return 0 __java_select 1_4 && return 0
;; ;;
1.4+) 1.4+)
for v in 1_4 5 6 7 8 11; do for v in 1_4 5 6 7 8; do
__java_select "$v" "$2" && return 0 __java_select "$v" "$2" && return 0
done done
;; ;;
@ -572,7 +572,7 @@ function select_java_exact() {
__java_select 5 "$2" && return 0 __java_select 5 "$2" && return 0
;; ;;
1.5+|5+) 1.5+|5+)
for v in 5 6 7 8 11; do for v in 5 6 7 8; do
__java_select "$v" "$2" && return 0 __java_select "$v" "$2" && return 0
done done
;; ;;
@ -580,7 +580,7 @@ function select_java_exact() {
__java_select 6 "$2" && return 0 __java_select 6 "$2" && return 0
;; ;;
1.6+|6+) 1.6+|6+)
for v in 6 7 8 11; do for v in 6 7 8; do
__java_select "$v" "$2" && return 0 __java_select "$v" "$2" && return 0
done done
;; ;;
@ -588,7 +588,7 @@ function select_java_exact() {
__java_select 7 "$2" && return 0 __java_select 7 "$2" && return 0
;; ;;
1.7+|7+) 1.7+|7+)
for v in 7 8 11; do for v in 7 8; do
__java_select "$v" "$2" && return 0 __java_select "$v" "$2" && return 0
done done
;; ;;
@ -596,7 +596,7 @@ function select_java_exact() {
__java_select 8 "$2" && return 0 __java_select 8 "$2" && return 0
;; ;;
1.8+|8+) 1.8+|8+)
for v in 8 11; do for v in 8; do
__java_select "$v" "$2" && return 0 __java_select "$v" "$2" && return 0
done done
;; ;;
@ -604,7 +604,7 @@ function select_java_exact() {
__java_select 11 "$2" && return 0 __java_select 11 "$2" && return 0
;; ;;
11+) 11+)
for v in 11; do for v in 11 17; do
__java_select "$v" "$2" && return 0 __java_select "$v" "$2" && return 0
done done
;; ;;

View File

@ -117,8 +117,21 @@ function pff_get_first_profile() {
function pff_get_local_files() { function pff_get_local_files() {
# afficher tous les fichiers locaux exprimés relativement au répertoire du # afficher tous les fichiers locaux exprimés relativement au répertoire du
# projet pff $1 # projet pff $1
local pffdir="$1" local pffdir="$1" files file dirs dir isald
find "$pffdir/pff/Base" -type f | sed "s|^$pffdir/pff/Base/||" | grep -v '__pv-.*__$' files="$(find "$pffdir/pff/Base" -type f | sed "s|^$pffdir/pff/Base/||" | grep -v '/__pv-[^/_]*__[^/]*$')"
dirs="$(echo "$files" | grep '/\.pffdir$' | sed 's/\.pffdir$//')"
setx -a files=echo "$files"
setx -a dirs=echo "$dirs"
for file in "${files[@]}"; do
isald=
for dir in "${dirs[@]}"; do
if [ "${file#$dir}" != "$file" ]; then
isald=1
break
fi
done
[ -z "$isald" -o "$file" == "${dir}.pffdir" ] && echo "$file"
done
} }
function pff_get_rfile() { function pff_get_rfile() {
@ -253,7 +266,18 @@ function pff_select_profile() {
setx -a lfiles=pff_get_local_files "$pffdir" setx -a lfiles=pff_get_local_files "$pffdir"
for lfile in "${lfiles[@]}"; do for lfile in "${lfiles[@]}"; do
src="$pffdir/pff/Current/$lfile" src="$pffdir/pff/Current/$lfile"
if [ -f "$pffdir/pff/$profile/$lfile" ]; then if [[ "$lfile" == */.pffdir ]]; then
# répertoires entiers
lfile="${lfile%/.pffdir}"
src="${src%/.pffdir}"
if [ -d "$pffdir/pff/$profile/$lfile" ]; then
dest="$profile/$lfile"
elif [ "$profile" != Common -a -d "$pffdir/pff/Common/$lfile" ]; then
dest="Common/$lfile"
else
dest="Base/$lfile"
fi
elif [ -f "$pffdir/pff/$profile/$lfile" ]; then
dest="$profile/$lfile" dest="$profile/$lfile"
elif [ "$profile" != Common -a -f "$pffdir/pff/Common/$lfile" ]; then elif [ "$profile" != Common -a -f "$pffdir/pff/Common/$lfile" ]; then
dest="Common/$lfile" dest="Common/$lfile"

View File

@ -18,11 +18,11 @@ function is_any_branch() {
case "$spec" in case "$spec" in
m|master) m|master)
[ -n "$r" ] || r=1 [ -n "$r" ] || r=1
[ "$branch" == "master" ] && return 0 [ "$branch" == master ] && return 0
;; ;;
d|develop) d|develop)
[ -n "$r" ] || r=1 [ -n "$r" ] || r=1
[ "$branch" == "develop" ] && return 0 [ "$branch" == develop ] && return 0
;; ;;
r|release) r|release)
[ -n "$r" ] || r=1 [ -n "$r" ] || r=1
@ -34,20 +34,21 @@ function is_any_branch() {
;; ;;
f|feature|t|topic) f|feature|t|topic)
[ -n "$r" ] || r=1 [ -n "$r" ] || r=1
[ "$branch" == "master" ] && continue [ "$branch" == master ] && continue
[ "$branch" == "develop" ] && continue [ "$branch" == develop ] && continue
[[ "$branch" == release-* ]] && continue [[ "$branch" == release-* ]] && continue
[[ "$branch" == hotfix-* ]] && continue [[ "$branch" == hotfix-* ]] && continue
[ -n "$annex" -a "$branch" == "git-annex" ] && continue [ -n "$annex" -a "$branch" == "git-annex" ] && continue
[[ "$branch" == wip/* ]] && return 0
[[ "$branch" == */* ]] && continue [[ "$branch" == */* ]] && continue
return 0 return 0
;; ;;
-m|-master) -m|-master)
[ -n "$r" ] || r=0 [ -n "$r" ] || r=0
[ "$branch" == "master" ] && return 1;; [ "$branch" == master ] && return 1;;
-d|-develop) -d|-develop)
[ -n "$r" ] || r=0 [ -n "$r" ] || r=0
[ "$branch" == "develop" ] && return 1;; [ "$branch" == develop ] && return 1;;
-r|-release) -r|-release)
[ -n "$r" ] || r=0 [ -n "$r" ] || r=0
[[ "$branch" == release-* ]] && return 1;; [[ "$branch" == release-* ]] && return 1;;
@ -56,11 +57,12 @@ function is_any_branch() {
[[ "$branch" == hotfix-* ]] && return 1;; [[ "$branch" == hotfix-* ]] && return 1;;
-f|-feature|-t|-topic) -f|-feature|-t|-topic)
[ -n "$r" ] || r=0 [ -n "$r" ] || r=0
[ "$branch" == "master" ] && continue [ "$branch" == master ] && continue
[ "$branch" == "develop" ] && continue [ "$branch" == develop ] && continue
[[ "$branch" == release-* ]] && continue [[ "$branch" == release-* ]] && continue
[[ "$branch" == hotfix-* ]] && continue [[ "$branch" == hotfix-* ]] && continue
[ -n "$annex" -a "$branch" == "git-annex" ] && continue [ -n "$annex" -a "$branch" == "git-annex" ] && continue
[[ "$branch" == wip/* ]] && return 1
[[ "$branch" == */* ]] && continue [[ "$branch" == */* ]] && continue
return 1 return 1
;; ;;
@ -89,7 +91,7 @@ function list_feature_branches() {
grep -vF develop | grep -vF develop |
grep -v '^release-' | grep -v '^release-' |
grep -v '^hotfix-' | grep -v '^hotfix-' |
grep -v '/' | grep -Pv '(?<!^wip)/' |
if git_have_annex; then if git_have_annex; then
grep -vF git-annex grep -vF git-annex
else else

90
pff
View File

@ -197,9 +197,16 @@ pff:
NOUPSTREAM -- indiquer qu'il n'y a pas de distribution upstream ni de NOUPSTREAM -- indiquer qu'il n'y a pas de distribution upstream ni de
fichiers origine. pff est alors uniquement utilisé pour gérer des fichiers origine. pff est alors uniquement utilisé pour gérer des
profils de fichier. profils de fichier.
Pour le moment, la seule différence est que le mode des fichiers de Pour le moment, la seule différence fonctionnelle est que le mode des
pff/Base n'est pas forcé à 0444. Ainsi, ces fichiers sont traités au fichiers de pff/Base n'est pas forcé à 0444. Ainsi, ces fichiers sont
même titre que ceux du répertoire pff/Common traités au même titre que ceux du répertoire pff/Common
Dans ce mode, on supporte aussi les liens vers des répertoires entiers:
il suffit de créer le répertoire dans pff/Base avec un unique fichier
.pffdir à l'intérieur. Lors du switch le répertoire correspondant est
lié s'il existe dans un profil.
NB: s'il existe d'autres fichiers dans le répertoire, ils sont ignorés.
Cela permet d'avoir un ensemble de fichiers par défaut, mais les liens
symboliques doivent être faits manuellement.
COMMANDES / OPTIONS COMMANDES / OPTIONS
Les arguments du script dépendent de la commande utilisée. Les commandes Les arguments du script dépendent de la commande utilisée. Les commandes
@ -347,6 +354,21 @@ function flexists() {
[ -e "$1" -o -L "$1" ] [ -e "$1" -o -L "$1" ]
} }
function multiups() {
# afficher un chemin vers le haut e.g ../../.. avec autant d'éléments que
# les répertoires du chemin relatif $1.
# méthode: commencer avec la valeur de départ $2 et préfixer avec autant de
# ../ que nécessaire. puis afficher le résultat.
local tmp="$1" link="$2"
setx tmp=dirname -- "$tmp"
while [ "$tmp" != . ]; do
[ -n "$link" ] && link="/$link"
link="..$link"
setx tmp=dirname -- "$tmp"
done
echo "$link"
}
function find_pffdir() { function find_pffdir() {
# trouver le répertoire du projet pff à partir du répertoire $2(=.) et # trouver le répertoire du projet pff à partir du répertoire $2(=.) et
# mettre le chemin absolu dans la variable $1(=pffdir) # mettre le chemin absolu dans la variable $1(=pffdir)
@ -413,23 +435,22 @@ function get_first_profile() {
function get_local_files() { function get_local_files() {
# afficher tous les fichiers locaux exprimés relativement au répertoire du # afficher tous les fichiers locaux exprimés relativement au répertoire du
# projet pff $1 # projet pff $1
local pffdir="$1" # pour les répertoires liés, ne lister que le fichier .pffdir
find "$pffdir/pff/Base" -type f | sed "s|^$pffdir/pff/Base/||" | grep -v '/__pv-[^/_]*__[^/]*$' local pffdir="$1" files file dirs dir isald
} files="$(find "$pffdir/pff/Base" -type f | sed "s|^$pffdir/pff/Base/||" | grep -v '/__pv-[^/_]*__[^/]*$')"
dirs="$(echo "$files" | grep '/\.pffdir$' | sed 's/\.pffdir$//')"
function multiups() { setx -a files=echo "$files"
# afficher un chemin vers le haut e.g ../../.. avec autant d'éléments que setx -a dirs=echo "$dirs"
# les répertoires du chemin relatif $1. for file in "${files[@]}"; do
# méthode: commencer avec la valeur de départ $2 et préfixer avec autant de isald=
# ../ que nécessaire. puis afficher le résultat. for dir in "${dirs[@]}"; do
local tmp="$1" link="$2" if [ "${file#$dir}" != "$file" ]; then
setx tmp=dirname -- "$tmp" isald=1
while [ "$tmp" != . ]; do break
[ -n "$link" ] && link="/$link" fi
link="..$link" done
setx tmp=dirname -- "$tmp" [ -z "$isald" -o "$file" == "${dir}.pffdir" ] && echo "$file"
done done
echo "$link"
} }
function get_rfile() { function get_rfile() {
@ -595,7 +616,18 @@ function select_profile() {
setx -a lfiles=get_local_files "$pffdir" setx -a lfiles=get_local_files "$pffdir"
for lfile in "${lfiles[@]}"; do for lfile in "${lfiles[@]}"; do
src="$pffdir/pff/Current/$lfile" src="$pffdir/pff/Current/$lfile"
if [ -f "$pffdir/pff/$profile/$lfile" ]; then if [[ "$lfile" == */.pffdir ]]; then
# répertoires entiers
lfile="${lfile%/.pffdir}"
src="${src%/.pffdir}"
if [ -d "$pffdir/pff/$profile/$lfile" ]; then
dest="$profile/$lfile"
elif [ "$profile" != Common -a -d "$pffdir/pff/Common/$lfile" ]; then
dest="Common/$lfile"
else
dest="Base/$lfile"
fi
elif [ -f "$pffdir/pff/$profile/$lfile" ]; then
dest="$profile/$lfile" dest="$profile/$lfile"
elif [ "$profile" != Common -a -f "$pffdir/pff/Common/$lfile" ]; then elif [ "$profile" != Common -a -f "$pffdir/pff/Common/$lfile" ]; then
dest="Common/$lfile" dest="Common/$lfile"
@ -1456,7 +1488,7 @@ function list_locals_cmd() {
local pffdir="$1" local pffdir="$1"
ensure_pffdir pffdir "$pffdir" ensure_pffdir pffdir "$pffdir"
get_local_files "$pffdir" get_local_files "$pffdir" | sed 's/\/.pffdir$/\//'
} }
#=========================================================== #===========================================================
@ -1739,7 +1771,21 @@ function infos_cmd() {
setx -a vlfiles=get_vlfiles "$pffdir" "$rfile" "$profile" setx -a vlfiles=get_vlfiles "$pffdir" "$rfile" "$profile"
setx Pfile=get_pfile "$pffdir/$rfile" "$profile" "$pffdir" setx Pfile=get_pfile "$pffdir/$rfile" "$profile" "$pffdir"
setx Cfile=get_Cfile "$pffdir/$rfile" "$pffdir" setx Cfile=get_Cfile "$pffdir/$rfile" "$pffdir"
if [ ${#vlfiles[*]} -gt 0 ]; then if [[ "$rfile" == */.pffdir ]]; then
# répertoires entiers
rfile="${rfile%.pffdir}"
Pfile="${Pfile%/.pffdir}"
Cfile="${Cfile%/.pffdir}"
if [ -d "$Pfile" ]; then
flag="${COULEUR_BLEUE}*${COULEUR_NORMALE} "
elif [ "$profile" != Common -a -d "$Cfile" ]; then
flag="$(get_color YELLOW)C${COULEUR_NORMALE} "
elif [ -z "$show_all" ]; then
continue
else
flag=" "
fi
elif [ ${#vlfiles[*]} -gt 0 ]; then
flag="${COULEUR_ROUGE}P${COULEUR_NORMALE} " flag="${COULEUR_ROUGE}P${COULEUR_NORMALE} "
elif [ -f "$Pfile" ]; then elif [ -f "$Pfile" ]; then
flag="${COULEUR_BLEUE}*${COULEUR_NORMALE} " flag="${COULEUR_BLEUE}*${COULEUR_NORMALE} "

2
ufile
View File

@ -11,7 +11,7 @@ Les règles sont spécifiées dans le fichier ~/etc/default/ufile
Dans ce fichier, deux tableaux contiennent les règles applicables: Dans ce fichier, deux tableaux contiennent les règles applicables:
* le tableau RULES contient des règles de la forme pattern:destdir[:renamef] et * le tableau RULES contient des règles de la forme pattern:destdir[:renamef] et
permet de classer des fichiers correspondant à des patterns permet de classer des fichiers correspondant à des patterns
* le tableau NRULES contient des règles de fle forme name:destdir[:renamef] et * le tableau NRULES contient des règles de la forme name:destdir[:renamef] et
permet de classer des fichiers quelconques en spécifiant la règle à utiliser permet de classer des fichiers quelconques en spécifiant la règle à utiliser
Les champs sont: Les champs sont: