feat(build-offi): add build date to iso filename and prompt for version/variant on host
Refactor version and variant handling to prompt for metadata on the host before entering container, enabling proper terminal display. Pass FWS_ISO_VERSION and FWS_ISO_TAG via environment variables to container. Add build date (AAAA.MM.JJ format) to the final ISO filename: fws-<version>-<variant>-<AAAA.MM.JJ>.iso Implement ask_iso_meta_host() function to validate and collect version (major.minor.build) and variant name inputs before containerization. Use sudo -E to preserve environment variables across privilege escalation. Update ISO metadata prompt logic to skip if already provided, supporting both container execution and native Arch/WSL environments.
This commit is contained in:
+68
-32
@@ -2,10 +2,13 @@
|
|||||||
# ============================================================
|
# ============================================================
|
||||||
# FWS — Build OFFICIEL versionné de l'ISO (archiso)
|
# FWS — Build OFFICIEL versionné de l'ISO (archiso)
|
||||||
#
|
#
|
||||||
# Identique à build.sh dans sa structure, mais :
|
# IDENTIQUE à build.sh (même bascule conteneur/WSL, --network=host, fusion
|
||||||
# - lit la version dans le fichier VERSION (format Major.Minor.Build)
|
# baseline, MÊME injection local-repo → donc même paquet anaconda avec le champ
|
||||||
# - nomme l'ISO FWS-vMAJOR-MINOR-BUILD-DATE-x86_64.iso
|
# Hostname), avec EN PLUS uniquement le RENOMMAGE :
|
||||||
# - range l'ISO dans out/vMAJOR/vMAJOR.MINOR/
|
# - demande la version (major.minor.build) + le nom de variante, le fichier
|
||||||
|
# VERSION servant de défaut,
|
||||||
|
# - nomme l'ISO fws-<version>-<nom>.iso (ex. fws-1.5.0-cli.iso),
|
||||||
|
# - range l'ISO dans out/vMAJOR/vMAJOR.MINOR/.
|
||||||
#
|
#
|
||||||
# Fonctionne sur :
|
# Fonctionne sur :
|
||||||
# - Windows 10 / 11 (Git Bash → bascule auto dans WSL Arch)
|
# - Windows 10 / 11 (Git Bash → bascule auto dans WSL Arch)
|
||||||
@@ -121,6 +124,37 @@ if [ -z "$FWS_IN_CONTAINER" ] && ! host_is_arch; then
|
|||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# La version + le nom sont DEMANDÉS sur l'hôte (avant le conteneur) et passés
|
||||||
|
# via -e, pour que le prompt s'affiche au bon endroit (terminal de l'hôte).
|
||||||
|
# (Définis FWS_ISO_VERSION / FWS_ISO_TAG ; lus plus bas, prompt sauté si déjà
|
||||||
|
# fournis — c.-à-d. dans le conteneur.)
|
||||||
|
ask_iso_meta_host() {
|
||||||
|
[ -n "$FWS_ISO_VERSION" ] && [ -n "$FWS_ISO_TAG" ] && return 0
|
||||||
|
local def=""
|
||||||
|
if [ -f "$(dirname "${BASH_SOURCE[0]}")/VERSION" ]; then
|
||||||
|
def="$(tr -d ' \t\r\n' < "$(dirname "${BASH_SOURCE[0]}")/VERSION")"
|
||||||
|
[[ "$def" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] || def=""
|
||||||
|
fi
|
||||||
|
while :; do
|
||||||
|
if [ -n "$def" ]; then
|
||||||
|
read -rp "==> Version (major.minor.build) [Entrée = $def] : " FWS_ISO_VERSION || exit 1
|
||||||
|
[ -n "$FWS_ISO_VERSION" ] || FWS_ISO_VERSION="$def"
|
||||||
|
else
|
||||||
|
read -rp "==> Version (major.minor.build, ex. 1.5.0) : " FWS_ISO_VERSION || exit 1
|
||||||
|
fi
|
||||||
|
[[ "$FWS_ISO_VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && break
|
||||||
|
echo -e "\e[31m Format attendu : major.minor.build (ex. 1.5.0)\e[0m" >&2
|
||||||
|
done
|
||||||
|
while :; do
|
||||||
|
read -rp "==> Nom de la variante (ex. cli, gnome, kde) : " FWS_ISO_TAG || exit 1
|
||||||
|
FWS_ISO_TAG="$(printf '%s' "$FWS_ISO_TAG" | tr '[:upper:]' '[:lower:]' | tr -cd 'a-z0-9-')"
|
||||||
|
[ -n "$FWS_ISO_TAG" ] && break
|
||||||
|
echo -e "\e[31m Nom requis (lettres, chiffres, tirets)\e[0m" >&2
|
||||||
|
done
|
||||||
|
export FWS_ISO_VERSION FWS_ISO_TAG
|
||||||
|
}
|
||||||
|
ask_iso_meta_host
|
||||||
|
|
||||||
# Rootful : préfixe sudo si on n'est pas déjà root.
|
# Rootful : préfixe sudo si on n'est pas déjà root.
|
||||||
SUDO=(); [ "$EUID" -eq 0 ] || SUDO=(sudo)
|
SUDO=(); [ "$EUID" -eq 0 ] || SUDO=(sudo)
|
||||||
# -it seulement si on est dans un terminal (sinon podman casse en CI).
|
# -it seulement si on est dans un terminal (sinon podman casse en CI).
|
||||||
@@ -145,6 +179,7 @@ if [ -z "$FWS_IN_CONTAINER" ] && ! host_is_arch; then
|
|||||||
# dans son propre netns), le conteneur récupère une connectivité identique.
|
# dans son propre netns), le conteneur récupère une connectivité identique.
|
||||||
"${SUDO[@]}" podman run --rm "${TTY[@]}" --network=host --privileged \
|
"${SUDO[@]}" podman run --rm "${TTY[@]}" --network=host --privileged \
|
||||||
-e FWS_IN_CONTAINER=1 \
|
-e FWS_IN_CONTAINER=1 \
|
||||||
|
-e FWS_ISO_VERSION -e FWS_ISO_TAG \
|
||||||
-v "$REPO_DIR":"$REPO_DIR" \
|
-v "$REPO_DIR":"$REPO_DIR" \
|
||||||
-v fws-pacman-cache:/var/cache/pacman/pkg \
|
-v fws-pacman-cache:/var/cache/pacman/pkg \
|
||||||
-w "$REPO_DIR" \
|
-w "$REPO_DIR" \
|
||||||
@@ -173,7 +208,8 @@ command -v pacman >/dev/null \
|
|||||||
# $0 est cité pour gérer les chemins à espaces (ex. "1. FWS").
|
# $0 est cité pour gérer les chemins à espaces (ex. "1. FWS").
|
||||||
if [ "$EUID" -ne 0 ]; then
|
if [ "$EUID" -ne 0 ]; then
|
||||||
if command -v sudo >/dev/null 2>&1; then
|
if command -v sudo >/dev/null 2>&1; then
|
||||||
exec sudo bash "$0" "$@"
|
# -E : conserve FWS_ISO_VERSION / FWS_ISO_TAG (demandés avant) à travers sudo.
|
||||||
|
exec sudo -E bash "$0" "$@"
|
||||||
else
|
else
|
||||||
exec su -c "bash \"$0\"" root
|
exec su -c "bash \"$0\"" root
|
||||||
fi
|
fi
|
||||||
@@ -194,47 +230,46 @@ echo "==> Dossier de travail : $WORK_DIR"
|
|||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
# Version (major.minor.build) + nom de la variante.
|
# Version (major.minor.build) + nom de la variante.
|
||||||
# La version est DEMANDÉE ; le fichier VERSION sert de DÉFAUT (taper Entrée =
|
# Déjà demandés sur l'hôte (FWS_ISO_VERSION/FWS_ISO_TAG passés via -e) ; sinon
|
||||||
# reprendre sa valeur). Produit fws-<major.minor.build>-<nom>.iso
|
# (exécution native Arch / WSL directe) on les demande ici. Le fichier VERSION
|
||||||
# (ex. fws-1.5.0-cli.iso). Nécessite un terminal (read).
|
# sert de défaut (Entrée = le reprendre). Produit fws-<version>-<nom>.iso.
|
||||||
# ============================================================
|
# ============================================================
|
||||||
# Défaut éventuel lu dans le fichier VERSION (doit être major.minor.build).
|
VERSION="$FWS_ISO_VERSION"
|
||||||
VERSION_FILE="$WORK_DIR/VERSION"
|
ISO_TAG="$FWS_ISO_TAG"
|
||||||
VERSION_DEFAULT=""
|
VERSION_DEFAULT=""
|
||||||
if [ -f "$VERSION_FILE" ]; then
|
if [ -f "$WORK_DIR/VERSION" ]; then
|
||||||
VERSION_DEFAULT="$(tr -d ' \t\r\n' < "$VERSION_FILE")"
|
VERSION_DEFAULT="$(tr -d ' \t\r\n' < "$WORK_DIR/VERSION")"
|
||||||
[[ "$VERSION_DEFAULT" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] || VERSION_DEFAULT=""
|
[[ "$VERSION_DEFAULT" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] || VERSION_DEFAULT=""
|
||||||
fi
|
fi
|
||||||
|
while [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; do
|
||||||
while :; do
|
|
||||||
if [ -n "$VERSION_DEFAULT" ]; then
|
if [ -n "$VERSION_DEFAULT" ]; then
|
||||||
read -rp "==> Version (major.minor.build) [Entrée = $VERSION_DEFAULT] : " VERSION \
|
read -rp "==> Version (major.minor.build) [Entrée = $VERSION_DEFAULT] : " VERSION \
|
||||||
|| { echo -e "\e[31mEntrée requise — lance le script en interactif.\e[0m" >&2; exit 1; }
|
|| { echo -e "\e[31mEntrée requise — lance le script en interactif.\e[0m" >&2; exit 1; }
|
||||||
[ -n "$VERSION" ] || VERSION="$VERSION_DEFAULT" # vide → on reprend le fichier VERSION
|
[ -n "$VERSION" ] || VERSION="$VERSION_DEFAULT"
|
||||||
else
|
else
|
||||||
read -rp "==> Version (major.minor.build, ex. 1.5.0) : " VERSION \
|
read -rp "==> Version (major.minor.build, ex. 1.5.0) : " VERSION \
|
||||||
|| { echo -e "\e[31mEntrée requise — lance le script en interactif.\e[0m" >&2; exit 1; }
|
|| { echo -e "\e[31mEntrée requise — lance le script en interactif.\e[0m" >&2; exit 1; }
|
||||||
fi
|
fi
|
||||||
[[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && break
|
[[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] \
|
||||||
echo -e "\e[31m Format attendu : major.minor.build (ex. 1.5.0)\e[0m" >&2
|
|| echo -e "\e[31m Format attendu : major.minor.build (ex. 1.5.0)\e[0m" >&2
|
||||||
done
|
done
|
||||||
while :; do
|
while [ -z "$ISO_TAG" ]; do
|
||||||
read -rp "==> Nom de la variante (ex. cli, gnome, kde) : " ISO_TAG \
|
read -rp "==> Nom de la variante (ex. cli, gnome, kde) : " ISO_TAG \
|
||||||
|| { echo -e "\e[31mEntrée requise — lance le script en interactif.\e[0m" >&2; exit 1; }
|
|| { echo -e "\e[31mEntrée requise — lance le script en interactif.\e[0m" >&2; exit 1; }
|
||||||
# normalise : minuscules, lettres / chiffres / tirets uniquement
|
|
||||||
ISO_TAG="$(printf '%s' "$ISO_TAG" | tr '[:upper:]' '[:lower:]' | tr -cd 'a-z0-9-')"
|
ISO_TAG="$(printf '%s' "$ISO_TAG" | tr '[:upper:]' '[:lower:]' | tr -cd 'a-z0-9-')"
|
||||||
[ -n "$ISO_TAG" ] && break
|
[ -n "$ISO_TAG" ] || echo -e "\e[31m Nom requis (lettres, chiffres, tirets)\e[0m" >&2
|
||||||
echo -e "\e[31m Nom requis (lettres, chiffres, tirets)\e[0m" >&2
|
|
||||||
done
|
done
|
||||||
|
|
||||||
IFS='.' read -r MAJOR MINOR BUILD <<< "$VERSION"
|
IFS='.' read -r MAJOR MINOR BUILD <<< "$VERSION"
|
||||||
|
BUILD_DATE="$(date +%Y.%m.%d)"
|
||||||
# iso_version interne (passé à mkarchiso) ; l'ISO finale est renommée plus bas.
|
# iso_version interne (passé à mkarchiso) ; l'ISO finale est renommée plus bas.
|
||||||
ISO_VERSION="${VERSION}-${ISO_TAG}"
|
ISO_VERSION="${VERSION}-${ISO_TAG}"
|
||||||
OUT_DIR="$WORK_DIR/out/v${MAJOR}/v${MAJOR}.${MINOR}"
|
OUT_DIR="$WORK_DIR/out/v${MAJOR}/v${MAJOR}.${MINOR}"
|
||||||
ISO_FILE="$OUT_DIR/fws-${VERSION}-${ISO_TAG}.iso"
|
# Date ajoutée À LA FIN du nom, avant .iso → fws-<version>-<nom>-<AAAA.MM.JJ>.iso
|
||||||
|
ISO_FILE="$OUT_DIR/fws-${VERSION}-${ISO_TAG}-${BUILD_DATE}.iso"
|
||||||
|
|
||||||
echo "==> Version : ${VERSION} · variante : ${ISO_TAG}"
|
echo "==> Version : ${VERSION} · variante : ${ISO_TAG} · date : ${BUILD_DATE}"
|
||||||
echo "==> ISO finale : fws-${VERSION}-${ISO_TAG}.iso"
|
echo "==> ISO finale : fws-${VERSION}-${ISO_TAG}-${BUILD_DATE}.iso"
|
||||||
echo "==> Dossier : $OUT_DIR"
|
echo "==> Dossier : $OUT_DIR"
|
||||||
|
|
||||||
# pacman ≥ 7 sandboxe les ops FS via landlock, non supporté par le kernel
|
# pacman ≥ 7 sandboxe les ops FS via landlock, non supporté par le kernel
|
||||||
@@ -274,8 +309,8 @@ if [ -d "$WORK_DIR/configs/baseline" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# ── Injection de la version dans profiledef.sh (copie temporaire) ──
|
# ── Injection de la version dans profiledef.sh (copie temporaire) ──
|
||||||
# mkarchiso nomme l'ISO ${iso_name}-${iso_version}-${arch}.iso.
|
# mkarchiso nomme l'ISO ${iso_name}-${iso_version}-${arch}.iso ; on force
|
||||||
# On force iso_version pour obtenir vMAJOR-MINOR-BUILD-DATE.
|
# iso_version pour obtenir le nom voulu (l'ISO est renommée fws-… plus bas).
|
||||||
if [ -f /tmp/fws-build/releng/profiledef.sh ]; then
|
if [ -f /tmp/fws-build/releng/profiledef.sh ]; then
|
||||||
sed -i "s|^iso_version=.*|iso_version=\"${ISO_VERSION}\"|" \
|
sed -i "s|^iso_version=.*|iso_version=\"${ISO_VERSION}\"|" \
|
||||||
/tmp/fws-build/releng/profiledef.sh
|
/tmp/fws-build/releng/profiledef.sh
|
||||||
@@ -320,11 +355,12 @@ find /tmp/fws-build/releng -type f -exec dos2unix {} + 2>/dev/null
|
|||||||
|
|
||||||
echo "==> Lancement de mkarchiso..."
|
echo "==> Lancement de mkarchiso..."
|
||||||
mkdir -p "$OUT_DIR"
|
mkdir -p "$OUT_DIR"
|
||||||
# mkarchiso supprime l'ISO cible avant de la réécrire : si elle est VERROUILLÉE
|
# mkarchiso fait un « rm » interne de l'ISO cible avant de la (ré)écrire ; si
|
||||||
# par Windows (VM ouverte dessus, ISO montée), ce rm casse tout le build à la
|
# une ISO du même nom est VERROUILLÉE par Windows (VM encore ouverte dessus,
|
||||||
# fin. Parade : staging neuf puis déplacement ; si la cible (cette même
|
# ISO montée, antivirus), ce rm échoue et tout le build casse à la toute fin.
|
||||||
# version) est verrouillée, on bascule sur un nom horodaté. On ne touche
|
# Parade : mkarchiso écrit dans un dossier de staging neuf, puis on déplace
|
||||||
# jamais aux ISO des autres versions.
|
# l'ISO. Si la cible (cette même version) est verrouillée, on bascule sur un
|
||||||
|
# nom horodaté → on ne touche jamais aux ISO des autres versions.
|
||||||
STAGE="$OUT_DIR/.staging-$$"
|
STAGE="$OUT_DIR/.staging-$$"
|
||||||
rm -rf "$STAGE"; mkdir -p "$STAGE"
|
rm -rf "$STAGE"; mkdir -p "$STAGE"
|
||||||
mkarchiso -v -w /tmp/fws-build/work -o "$STAGE" /tmp/fws-build/releng
|
mkarchiso -v -w /tmp/fws-build/work -o "$STAGE" /tmp/fws-build/releng
|
||||||
@@ -344,4 +380,4 @@ echo "==> Nettoyage..."
|
|||||||
rm -rf /tmp/fws-build/work
|
rm -rf /tmp/fws-build/work
|
||||||
|
|
||||||
echo "==> Build officiel terminé ! ISO : $FINAL"
|
echo "==> Build officiel terminé ! ISO : $FINAL"
|
||||||
echo -e "\e[32mScript de build officiel (fws-${VERSION}-${ISO_TAG}) terminé avec succès.\e[0m"
|
echo -e "\e[32mScript de build officiel (fws-${VERSION}-${ISO_TAG}-${BUILD_DATE}) terminé avec succès.\e[0m"
|
||||||
|
|||||||
Reference in New Issue
Block a user