#!/bin/bash # Публикация сборки игры на nginx (LXC 152, game-web). # # publish-release.sh <тег> [--activate] # # Что делает: # 1. тянет образ images.binom.pw/fun/game-front2:<тег> из реестра (skopeo copy в dir); # 2. распаковывает статику в /opt/game/releases/<тег>/; # 3. без --activate оставляет активной текущую сборку (корень не меняется); # с --activate переключает симлинк /opt/game/current на новую версию; # 4. печатает проверку. # # Итог: https://smart-updown.binom.pw/ -> активная сборка # https://smart-updown.binom.pw/<тег>/ -> конкретная сборка set -euo pipefail TAG="${1:?использование: publish-release.sh <тег> [--activate]}" ACTIVATE="${2:-}" REG="images.binom.pw/fun/game-front2" CREDS="subochev:Drovosek319" IMG="/tmp/gameimg-${TAG}" echo "=== 1/4 тяну образ ${REG}:${TAG} ===" rm -rf "$IMG" skopeo copy --src-creds "$CREDS" "docker://${REG}:${TAG}" "dir:${IMG}" # креды не нужны при распаковке chmod -R a+rX "$IMG" echo "=== 2/4 распаковываю статику в /opt/game/releases/${TAG} ===" /opt/game/tools/unpack-release.sh "$TAG" "$IMG" if [ "$ACTIVATE" = "--activate" ]; then echo "=== 3/4 переключаю активную сборку на ${TAG} ===" PREV="$(readlink -f /opt/game/current || echo none)" rm -f /opt/game/current ln -s "/opt/game/releases/${TAG}" /opt/game/current echo "было: $PREV" echo "стало: $(readlink -f /opt/game/current)" else echo "=== 3/4 активную сборку НЕ трогаю (нет --activate) ===" echo "активна: $(readlink -f /opt/game/current)" fi echo "=== 4/4 проверка ===" systemctl reload nginx for u in "/" "/${TAG}/" "/${TAG}/index.html" "/${TAG}/Build/WebGL.framework.js"; do printf ' %-42s %s\n' "$u" "$(curl -s -o /dev/null -w '%{http_code}' "http://127.0.0.1${u}")" done echo "готово: сборка ${TAG}" rm -rf "$IMG"