From ad77d28f6bec07b29c33a1887bf550ffdd435dda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80?= <78488229+viktor138irk@users.noreply.github.com> Date: Thu, 7 May 2026 01:25:25 +0900 Subject: [PATCH] Add GitHub update executor --- scripts/apply_github_update.sh | 82 ++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 scripts/apply_github_update.sh diff --git a/scripts/apply_github_update.sh b/scripts/apply_github_update.sh new file mode 100644 index 0000000..9a8e582 --- /dev/null +++ b/scripts/apply_github_update.sh @@ -0,0 +1,82 @@ +#!/usr/bin/env bash +set -u + +SOURCE_DIR="${VIRTUALITY_SOURCE_DIR:-/opt/virtuality/source}" +STATE_DIR="/var/lib/virtuality/update" +STATE_FILE="${STATE_DIR}/state.json" +LOG_FILE="/var/log/virtuality/update.log" +REMOTE="${VIRTUALITY_UPDATE_REMOTE:-origin}" +BRANCH="${VIRTUALITY_UPDATE_BRANCH:-main}" + +mkdir -p "$STATE_DIR" "$(dirname "$LOG_FILE")" + +now() { date '+%Y-%m-%d %H:%M:%S'; } +json_escape() { python3 -c 'import json,sys; print(json.dumps(sys.stdin.read())[1:-1])'; } +write_state() { + local status="$1" + local message="$2" + local escaped + escaped="$(printf '%s' "$message" | json_escape)" + cat > "$STATE_FILE" <> "$LOG_FILE" 2>&1 + local code=$? + if [ $code -ne 0 ]; then + log "ERROR: command failed with exit code $code: $*" + write_state "error" "Команда завершилась с ошибкой: $*" + exit $code + fi +} + +STARTED_AT="$(now)" +write_state "running" "Обновление запущено" +log "============================================================" +log "Virtuality GitHub update started" +log "source: $SOURCE_DIR" +log "remote: $REMOTE" +log "branch: $BRANCH" + +if [ ! -d "$SOURCE_DIR/.git" ]; then + log "ERROR: git repository not found: $SOURCE_DIR" + write_state "error" "Не найден git-репозиторий: $SOURCE_DIR" + exit 1 +fi + +cd "$SOURCE_DIR" || exit 1 + +BEFORE_COMMIT="$(git rev-parse HEAD 2>/dev/null || true)" +BEFORE_VERSION="$(cat VERSION 2>/dev/null || echo unknown)" +log "before commit: $BEFORE_COMMIT" +log "before version: $BEFORE_VERSION" + +write_state "running" "Получаем изменения из GitHub" +run_step git fetch "$REMOTE" "$BRANCH" + +write_state "running" "Применяем git pull" +run_step git pull --ff-only "$REMOTE" "$BRANCH" + +AFTER_COMMIT="$(git rev-parse HEAD 2>/dev/null || true)" +AFTER_VERSION="$(cat VERSION 2>/dev/null || echo unknown)" +log "after commit: $AFTER_COMMIT" +log "after version: $AFTER_VERSION" + +write_state "running" "Запускаем установщик web-панели" +run_step bash scripts/install_web_panel.sh + +write_state "running" "Перезапускаем virtuality-web" +run_step systemctl restart virtuality-web + +log "Virtuality GitHub update finished successfully" +write_state "success" "Обновление завершено: ${BEFORE_VERSION} → ${AFTER_VERSION}" +exit 0