Настройка 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.name: GMod Build and Release
on:
push:
tags:
- 'v*'
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Lua
run: |
sudo apt-get update
sudo apt-get install -y lua5.3
- name: Download minify.lua
run: |
curl -O https://raw.githubusercontent.com/xUnkNx/glua-minify/main/minify.lua
- name: Prepare build directory
run: |
rm -rf build
mkdir build
rsync -av \
--exclude ".git/*" \
--exclude ".github/*" \
--exclude "scripts" \
--exclude "build" \
--exclude ".*" \
./ build/
- name: Minify client and shared Lua scripts
run: |
find ./build/addons -type f \( \
-name "cl_*.lua" -o \
-name "sh_*.lua" -o \
-path "*/client/*.lua" -o \
-path "*/shared/*.lua" -o \
-path "*/autorun/*.lua" \
\) | while read file; do
echo "Minifying Lua file: $file"
lua ./minify.lua minify "$file" > "$file.min" || cp -v "$file" "$file.min"
mv "$file.min" "$file"
done
- name: Create release zip
run: |
cd build
zip -r ../release.zip ./* -x "scripts/*" "build/*"
cd ..
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: gmod-release
path: release.zip
release:
runs-on: ubuntu-latest
needs: build
steps:
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: gmod-release
path: .
- name: Publish GitHub Release
uses: softprops/action-gh-release@v2
with:
files: release.zip
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}git tag v1.0.0 && git push origin v1.0.0).build, куда копируются файлы проекта, исключая .git, .github, scripts, build и скрытые файлы.cl_*.lua, sh_*.lua, файлы в client, shared, autorun) с помощью minify.lua. Если минификация не удалась, файл копируется без изменений.release.zip с минифицированным кодом.!, !=, continue), в отличие от стандартных Lua-минификаторов..gitignore для исключения мусорных файлов (логи, кэш) и хранения только нужных (например, /cfg/server.cfg, /lua/bin, /gamemodes/darkrp). Это упрощает синхронизацию между DEV и PROD серверами.deploy.sh, как описано в посте о минификации, чтобы автоматизировать копирование архива на продакшен.Минифицированный код может быть сложен для отладки, так как сжимается в одну строку. Храните немодифицированный код на DEV-сервере и используйте PROD только для релизов.
Этот воркфлоу создан на основе двух постов от AMD:
xUnkNx/glua-minify.Этот пост и весь мой блог вдохновлены работами AMD (amd-nick) с blog.amd-nick.me. Его практичные, чёткие и полные юмора гайды по Garry's Mod, включая минификацию и настройку Git, помогли мне организовать свои проекты и начать делиться знаниями. AMD — настоящий мастер, чьи советы спасают от головной боли и делают разработку проще. Press F легенде! 🙌