aidevops 3.13.44 → 3.13.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/VERSION +1 -1
- package/aidevops.sh +1 -1
- package/package.json +1 -1
- package/setup.sh +108 -1
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.13.
|
|
1
|
+
3.13.46
|
package/aidevops.sh
CHANGED
package/package.json
CHANGED
package/setup.sh
CHANGED
|
@@ -12,7 +12,7 @@ shopt -s inherit_errexit 2>/dev/null || true
|
|
|
12
12
|
# AI Assistant Server Access Framework Setup Script
|
|
13
13
|
# Helps developers set up the framework for their infrastructure
|
|
14
14
|
#
|
|
15
|
-
# Version: 3.13.
|
|
15
|
+
# Version: 3.13.46
|
|
16
16
|
#
|
|
17
17
|
# Quick Install:
|
|
18
18
|
# npm install -g aidevops && aidevops update (recommended)
|
|
@@ -1124,6 +1124,107 @@ setup_cases_planes() {
|
|
|
1124
1124
|
return 0
|
|
1125
1125
|
}
|
|
1126
1126
|
|
|
1127
|
+
# Non-interactive setup singleton state. This lock only gates the deployment path;
|
|
1128
|
+
# interactive setup remains prompt-driven and can still be used for first-run init.
|
|
1129
|
+
SETUP_NONINTERACTIVE_LOCK_HELD=false
|
|
1130
|
+
SETUP_NONINTERACTIVE_LOCK_DIR=""
|
|
1131
|
+
SETUP_NONINTERACTIVE_CHILD_PIDS=""
|
|
1132
|
+
SETUP_NONINTERACTIVE_TERMINATING=false
|
|
1133
|
+
|
|
1134
|
+
_setup_lock_pid_alive() {
|
|
1135
|
+
local pid="$1"
|
|
1136
|
+
[[ "$pid" =~ ^[0-9]+$ ]] || return 1
|
|
1137
|
+
kill -0 "$pid" 2>/dev/null
|
|
1138
|
+
return $?
|
|
1139
|
+
}
|
|
1140
|
+
|
|
1141
|
+
_setup_register_child_pid() {
|
|
1142
|
+
local pid="$1"
|
|
1143
|
+
[[ -n "$pid" ]] || return 0
|
|
1144
|
+
SETUP_NONINTERACTIVE_CHILD_PIDS="${SETUP_NONINTERACTIVE_CHILD_PIDS}${SETUP_NONINTERACTIVE_CHILD_PIDS:+ }${pid}"
|
|
1145
|
+
return 0
|
|
1146
|
+
}
|
|
1147
|
+
|
|
1148
|
+
_setup_cleanup_noninteractive_children() {
|
|
1149
|
+
local pid=""
|
|
1150
|
+
[[ "${SETUP_NONINTERACTIVE_TERMINATING:-false}" == "true" ]] || return 0
|
|
1151
|
+
for pid in ${SETUP_NONINTERACTIVE_CHILD_PIDS:-}; do
|
|
1152
|
+
if _setup_lock_pid_alive "$pid"; then
|
|
1153
|
+
kill -TERM "$pid" 2>/dev/null || true
|
|
1154
|
+
fi
|
|
1155
|
+
done
|
|
1156
|
+
for pid in ${SETUP_NONINTERACTIVE_CHILD_PIDS:-}; do
|
|
1157
|
+
wait "$pid" 2>/dev/null || true
|
|
1158
|
+
done
|
|
1159
|
+
return 0
|
|
1160
|
+
}
|
|
1161
|
+
|
|
1162
|
+
_setup_release_noninteractive_setup_lock() {
|
|
1163
|
+
local lock_dir="${SETUP_NONINTERACTIVE_LOCK_DIR:-}"
|
|
1164
|
+
local owner_pid=""
|
|
1165
|
+
if [[ "${SETUP_NONINTERACTIVE_LOCK_HELD:-false}" != "true" || -z "$lock_dir" ]]; then
|
|
1166
|
+
return 0
|
|
1167
|
+
fi
|
|
1168
|
+
if [[ -r "$lock_dir/owner.pid" ]]; then
|
|
1169
|
+
owner_pid=$(tr -d '[:space:]' <"$lock_dir/owner.pid" 2>/dev/null || true)
|
|
1170
|
+
fi
|
|
1171
|
+
if [[ -z "$owner_pid" || "$owner_pid" == "$$" ]]; then
|
|
1172
|
+
rm -rf "$lock_dir" 2>/dev/null || true
|
|
1173
|
+
fi
|
|
1174
|
+
SETUP_NONINTERACTIVE_LOCK_HELD=false
|
|
1175
|
+
return 0
|
|
1176
|
+
}
|
|
1177
|
+
|
|
1178
|
+
_setup_noninteractive_signal_exit() {
|
|
1179
|
+
local signal_name="$1"
|
|
1180
|
+
local exit_code=143
|
|
1181
|
+
[[ "$signal_name" == "INT" ]] && exit_code=130
|
|
1182
|
+
SETUP_NONINTERACTIVE_TERMINATING=true
|
|
1183
|
+
print_warning "setup.sh --non-interactive received ${signal_name}; cleaning up child deployment processes"
|
|
1184
|
+
_setup_cleanup_noninteractive_children
|
|
1185
|
+
_setup_release_noninteractive_setup_lock
|
|
1186
|
+
exit "$exit_code"
|
|
1187
|
+
}
|
|
1188
|
+
|
|
1189
|
+
_setup_acquire_noninteractive_setup_lock() {
|
|
1190
|
+
local lock_dir="${AIDEVOPS_SETUP_LOCK_DIR:-$HOME/.aidevops/locks/setup-noninteractive.lock.d}"
|
|
1191
|
+
local owner_pid=""
|
|
1192
|
+
local owner_cmd=""
|
|
1193
|
+
local attempts=0
|
|
1194
|
+
mkdir -p "$(dirname "$lock_dir")" 2>/dev/null || true
|
|
1195
|
+
while [[ "$attempts" -lt 2 ]]; do
|
|
1196
|
+
if mkdir "$lock_dir" 2>/dev/null; then
|
|
1197
|
+
SETUP_NONINTERACTIVE_LOCK_DIR="$lock_dir"
|
|
1198
|
+
SETUP_NONINTERACTIVE_LOCK_HELD=true
|
|
1199
|
+
printf '%s\n' "$$" >"$lock_dir/owner.pid" 2>/dev/null || true
|
|
1200
|
+
printf '%s\n' "$(date -u +%Y-%m-%dT%H:%M:%SZ)" >"$lock_dir/started_at" 2>/dev/null || true
|
|
1201
|
+
printf '%s\n' "$0 $*" >"$lock_dir/command" 2>/dev/null || true
|
|
1202
|
+
trap _setup_release_noninteractive_setup_lock EXIT
|
|
1203
|
+
trap '_setup_noninteractive_signal_exit TERM' TERM
|
|
1204
|
+
trap '_setup_noninteractive_signal_exit INT' INT
|
|
1205
|
+
return 0
|
|
1206
|
+
fi
|
|
1207
|
+
|
|
1208
|
+
owner_pid=""
|
|
1209
|
+
owner_cmd=""
|
|
1210
|
+
if [[ -r "$lock_dir/owner.pid" ]]; then
|
|
1211
|
+
owner_pid=$(tr -d '[:space:]' <"$lock_dir/owner.pid" 2>/dev/null || true)
|
|
1212
|
+
fi
|
|
1213
|
+
if _setup_lock_pid_alive "$owner_pid"; then
|
|
1214
|
+
[[ -r "$lock_dir/command" ]] && owner_cmd=$(tr '\n' ' ' <"$lock_dir/command" 2>/dev/null || true)
|
|
1215
|
+
print_error "Another setup.sh --non-interactive process is already running (pid ${owner_pid}, lock ${lock_dir}). Exiting to avoid overlapping deployments. ${owner_cmd:+Command: ${owner_cmd}}"
|
|
1216
|
+
return 75
|
|
1217
|
+
fi
|
|
1218
|
+
|
|
1219
|
+
print_warning "Removing stale setup.sh --non-interactive lock at ${lock_dir}"
|
|
1220
|
+
rm -rf "$lock_dir" 2>/dev/null || true
|
|
1221
|
+
attempts=$((attempts + 1))
|
|
1222
|
+
done
|
|
1223
|
+
|
|
1224
|
+
print_error "Unable to acquire setup.sh --non-interactive lock at ${lock_dir}"
|
|
1225
|
+
return 75
|
|
1226
|
+
}
|
|
1227
|
+
|
|
1127
1228
|
# Non-interactive path: deploy agents and run safe migrations only (no prompts).
|
|
1128
1229
|
# GH#21060 / t2911: Every direct function call is wrapped with _time_step so
|
|
1129
1230
|
# that a one-line-per-stage TSV timing record is appended to
|
|
@@ -1196,12 +1297,14 @@ _setup_run_non_interactive() {
|
|
|
1196
1297
|
if _time_step "generate_agent_skills" generate_agent_skills; then
|
|
1197
1298
|
_time_step "create_skill_symlinks" create_skill_symlinks &
|
|
1198
1299
|
_pid_symlinks=$!
|
|
1300
|
+
_setup_register_child_pid "$_pid_symlinks"
|
|
1199
1301
|
else
|
|
1200
1302
|
print_warning "Agent skills generation failed — skipping skill symlinks"
|
|
1201
1303
|
fi
|
|
1202
1304
|
|
|
1203
1305
|
_time_step "scan_imported_skills" scan_imported_skills &
|
|
1204
1306
|
local _pid_scan=$!
|
|
1307
|
+
_setup_register_child_pid "$_pid_scan"
|
|
1205
1308
|
|
|
1206
1309
|
if [[ -n "$_pid_symlinks" ]]; then
|
|
1207
1310
|
wait "$_pid_symlinks" 2>/dev/null || print_warning "Skill symlink creation encountered issues (non-critical)"
|
|
@@ -1543,6 +1646,10 @@ main() {
|
|
|
1543
1646
|
exit 1
|
|
1544
1647
|
fi
|
|
1545
1648
|
|
|
1649
|
+
if [[ "$NON_INTERACTIVE" == "true" ]]; then
|
|
1650
|
+
_setup_acquire_noninteractive_setup_lock "$@" || exit $?
|
|
1651
|
+
fi
|
|
1652
|
+
|
|
1546
1653
|
_setup_print_header
|
|
1547
1654
|
|
|
1548
1655
|
# GH#18950 (t2087): bash 3.2 → modern bash upgrade check. Runs before
|