Signed-off-by: GnomeZworc <nicolas.boufidjeline@g3e.fr>
This commit is contained in:
GnomeZworc 2026-08-14 17:21:53 +02:00
commit 7da1a7b838
Signed by: nicolas.boufideline
GPG key ID: 4406BBBF8845D632

View file

@ -238,6 +238,22 @@ fetch_asset () {
|| die "somme de contrôle incorrecte après téléchargement : ${NAME}"
}
# Une unit déjà installée dans la bonne version n'a rien à faire dans le cache
# versionné : ni téléchargement, ni réinstallation. C'est le cas courant à
# l'upgrade — les units bougent rarement d'une release à l'autre, alors que
# /opt/two/<nouveau-tag>/units/ est vide par construction. Le fichier installé
# est le seul qui persiste d'un tag au suivant, donc le seul à interroger.
#
# install_units rejoue ce même test : les deux décisions découlent du manifeste,
# aucun état n'est partagé entre les deux fonctions.
unit_up_to_date () {
local MANIFEST="${1}"
local UNIT="${2}"
[[ -n "${MANIFEST}" ]] || return 1
sum_matches "${MANIFEST}" "${UNIT}" "${UNIT_DIR}/${UNIT}"
}
fetch_assets () {
local DRY_RUN="${1}"
local PROFILE="${2}"
@ -253,6 +269,11 @@ fetch_assets () {
for unit in $(profile_units "${PROFILE}")
do
if unit_up_to_date "${MANIFEST}" "${unit}"
then
info " ${unit} déjà installée en bonne version — téléchargement évité"
continue
fi
fetch_asset "${DRY_RUN}" "${MANIFEST}" "${ASSETS}" "${unit}" "${UNIT_PATH}${unit}"
done
@ -268,23 +289,34 @@ fetch_assets () {
install_units () {
local DRY_RUN="${1}"
local PROFILE="${2}"
local UNITS unit
local MANIFEST="${3}"
local UNITS unit CHANGED
UNITS=$(profile_units "${PROFILE}") || die "profil inconnu : ${PROFILE}"
[[ -n "${UNITS}" ]] || { info "units : aucune pour le profil ${PROFILE}"; return 0; }
info "units du profil ${PROFILE}"
CHANGED=0
for unit in ${UNITS}
do
# Même test que fetch_assets : rien n'a été téléchargé pour cette unit,
# il n'y a donc rien à installer depuis le cache versionné.
if unit_up_to_date "${MANIFEST}" "${unit}"
then
info " ${unit} inchangée — installation évitée"
continue
fi
if [[ ${DRY_RUN} -ne ${FLAGS_TRUE} ]] && [[ ! -f "${UNIT_PATH}${unit}" ]]
then
die "unit absente des assets de la release ${TAG} : ${unit}"
fi
run "${DRY_RUN}" "install -m 0644 '${UNIT_PATH}${unit}' '${UNIT_DIR}/${unit}'"
CHANGED=1
done
run "${DRY_RUN}" "systemctl daemon-reload"
# daemon-reload seulement si une unit a bougé.
[[ ${CHANGED} -eq 1 ]] && run "${DRY_RUN}" "systemctl daemon-reload"
for unit in ${UNITS}
do
@ -383,7 +415,7 @@ main () {
fetch_assets "${FLAGS_dryrun}" "${FLAGS_profile}" "${ASSETS}" "${MANIFEST}"
install_units "${FLAGS_dryrun}" "${FLAGS_profile}"
install_units "${FLAGS_dryrun}" "${FLAGS_profile}" "${MANIFEST}"
switch_binaries "${FLAGS_dryrun}" "${FLAGS_profile}" "${ASSETS}"
}