#!/usr/bin/env bash # Скачивает сборку из GitHub Release приватного репозитория и раскатывает её # поверх продакшен-статики кабинета на VPS, с автоматическим бэкапом. # # Использование: # ./deploy-cabinet.sh — последний релиз # ./deploy-cabinet.sh v1.63.0 — конкретный релиз (откат на версию) # # Требует gh CLI, авторизованный токеном с правом Contents: Read-only на этот # репозиторий. Токен лежит отдельно от скрипта — см. TOKEN_FILE ниже. # # Откат вручную при проблемах: # rsync -a --delete "$DEST.bak/" "$DEST/" set -euo pipefail REPO="chillpadclub/bedolaga-cabinet" DEST="/home/etkr4k/remnawave-bedolaga-telegram-bot/cabinet-dist" ASSET="cabinet-dist.tar.gz" TOKEN_FILE="$HOME/.cabinet-deploy-token" TAG="${1:-}" if [ ! -f "$TOKEN_FILE" ]; then echo "Не найден файл токена: $TOKEN_FILE" >&2 echo "Создайте его: echo '<токен>' > $TOKEN_FILE && chmod 600 $TOKEN_FILE" >&2 exit 1 fi export GH_TOKEN GH_TOKEN="$(cat "$TOKEN_FILE")" TMP="$(mktemp -d)" trap 'rm -rf "$TMP"' EXIT if [ -z "$TAG" ]; then echo "Скачиваю последний релиз из $REPO..." gh release download --repo "$REPO" --pattern "$ASSET" --dir "$TMP" --clobber else echo "Скачиваю релиз $TAG из $REPO..." gh release download "$TAG" --repo "$REPO" --pattern "$ASSET" --dir "$TMP" --clobber fi echo "Распаковываю..." mkdir -p "$TMP/dist" tar -xzf "$TMP/$ASSET" -C "$TMP/dist" echo "Бэкап текущей статики в $DEST.bak..." rm -rf "$DEST.bak" cp -r "$DEST" "$DEST.bak" echo "Разворачиваю новую сборку в $DEST..." rsync -a --delete --exclude '50x.html' "$TMP/dist/" "$DEST/" echo "Готово. Откат при проблемах:" echo " rsync -a --delete '$DEST.bak/' '$DEST/'"