Reviewed-on: #17 Reviewed-by: sundapeng <sundp@mail.zgclab.edu.cn> Reviewed-by: xuxt <xuxt@zgclab.edu.cn>
116 lines
2.7 KiB
Bash
116 lines
2.7 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Shared helper to load Argus build user/group configuration.
|
|
# Usage:
|
|
# source "${PROJECT_ROOT}/scripts/common/build_user.sh"
|
|
# load_build_user
|
|
# echo "$ARGUS_BUILD_UID:$ARGUS_BUILD_GID"
|
|
|
|
ARGUS_BUILD_UID_DEFAULT=2133
|
|
ARGUS_BUILD_GID_DEFAULT=2015
|
|
|
|
shopt -s extglob
|
|
|
|
_ARGUS_BUILD_USER_LOADED="${_ARGUS_BUILD_USER_LOADED:-0}"
|
|
|
|
_argus_build_user_script_dir() {
|
|
local dir
|
|
dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
echo "$dir"
|
|
}
|
|
|
|
argus_project_root() {
|
|
local script_dir
|
|
script_dir="$(_argus_build_user_script_dir)"
|
|
(cd "$script_dir/../.." >/dev/null && pwd)
|
|
}
|
|
|
|
_argus_trim() {
|
|
local value="$1"
|
|
value="${value##+([[:space:]])}"
|
|
value="${value%%+([[:space:]])}"
|
|
printf '%s' "$value"
|
|
}
|
|
|
|
_argus_is_number() {
|
|
[[ "$1" =~ ^[0-9]+$ ]]
|
|
}
|
|
|
|
load_build_user() {
|
|
if [[ "$_ARGUS_BUILD_USER_LOADED" == "1" ]]; then
|
|
return 0
|
|
fi
|
|
|
|
local project_root config_files config uid gid
|
|
project_root="$(argus_project_root)"
|
|
config_files=(
|
|
"$project_root/configs/build_user.local.conf"
|
|
"$project_root/configs/build_user.conf"
|
|
)
|
|
|
|
uid="$ARGUS_BUILD_UID_DEFAULT"
|
|
gid="$ARGUS_BUILD_GID_DEFAULT"
|
|
|
|
for config in "${config_files[@]}"; do
|
|
if [[ -f "$config" ]]; then
|
|
while IFS= read -r raw_line || [[ -n "$raw_line" ]]; do
|
|
local line key value
|
|
line="${raw_line%%#*}"
|
|
line="$(_argus_trim "${line}")"
|
|
[[ -z "$line" ]] && continue
|
|
if [[ "$line" != *=* ]]; then
|
|
echo "[ARGUS build_user] Ignoring malformed line in $config: $raw_line" >&2
|
|
continue
|
|
fi
|
|
key="${line%%=*}"
|
|
value="${line#*=}"
|
|
key="$(_argus_trim "$key")"
|
|
value="$(_argus_trim "$value")"
|
|
case "$key" in
|
|
UID)
|
|
uid="$value"
|
|
;;
|
|
GID)
|
|
gid="$value"
|
|
;;
|
|
*)
|
|
echo "[ARGUS build_user] Unknown key '$key' in $config" >&2
|
|
;;
|
|
esac
|
|
done < "$config"
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [[ -n "${ARGUS_BUILD_UID:-}" ]]; then
|
|
uid="$ARGUS_BUILD_UID"
|
|
fi
|
|
if [[ -n "${ARGUS_BUILD_GID:-}" ]]; then
|
|
gid="$ARGUS_BUILD_GID"
|
|
fi
|
|
|
|
if ! _argus_is_number "$uid"; then
|
|
echo "[ARGUS build_user] Invalid UID '$uid'" >&2
|
|
return 1
|
|
fi
|
|
if ! _argus_is_number "$gid"; then
|
|
echo "[ARGUS build_user] Invalid GID '$gid'" >&2
|
|
return 1
|
|
fi
|
|
|
|
export ARGUS_BUILD_UID="$uid"
|
|
export ARGUS_BUILD_GID="$gid"
|
|
_ARGUS_BUILD_USER_LOADED=1
|
|
}
|
|
|
|
argus_build_user_args() {
|
|
load_build_user
|
|
printf '%s' "--build-arg ARGUS_BUILD_UID=${ARGUS_BUILD_UID} --build-arg ARGUS_BUILD_GID=${ARGUS_BUILD_GID}"
|
|
}
|
|
|
|
print_build_user() {
|
|
load_build_user
|
|
echo "ARGUS build user: UID=${ARGUS_BUILD_UID} GID=${ARGUS_BUILD_GID}"
|
|
}
|