ADR-012: именованные сборки (zip) рядом с номерными — /sol/; ^~ для служебных путей; два дефекта сборки фронтендера

This commit is contained in:
Porfiry
2026-09-15 19:29:54 +03:00
parent d66c5f8893
commit b9799bf091
5 changed files with 175 additions and 17 deletions
+54
View File
@@ -0,0 +1,54 @@
#!/bin/bash
# Публикация готового zip-билда (например, присланного фронтендером) в ОТДЕЛЬНУЮ папку nginx.
#
# publish-zip.sh <имя-папки> <путь-к-zip>
#
# Имя папки может быть НЕ числовым (например `sol`) — такие сборки живут рядом с
# номерными релизами (/opt/game/releases/<N>/) и АКТИВНУЮ сборку НЕ трогают:
# корень продолжает редиректить на текущий номер, а эта сборка доступна по /<имя>/.
set -euo pipefail
NAME="${1:?использование: publish-zip.sh <имя-папки> <путь-к-zip>}"
ZIP="${2:?использование: publish-zip.sh <имя-папки> <путь-к-zip>}"
DEST="/opt/game/releases/${NAME}"
TMP="/tmp/unzip-${NAME}"
case "$NAME" in
*[!a-zA-Z0-9_-]*|'') echo "имя папки: только буквы/цифры/дефис/подчёркивание, получено: $NAME" >&2; exit 1 ;;
api|ws|solana-rpc) echo "имя '$NAME' занято служебным location — выбери другое" >&2; exit 1 ;;
esac
[ -f "$ZIP" ] || { echo "нет файла $ZIP" >&2; exit 1; }
command -v unzip >/dev/null || DEBIAN_FRONTEND=noninteractive apt-get install -y -qq unzip >/dev/null
echo "=== 1/3 распаковываю ${ZIP} ==="
rm -rf "$TMP"; mkdir -p "$TMP"
unzip -q "$ZIP" -d "$TMP"
# если в архиве одна вложенная папка — поднимаем содержимое наверх
CNT=$(find "$TMP" -mindepth 1 -maxdepth 1 | wc -l)
if [ "$CNT" = 1 ]; then
INNER="$(find "$TMP" -mindepth 1 -maxdepth 1)"
if [ -d "$INNER" ]; then
mv "$INNER"/* "$TMP"/ 2>/dev/null || true
rmdir "$INNER" 2>/dev/null || true
fi
fi
echo "=== 2/3 раскладываю в ${DEST} ==="
rm -rf "$DEST"; mkdir -p "$DEST"
cp -a "$TMP"/. "$DEST"/
chmod -R a+rX /opt/game/releases
rm -rf "$TMP"
[ -f "$DEST/index.html" ] || { echo "ВНИМАНИЕ: в сборке нет index.html — проверь архив" >&2; exit 1; }
echo "=== 3/3 проверка ==="
nginx -t >/dev/null && systemctl reload nginx
for u in "/${NAME}/" "/${NAME}/index.html"; do
printf ' %-46s %s\n' "$u" "$(curl -s -o /dev/null -w '%{http_code}' "http://127.0.0.1${u}")"
done
echo "готово: https://smart-updown.binom.pw/${NAME}/"
du -sh "$DEST"
ls -la "$DEST"