dkbuild: calcul de la version à partir d'un fichier ou d'un chemin

This commit is contained in:
Jephté Clain 2023-01-05 08:01:30 +04:00
parent b006bb44cd
commit 306e77f307
1 changed files with 79 additions and 5 deletions

82
dkbuild
View File

@ -1,7 +1,7 @@
#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
urequire DEFAULTS
urequire DEFAULTS ptools xmlsupport
SELF="$script"
TEMPLATEDIR="$scriptdir/lib/dkbuild/templates"
@ -18,7 +18,7 @@ USAGE
OPTIONS
--hdk, --help-dkbuild
Afficher l'aide sur le format du fichier dkbuild
--hrf, --help-reference
--href, --help-reference
Afficher la référence sur les commandes utilisables dans un fichier
dkbuild
@ -164,6 +164,14 @@ $scriptname dump [OPTIONS]
function display_help_dkbuild() {
uecho "\
OPTIONS
--help Aide générale
* --hdk Aide sur le format du fichier dkbuild
--href Référence sur les commandes utilisables dans un fichier dkbuild
DKBUILD
=======
Un fichier dkbuild est un script shell utilisé pour construire une ou plusieurs
images docker.
@ -452,6 +460,14 @@ utilisés comme tags (i.e IMAGE:DIST et IMAGE:VERSION-DIST)"
function display_help_reference() {
uecho "\
OPTIONS
--help Aide générale
--hdk Aide sur le format du fichier dkbuild
* --href Référence sur les commandes utilisables dans un fichier dkbuild
REFERENCE
=========
## fonctions d'affichage
USAGE:
@ -472,6 +488,21 @@ USAGE:
## setversion -- spécifier la version par défaut
USAGE: setversion VERSION
Les paramètres optionnels sont
* from-file=FILE
prendre la version depuis le fichier spécifié. les formats pom.xml et
VERSION.txt sont supportés
* from-repo=REPO
calculer la version depuis le dépôt git spécifié
* from-glob=GLOB
calculer la version depuis le chemin spécifié
* extract=REGEXP
à partir de la valeur calculée par l'un des paramètres from-*, matcher
l'expression régulière au format AWK, et prendre comme version la valeur de
l'expression \$1
## version -- vérifier la version courante
## setenv -- spécifier une variable d'environnement
@ -1071,7 +1102,50 @@ function load_environ() {
function define_functions_env() {
function setversion() {
[ -n "$SETVERSION_DONE" ] && return
local from_file from_repo from_glob extract
while [ $# -gt 0 ]; do
case "$1" in
from-file|file) from_file=.;;
from-file=*|file=*)
from_file="${1#from-}"; from_file="${from_file#file=}"
;;
from-repo|repo) from_repo=.;;
from-repo=*|repo=*)
from_repo="${1#from-}"; from_repo="${from_repo#repo=}"
;;
from-glob=*|glob=*)
from_glob="${1#from-}"; from_glob="${from_glob#glob=}"
;;
extract=*)
extract="${1#extract=}"
;;
*=*) ewarn "setversion: $1: argument ignoré";;
*) break;;
esac
shift
done
if [ -n "$from_file" ]; then
if [ -d "$from_file" ]; then
setx SETVERSION=pver --sw "$from_file" || die
elif [[ "$from_file" == *.xml ]]; then
setx SETVERSION=pver -E "$from_file" || die
else
setx SETVERSION=pver -F "$from_file" || die
fi
elif [ -n "$from_repo" ]; then
die "setversion from-repo: pas encore implémenté" #XXX
elif [ -n "$from_glob" ]; then
SETVERSION="$(list_all . "$from_glob" | sort -rn | head -1)"
else
SETVERSION="$1"
fi
if [ -n "$extract" ]; then
extract="${extract//\//\\/}"
SETVERSION="$(awk -v version="$SETVERSION" "BEGIN {
if (match(version, /$extract/, vs)) { print vs[1] }
else { print version }
}")"
fi
SETVERSION_DONE=1
}
function dist() {
@ -2781,7 +2855,7 @@ while [ $# -gt 0 ]; do
case "$1" in
--help) args+=("$1"); shift; continue;;
--hdk|--help-dkbuild) args+=("$1"); shift; continue;;
--hrf|--help-reference) args+=("$1"); shift; continue;;
--href|--help-reference) args+=("$1"); shift; continue;;
-*|*=*) # option quelconque: inférer build
args+=(build)
break
@ -2796,7 +2870,7 @@ set -- "${args[@]}" "$@"
args=(+
--help '$exit_with display_help'
--hdk,--help-dkbuild '$exit_with display_help_dkbuild'
--hrf,--help-reference '$exit_with display_help_reference'
--href,--help-reference '$exit_with display_help_reference'
)
parse_args "$@"; set -- "${args[@]}"