#!/usr/bin/env bash # # Unregister an instance added by add-instance.sh: stops its PM2 process and # drops it from scripts/instances.json. The database directory is left on # disk — deleting credentials is a decision for a human with rm. # # ./scripts/remove-instance.sh set -euo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)" REGISTRY="$ROOT/scripts/instances.json" info() { printf ' %s\n' "$1"; } die() { printf ' [X] %s\n' "$1" >&2; exit 1; } [ $# -eq 1 ] || die "usage: $0 " N="$1" case "$N" in (*[!0-9]*|'') die "N must be a number, got: $N" ;; esac [ "$N" -ge 2 ] || die "instance 1 is the legacy install - remove it with pm2 delete autofirmer" [ -f "$REGISTRY" ] || die "no scripts/instances.json - nothing to remove" PM2_NAME="autofirmer-$N" node - "$REGISTRY" "$PM2_NAME" <<'NODE' const { readFileSync, writeFileSync } = require('node:fs'); const [, file, name] = process.argv; const entries = JSON.parse(readFileSync(file, 'utf8')); if (!entries.some((e) => e.name === name)) { console.error(` [X] ${name} is not registered`); process.exit(1); } writeFileSync(file, JSON.stringify(entries.filter((e) => e.name !== name), null, 4) + '\n'); console.log(` registry: ${name} removed`); NODE pm2 delete "$PM2_NAME" >/dev/null 2>&1 || info "pm2: $PM2_NAME was not running" pm2 save >/dev/null info "pm2: $PM2_NAME deleted and process list saved" info "database left at .data/instance-$N/ - delete by hand if you mean it"