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() {
|
||||
if [[ "$1" == "all" ]]; then return 0; fi
|
||||
# Check against names in REPO_NAMES
|
||||
local _rn
|
||||
# Accept comma-separated list of repo names (e.g. "augur,periodvault")
|
||||
local _input _rn _found _item
|
||||
IFS=',' read -ra _input <<< "$1"
|
||||
for _item in "${_input[@]}"; do
|
||||
_item="${_item## }"; _item="${_item%% }" # trim spaces
|
||||
[[ -z "$_item" ]] && return 1
|
||||
_found=0
|
||||
for _rn in ${REPO_NAMES:-}; do
|
||||
[[ "$1" == "$_rn" ]] && return 0
|
||||
if [[ "$_item" == "$_rn" ]]; then _found=1; break; fi
|
||||
done
|
||||
return 1
|
||||
[[ $_found -eq 0 ]] && return 1
|
||||
done
|
||||
return 0
|
||||
}
|
||||
|
||||
validate_capacity() {
|
||||
@@ -178,7 +185,7 @@ prompt_field() {
|
||||
;;
|
||||
runner_repos)
|
||||
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)
|
||||
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")
|
||||
fi
|
||||
if [[ -z "$repos_default" ]]; then repos_default="all"; fi
|
||||
# Build hint with known repo names
|
||||
repos_hint="token scope: all"
|
||||
for _rn in ${REPO_NAMES:-}; do
|
||||
repos_hint="${repos_hint}, ${_rn}"
|
||||
done
|
||||
prompt_field "repos" "$repos_hint" "runner_repos" "$repos_default"
|
||||
# "all" = instance-level. Comma-separated repo names = one runner entry per repo.
|
||||
prompt_field "repos" "\"all\" or comma-separated repo names (e.g. augur,periodvault)" "runner_repos" "$repos_default"
|
||||
save_runner_field "$r_name" "repos" "$PROMPT_RESULT"
|
||||
|
||||
# --- capacity ---
|
||||
@@ -540,6 +543,47 @@ for ((i = 0; i < runner_count; i++)); do
|
||||
fi
|
||||
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
|
||||
# ===========================================================================
|
||||
|
||||
Reference in New Issue
Block a user