feat: add --dry-run mode to install.sh + update Gitea description

This commit is contained in:
Bernd (Hermes Agent)
2026-05-05 18:45:38 +02:00
parent b6b3469c21
commit c4c1f344ce
2 changed files with 122 additions and 56 deletions
+6
View File
@@ -29,6 +29,12 @@ cd Hermes_rocket.chat_Plugin
./install.sh ./install.sh
``` ```
Falls du erst testen möchtest, was passieren würde:
```bash
./install.sh --dry-run
```
Das Script führt dich Schritt für Schritt durch: Das Script führt dich Schritt für Schritt durch:
- 🔵 Prüfe Voraussetzungen (curl, git, python3) - 🔵 Prüfe Voraussetzungen (curl, git, python3)
- 🔵 Erstelle Plugin-Verzeichnis - 🔵 Erstelle Plugin-Verzeichnis
+116 -56
View File
@@ -1,10 +1,21 @@
/usr/bin/env bash #!/usr/bin/env bash
# install.sh # install.sh
# Rocket.Chat Plugin für Hermes Agent — Interaktives Setup # Rocket.Chat Plugin für Hermes Agent — Interaktives Setup
# Voraussetzungen: bash, curl, git, python3 # Voraussetzungen: bash, curl, git, python3
#
# Nutzung:
# ./install.sh → Normale Installation
# ./install.sh --dry-run → Simulation (zeigt alles an, ändert nichts)
set -euo pipefail set -euo pipefail
# ── Dry-Run Modus ──
DRY_RUN=false
if [[ "${1:-}" == "--dry-run" ]]; then
DRY_RUN=true
echo -e "\n🔍 DRY-RUN MODUS — Es wird NICHTS verändert. Nur Vorschau.\n"
fi
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PLUGIN_NAME="rocketchat" PLUGIN_NAME="rocketchat"
HERMES_HOME="${HERMES_HOME:-$HOME/.hermes}" HERMES_HOME="${HERMES_HOME:-$HOME/.hermes}"
@@ -15,6 +26,18 @@ ECHO_ERR() { echo -e " ❌ $1"; }
ECHO_INFO() { echo -e " $1"; } ECHO_INFO() { echo -e " $1"; }
ECHO_STEP() { echo -e "\n🔵 $1"; } ECHO_STEP() { echo -e "\n🔵 $1"; }
ECHO_WARN() { echo -e " ⚠️ $1"; } ECHO_WARN() { echo -e " ⚠️ $1"; }
ECHO_DRY() { echo -e " 📝 [DRY-RUN] $1"; }
run_or_simulate() {
local desc="$1"
shift
if $DRY_RUN; then
ECHO_DRY "$desc"
echo " → würde ausführen: $*"
else
"$@"
fi
}
# ── Schritt 1: Prerequisites ── # ── Schritt 1: Prerequisites ──
ECHO_STEP "1/7 Prüfe Voraussetzungen" ECHO_STEP "1/7 Prüfe Voraussetzungen"
@@ -32,12 +55,16 @@ done
if [[ -n "$MISSING" ]]; then if [[ -n "$MISSING" ]]; then
ECHO_WARN "Folgende Pakete müssen nachinstalliert werden:" ECHO_WARN "Folgende Pakete müssen nachinstalliert werden:"
echo " sudo apt update && sudo apt install -y$MISSING" echo " sudo apt update && sudo apt install -y$MISSING"
read -rp " Pakete jetzt installieren? [j/N] " ans if ! $DRY_RUN; then
if [[ "$ans" =~ ^[Jj]$ ]]; then read -rp " Pakete jetzt installieren? [j/N] " ans
sudo apt update && sudo apt install -y $MISSING if [[ "$ans" =~ ^[Jj]$ ]]; then
sudo apt update && sudo apt install -y $MISSING
else
echo "Abbruch. Bitte installiere:$MISSING"
exit 1
fi
else else
echo "Abbruch. Bitte installiere:$MISSING" ECHO_DRY "würde fragen: Pakete jetzt installieren?"
exit 1
fi fi
fi fi
@@ -46,25 +73,29 @@ ECHO_STEP "2/7 Erstelle Plugin-Verzeichnis"
if [[ -d "$PLUGIN_DEST" ]]; then if [[ -d "$PLUGIN_DEST" ]]; then
ECHO_WARN "Verzeichnis existiert bereits: $PLUGIN_DEST" ECHO_WARN "Verzeichnis existiert bereits: $PLUGIN_DEST"
read -rp " Überschreiben? [j/N] " ans if ! $DRY_RUN; then
if [[ "$ans" =~ ^[Jj]$ ]]; then read -rp " Überschreiben? [j/N] " ans
rm -rf "$PLUGIN_DEST" if [[ "$ans" =~ ^[Jj]$ ]]; then
rm -rf "$PLUGIN_DEST"
else
echo "Abbruch."
exit 1
fi
else else
echo "Abbruch." ECHO_DRY "würde fragen: Verzeichnis überschreiben?"
exit 1
fi fi
fi fi
mkdir -p "$PLUGIN_DEST" run_or_simulate "Verzeichnis anlegen: $PLUGIN_DEST" mkdir -p "$PLUGIN_DEST"
ECHO_OK "Verzeichnis angelegt: $PLUGIN_DEST" $DRY_RUN || ECHO_OK "Verzeichnis angelegt: $PLUGIN_DEST"
# ── Schritt 3: Dateien kopieren ── # ── Schritt 3: Dateien kopieren ──
ECHO_STEP "3/7 Kopiere Plugin-Dateien" ECHO_STEP "3/7 Kopiere Plugin-Dateien"
for f in plugin.yaml __init__.py adapter.py; do for f in plugin.yaml __init__.py adapter.py; do
if [[ -f "$SCRIPT_DIR/$f" ]]; then if [[ -f "$SCRIPT_DIR/$f" ]]; then
cp "$SCRIPT_DIR/$f" "$PLUGIN_DEST/" run_or_simulate "$f$PLUGIN_DEST/$f" cp "$SCRIPT_DIR/$f" "$PLUGIN_DEST/"
ECHO_OK "$f kopiert" $DRY_RUN || ECHO_OK "$f kopiert"
else else
ECHO_ERR "$f nicht im aktuellen Verzeichnis gefunden" ECHO_ERR "$f nicht im aktuellen Verzeichnis gefunden"
exit 1 exit 1
@@ -74,17 +105,28 @@ done
# ── Schritt 4: Konfiguration erfragen ── # ── Schritt 4: Konfiguration erfragen ──
ECHO_STEP "4/7 Konfiguration" ECHO_STEP "4/7 Konfiguration"
read -rp " Rocket.Chat Basis-URL (z.B. https://chat.example.com): " RC_URL if $DRY_RUN; then
[[ -z "$RC_URL" ]] && { ECHO_ERR "URL darf nicht leer sein"; exit 1; } echo " [DRY-RUN] Beispielwerte werden verwendet"
RC_URL="https://chat.example.com"
RC_USER="bernd"
RC_PASS="geheim"
RC_ROOM="#ki-assistent"
ECHO_DRY "URL = $RC_URL"
ECHO_DRY "User = $RC_USER"
ECHO_DRY "Raum = $RC_ROOM"
else
read -rp " Rocket.Chat Basis-URL (z.B. https://chat.example.com): " RC_URL
[[ -z "$RC_URL" ]] && { ECHO_ERR "URL darf nicht leer sein"; exit 1; }
read -rp " Rocket.Chat Benutzername: " RC_USER read -rp " Rocket.Chat Benutzername: " RC_USER
[[ -z "$RC_USER" ]] && { ECHO_ERR "Benutzername darf nicht leer sein"; exit 1; } [[ -z "$RC_USER" ]] && { ECHO_ERR "Benutzername darf nicht leer sein"; exit 1; }
read -rsp " Rocket.Chat Passwort: " RC_PASS read -rsp " Rocket.Chat Passwort: " RC_PASS
echo echo
[[ -z "$RC_PASS" ]] && { ECHO_ERR "Passwort darf nicht leer sein"; exit 1; } [[ -z "$RC_PASS" ]] && { ECHO_ERR "Passwort darf nicht leer sein"; exit 1; }
read -rp " Standard-Raumname (z.B. #ki-assistent) [optional]: " RC_ROOM read -rp " Standard-Raumname (z.B. #ki-assistent) [optional]: " RC_ROOM
fi
# ── Schritt 5: Verbindungstest ── # ── Schritt 5: Verbindungstest ──
ECHO_STEP "5/7 Teste Verbindung zu Rocket.Chat" ECHO_STEP "5/7 Teste Verbindung zu Rocket.Chat"
@@ -97,9 +139,13 @@ if [[ -z "$LOGIN_RESP" ]] || ! echo "$LOGIN_RESP" | grep -q '"status":"success"'
ECHO_ERR "Login fehlgeschlagen" ECHO_ERR "Login fehlgeschlagen"
echo " URL : $RC_URL" echo " URL : $RC_URL"
echo " User: $RC_USER" echo " User: $RC_USER"
read -rp " Parameter bearbeiten? [j/N] " ans if ! $DRY_RUN; then
if [[ "$ans" =~ ^[Jj]$ ]]; then read -rp " Parameter bearbeiten? [j/N] " ans
exec "$0" # Neustart if [[ "$ans" =~ ^[Jj]$ ]]; then
exec "$0"
fi
else
ECHO_DRY "würde fragen: Parameter bearbeiten?"
fi fi
exit 1 exit 1
fi fi
@@ -115,7 +161,7 @@ if [[ -n "$RC_ROOM" ]]; then
ROOM_QUERY="${RC_ROOM/#\#}" ROOM_QUERY="${RC_ROOM/#\#}"
ROOM_RESP=$(curl -s -H "X-Auth-Token: $AUTH_TOKEN" -H "X-User-Id: $USER_ID" \ ROOM_RESP=$(curl -s -H "X-Auth-Token: $AUTH_TOKEN" -H "X-User-Id: $USER_ID" \
"${RC_URL%/}/api/v1/rooms.info?roomName=$ROOM_QUERY" 2>/dev/null) || true "${RC_URL%/}/api/v1/rooms.info?roomName=$ROOM_QUERY" 2>/dev/null) || true
if echo "$ROOM_RESP" | grep -q '"success":true'; then if echo "$ROOM_RESP" | grep -q '"success":true'; then
ROOM_ID=$(echo "$ROOM_RESP" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['room']['_id'])") ROOM_ID=$(echo "$ROOM_RESP" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['room']['_id'])")
ECHO_OK "Raum gefunden: #$ROOM_QUERY (RoomID: $ROOM_ID)" ECHO_OK "Raum gefunden: #$ROOM_QUERY (RoomID: $ROOM_ID)"
@@ -128,23 +174,27 @@ fi
ECHO_STEP "6/7 Schreibe Konfiguration" ECHO_STEP "6/7 Schreibe Konfiguration"
ENV_FILE="$HERMES_HOME/.env" ENV_FILE="$HERMES_HOME/.env"
mkdir -p "$HERMES_HOME" run_or_simulate "Verzeichnis erstellen: $HERMES_HOME" mkdir -p "$HERMES_HOME"
touch "$ENV_FILE" run_or_simulate "Env-Datei berühren: $ENV_FILE" touch "$ENV_FILE"
# Alte Einträge entfernen # Alte Einträge entfernen
sed -i '/^ROCKETCHAT_/d' "$ENV_FILE" 2>/dev/null || true if ! $DRY_RUN; then
sed -i '/^ROCKETCHAT_/d' "$ENV_FILE" 2>/dev/null || true
fi
{ run_or_simulate "Env-Einträge in $ENV_FILE schreiben" bash -c "
echo "" cat >> '$ENV_FILE' <<'INNEREOF'
echo "# Rocket.Chat Plugin — generiert von install.sh am $(date +%Y-%m-%d)"
echo "export ROCKETCHAT_BASE_URL=\"$RC_URL\""
echo "export ROCKETCHAT_USER=\"$RC_USER\""
echo "export ROCKETCHAT_PASSWORD=\"$RC_PASS\""
[[ -n "$ROOM_ID" ]] && echo "export ROCKETCHAT_ROOM_ID=\"$ROOM_ID\""
echo "export ROCKETCHAT_ALLOW_ALL_USERS=\"false\""
} >> "$ENV_FILE"
ECHO_OK "~/.hermes/.env aktualisiert" # Rocket.Chat Plugin — generiert von install.sh am $(date +%Y-%m-%d)
export ROCKETCHAT_BASE_URL=\"$RC_URL\"
export ROCKETCHAT_USER=\"$RC_USER\"
export ROCKETCHAT_PASSWORD=\"$RC_PASS\"
export ROCKETCHAT_ALLOW_ALL_USERS=\"false\"
INNEREOF
[[ -n '$ROOM_ID' ]] && echo 'export ROCKETCHAT_ROOM_ID=\"$ROOM_ID\"' >> '$ENV_FILE'
"
$DRY_RUN || ECHO_OK "~/.hermes/.env aktualisiert"
# Optional: config.yaml Eintrag anzeigen # Optional: config.yaml Eintrag anzeigen
ECHO_INFO "Falls du config.yaml bevorzugst, füge Folgendes hinzu:" ECHO_INFO "Falls du config.yaml bevorzugst, füge Folgendes hinzu:"
@@ -165,22 +215,32 @@ EOF
# ── Schritt 7: Hermes Gateway Neustart ── # ── Schritt 7: Hermes Gateway Neustart ──
ECHO_STEP "7/7 Hermes Gateway Neustart" ECHO_STEP "7/7 Hermes Gateway Neustart"
if command -v hermes &>/dev/null; then if $DRY_RUN; then
# Versuche Gateway sauber neu zu starten ECHO_DRY "würde hermes gateway stop ausführen (falls verfügbar)"
hermes gateway stop 2>/dev/null || true ECHO_DRY "würde Hinweis ausgeben: hermes gateway start"
sleep 1
ECHO_OK "Hermes Gateway gestoppt"
echo ""
echo " Starte neu mit:"
echo " hermes gateway start"
echo ""
else else
ECHO_WARN "'hermes' Befehl nicht im PATH gefunden" if command -v hermes &>/dev/null; then
echo " Bitte starte Hermes Gateway manuell:" hermes gateway stop 2>/dev/null || true
echo " hermes gateway start" sleep 1
ECHO_OK "Hermes Gateway gestoppt"
echo ""
echo " Starte neu mit:"
echo " hermes gateway start"
echo ""
else
ECHO_WARN "'hermes' Befehl nicht im PATH gefunden"
echo " Bitte starte Hermes Gateway manuell:"
echo " hermes gateway start"
fi
fi fi
ECHO_STEP "✨ Fertig!" if $DRY_RUN; then
ECHO_OK "Plugin installiert unter: $PLUGIN_DEST" ECHO_STEP "🔍 DRY-RUN BEENDET"
ECHO_INFO "Env-Variablen geladen in: $ENV_FILE" ECHO_INFO "Es wurde NICHTS verändert."
ECHO_INFO "Rocket.Chat Plugin ist bereit." ECHO_INFO "Starte ohne --dry-run für echte Installation."
else
ECHO_STEP "✨ Fertig!"
ECHO_OK "Plugin installiert unter: $PLUGIN_DEST"
ECHO_INFO "Env-Variablen geladen in: $ENV_FILE"
ECHO_INFO "Rocket.Chat Plugin ist bereit."
fi