#!/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 на новую версию # И пишет /etc/nginx/game-active.inc (редирект корня на /<тег>/); # 4. печатает проверку. # # Итог: https://smart-updown.binom.pw/ -> 302 на активную сборку # 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}" ACTIVE_INC="/etc/nginx/game-active.inc" case "$TAG" in ''|*[!0-9]*) echo "тег должен быть числом (номер сборки), получено: $TAG" >&2; exit 1 ;; esac 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 # корень редиректим на /<тег>/: тогда ассеты получают версионированный URL # и immutable-кэш перестаёт «прилипать» между релизами (мина из ADR-010). cat > "$ACTIVE_INC" < /${TAG}/ (${ACTIVE_INC})" else echo "=== 3/4 активную сборку НЕ трогаю (нет --activate) ===" echo "активна: $(readlink -f /opt/game/current)" fi echo "=== 4/4 проверка ===" nginx -t 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"