Create update-custom.sh
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
trap 'echo -e "\033[1;31m[ERROR]\033[0m Ошибка в строке $LINENO"; exit 1' ERR
|
||||
|
||||
log() { echo -e "\033[1;32m[INFO]\033[0m $1"; }
|
||||
warn() { echo -e "\033[1;33m[WARN]\033[0m $1"; }
|
||||
die() { echo -e "\033[1;31m[ERROR]\033[0m $1"; exit 1; }
|
||||
|
||||
usage() {
|
||||
cat <<'EOF'
|
||||
Использование:
|
||||
update-custom.sh -r <repo_url> -b <branch> [-p <project_dir>] [-s <source_dir>]
|
||||
|
||||
Параметры:
|
||||
-r Git URL вашего форка (обязательно), например:
|
||||
https://github.com/<user>/3dp-manager.git
|
||||
-b Ветка с вашими правками (обязательно), например:
|
||||
dp-fix
|
||||
-p Папка установленного 3dp-manager (по умолчанию /opt/3dp-manager)
|
||||
-s Папка исходников для сборки (по умолчанию /opt/3dp-manager-src)
|
||||
-h Показать эту справку
|
||||
|
||||
Пример:
|
||||
./update-custom.sh -r https://github.com/me/3dp-manager.git -b dp-fix
|
||||
EOF
|
||||
}
|
||||
|
||||
need_root() {
|
||||
[[ $EUID -eq 0 ]] || die "Запускать только от root"
|
||||
}
|
||||
|
||||
REPO_URL=""
|
||||
BRANCH=""
|
||||
PROJECT_DIR="/opt/3dp-manager"
|
||||
SOURCE_DIR="/opt/3dp-manager-src"
|
||||
|
||||
while getopts ":r:b:p:s:h" opt; do
|
||||
case "$opt" in
|
||||
r) REPO_URL="$OPTARG" ;;
|
||||
b) BRANCH="$OPTARG" ;;
|
||||
p) PROJECT_DIR="$OPTARG" ;;
|
||||
s) SOURCE_DIR="$OPTARG" ;;
|
||||
h)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
:)
|
||||
die "Параметр -$OPTARG требует значение"
|
||||
;;
|
||||
\?)
|
||||
die "Неизвестный параметр: -$OPTARG"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
[[ -n "$REPO_URL" ]] || { usage; die "Укажите -r <repo_url>"; }
|
||||
[[ -n "$BRANCH" ]] || { usage; die "Укажите -b <branch>"; }
|
||||
|
||||
need_root
|
||||
|
||||
[[ -d "$PROJECT_DIR" ]] || die "Папка проекта не найдена: $PROJECT_DIR"
|
||||
[[ -f "$PROJECT_DIR/docker-compose.yml" ]] || die "Не найден docker-compose.yml в $PROJECT_DIR"
|
||||
|
||||
command -v git >/dev/null 2>&1 || die "git не установлен"
|
||||
command -v docker >/dev/null 2>&1 || die "docker не установлен"
|
||||
docker compose version >/dev/null 2>&1 || die "docker compose v2 недоступен"
|
||||
|
||||
log "Подготовка исходников в $SOURCE_DIR"
|
||||
if [[ ! -d "$SOURCE_DIR/.git" ]]; then
|
||||
if [[ -e "$SOURCE_DIR" ]]; then
|
||||
die "Путь $SOURCE_DIR существует, но это не git-репозиторий. Укажите другой -s или подготовьте папку вручную."
|
||||
fi
|
||||
git clone --single-branch --branch "$BRANCH" "$REPO_URL" "$SOURCE_DIR"
|
||||
else
|
||||
cd "$SOURCE_DIR"
|
||||
git remote set-url origin "$REPO_URL"
|
||||
git fetch origin "$BRANCH"
|
||||
|
||||
if git show-ref --verify --quiet "refs/heads/$BRANCH"; then
|
||||
git checkout "$BRANCH"
|
||||
else
|
||||
git checkout -b "$BRANCH" --track "origin/$BRANCH"
|
||||
fi
|
||||
|
||||
# Обновляем только fast-forward, чтобы не переписывать локальные ручные правки.
|
||||
git merge --ff-only "origin/$BRANCH" || die "Не удалось fast-forward merge. Проверьте локальные изменения в $SOURCE_DIR."
|
||||
fi
|
||||
|
||||
COMPOSE_OVERRIDE="$PROJECT_DIR/docker-compose.custom.yml"
|
||||
cat > "$COMPOSE_OVERRIDE" <<EOF
|
||||
services:
|
||||
backend:
|
||||
build: $SOURCE_DIR/server
|
||||
image: 3dp-manager-server:custom
|
||||
frontend:
|
||||
build: $SOURCE_DIR/client
|
||||
image: 3dp-manager-client:custom
|
||||
EOF
|
||||
|
||||
log "Сборка custom-образов backend/frontend"
|
||||
cd "$PROJECT_DIR"
|
||||
docker compose -f docker-compose.yml -f docker-compose.custom.yml build backend frontend
|
||||
|
||||
log "Перезапуск контейнеров с custom-образами"
|
||||
docker compose -f docker-compose.yml -f docker-compose.custom.yml up -d --remove-orphans backend frontend
|
||||
|
||||
log "Проверка статуса контейнеров"
|
||||
docker compose -f docker-compose.yml -f docker-compose.custom.yml ps
|
||||
|
||||
if docker compose -f docker-compose.yml -f docker-compose.custom.yml exec -T backend sh -lc "command -v RealiTLScanner-linux-64 >/dev/null"; then
|
||||
log "Scanner binary найден в backend-контейнере"
|
||||
else
|
||||
warn "Scanner binary не найден в backend-контейнере"
|
||||
fi
|
||||
|
||||
log "Готово: VPS обновлен на ваш fork/branch"
|
||||
Reference in New Issue
Block a user