Some checks failed
Deploy to Production / deploy (push) Failing after 0s
Configure deployment workflows, SSH settings, and environment variables for the SkillGuard project. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 0d01f99a-ea6a-447d-82fd-311715434a39 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: f938974b-4b4e-47df-8a70-53fbb1c1de6e Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/e32d2b99-1721-47dd-833c-98b372f48008/0d01f99a-ea6a-447d-82fd-311715434a39/b33cDqP Replit-Helium-Checkpoint-Created: true
106 lines
3.4 KiB
Bash
Executable file
106 lines
3.4 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# =============================================================================
|
|
# init.sh
|
|
# Interaktive Einrichtung eines Deployment-Targets.
|
|
# Fragt alle relevanten Werte ab (jeweils mit Beispiel) und speichert sie unter
|
|
# targets/<target>.env. Danach koennen die Deploy-Scripts mit dem Target-Namen
|
|
# aufgerufen werden (z. B. ./deploy-full-release.sh <target>).
|
|
# =============================================================================
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
TARGETS_DIR="${SCRIPT_DIR}/targets"
|
|
|
|
echo "==================================================="
|
|
echo " Hetzner-Deployment: Target einrichten (init.sh)"
|
|
echo "==================================================="
|
|
echo ""
|
|
echo "Die Eingaben werden gespeichert unter:"
|
|
echo " ${TARGETS_DIR}/<target>.env"
|
|
echo ""
|
|
|
|
if [ ! -t 0 ]; then
|
|
echo "FEHLER: Kein interaktives Terminal. init.sh muss manuell ausgefuehrt werden."
|
|
exit 1
|
|
fi
|
|
|
|
# --- Hilfsfunktionen ---
|
|
|
|
# Leerzeichen am Anfang/Ende entfernen.
|
|
trim() {
|
|
printf '%s' "$1" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'
|
|
}
|
|
|
|
# Wert fuer sicheres Schreiben in single-quotes escapen: jedes ' wird zu '\''.
|
|
# So kann der spaeter via 'source' geladene Wert keine Shell-Befehle ausloesen.
|
|
esc() {
|
|
printf "%s" "$1" | sed "s/'/'\\\\''/g"
|
|
}
|
|
|
|
# Pflichtfeld abfragen (mit Beispiel im Prompt); leere Eingaben werden abgelehnt.
|
|
# $1 = Beschreibung, $2 = Beispiel, $3 = Name der Zielvariablen.
|
|
ask() {
|
|
local prompt="$1" example="$2" __out="$3" value=""
|
|
while true; do
|
|
read -r -p "${prompt} (z. B. ${example}): " value
|
|
value="$(trim "$value")"
|
|
if [ -n "$value" ]; then
|
|
printf -v "$__out" '%s' "$value"
|
|
break
|
|
fi
|
|
echo " -> Eingabe darf nicht leer sein."
|
|
done
|
|
}
|
|
|
|
mkdir -p "${TARGETS_DIR}"
|
|
|
|
# --- Target-Name ---
|
|
ask "Target-Name" "kwali8-landingpage" TARGET_NAME
|
|
if ! printf '%s' "$TARGET_NAME" | grep -Eq '^[A-Za-z0-9._-]+$'; then
|
|
echo "FEHLER: Target-Name darf nur Buchstaben, Zahlen sowie '.', '_' und '-' enthalten."
|
|
exit 1
|
|
fi
|
|
|
|
TARGET_FILE="${TARGETS_DIR}/${TARGET_NAME}.env"
|
|
if [ -f "${TARGET_FILE}" ]; then
|
|
echo ""
|
|
echo "Hinweis: Target '${TARGET_NAME}' existiert bereits (${TARGET_FILE})."
|
|
read -r -p "Ueberschreiben? [j/N]: " answer
|
|
case "$(printf '%s' "$answer" | tr '[:upper:]' '[:lower:]')" in
|
|
j|ja|y|yes) ;;
|
|
*) echo "Abgebrochen. Es wurde nichts geaendert."; exit 0 ;;
|
|
esac
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# --- Restliche Werte ---
|
|
ask "SSH-Host (Forgejo-Server)" "forgejo-landing.kwali8.de" SSH_HOST
|
|
ask "SFTP-Host (Zielserver)" "forgejo-landing.kwali8.de" SFTP_HOST
|
|
ask "Datenbank-Name" "helium" DB_NAME
|
|
ask "Git-Remote-Name" "kwali8-landingpage" GIT_REMOTE
|
|
ask "Domain (Zielserver)" "kwali8.de" DOMAIN
|
|
|
|
# --- Speichern ---
|
|
# Werte single-quoted und escaped schreiben, damit das spaetere 'source'
|
|
# in ssh_context.sh keine Command-Substitution o. ae. ausfuehren kann.
|
|
umask 077
|
|
cat > "${TARGET_FILE}" <<EOF
|
|
# Target-Konfiguration fuer '$(esc "$TARGET_NAME")'.
|
|
# Erstellt von init.sh am $(date '+%Y-%m-%d %H:%M:%S').
|
|
SSH_HOST='$(esc "$SSH_HOST")'
|
|
SFTP_HOST='$(esc "$SFTP_HOST")'
|
|
DB_NAME='$(esc "$DB_NAME")'
|
|
GIT_REMOTE='$(esc "$GIT_REMOTE")'
|
|
DOMAIN='$(esc "$DOMAIN")'
|
|
EOF
|
|
|
|
echo ""
|
|
echo "Gespeichert: ${TARGET_FILE}"
|
|
echo ""
|
|
echo "Naechste Schritte:"
|
|
echo " - Git-Remote '${GIT_REMOTE}' anlegen, falls noch nicht vorhanden."
|
|
echo " - Deployment starten, z. B.:"
|
|
echo " ./deploy-full-release.sh ${TARGET_NAME}"
|
|
echo ""
|