Files
pump-game-ops/tools/proxmox-nginx/publish-release.sh
T
Porfiry 5087c67201 fix(nginx-152): корень редиректит на активную сборку — закрыта кэш-мина (ассеты Unity зовутся относительным путём)
- index.html: buildUrl="Build" -> без редиректа ассеты шли как /Build/WebGL.wasm (без номера сборки)
  под immutable 7д -> браузер неделю отдавал старую сборку
- publish-release.sh --activate пишет /etc/nginx/game-active.inc: return 302 /<N>/
- immutable сужен до путей с номером сборки; остальное no-store
- приёмка: / -> 302 /29/, браузер тянет /29/Build/* (все 200), autoclose-check 9/9, testfront цел
- сборка 29 (fix webgl: дым падения и PC URP) опубликована на nginx
2026-09-15 18:34:12 +03:00

71 lines
2.9 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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" <<EOF
# АВТОГЕНЕРАЦИЯ — пишет publish-release.sh при --activate. Не править руками.
location = / {
return 302 /${TAG}/;
}
location = /index.html {
return 302 /${TAG}/;
}
EOF
echo "было: $PREV"
echo "стало: $(readlink -f /opt/game/current)"
echo "корень -> /${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"