feat: add --dry-run mode to install.sh + update Gitea description
This commit is contained in:
@@ -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
|
||||||
|
|||||||
+94
-34
@@ -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,6 +55,7 @@ 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"
|
||||||
|
if ! $DRY_RUN; then
|
||||||
read -rp " Pakete jetzt installieren? [j/N] " ans
|
read -rp " Pakete jetzt installieren? [j/N] " ans
|
||||||
if [[ "$ans" =~ ^[Jj]$ ]]; then
|
if [[ "$ans" =~ ^[Jj]$ ]]; then
|
||||||
sudo apt update && sudo apt install -y $MISSING
|
sudo apt update && sudo apt install -y $MISSING
|
||||||
@@ -39,6 +63,9 @@ if [[ -n "$MISSING" ]]; then
|
|||||||
echo "Abbruch. Bitte installiere:$MISSING"
|
echo "Abbruch. Bitte installiere:$MISSING"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
ECHO_DRY "würde fragen: Pakete jetzt installieren?"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ── Schritt 2: Zielverzeichnis anlegen ──
|
# ── Schritt 2: Zielverzeichnis anlegen ──
|
||||||
@@ -46,6 +73,7 @@ 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"
|
||||||
|
if ! $DRY_RUN; then
|
||||||
read -rp " Überschreiben? [j/N] " ans
|
read -rp " Überschreiben? [j/N] " ans
|
||||||
if [[ "$ans" =~ ^[Jj]$ ]]; then
|
if [[ "$ans" =~ ^[Jj]$ ]]; then
|
||||||
rm -rf "$PLUGIN_DEST"
|
rm -rf "$PLUGIN_DEST"
|
||||||
@@ -53,18 +81,21 @@ if [[ -d "$PLUGIN_DEST" ]]; then
|
|||||||
echo "Abbruch."
|
echo "Abbruch."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
ECHO_DRY "würde fragen: Verzeichnis überschreiben?"
|
||||||
|
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"
|
||||||
|
if ! $DRY_RUN; then
|
||||||
read -rp " Parameter bearbeiten? [j/N] " ans
|
read -rp " Parameter bearbeiten? [j/N] " ans
|
||||||
if [[ "$ans" =~ ^[Jj]$ ]]; then
|
if [[ "$ans" =~ ^[Jj]$ ]]; then
|
||||||
exec "$0" # Neustart
|
exec "$0"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
ECHO_DRY "würde fragen: Parameter bearbeiten?"
|
||||||
fi
|
fi
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -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,8 +215,11 @@ 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)"
|
||||||
|
ECHO_DRY "würde Hinweis ausgeben: hermes gateway start"
|
||||||
|
else
|
||||||
|
if command -v hermes &>/dev/null; then
|
||||||
hermes gateway stop 2>/dev/null || true
|
hermes gateway stop 2>/dev/null || true
|
||||||
sleep 1
|
sleep 1
|
||||||
ECHO_OK "Hermes Gateway gestoppt"
|
ECHO_OK "Hermes Gateway gestoppt"
|
||||||
@@ -174,13 +227,20 @@ if command -v hermes &>/dev/null; then
|
|||||||
echo " Starte neu mit:"
|
echo " Starte neu mit:"
|
||||||
echo " hermes gateway start"
|
echo " hermes gateway start"
|
||||||
echo ""
|
echo ""
|
||||||
else
|
else
|
||||||
ECHO_WARN "'hermes' Befehl nicht im PATH gefunden"
|
ECHO_WARN "'hermes' Befehl nicht im PATH gefunden"
|
||||||
echo " Bitte starte Hermes Gateway manuell:"
|
echo " Bitte starte Hermes Gateway manuell:"
|
||||||
echo " hermes gateway start"
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user