fix: enhance repo validation to support comma-separated lists and expand multi-repo runners
This commit is contained in:
@@ -93,12 +93,19 @@ validate_runner_path() {
|
|||||||
|
|
||||||
validate_runner_repos() {
|
validate_runner_repos() {
|
||||||
if [[ "$1" == "all" ]]; then return 0; fi
|
if [[ "$1" == "all" ]]; then return 0; fi
|
||||||
# Check against names in REPO_NAMES
|
# Accept comma-separated list of repo names (e.g. "augur,periodvault")
|
||||||
local _rn
|
local _input _rn _found _item
|
||||||
for _rn in ${REPO_NAMES:-}; do
|
IFS=',' read -ra _input <<< "$1"
|
||||||
[[ "$1" == "$_rn" ]] && return 0
|
for _item in "${_input[@]}"; do
|
||||||
|
_item="${_item## }"; _item="${_item%% }" # trim spaces
|
||||||
|
[[ -z "$_item" ]] && return 1
|
||||||
|
_found=0
|
||||||
|
for _rn in ${REPO_NAMES:-}; do
|
||||||
|
if [[ "$_item" == "$_rn" ]]; then _found=1; break; fi
|
||||||
|
done
|
||||||
|
[[ $_found -eq 0 ]] && return 1
|
||||||
done
|
done
|
||||||
return 1
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
validate_capacity() {
|
validate_capacity() {
|
||||||
@@ -178,7 +185,7 @@ prompt_field() {
|
|||||||
;;
|
;;
|
||||||
runner_repos)
|
runner_repos)
|
||||||
if validate_runner_repos "$value"; then break; fi
|
if validate_runner_repos "$value"; then break; fi
|
||||||
printf '%b Invalid: must be "all" or a known repo name%b\n' "$C_RED" "$C_RESET"
|
printf '%b Invalid: must be "all" or comma-separated repo names from: %s%b\n' "$C_RED" "${REPO_NAMES:-<no repos in .env>}" "$C_RESET"
|
||||||
;;
|
;;
|
||||||
capacity)
|
capacity)
|
||||||
if validate_capacity "$value"; then break; fi
|
if validate_capacity "$value"; then break; fi
|
||||||
@@ -472,12 +479,8 @@ for ((i = 0; i < runner_count; i++)); do
|
|||||||
repos_default=$(ini_default_get "$ex_name" "repos" "all")
|
repos_default=$(ini_default_get "$ex_name" "repos" "all")
|
||||||
fi
|
fi
|
||||||
if [[ -z "$repos_default" ]]; then repos_default="all"; fi
|
if [[ -z "$repos_default" ]]; then repos_default="all"; fi
|
||||||
# Build hint with known repo names
|
# "all" = instance-level. Comma-separated repo names = one runner entry per repo.
|
||||||
repos_hint="token scope: all"
|
prompt_field "repos" "\"all\" or comma-separated repo names (e.g. augur,periodvault)" "runner_repos" "$repos_default"
|
||||||
for _rn in ${REPO_NAMES:-}; do
|
|
||||||
repos_hint="${repos_hint}, ${_rn}"
|
|
||||||
done
|
|
||||||
prompt_field "repos" "$repos_hint" "runner_repos" "$repos_default"
|
|
||||||
save_runner_field "$r_name" "repos" "$PROMPT_RESULT"
|
save_runner_field "$r_name" "repos" "$PROMPT_RESULT"
|
||||||
|
|
||||||
# --- capacity ---
|
# --- capacity ---
|
||||||
@@ -540,6 +543,47 @@ for ((i = 0; i < runner_count; i++)); do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# ===========================================================================
|
||||||
|
# Expand multi-repo runners into one section per repo.
|
||||||
|
# A single act_runner process can only register to one repo, so "repos=a,b"
|
||||||
|
# becomes two INI sections: [name-a] repos=a and [name-b] repos=b.
|
||||||
|
# ===========================================================================
|
||||||
|
EXPANDED_NAMES=()
|
||||||
|
_orig_path=""
|
||||||
|
for r_name in "${COLLECTED_NAMES[@]}"; do
|
||||||
|
r_repos="$(_cdata_get "${r_name}:repos")"
|
||||||
|
if [[ "$r_repos" == "all" ]] || [[ "$r_repos" != *,* ]]; then
|
||||||
|
EXPANDED_NAMES+=("$r_name")
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
# Multi-repo: split and create per-repo sections
|
||||||
|
IFS=',' read -ra _repo_list <<< "$r_repos"
|
||||||
|
for _repo in "${_repo_list[@]}"; do
|
||||||
|
_repo="${_repo## }"; _repo="${_repo%% }" # trim spaces
|
||||||
|
_expanded_name="${r_name}-${_repo}"
|
||||||
|
# Copy all fields from the original section, override repos and name
|
||||||
|
ini_copy_section "$RUNNERS_CONF" "$r_name" "$_expanded_name"
|
||||||
|
ini_set "$RUNNERS_CONF" "$_expanded_name" "repos" "$_repo"
|
||||||
|
# Update data_path to avoid collisions
|
||||||
|
_orig_path=$(ini_get "$RUNNERS_CONF" "$r_name" "data_path" "")
|
||||||
|
if [[ -n "$_orig_path" ]]; then
|
||||||
|
ini_set "$RUNNERS_CONF" "$_expanded_name" "data_path" "${_orig_path%/}-${_repo}"
|
||||||
|
fi
|
||||||
|
# Track for summary
|
||||||
|
_cdata_set "${_expanded_name}:host" "$(_cdata_get "${r_name}:host")"
|
||||||
|
_cdata_set "${_expanded_name}:type" "$(_cdata_get "${r_name}:type")"
|
||||||
|
_cdata_set "${_expanded_name}:boot" "$(_cdata_get "${r_name}:boot")"
|
||||||
|
_cdata_set "${_expanded_name}:labels" "$(_cdata_get "${r_name}:labels")"
|
||||||
|
_cdata_set "${_expanded_name}:capacity" "$(_cdata_get "${r_name}:capacity")"
|
||||||
|
_cdata_set "${_expanded_name}:repos" "$_repo"
|
||||||
|
_cdata_set "${_expanded_name}:data_path" "${_orig_path%/}-${_repo}"
|
||||||
|
EXPANDED_NAMES+=("$_expanded_name")
|
||||||
|
done
|
||||||
|
# Remove the original multi-repo section
|
||||||
|
ini_remove_section "$RUNNERS_CONF" "$r_name"
|
||||||
|
done
|
||||||
|
COLLECTED_NAMES=("${EXPANDED_NAMES[@]}")
|
||||||
|
|
||||||
# ===========================================================================
|
# ===========================================================================
|
||||||
# Summary — green border box + table
|
# Summary — green border box + table
|
||||||
# ===========================================================================
|
# ===========================================================================
|
||||||
|
|||||||
Reference in New Issue
Block a user