fix: Update pm2-manager with updated ecosystem
Now prefers Ctrl-managed configs when no explicit ecosystem file is passed. Still supports explicit repo-local or absolute config paths.
This commit is contained in:
+64
-3
@@ -4,19 +4,80 @@ set -euo pipefail
|
||||
if [ "$#" -lt 2 ] || [ "$#" -gt 3 ]; then
|
||||
echo "Usage: $0 <project_dir> <app_name> [ecosystem_file]"
|
||||
echo "Example: $0 /home/ubuntu/JezzWTF/zap zap ecosystem.config.cjs"
|
||||
echo "If ecosystem_file is omitted, Ctrl-managed configs are preferred."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PROJECT_DIR="$1"
|
||||
APP_NAME="$2"
|
||||
ECOSYSTEM_FILE="${3:-ecosystem.config.cjs}"
|
||||
ECOSYSTEM_FILE="${3:-}"
|
||||
CTRL_DATA_DIR="${CTRL_DATA_DIR:-${XDG_DATA_HOME:-$HOME/.local/share}/ctrl}"
|
||||
CTRL_ECOSYSTEM_DIR="${CTRL_ECOSYSTEM_DIR:-$CTRL_DATA_DIR/ecosystems}"
|
||||
|
||||
trim() {
|
||||
local s="$1"
|
||||
s="${s#"${s%%[![:space:]]*}"}"
|
||||
s="${s%"${s##*[![:space:]]}"}"
|
||||
printf "%s" "$s"
|
||||
}
|
||||
|
||||
ecosystem_app_name() {
|
||||
local ecosystem_file="$1"
|
||||
local name
|
||||
name="$(grep -E 'name:[[:space:]]*"[^"]+"' "$ecosystem_file" | head -n1 | sed -E 's/.*name:[[:space:]]*"([^"]+)".*/\1/' || true)"
|
||||
trim "$name"
|
||||
}
|
||||
|
||||
ecosystem_cwd() {
|
||||
local ecosystem_file="$1"
|
||||
local cwd
|
||||
cwd="$(grep -E 'cwd:[[:space:]]*"[^"]+"' "$ecosystem_file" | head -n1 | sed -E 's/.*cwd:[[:space:]]*"([^"]+)".*/\1/' || true)"
|
||||
trim "$cwd"
|
||||
}
|
||||
|
||||
resolve_ecosystem_path() {
|
||||
local file name cwd name_match=""
|
||||
|
||||
if [ -n "$ECOSYSTEM_FILE" ]; then
|
||||
if [[ "$ECOSYSTEM_FILE" = /* ]]; then
|
||||
printf "%s" "$ECOSYSTEM_FILE"
|
||||
else
|
||||
printf "%s" "$PROJECT_DIR/$ECOSYSTEM_FILE"
|
||||
fi
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ -d "$CTRL_ECOSYSTEM_DIR" ]; then
|
||||
while IFS= read -r file; do
|
||||
name="$(ecosystem_app_name "$file")"
|
||||
[ "$name" = "$APP_NAME" ] || continue
|
||||
|
||||
cwd="$(ecosystem_cwd "$file")"
|
||||
if [ "$cwd" = "$PROJECT_DIR" ]; then
|
||||
printf "%s" "$file"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ -z "$name_match" ]; then
|
||||
name_match="$file"
|
||||
fi
|
||||
done < <(find "$CTRL_ECOSYSTEM_DIR" -maxdepth 1 -type f -name "*.config.cjs" | sort)
|
||||
fi
|
||||
|
||||
if [ -n "$name_match" ]; then
|
||||
printf "%s" "$name_match"
|
||||
return 0
|
||||
fi
|
||||
|
||||
printf "%s" "$PROJECT_DIR/ecosystem.config.cjs"
|
||||
}
|
||||
|
||||
if [ ! -d "$PROJECT_DIR" ]; then
|
||||
echo "ERROR: project directory not found: $PROJECT_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ECOSYSTEM_PATH="$PROJECT_DIR/$ECOSYSTEM_FILE"
|
||||
ECOSYSTEM_PATH="$(resolve_ecosystem_path)"
|
||||
if [ ! -f "$ECOSYSTEM_PATH" ]; then
|
||||
echo "ERROR: ecosystem file not found: $ECOSYSTEM_PATH"
|
||||
exit 1
|
||||
@@ -24,7 +85,7 @@ fi
|
||||
|
||||
cd "$PROJECT_DIR"
|
||||
|
||||
echo "Recreating PM2 app '$APP_NAME' from '$ECOSYSTEM_FILE'..."
|
||||
echo "Recreating PM2 app '$APP_NAME' from '$ECOSYSTEM_PATH'..."
|
||||
pm2 delete "$APP_NAME" >/dev/null 2>&1 || true
|
||||
pm2 start "$ECOSYSTEM_PATH"
|
||||
pm2 save
|
||||
|
||||
Reference in New Issue
Block a user