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
130 lines
3.1 KiB
Bash
Executable file
130 lines
3.1 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# =============================================================================
|
|
# deploy-full-release.sh
|
|
# Fuehrt ein vollstaendiges Release durch: Datenbank-Dump + Code-Push.
|
|
# Die Passwort-Abfrage erfolgt einmalig zu Beginn.
|
|
#
|
|
# Verwendung: ./deploy-full-release.sh <target>
|
|
# Beispiel: ./deploy-full-release.sh pilot1
|
|
# =============================================================================
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
# --- Kontext laden ---
|
|
source "${SCRIPT_DIR}/ssh_context.sh" "$@"
|
|
|
|
# --- SSH (Key wird geladen, Passphrase einmalig abgefragt) ---
|
|
setup_ssh
|
|
|
|
echo ""
|
|
echo "========================================="
|
|
echo " Full Release: ${TARGET} (${DOMAIN})"
|
|
echo "========================================="
|
|
echo ""
|
|
|
|
# --- Phase 1: Datenbank ---
|
|
echo "--- Phase 1/2: Datenbank-Deployment ---"
|
|
echo ""
|
|
|
|
if [ -z "${DATABASE_URL:-}" ]; then
|
|
echo "FEHLER: DATABASE_URL ist nicht gesetzt."
|
|
exit 1
|
|
fi
|
|
|
|
BACKUP_DIR="/home/runner/workspace/backups"
|
|
TIMESTAMP=$(node -e "const d=new Date();console.log(d.toISOString().replace(/[-:]/g,'').replace('T','_').slice(0,15))")
|
|
DUMP_FILE="${BACKUP_DIR}/datadump_${TARGET}_${TIMESTAMP}.dump"
|
|
SFTP_TARGET="/uploads/datadump.dump"
|
|
|
|
mkdir -p "${BACKUP_DIR}"
|
|
|
|
echo "Starte Datenbank-Export..."
|
|
echo "Ziel: ${DUMP_FILE}"
|
|
|
|
pg_dump -Fc -d "$DATABASE_URL" -f "$DUMP_FILE" &
|
|
DUMP_PID=$!
|
|
|
|
while kill -0 "$DUMP_PID" 2>/dev/null; do
|
|
if [ -f "$DUMP_FILE" ]; then
|
|
SIZE=$(du -h "$DUMP_FILE" 2>/dev/null | cut -f1)
|
|
printf "\r Exportiert: %s ..." "$SIZE"
|
|
fi
|
|
sleep 3
|
|
done
|
|
|
|
wait "$DUMP_PID"
|
|
DUMP_EXIT=$?
|
|
|
|
echo ""
|
|
|
|
if [ $DUMP_EXIT -ne 0 ] || [ ! -f "$DUMP_FILE" ]; then
|
|
echo "FEHLER: Datenbank-Export fehlgeschlagen."
|
|
exit 1
|
|
fi
|
|
|
|
SIZE=$(du -h "$DUMP_FILE" | cut -f1)
|
|
echo "Export fertig: ${DUMP_FILE} (${SIZE})"
|
|
|
|
sync
|
|
|
|
echo "Uebertrage nach ${SFTP_HOST}:${SFTP_TARGET}..."
|
|
|
|
sftp -P "${SFTP_PORT}" -i "${KEY_PATH}" "replit-user@${SFTP_HOST}" <<EOF
|
|
put ${DUMP_FILE} ${SFTP_TARGET}
|
|
bye
|
|
EOF
|
|
|
|
SFTP_EXIT=$?
|
|
|
|
if [ $SFTP_EXIT -ne 0 ]; then
|
|
echo "FEHLER: SFTP-Upload fehlgeschlagen (Exit-Code: ${SFTP_EXIT})."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Pruefe Upload..."
|
|
REMOTE_CHECK=$(sftp -P "${SFTP_PORT}" -i "${KEY_PATH}" "replit-user@${SFTP_HOST}" <<EOF
|
|
ls -l ${SFTP_TARGET}
|
|
bye
|
|
EOF
|
|
2>&1)
|
|
|
|
if echo "$REMOTE_CHECK" | grep -q "datadump.dump"; then
|
|
echo "Upload erfolgreich."
|
|
else
|
|
echo "FEHLER: Datei wurde nicht auf dem Server gefunden."
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "--- Phase 1/2: Datenbank-Deployment abgeschlossen ---"
|
|
echo ""
|
|
|
|
# --- Phase 2: Code ---
|
|
echo "--- Phase 2/2: Code-Deployment ---"
|
|
echo ""
|
|
|
|
echo "Pruefe Git-Remote '${GIT_REMOTE}'..."
|
|
if ! git remote get-url "${GIT_REMOTE}" &>/dev/null; then
|
|
echo "FEHLER: Git-Remote '${GIT_REMOTE}' existiert nicht."
|
|
git remote -v
|
|
exit 1
|
|
fi
|
|
|
|
echo "Starte Push: main -> ${GIT_REMOTE}..."
|
|
git push "${GIT_REMOTE}" main --force
|
|
|
|
PUSH_EXIT=$?
|
|
|
|
if [ $PUSH_EXIT -ne 0 ]; then
|
|
echo "FEHLER: Git-Push fehlgeschlagen (Exit-Code: ${PUSH_EXIT})."
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "--- Phase 2/2: Code-Deployment abgeschlossen ---"
|
|
echo ""
|
|
echo "========================================="
|
|
echo " Full Release fuer '${TARGET}' fertig"
|
|
echo "========================================="
|