diff --git a/README.md b/README.md index 212708d..ab6dddf 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,12 @@ cd Hermes_rocket.chat_Plugin ./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: - 🔵 Prüfe Voraussetzungen (curl, git, python3) - 🔵 Erstelle Plugin-Verzeichnis diff --git a/install.sh b/install.sh index 53b60fe..6236309 100755 --- a/install.sh +++ b/install.sh @@ -1,10 +1,21 @@ -/usr/bin/env bash +#!/usr/bin/env bash # install.sh # Rocket.Chat Plugin für Hermes Agent — Interaktives Setup # Voraussetzungen: bash, curl, git, python3 +# +# Nutzung: +# ./install.sh → Normale Installation +# ./install.sh --dry-run → Simulation (zeigt alles an, ändert nichts) 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)" PLUGIN_NAME="rocketchat" HERMES_HOME="${HERMES_HOME:-$HOME/.hermes}" @@ -15,6 +26,18 @@ ECHO_ERR() { echo -e " ❌ $1"; } ECHO_INFO() { echo -e " ℹ️ $1"; } ECHO_STEP() { echo -e "\n🔵 $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 ── ECHO_STEP "1/7 Prüfe Voraussetzungen" @@ -32,12 +55,16 @@ done if [[ -n "$MISSING" ]]; then ECHO_WARN "Folgende Pakete müssen nachinstalliert werden:" echo " sudo apt update && sudo apt install -y$MISSING" - read -rp " Pakete jetzt installieren? [j/N] " ans - if [[ "$ans" =~ ^[Jj]$ ]]; then - sudo apt update && sudo apt install -y $MISSING + if ! $DRY_RUN; then + read -rp " Pakete jetzt installieren? [j/N] " ans + if [[ "$ans" =~ ^[Jj]$ ]]; then + sudo apt update && sudo apt install -y $MISSING + else + echo "Abbruch. Bitte installiere:$MISSING" + exit 1 + fi else - echo "Abbruch. Bitte installiere:$MISSING" - exit 1 + ECHO_DRY "würde fragen: Pakete jetzt installieren?" fi fi @@ -46,25 +73,29 @@ ECHO_STEP "2/7 Erstelle Plugin-Verzeichnis" if [[ -d "$PLUGIN_DEST" ]]; then ECHO_WARN "Verzeichnis existiert bereits: $PLUGIN_DEST" - read -rp " Überschreiben? [j/N] " ans - if [[ "$ans" =~ ^[Jj]$ ]]; then - rm -rf "$PLUGIN_DEST" + if ! $DRY_RUN; then + read -rp " Überschreiben? [j/N] " ans + if [[ "$ans" =~ ^[Jj]$ ]]; then + rm -rf "$PLUGIN_DEST" + else + echo "Abbruch." + exit 1 + fi else - echo "Abbruch." - exit 1 + ECHO_DRY "würde fragen: Verzeichnis überschreiben?" fi fi -mkdir -p "$PLUGIN_DEST" -ECHO_OK "Verzeichnis angelegt: $PLUGIN_DEST" +run_or_simulate "Verzeichnis anlegen: $PLUGIN_DEST" mkdir -p "$PLUGIN_DEST" +$DRY_RUN || ECHO_OK "Verzeichnis angelegt: $PLUGIN_DEST" # ── Schritt 3: Dateien kopieren ── ECHO_STEP "3/7 Kopiere Plugin-Dateien" for f in plugin.yaml __init__.py adapter.py; do if [[ -f "$SCRIPT_DIR/$f" ]]; then - cp "$SCRIPT_DIR/$f" "$PLUGIN_DEST/" - ECHO_OK "$f kopiert" + run_or_simulate "$f → $PLUGIN_DEST/$f" cp "$SCRIPT_DIR/$f" "$PLUGIN_DEST/" + $DRY_RUN || ECHO_OK "$f kopiert" else ECHO_ERR "$f nicht im aktuellen Verzeichnis gefunden" exit 1 @@ -74,17 +105,28 @@ done # ── Schritt 4: Konfiguration erfragen ── ECHO_STEP "4/7 Konfiguration" -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; } +if $DRY_RUN; then + 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 -[[ -z "$RC_USER" ]] && { ECHO_ERR "Benutzername darf nicht leer sein"; exit 1; } + read -rp " Rocket.Chat Benutzername: " RC_USER + [[ -z "$RC_USER" ]] && { ECHO_ERR "Benutzername darf nicht leer sein"; exit 1; } -read -rsp " Rocket.Chat Passwort: " RC_PASS -echo -[[ -z "$RC_PASS" ]] && { ECHO_ERR "Passwort darf nicht leer sein"; exit 1; } + read -rsp " Rocket.Chat Passwort: " RC_PASS + echo + [[ -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 ── 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 " URL : $RC_URL" echo " User: $RC_USER" - read -rp " Parameter bearbeiten? [j/N] " ans - if [[ "$ans" =~ ^[Jj]$ ]]; then - exec "$0" # Neustart + if ! $DRY_RUN; then + read -rp " Parameter bearbeiten? [j/N] " ans + if [[ "$ans" =~ ^[Jj]$ ]]; then + exec "$0" + fi + else + ECHO_DRY "würde fragen: Parameter bearbeiten?" fi exit 1 fi @@ -115,7 +161,7 @@ if [[ -n "$RC_ROOM" ]]; then ROOM_QUERY="${RC_ROOM/#\#}" 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 - + 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'])") ECHO_OK "Raum gefunden: #$ROOM_QUERY (RoomID: $ROOM_ID)" @@ -128,23 +174,27 @@ fi ECHO_STEP "6/7 Schreibe Konfiguration" ENV_FILE="$HERMES_HOME/.env" -mkdir -p "$HERMES_HOME" -touch "$ENV_FILE" +run_or_simulate "Verzeichnis erstellen: $HERMES_HOME" mkdir -p "$HERMES_HOME" +run_or_simulate "Env-Datei berühren: $ENV_FILE" touch "$ENV_FILE" # 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 -{ - echo "" - 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" +run_or_simulate "Env-Einträge in $ENV_FILE schreiben" bash -c " +cat >> '$ENV_FILE' <<'INNEREOF' -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 ECHO_INFO "Falls du config.yaml bevorzugst, füge Folgendes hinzu:" @@ -165,22 +215,32 @@ EOF # ── Schritt 7: Hermes Gateway Neustart ── ECHO_STEP "7/7 Hermes Gateway Neustart" -if command -v hermes &>/dev/null; then - # Versuche Gateway sauber neu zu starten - hermes gateway stop 2>/dev/null || true - sleep 1 - ECHO_OK "Hermes Gateway gestoppt" - echo "" - echo " Starte neu mit:" - echo " hermes gateway start" - echo "" +if $DRY_RUN; then + ECHO_DRY "würde hermes gateway stop ausführen (falls verfügbar)" + ECHO_DRY "würde Hinweis ausgeben: hermes gateway start" else - ECHO_WARN "'hermes' Befehl nicht im PATH gefunden" - echo " Bitte starte Hermes Gateway manuell:" - echo " hermes gateway start" + if command -v hermes &>/dev/null; then + hermes gateway stop 2>/dev/null || true + 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 -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." +if $DRY_RUN; then + ECHO_STEP "🔍 DRY-RUN BEENDET" + ECHO_INFO "Es wurde NICHTS verändert." + 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