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)
|
||||
#
|
||||
# Identique à build.sh dans sa structure, mais :
|
||||
# - lit la version dans le fichier VERSION (format Major.Minor.Build)
|
||||
# - nomme l'ISO FWS-vMAJOR-MINOR-BUILD-DATE-x86_64.iso
|
||||
# - range l'ISO dans out/vMAJOR/vMAJOR.MINOR/
|
||||
# IDENTIQUE à build.sh (même bascule conteneur/WSL, --network=host, fusion
|
||||
# baseline, MÊME injection local-repo → donc même paquet anaconda avec le champ
|
||||
# Hostname), avec EN PLUS uniquement le RENOMMAGE :
|
||||
# - 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 :
|
||||
# - 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
|
||||
}
|
||||
|
||||
# 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.
|
||||
SUDO=(); [ "$EUID" -eq 0 ] || SUDO=(sudo)
|
||||
# -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.
|
||||
"${SUDO[@]}" podman run --rm "${TTY[@]}" --network=host --privileged \
|
||||
-e FWS_IN_CONTAINER=1 \
|
||||
-e FWS_ISO_VERSION -e FWS_ISO_TAG \
|
||||
-v "$REPO_DIR":"$REPO_DIR" \
|
||||
-v fws-pacman-cache:/var/cache/pacman/pkg \
|
||||
-w "$REPO_DIR" \
|
||||
@@ -173,7 +208,8 @@ command -v pacman >/dev/null \
|
||||
# $0 est cité pour gérer les chemins à espaces (ex. "1. FWS").
|
||||
if [ "$EUID" -ne 0 ]; 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
|
||||
exec su -c "bash \"$0\"" root
|
||||
fi
|
||||
@@ -194,47 +230,46 @@ echo "==> Dossier de travail : $WORK_DIR"
|
||||
|
||||
# ============================================================
|
||||
# Version (major.minor.build) + nom de la variante.
|
||||
# La version est DEMANDÉE ; le fichier VERSION sert de DÉFAUT (taper Entrée =
|
||||
# reprendre sa valeur). Produit fws-<major.minor.build>-<nom>.iso
|
||||
# (ex. fws-1.5.0-cli.iso). Nécessite un terminal (read).
|
||||
# Déjà demandés sur l'hôte (FWS_ISO_VERSION/FWS_ISO_TAG passés via -e) ; sinon
|
||||
# (exécution native Arch / WSL directe) on les demande ici. Le fichier VERSION
|
||||
# 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_FILE="$WORK_DIR/VERSION"
|
||||
VERSION="$FWS_ISO_VERSION"
|
||||
ISO_TAG="$FWS_ISO_TAG"
|
||||
VERSION_DEFAULT=""
|
||||
if [ -f "$VERSION_FILE" ]; then
|
||||
VERSION_DEFAULT="$(tr -d ' \t\r\n' < "$VERSION_FILE")"
|
||||
if [ -f "$WORK_DIR/VERSION" ]; then
|
||||
VERSION_DEFAULT="$(tr -d ' \t\r\n' < "$WORK_DIR/VERSION")"
|
||||
[[ "$VERSION_DEFAULT" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] || VERSION_DEFAULT=""
|
||||
fi
|
||||
|
||||
while :; do
|
||||
while [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; do
|
||||
if [ -n "$VERSION_DEFAULT" ]; then
|
||||
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; }
|
||||
[ -n "$VERSION" ] || VERSION="$VERSION_DEFAULT" # vide → on reprend le fichier VERSION
|
||||
[ -n "$VERSION" ] || VERSION="$VERSION_DEFAULT"
|
||||
else
|
||||
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; }
|
||||
fi
|
||||
[[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && break
|
||||
echo -e "\e[31m Format attendu : major.minor.build (ex. 1.5.0)\e[0m" >&2
|
||||
[[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] \
|
||||
|| echo -e "\e[31m Format attendu : major.minor.build (ex. 1.5.0)\e[0m" >&2
|
||||
done
|
||||
while :; do
|
||||
while [ -z "$ISO_TAG" ]; do
|
||||
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; }
|
||||
# normalise : minuscules, lettres / chiffres / tirets uniquement
|
||||
ISO_TAG="$(printf '%s' "$ISO_TAG" | tr '[:upper:]' '[:lower:]' | tr -cd 'a-z0-9-')"
|
||||
[ -n "$ISO_TAG" ] && break
|
||||
echo -e "\e[31m Nom requis (lettres, chiffres, tirets)\e[0m" >&2
|
||||
[ -n "$ISO_TAG" ] || echo -e "\e[31m Nom requis (lettres, chiffres, tirets)\e[0m" >&2
|
||||
done
|
||||
|
||||
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="${VERSION}-${ISO_TAG}"
|
||||
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 "==> ISO finale : fws-${VERSION}-${ISO_TAG}.iso"
|
||||
echo "==> Version : ${VERSION} · variante : ${ISO_TAG} · date : ${BUILD_DATE}"
|
||||
echo "==> ISO finale : fws-${VERSION}-${ISO_TAG}-${BUILD_DATE}.iso"
|
||||
echo "==> Dossier : $OUT_DIR"
|
||||
|
||||
# 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
|
||||
|
||||
# ── Injection de la version dans profiledef.sh (copie temporaire) ──
|
||||
# mkarchiso nomme l'ISO ${iso_name}-${iso_version}-${arch}.iso.
|
||||
# On force iso_version pour obtenir vMAJOR-MINOR-BUILD-DATE.
|
||||
# mkarchiso nomme l'ISO ${iso_name}-${iso_version}-${arch}.iso ; on force
|
||||
# iso_version pour obtenir le nom voulu (l'ISO est renommée fws-… plus bas).
|
||||
if [ -f /tmp/fws-build/releng/profiledef.sh ]; then
|
||||
sed -i "s|^iso_version=.*|iso_version=\"${ISO_VERSION}\"|" \
|
||||
/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..."
|
||||
mkdir -p "$OUT_DIR"
|
||||
# mkarchiso supprime l'ISO cible avant de la réécrire : si elle est VERROUILLÉE
|
||||
# par Windows (VM ouverte dessus, ISO montée), ce rm casse tout le build à la
|
||||
# fin. Parade : staging neuf puis déplacement ; 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.
|
||||
# mkarchiso fait un « rm » interne de l'ISO cible avant de la (ré)écrire ; si
|
||||
# une ISO du même nom est VERROUILLÉE par Windows (VM encore ouverte dessus,
|
||||
# ISO montée, antivirus), ce rm échoue et tout le build casse à la toute fin.
|
||||
# Parade : mkarchiso écrit dans un dossier de staging neuf, puis on déplace
|
||||
# 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-$$"
|
||||
rm -rf "$STAGE"; mkdir -p "$STAGE"
|
||||
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
|
||||
|
||||
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