Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions build
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ container_mount_opts=(

# mount all features to enable dynamic discovery of requirements.mod files
container_mount_opts+=(-v "$(realpath -- "features"):/builder/features:ro")
container_mount_opts+=(-v "$(realpath -- "requirements.defs"):/builder/requirements.defs:ro")

if [ "$container_image" = localhost/builder ]; then
dir="$(dirname -- "$(realpath -- "${BASH_SOURCE[0]}")")"
Expand Down
37 changes: 14 additions & 23 deletions builder/image.requirements
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,18 @@ set -euo pipefail
features_dir="${FEATURES_DIR:-/builder/features}"

# Built-in keys. requirements.mod scripts may extend this array via:
# requirements_keys+=(mykey)
# mykey=true
requirements_keys=(arch)
export arch="$BUILDER_ARCH"
# requirements["some_key"]=some_value
# and requirements.defs can set defaults to apply before any feature
# specific values are set. this is also the place to define keys that
# should exists with blank/default values even if no feature sets it
declare -A requirements
requirements["arch"]="$BUILDER_ARCH"

# Pass 1: source every requirements.mod to discover all keys any feature
# may contribute, then reset discovered keys to "false" as defaults.
# This ensures output keys are stable regardless of which features are selected.
for req_mod in "$features_dir"/*/requirements.mod; do
[ -e "$req_mod" ] || continue
# shellcheck source=/dev/null
source "$req_mod"
done

# Reset all discovered (non-arch) keys to false as defaults for pass 2.
for key in "${requirements_keys[@]}"; do
[ "$key" = arch ] && continue
declare "$key=false"
done
req_def=/builder/requirements.defs
# shellcheck source=/dev/null
[ -e "$req_def" ] && source "$req_def"
Comment thread
github-advanced-security[bot] marked this conversation as resolved.
Fixed

# Pass 2: source only the selected features' requirements.mod files,
# Source only the selected features' requirements.mod files,
# allowing them to override the defaults set above.
IFS=',' read -r -a features <<< "$BUILDER_FEATURES"
for feature in "${features[@]}"; do
Expand All @@ -35,7 +26,7 @@ for feature in "${features[@]}"; do
[ -e "$req_mod" ] && source "$req_mod"
done

# Emit each key alphabetically (duplicates silently dropped by sort -u).
for key in "${requirements_keys[@]}"; do
printf '%s=%s\n' "$key" "${!key}"
done | sort -u -t= -k1,1 > "$2"
# Emit each key alphabetically
for key in "${!requirements[@]}"; do
printf '%s=%s\n' "$key" "${requirements[$key]}"
done | sort > "$2"
Loading