5087c67201
- 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
71 lines
2.9 KiB
Bash
71 lines
2.9 KiB
Bash
#!/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"
|