From eb2637d0a0f5a8c0edddd9ecb32bc9757fcefb19 Mon Sep 17 00:00:00 2001 From: Eike Waldt Date: Thu, 21 May 2026 14:28:52 +0200 Subject: [PATCH] feat: dynamically solve all requirements.mod files Signed-off-by: Eike Waldt On-behalf-of: SAP --- builder/image.requirements | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/builder/image.requirements b/builder/image.requirements index 53d79b7..d1d7974 100755 --- a/builder/image.requirements +++ b/builder/image.requirements @@ -1,21 +1,33 @@ #!/usr/bin/env bash -set -eufo pipefail +set -euo pipefail -uefi=false -secureboot=false -tpm2=false +features_dir="${FEATURES_DIR:-/builder/features}" +# Scan all requirements.mod files to find all possible modifiers and set defaults +for req_mod in "$features_dir"/*/requirements.mod; do + [ -e "$req_mod" ] || continue + while IFS='=' read -r key _; do + [[ $key =~ ^[a-z_][a-z0-9_]*$ ]] && declare "$key=false" + done < <(grep -E '^[a-z_][a-z0-9_]*=' "$req_mod") +done + +# Source requirements.mod files for selected features to override defaults IFS=',' read -r -a features <<< "$BUILDER_FEATURES" for feature in "${features[@]}"; do - if [ -e "/builder/features/$feature/requirements.mod" ]; then - source "/builder/features/$feature/requirements.mod" - fi + [ -z "$feature" ] && continue + req_file="$features_dir/$feature/requirements.mod" + # shellcheck source=/dev/null + [ -e "$req_file" ] && source "$req_file" done -cat > "$2" << EOF -arch=$BUILDER_ARCH -uefi=$uefi -secureboot=$secureboot -tpm2=$tpm2 -EOF +# Output all modifiers +{ + echo "arch=$BUILDER_ARCH" + for req_mod in "$features_dir"/*/requirements.mod; do + [ -e "$req_mod" ] || continue + while IFS='=' read -r key _; do + [[ $key =~ ^[a-z_][a-z0-9_]*$ ]] && echo "$key=${!key}" + done < <(grep -E '^[a-z_][a-z0-9_]*=' "$req_mod") + done | sort -u +} > "$2"