Настройка GitHub Actions для автоматической минификации Lua-кода Garry's Mod сервера
Этот пост описывает настройку GitHub Actions воркфлоу для автоматической минификации Lua-кода Garry's Mod сервера, создания zip-архива и публикации релиза. Воркфлоу упрощает деплой защищённого кода на продакшен-сервер, минимизируя риск утечек и ускоряя загрузку. Он вдохновлён постами Garry's Mod - Минификация кода сервера и Дружим Garry's Mod сервер и Git правильно от AMD.
Минификация кода GMod сервера:
Пост Garry's Mod - Минификация кода сервера объясняет, как минификация делает код менее читаемым для злоумышленников и какие инструменты использовать (например, xUnkNx/glua-minify). Пост Дружим Garry's Mod сервер и Git правильно показывает, как настроить Git-репозиторий для GMod, исключая ненужные файлы (логи, кэш) и упрощая синхронизацию между DEV и PROD серверами с помощью VS Code Remote SSH.
Ниже приведён GitHub Actions воркфлоу, который:
v* (например, v1.0.0).addons..vscode, sftp-config.json).superaddon для удобства деплоя.name: Build & Release
on:
push:
tags:
- 'v*'
# Структура репозитория (корень):
# addons/
# cfg/
# lua/
# scripts/
# sv.db
# .gitignore
jobs:
build-and-release:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
# ── Инструменты ─────────────────────────────────────────────
- name: Install Lua 5.3
run: sudo apt-get install -y lua5.3
- name: Download glua-minify
run: |
curl -fsSL \
https://raw.githubusercontent.com/xUnkNx/glua-minify/main/minify.lua \
-o minify.lua
# ── Минификация ─────────────────────────────────────────────
- name: Minify Lua files in addons
run: |
find addons -name '*.lua' -print0 | while IFS= read -r -d '' file; do
if lua5.3 minify.lua minify "$file" > tmp_minified.lua 2>/dev/null; then
cp tmp_minified.lua "$file"
else
echo "⚠ Minify failed (keeping original): $file"
fi
done
rm -f tmp_minified.lua
# ── Удаление dev-мусора ─────────────────────────────────────
- name: Remove dev artifacts
run: |
find addons -name '.vscode' -exec rm -rf {} + 2>/dev/null || true
find addons -name 'sftp-config.json' -exec rm -f {} + 2>/dev/null || true
# ── Склейка аддонов в superaddon ────────────────────────────
- name: Merge addons into single superaddon
run: |
mkdir -p superaddon_tmp
for addon_dir in addons/*/; do
[ -d "$addon_dir" ] || continue
cp -r "$addon_dir/." superaddon_tmp/
done
rm -rf addons/*
mv superaddon_tmp addons/superaddon
# ── Упаковка артефакта ──────────────────────────────────────
# Собираем только то, что нужно серверу.
# .github, scripts, sv.db — не включаются.
- name: Create release archive
run: |
TAG="${GITHUB_REF_NAME}"
zip -r "release-${TAG}.zip" addons/ cfg/ lua/ \
--exclude "*.git*"
echo "RELEASE_ZIP=release-${TAG}.zip" >> "$GITHUB_ENV"
# ── GitHub Release ──────────────────────────────────────────
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
name: "Release ${{ github.ref_name }}"
generate_release_notes: true
files: ${{ env.RELEASE_ZIP }}git tag v1.0.0 && git push origin v1.0.0)..lua файлы в addons/. Если минификация файла не удалась, оригинал сохраняется..vscode, sftp-config.json), которые не нужны на продакшене.superaddon — это упрощает деплой и уменьшает количество директорий.release-vX.X.X.zip с папками addons/, cfg/ и lua/ — только то, что нужно серверу.!, !=, continue), в отличие от стандартных Lua-минификаторов.cl_*/sh_*, воркфлоу минифицирует все .lua файлы в addons/. Это проще и надёжнее — не нужно беспокоиться о пропущенных файлах.superaddon упрощает структуру на продакшен-сервере. Все файлы из отдельных аддонов объединяются в одну директорию..gitignore для исключения мусорных файлов (логи, кэш) и хранения только нужных. Это упрощает синхронизацию между DEV и PROD серверами.Минифицированный код может быть сложен для отладки, так как сжимается в одну строку. Храните немодифицированный код на DEV-сервере и используйте PROD только для релизов.
Этот воркфлоу создан на основе двух постов от AMD:
xUnkNx/glua-minify.Этот пост и весь мой блог вдохновлены работами AMD (amd-nick) с blog.amd-nick.me. Его практичные, чёткие и полные юмора гайды по Garry's Mod, включая минификацию и настройку Git, помогли мне организовать свои проекты и начать делиться знаниями. AMD - настоящий мастер, чьи советы спасают от головной боли и делают разработку проще. Press F легенде! 🙌