dkbuild: corriger le calcul de la dernière version d'une distribution

This commit is contained in:
Jephté Clain 2022-07-27 11:18:48 +04:00
parent a56ec0e0f1
commit 85e77e4bda
3 changed files with 52 additions and 6 deletions

34
dkbuild
View File

@ -212,8 +212,9 @@ Exemple:
elif dist d9; then elif dist d9; then
... ...
fi fi
NB: ici, la version 3.1 est listée après la version 3.0 pour que l'image Dans une même distribution, les versions doivent être ordonnées de la plus
construite aie le tag :latest ancienne à la plus récente. ici, la version 3.1 est listée après la version 3.0
pour que l'image construite aie le tag :latest
Note: 'setdists' ne doit être utilisé qu'une seule fois. Les invocations Note: 'setdists' ne doit être utilisé qu'une seule fois. Les invocations
suivantes sont ignorées. suivantes sont ignorées.
@ -251,6 +252,8 @@ version. Exemple:
... ...
fi fi
fi fi
Dans un même profil, les versions doivent être ordonnées de la plus ancienne à
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
@ -1072,14 +1075,37 @@ function define_functions_env() {
SETVERSION_DONE=1 SETVERSION_DONE=1
} }
function dist() { function dist() {
local dist version local dist version latest
for dist in "$@"; do for dist in "$@"; do
[ "$dist" == LATEST ] && dist="${SETDISTS[0]}" if [ "$dist" == LATEST ]; then
latest=1
continue
fi
parse_dist "$dist" dist version parse_dist "$dist" dist version
[ "$dist" == "$DIST" ] || continue [ "$dist" == "$DIST" ] || continue
[ -z "$version" -o "$version" == "$DVERSION" ] || continue [ -z "$version" -o "$version" == "$DVERSION" ] || continue
return 0 return 0
done done
if [ -n "$latest" ]; then
# trouver la dernière occurence de la première distribution
# mentionnée. en effet, les versions doivent être ordonnées de la
# plus ancienne à la plus récente.
local first_dist last_version
for dist in "${SETDISTS[@]}"; do
parse_dist "$dist" dist version
if [ -z "$first_dist" ]; then
first_dist="$dist"
last_version="$version"
elif [ "$dist" == "$first_dist" ]; then
last_version="$version"
fi
done
if [ "$first_dist" == "$DIST" ]; then
if [ -z "$last_version" -o "$last_version" == "$DVERSION" ]; then
return 0
fi
fi
fi
return 1 return 1
} }
function version() { function version() {

View File

@ -2,10 +2,10 @@
setdists d11 d10 setdists d11 d10
setprofiles prod test setprofiles prod test
if dist "#latest"; then if dist LATEST; then
info "$DIST est la distribution la plus récente" info "$DIST est la distribution la plus récente"
fi fi
if profile "#default"; then if profile DEFAULT; then
info "$PROFILE est le profil par défaut" info "$PROFILE est le profil par défaut"
fi fi

View File

@ -0,0 +1,20 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
setdists v1-d11 v2-d11 v1-d10
setenv IMAGE=dkbuild-tests/distversions
dockerfile
# -*- coding: utf-8 mode: dockerfile -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
FROM scratch
ENV var=$DIST-$VERSION
build
info "vérifier les images construites avec
dk ls dkbuild-tests/distversions
on devrait avoir les images suivantes:
dkbuild-tests/distversions:v1-d10
dkbuild-tests/distversions:d10 -> v1-d10
dkbuild-tests/distversions:v1-d11
dkbuild-tests/distversions:v2-d11
dkbuild-tests/distversions:d11 -> v2-d11
dkbuild-tests/distversions:latest -> v2-d11
"