From 8cdc3cb2bb3e5aaf1e60be9aa63202f0cffef745 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Fri, 29 Sep 2023 10:11:12 +0400 Subject: [PATCH 01/20] modifs.mineures sans commentaires --- ufile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ufile b/ufile index 46fc844..8d29bb0 100755 --- a/ufile +++ b/ufile @@ -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: * le tableau RULES contient des règles de la forme pattern:destdir[:renamef] et 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 Les champs sont: From 4f7bc3f6bfbe87dbf7697dffda96ed4871cac9be Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 2 Oct 2023 19:08:45 +0400 Subject: [PATCH 02/20] dkbuild: bug avec -u seul --- dkbuild | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/dkbuild b/dkbuild index 43e6e5d..f2cf29e 100755 --- a/dkbuild +++ b/dkbuild @@ -2656,9 +2656,10 @@ cd "$projdir" } function runb() { local build="${DEFAULTS[build_build]-1}" - if [ -n "$build" ]; then - run "$@" + if [ -z "$build" ]; then + [ $# -eq 0 ] && return 1 || return 0 fi + run "$@" } function call() { edebug "call $(qvals "$@")" @@ -2668,9 +2669,10 @@ cd "$projdir" } function callb() { local build="${DEFAULTS[build_build]-1}" - if [ -n "$build" ]; then - call "$@" + if [ -z "$build" ]; then + [ $# -eq 0 ] && return 1 || return 0 fi + call "$@" } function dkbuild() { edebug "dkbuild $(qvals "$@")" From 2803868e16072fc24f8b5fe73b45329b84ed8189 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 2 Oct 2023 19:31:07 +0400 Subject: [PATCH 03/20] =?UTF-8?q?dkbuild:=20marquer=20plus=20d'action=20co?= =?UTF-8?q?mme=20=C3=A9tant=20du=20build?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dkbuild | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/dkbuild b/dkbuild index f2cf29e..dd09277 100755 --- a/dkbuild +++ b/dkbuild @@ -1834,6 +1834,7 @@ function define_functions_cmd() { shift done + [ -n "${DEFAULTS[build_build]-1}" ] || return [ -n "$output" ] || die "genfile: Vous devez spécifier le fichier en sortie" if [ -n "$context" ]; then mkdir -p "$context" || die @@ -1869,6 +1870,7 @@ function define_functions_cmd() { shift done + [ -n "${DEFAULTS[build_build]-1}" ] || return [ -n "$DOCKERFILE" ] || DOCKERFILE=Dockerfile DOCKERCONTEXT=. if [ -n "$context" ]; then @@ -1892,6 +1894,7 @@ function define_functions_cmd() { function add2dockerfile() { edebug "$(qvals "$@")" + [ -n "${DEFAULTS[build_build]-1}" ] || return [ -n "$DOCKERFILE" ] || return echo "$*" >>"$DOCKERFILE" } @@ -2039,6 +2042,7 @@ function define_functions_cmd() { function cbuild() { edebug "cbuild $(qvals "$@")" + local build="${DEFAULTS[build_build]-1}" local files="${DEFAULTS[cbuild_files]}" local project_name="${DEFAULTS[cbuild_project-name]}" local no_cache="${DEFAULTS[cbuild_no-cache]}" @@ -2057,6 +2061,7 @@ function define_functions_cmd() { shift done + [ -n "$build" ] || return if [ -n "$files" ]; then eval "files=($files)" else @@ -2818,12 +2823,16 @@ function build_action() { action=update_src else 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 sync_src=1 build=1 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= fi From 744a3fa0ac52ef94060d239ed3a374ae1d6e254e Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 2 Oct 2023 20:00:29 +0400 Subject: [PATCH 04/20] =?UTF-8?q?dkbuild:=20indiquer=20si=20la=20version?= =?UTF-8?q?=20de=20Java=20demand=C3=A9e=20n'est=20pas=20trouv=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dkbuild | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dkbuild b/dkbuild index dd09277..48c83dd 100755 --- a/dkbuild +++ b/dkbuild @@ -1834,7 +1834,7 @@ function define_functions_cmd() { shift done - [ -n "${DEFAULTS[build_build]-1}" ] || return + [ -n "${DEFAULTS[build_build]-1}" ] || return 0 [ -n "$output" ] || die "genfile: Vous devez spécifier le fichier en sortie" if [ -n "$context" ]; then mkdir -p "$context" || die @@ -1870,7 +1870,7 @@ function define_functions_cmd() { shift done - [ -n "${DEFAULTS[build_build]-1}" ] || return + [ -n "${DEFAULTS[build_build]-1}" ] || return 0 [ -n "$DOCKERFILE" ] || DOCKERFILE=Dockerfile DOCKERCONTEXT=. if [ -n "$context" ]; then @@ -1894,7 +1894,7 @@ function define_functions_cmd() { function add2dockerfile() { edebug "$(qvals "$@")" - [ -n "${DEFAULTS[build_build]-1}" ] || return + [ -n "${DEFAULTS[build_build]-1}" ] || return 0 [ -n "$DOCKERFILE" ] || return echo "$*" >>"$DOCKERFILE" } @@ -2380,7 +2380,7 @@ exit((PHP_VERSION_ID < $version)? 0: 1); function _local_mvn() { if [ -n "$java" ]; then urequire java - select_java_exact "$java" || die + select_java_exact "$java" || die "mvn: Java $java introuvable" export MVN_JAVA_VERSION="$java" fi From d9b14853543c432d0414ce2b4de5e2769c5f8ad3 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Tue, 7 Nov 2023 09:21:15 +0400 Subject: [PATCH 05/20] =?UTF-8?q?charni=C3=A8re=20entre=20java=208=20et=20?= =?UTF-8?q?java=2011?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ulib/java | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/lib/ulib/java b/lib/ulib/java index 89df1b6..8213d01 100644 --- a/lib/ulib/java +++ b/lib/ulib/java @@ -500,37 +500,37 @@ function select_java() { case "$1" in 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 done ;; 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 done ;; 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 done ;; 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 done ;; 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 done ;; 1.8|1.8+|8|8+) - for v in 8 11; do + for v in 8; do __java_select "$v" "$2" && return 0 done ;; 11|11+) - for v in 11; do + for v in 11 17; do __java_select "$v" "$2" && return 0 done ;; @@ -556,7 +556,7 @@ function select_java_exact() { __java_select 1_3 && return 0 ;; 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 done ;; @@ -564,7 +564,7 @@ function select_java_exact() { __java_select 1_4 && return 0 ;; 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 done ;; @@ -572,7 +572,7 @@ function select_java_exact() { __java_select 5 "$2" && return 0 ;; 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 done ;; @@ -580,7 +580,7 @@ function select_java_exact() { __java_select 6 "$2" && return 0 ;; 1.6+|6+) - for v in 6 7 8 11; do + for v in 6 7 8; do __java_select "$v" "$2" && return 0 done ;; @@ -588,7 +588,7 @@ function select_java_exact() { __java_select 7 "$2" && return 0 ;; 1.7+|7+) - for v in 7 8 11; do + for v in 7 8; do __java_select "$v" "$2" && return 0 done ;; @@ -596,7 +596,7 @@ function select_java_exact() { __java_select 8 "$2" && return 0 ;; 1.8+|8+) - for v in 8 11; do + for v in 8; do __java_select "$v" "$2" && return 0 done ;; @@ -604,7 +604,7 @@ function select_java_exact() { __java_select 11 "$2" && return 0 ;; 11+) - for v in 11; do + for v in 11 17; do __java_select "$v" "$2" && return 0 done ;; From 3123d8e65e067dec7f7152dc956e9fec2b7c8317 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Fri, 17 Nov 2023 23:12:10 +0400 Subject: [PATCH 06/20] =?UTF-8?q?dkbuild:=20mappings=20par=20d=C3=A9faut?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/dkbuild/dot-dkbuild.env | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/dkbuild/dot-dkbuild.env b/lib/dkbuild/dot-dkbuild.env index 3ee2788..5b6f615 100644 --- a/lib/dkbuild/dot-dkbuild.env +++ b/lib/dkbuild/dot-dkbuild.env @@ -5,6 +5,13 @@ if profile jclain; then elif profile prod test; then setenv REGISTRY=pubdocker.univ-reunion.fr setenv PRIVAREG=pridocker.univ-reunion.fr + 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[*]}" else setenv REGISTRY=docker.devel.self setenv PRIVAREG=docker.devel.self From db1467b8fd704c7cc59b462d108699712a8f481a Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Sat, 18 Nov 2023 06:58:58 +0400 Subject: [PATCH 07/20] bug --- lib/dkbuild/dot-dkbuild.env | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/dkbuild/dot-dkbuild.env b/lib/dkbuild/dot-dkbuild.env index 5b6f615..1a8bd57 100644 --- a/lib/dkbuild/dot-dkbuild.env +++ b/lib/dkbuild/dot-dkbuild.env @@ -1,4 +1,11 @@ # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +_valid_profiles=( + prod test devel + jclain +) +_default_profile=devel +[ -z "$DKBUILD_NO_SETPROFILES" ] && setprofiles "$_default_profile" "${_valid_profiles[@]}" + if profile jclain; then setenv REGISTRY=docker.jclain.fr setenv PRIVAREG=docker.jclain.fr @@ -12,7 +19,7 @@ elif profile prod test; then git.univ-reunion.fr:10.85.1.55 ) default docker host-mappings="${host_mappings[*]}" -else +elif profile devel; then setenv REGISTRY=docker.devel.self setenv PRIVAREG=docker.devel.self fi From e5315532a13f9b8ab86d26e220a1d5a9d03da915 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Sat, 18 Nov 2023 07:52:35 +0400 Subject: [PATCH 08/20] =?UTF-8?q?dkbuild:=20sans=20--all-profiles,=20ne=20?= =?UTF-8?q?build=20que=20dans=20le=20profil=20par=20d=C3=A9faut?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dkbuild | 22 +++++++++++++++++----- lib/dkbuild/tests/registry.env | 2 +- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/dkbuild b/dkbuild index 48c83dd..f99e4de 100755 --- a/dkbuild +++ b/dkbuild @@ -103,6 +103,8 @@ $scriptname build [OPTIONS] [BUILDVARS...] -E, --dtest --devel Spécifier le profil dans lequel construire l'image + --all-profiles + Construire l'image dans tous les profils définis -e, --env VAR=VALUE Spécifier la valeur d'une variable d'environnement. Cette valeur @@ -178,8 +180,9 @@ $scriptname mvn DESTDIR [ACTION [PARAMS] [ARGS]] $scriptname dump [OPTIONS] afficher les valeurs des variables - Les options --machine, --projdir, --config, --dist, --profile, --env et - --arg ont la même signification que pour l'action build" + Les options suivantes ont la même signification que pour l'action build: + --machine, --projdir, --config, --dist, --profile, --all-profiles, --env, + --arg" } function display_help_dkbuild() { @@ -906,7 +909,7 @@ SHARED_ARGS1=( -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=( -d:,--dist: DIST= -9,--d9 DIST=d9 @@ -923,6 +926,7 @@ SHARED_ARGS2=( -E,--dtest PROFILE=dtest -J,--jclain PROFILE=jclain --devel PROFILE=devel + --all-profiles ALL_PROFILES=1 -e:,--env: '$TMPENVIRON+=("$value_")' --arg: '$TMPARGS+=("$value_")' @@ -1486,7 +1490,7 @@ function resolve_dists_profiles() { fi parse_profile "$profile" if [ "$profile" == "$PROFILE" ]; then - # ou matcher uniquement la distribution + # ou matcher uniquement le profil found=1 break fi @@ -1495,8 +1499,16 @@ function resolve_dists_profiles() { [ -n "$found" ] || die "$PROFILE: profil invalide" # forcer à ne construire que cette distribution 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 - PROFILES=("${SETPROFILES[@]}") + # prendre le profil par défaut + parse_profile "${SETPROFILES[0]}" + PROFILES=("$profile") fi } load_dkbuild diff --git a/lib/dkbuild/tests/registry.env b/lib/dkbuild/tests/registry.env index 9228c2e..ada48d6 100644 --- a/lib/dkbuild/tests/registry.env +++ b/lib/dkbuild/tests/registry.env @@ -1,2 +1,2 @@ # -*- 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 From a855b04c21421b901e22b049782a53f3f1b33c77 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Sat, 18 Nov 2023 08:02:04 +0400 Subject: [PATCH 09/20] =?UTF-8?q?dkbuild:=20les=20versions=20de=20profil?= =?UTF-8?q?=20sont=20ordonn=C3=A9es=20comme=20les=20versions=20de=20distri?= =?UTF-8?q?bution?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dkbuild | 27 +++++++++++++++++-- lib/dkbuild/tests/README.md | 8 ++++++ ...test-distprofiles => test-ls-distprofiles} | 0 lib/dkbuild/tests/test-ls-distversions | 10 +++++++ lib/dkbuild/tests/test-ls-profileversions | 10 +++++++ 5 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 lib/dkbuild/tests/README.md rename lib/dkbuild/tests/{test-distprofiles => test-ls-distprofiles} (100%) create mode 100644 lib/dkbuild/tests/test-ls-distversions create mode 100644 lib/dkbuild/tests/test-ls-profileversions diff --git a/dkbuild b/dkbuild index f99e4de..c4f4f76 100755 --- a/dkbuild +++ b/dkbuild @@ -1273,14 +1273,37 @@ function define_functions_env() { return 1 } function profile() { - local profile version + local profile version default for profile in "$@"; do - [ "$profile" == DEFAULT ] && profile="${SETPROFILES[0]}" + if [ "$profile" == DEFAULT ]; then + default=1 + continue + fi parse_profile "$profile" profile version [ "$profile" == "$PROFILE" ] || continue [ -z "$version" -o "$version" == "$PVERSION" ] || continue return 0 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 } declare -g -A ENVIRON diff --git a/lib/dkbuild/tests/README.md b/lib/dkbuild/tests/README.md new file mode 100644 index 0000000..da22bc9 --- /dev/null +++ b/lib/dkbuild/tests/README.md @@ -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 \ No newline at end of file diff --git a/lib/dkbuild/tests/test-distprofiles b/lib/dkbuild/tests/test-ls-distprofiles similarity index 100% rename from lib/dkbuild/tests/test-distprofiles rename to lib/dkbuild/tests/test-ls-distprofiles diff --git a/lib/dkbuild/tests/test-ls-distversions b/lib/dkbuild/tests/test-ls-distversions new file mode 100644 index 0000000..7a04477 --- /dev/null +++ b/lib/dkbuild/tests/test-ls-distversions @@ -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= diff --git a/lib/dkbuild/tests/test-ls-profileversions b/lib/dkbuild/tests/test-ls-profileversions new file mode 100644 index 0000000..51915cc --- /dev/null +++ b/lib/dkbuild/tests/test-ls-profileversions @@ -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= From 5a06851b0f34c8c638bf0e428b889a0a843b6000 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Sat, 18 Nov 2023 08:39:28 +0400 Subject: [PATCH 10/20] =?UTF-8?q?dkbuild:=20support=20profil=20par=20d?= =?UTF-8?q?=C3=A9faut?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dkbuild | 21 +++++++++++++++++++-- lib/dkbuild/dot-dkbuild.env | 7 +------ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/dkbuild b/dkbuild index c4f4f76..1651d8c 100755 --- a/dkbuild +++ b/dkbuild @@ -260,6 +260,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 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é sélectionné par l'utilisateur. L'argument 'DEFAULT' permet de tester le profil par défaut. @@ -289,8 +294,8 @@ la plus récente. Si les distributions sont utilisées avec des versions, alors c'est une erreur de spécifier une version dans le profil -Note: 'setprofiles' ne doit être utilisé qu'une seule fois. Les invocations -suivantes sont ignorées. +Note: 'setprofiles' et 'default_profile' ne peuvent être utilisés qu'une seule +fois. Les invocations suivantes sont ignorées. ## Versions #################################################################### @@ -510,6 +515,8 @@ USAGE: ## 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 ## setversion -- spécifier la version par défaut @@ -892,6 +899,7 @@ declare -A PROTECTED_VARS=( [SETDISTS]=1 [SETPROFILES_DONE]=1 [SETPROFILES]=1 + [DEFAULT_PROFILE]=1 [SETVERSION_DONE]=1 [SETVERSION]=1 [AUTOBUILD]=1 @@ -937,6 +945,7 @@ TFUNCTIONS=( section note info debug setdists dist setprofiles profile + default_profile setversion version setenv resetenv setarg resetarg @@ -1432,6 +1441,7 @@ function resolve_dists_profiles() { SETDISTS=() SETPROFILES_DONE= SETPROFILES=() + DEFAULT_PROFILE= SETVERSION_DONE= SETVERSION= AUTOBUILD=1 @@ -1446,6 +1456,9 @@ function resolve_dists_profiles() { SETPROFILES=("$@") SETPROFILES_DONE=1 } + function default_profile() { + [ -n "$DEFAULT_PROFILE" ] || DEFAULT_PROFILE="$1" + } function build() { AUTOBUILD= } @@ -1454,6 +1467,10 @@ function resolve_dists_profiles() { } 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= if [ -z "$SETPROFILES_DONE" -a -n "$PROFILE" ]; then # Si l'utilisateur spécifie un profil mais qu'aucun profil n'a été diff --git a/lib/dkbuild/dot-dkbuild.env b/lib/dkbuild/dot-dkbuild.env index 1a8bd57..a6f4870 100644 --- a/lib/dkbuild/dot-dkbuild.env +++ b/lib/dkbuild/dot-dkbuild.env @@ -1,10 +1,5 @@ # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 -_valid_profiles=( - prod test devel - jclain -) -_default_profile=devel -[ -z "$DKBUILD_NO_SETPROFILES" ] && setprofiles "$_default_profile" "${_valid_profiles[@]}" +default_profile "${DKBUILD_PROFILE:-devel}" if profile jclain; then setenv REGISTRY=docker.jclain.fr From 54a5b5485d4ea931f4a70e7177e35bbee50503ac Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 20 Nov 2023 16:54:59 +0400 Subject: [PATCH 11/20] =?UTF-8?q?Sscreen:=20support=20des=20cas=20o=C3=B9?= =?UTF-8?q?=20screen=20n'est=20pas=20dans=20le=20PATH?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sscreen | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/Sscreen b/Sscreen index d3c8833..d31359e 100755 --- a/Sscreen +++ b/Sscreen @@ -18,15 +18,25 @@ function __ask() { } function __auto_screen() { + # Si on est déjà dans screen, ne rien faire + [ -z "$STY" ] || return + # 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" exec /bin/bash -l fi - # Si on est déjà dans screen, ne rien faire - [ -z "$STY" ] || return - # corriger TERM pour les vieilles versions de Linux case "$TERM" in xterm*) TERM=xterm;; From ad14de35eacedf9dfaeda22c0bdcc1cb2065d2e2 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Tue, 21 Nov 2023 18:18:52 +0400 Subject: [PATCH 12/20] =?UTF-8?q?dkbuild:=20configuration=20profil=20prod?= =?UTF-8?q?=20par=20d=C3=A9faut?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/dkbuild/dot-dkbuild.env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/dkbuild/dot-dkbuild.env b/lib/dkbuild/dot-dkbuild.env index a6f4870..7dee890 100644 --- a/lib/dkbuild/dot-dkbuild.env +++ b/lib/dkbuild/dot-dkbuild.env @@ -1,5 +1,5 @@ # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 -default_profile "${DKBUILD_PROFILE:-devel}" +default_profile "${DKBUILD_PROFILE:-prod}" if profile jclain; then setenv REGISTRY=docker.jclain.fr From b818e11c73929550183d97db51b02d7c9833be92 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 25 Dec 2023 23:06:55 +0400 Subject: [PATCH 13/20] dkbuild: ajout de --plain --- dkbuild | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/dkbuild b/dkbuild index 1651d8c..d434b00 100755 --- a/dkbuild +++ b/dkbuild @@ -144,6 +144,8 @@ $scriptname build [OPTIONS] [BUILDVARS...] Construire les images --no-cache Ne pas utiliser le cache lors du build + --plain-output + Afficher la sortie complète des containers lors du build -U, --pull-image Essayer de récupérer une version plus récente de l'image source -p, --push-image @@ -2057,6 +2059,7 @@ function define_functions_cmd() { local avar local -a args; args=( ${no_cache:+--no-cache} + ${progress:+--progress "$progress"} ${pull:+--pull} ) eval "host_mappings=($host_mappings)" @@ -2140,6 +2143,7 @@ function define_functions_cmd() { local avar evar; local -a bargs bargs=( ${no_cache:+--no-cache} + ${progress:+--progress "$progress"} ${pull:+--pull} ) for avar in "${!ARGS[@]}"; do @@ -2847,7 +2851,7 @@ function build_action() { local machine local clean_update clean_opt=-X 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 -a args; args=( "${SHARED_ARGS1[@]}" "${SHARED_ARGS2[@]}" @@ -2864,6 +2868,7 @@ function build_action() { --no-sync-src sync_src=no -b,--build build=1 --no-cache no_cache=1 + --plain-output progress=plain -U,--pull-image pull_image=1 -p,--push-image push_image=1 ) From 0bf0f48ad075462930ecf5546137e5137456fa2a Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Wed, 3 Jan 2024 19:11:09 +0400 Subject: [PATCH 14/20] dk: support ~/.dkbuild.env --- dk | 79 ++++++++++++++++++++++++++++++++++---------------- lib/default/dk | 24 +-------------- lib/uinst/conf | 3 ++ 3 files changed, 58 insertions(+), 48 deletions(-) diff --git a/dk b/dk index c072cf8..bc8eb74 100755 --- a/dk +++ b/dk @@ -2062,7 +2062,16 @@ function auto_composer() { local COMPOSER_MACHINE=-u local COMPOSER_CMD= local COMPOSER_SETUP= - [ -f .composer.conf ] && source ./.composer.conf + 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"/')" + elif [ -f .composer.conf ]; then + source ./.composer.conf + fi # les premiers arguments peuvent servir à redéfinir les variables while [ $# -gt 0 ]; do case "$1" in @@ -2413,21 +2422,6 @@ fi [ -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= DM_ALIASES=() DM_PROFILES=() @@ -2435,20 +2429,55 @@ CLUSTERDIRS=() DEFAULT_DEVEL_SRCDIR="$HOME/wop" COMPOSER_DEVEL_SRCDIR="$HOME/wop/php" MAVEN_DEVEL_SRCDIR="$HOME/wop/sn" -DEFAULT_COMPOSER_IMAGE="$REGISTRY/image/phpbuilder:d11" -DEFAULT_MAVEN_IMAGE="$REGISTRY/image/javabuilder:d11" +DEFAULT_COMPOSER_IMAGE= +DEFAULT_MAVEN_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[@]}") set_defaults dk export PROFILE +DEFAULT_PROFILE=devel +REGISTRY= 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= CONFIG= diff --git a/lib/default/dk b/lib/default/dk index d39ef14..afb878e 100644 --- a/lib/default/dk +++ b/lib/default/dk @@ -20,27 +20,5 @@ #MAVEN_DEVEL_SRCDIR="$HOME/wop/sn" # 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 - -# 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} diff --git a/lib/uinst/conf b/lib/uinst/conf index 16c0e43..bd9ce5b 100644 --- a/lib/uinst/conf +++ b/lib/uinst/conf @@ -68,6 +68,9 @@ if [ "$UINST_LOCAL_PROFILES" != auto ]; then export UTOOLS_LOCAL_PROFILES=$(qvalr "$UINST_LOCAL_PROFILES")" ~/.nutoolsrc fi +# copier .dkbuild.env +[ -f ~/.dkbuild.env ] || cp lib/dkbuild/dot-dkbuild.env ~/.dkbuild.env + # identification du système echo "##@before *" >lib/profile.d/0nutools echo_setv UNAME_SYSTEM "$UNAME_SYSTEM" >>lib/profile.d/0nutools From 5cc1826744a0b80862080044338743ca969139c6 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Wed, 3 Jan 2024 20:37:21 +0400 Subject: [PATCH 15/20] dk et dkbuild: support .composer.yaml et setup_image --- dk | 54 +++++++++++++++++++++++----------------- dkbuild | 76 +++++++++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 93 insertions(+), 37 deletions(-) diff --git a/dk b/dk index bc8eb74..781dc9b 100755 --- a/dk +++ b/dk @@ -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 diff --git a/dkbuild b/dkbuild index d434b00..20df4db 100755 --- a/dkbuild +++ b/dkbuild @@ -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;; From 7d7b88a42722ed3e533dc01349476656bafcd83f Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Thu, 11 Jan 2024 08:57:53 +0400 Subject: [PATCH 16/20] autoriser les feature branches qui commencent par wip/ --- lib/ulib/ptools | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/lib/ulib/ptools b/lib/ulib/ptools index 4f9d74b..f589de8 100644 --- a/lib/ulib/ptools +++ b/lib/ulib/ptools @@ -18,11 +18,11 @@ function is_any_branch() { case "$spec" in m|master) [ -n "$r" ] || r=1 - [ "$branch" == "master" ] && return 0 + [ "$branch" == master ] && return 0 ;; d|develop) [ -n "$r" ] || r=1 - [ "$branch" == "develop" ] && return 0 + [ "$branch" == develop ] && return 0 ;; r|release) [ -n "$r" ] || r=1 @@ -34,20 +34,21 @@ function is_any_branch() { ;; f|feature|t|topic) [ -n "$r" ] || r=1 - [ "$branch" == "master" ] && continue - [ "$branch" == "develop" ] && continue + [ "$branch" == master ] && continue + [ "$branch" == develop ] && continue [[ "$branch" == release-* ]] && continue [[ "$branch" == hotfix-* ]] && continue [ -n "$annex" -a "$branch" == "git-annex" ] && continue + [[ "$branch" == wip/* ]] && return 0 [[ "$branch" == */* ]] && continue return 0 ;; -m|-master) [ -n "$r" ] || r=0 - [ "$branch" == "master" ] && return 1;; + [ "$branch" == master ] && return 1;; -d|-develop) [ -n "$r" ] || r=0 - [ "$branch" == "develop" ] && return 1;; + [ "$branch" == develop ] && return 1;; -r|-release) [ -n "$r" ] || r=0 [[ "$branch" == release-* ]] && return 1;; @@ -56,11 +57,12 @@ function is_any_branch() { [[ "$branch" == hotfix-* ]] && return 1;; -f|-feature|-t|-topic) [ -n "$r" ] || r=0 - [ "$branch" == "master" ] && continue - [ "$branch" == "develop" ] && continue + [ "$branch" == master ] && continue + [ "$branch" == develop ] && continue [[ "$branch" == release-* ]] && continue [[ "$branch" == hotfix-* ]] && continue [ -n "$annex" -a "$branch" == "git-annex" ] && continue + [[ "$branch" == wip/* ]] && return 1 [[ "$branch" == */* ]] && continue return 1 ;; @@ -89,7 +91,7 @@ function list_feature_branches() { grep -vF develop | grep -v '^release-' | grep -v '^hotfix-' | - grep -v '/' | + grep -Pv '(? Date: Tue, 30 Jan 2024 14:51:48 +0400 Subject: [PATCH 17/20] =?UTF-8?q?pff:=20support=20des=20r=C3=A9pertoires?= =?UTF-8?q?=20li=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pff | 45 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/pff b/pff index 1d19502..1294e4b 100755 --- a/pff +++ b/pff @@ -197,9 +197,17 @@ pff: NOUPSTREAM -- indiquer qu'il n'y a pas de distribution upstream ni de fichiers origine. pff est alors uniquement utilisé pour gérer des profils de fichier. - Pour le moment, la seule différence est que le mode des fichiers de - pff/Base n'est pas forcé à 0444. Ainsi, ces fichiers sont traités au - même titre que ceux du répertoire pff/Common + Pour le moment, la seule différence fonctionnelle est que le mode des + fichiers de pff/Base n'est pas forcé à 0444. Ainsi, ces fichiers sont + 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. + IMPORTANT: ne pas mettre autre chose dans le répertoire, ce n'est pas + supporté pour le moment. Cela veut dire que chaque profil doit contenir + le répertoire complet, sans pouvoir hériter de fichiers par défaut + depuis pff/Base COMMANDES / OPTIONS Les arguments du script dépendent de la commande utilisée. Les commandes @@ -595,7 +603,18 @@ function select_profile() { setx -a lfiles=get_local_files "$pffdir" for lfile in "${lfiles[@]}"; do 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" elif [ "$profile" != Common -a -f "$pffdir/pff/Common/$lfile" ]; then dest="Common/$lfile" @@ -1456,7 +1475,7 @@ function list_locals_cmd() { local pffdir="$1" ensure_pffdir pffdir "$pffdir" - get_local_files "$pffdir" + get_local_files "$pffdir" | sed 's/\/.pffdir$/\//' } #=========================================================== @@ -1739,7 +1758,21 @@ function infos_cmd() { setx -a vlfiles=get_vlfiles "$pffdir" "$rfile" "$profile" setx Pfile=get_pfile "$pffdir/$rfile" "$profile" "$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} " elif [ -f "$Pfile" ]; then flag="${COULEUR_BLEUE}*${COULEUR_NORMALE} " From 5d6c6b405332f62556f978892c45353ea017aa60 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Wed, 31 Jan 2024 23:07:07 +0400 Subject: [PATCH 18/20] synchroniser pff et nulib/pff --- lib/ulib/pff | 13 ++++++++++++- pff | 30 +++++++++++++++--------------- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/lib/ulib/pff b/lib/ulib/pff index 9a71572..078e2e8 100644 --- a/lib/ulib/pff +++ b/lib/ulib/pff @@ -253,7 +253,18 @@ function pff_select_profile() { setx -a lfiles=pff_get_local_files "$pffdir" for lfile in "${lfiles[@]}"; do 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" elif [ "$profile" != Common -a -f "$pffdir/pff/Common/$lfile" ]; then dest="Common/$lfile" diff --git a/pff b/pff index 1294e4b..8d57c31 100755 --- a/pff +++ b/pff @@ -355,6 +355,21 @@ function flexists() { [ -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() { # trouver le répertoire du projet pff à partir du répertoire $2(=.) et # mettre le chemin absolu dans la variable $1(=pffdir) @@ -425,21 +440,6 @@ function get_local_files() { find "$pffdir/pff/Base" -type f | sed "s|^$pffdir/pff/Base/||" | grep -v '/__pv-[^/_]*__[^/]*$' } -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 get_rfile() { # obtenir le chemin relatif du fichier $1 exprimé par rapport au répertoire # du projet pff $2. Si c'est un fichier d'un répertoire de profil, From 8570d12ce602527018adf4126f6978c7cd173168 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Thu, 1 Feb 2024 20:55:47 +0400 Subject: [PATCH 19/20] =?UTF-8?q?pff:=20les=20r=C3=A9pertoires=20li=C3=A9s?= =?UTF-8?q?=20peuvent=20contenir=20des=20fichiers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ulib/pff | 17 +++++++++++++++-- pff | 25 +++++++++++++++++++------ 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/lib/ulib/pff b/lib/ulib/pff index 078e2e8..cd942ef 100644 --- a/lib/ulib/pff +++ b/lib/ulib/pff @@ -117,8 +117,21 @@ function pff_get_first_profile() { function pff_get_local_files() { # afficher tous les fichiers locaux exprimés relativement au répertoire du # projet pff $1 - local pffdir="$1" - 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$//')" + 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() { diff --git a/pff b/pff index 8d57c31..29045d7 100755 --- a/pff +++ b/pff @@ -204,10 +204,9 @@ pff: 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. - IMPORTANT: ne pas mettre autre chose dans le répertoire, ce n'est pas - supporté pour le moment. Cela veut dire que chaque profil doit contenir - le répertoire complet, sans pouvoir hériter de fichiers par défaut - depuis pff/Base + 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 Les arguments du script dépendent de la commande utilisée. Les commandes @@ -436,8 +435,22 @@ function get_first_profile() { function get_local_files() { # afficher tous les fichiers locaux exprimés relativement au répertoire du # projet pff $1 - local pffdir="$1" - find "$pffdir/pff/Base" -type f | sed "s|^$pffdir/pff/Base/||" | grep -v '/__pv-[^/_]*__[^/]*$' + # pour les répertoires liés, ne lister que le fichier .pffdir + 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$//')" + 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 get_rfile() { From e50a68653670170f045573994248f2ee6cd77e7a Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Thu, 1 Feb 2024 20:59:56 +0400 Subject: [PATCH 20/20] Init changelog & version 11.1.0 --- CHANGES.md | 22 ++++++++++++++++++++++ VERSION.txt | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 591adeb..ee9a90d 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -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 * `ddfbc00` maj des images par défaut dk et dkbuild diff --git a/VERSION.txt b/VERSION.txt index 275283a..68d8f15 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1 +1 @@ -11.0.0 +11.1.0