Skip to main content

πŸš€ Автоматизация ΠΌΠΈΠ½ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°

Π­Ρ‚ΠΎΡ‚ пост описываСт настройку GitHub Actions Π²ΠΎΡ€ΠΊΡ„Π»ΠΎΡƒ для автоматичСской ΠΌΠΈΠ½ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Lua-ΠΊΠΎΠ΄Π° Garry's Mod сСрвСра, создания zip-Π°Ρ€Ρ…ΠΈΠ²Π° ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ€Π΅Π»ΠΈΠ·Π°. Π’ΠΎΡ€ΠΊΡ„Π»ΠΎΡƒ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Π΄Π΅ΠΏΠ»ΠΎΠΉ Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½-сСрвСр, минимизируя риск ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ ΠΈ ускоряя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ. Он Π²Π΄ΠΎΡ…Π½ΠΎΠ²Π»Ρ‘Π½ постами Garry's Mod - ΠœΠΈΠ½ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ ΠΊΠΎΠ΄Π° сСрвСра ΠΈ Π”Ρ€ΡƒΠΆΠΈΠΌ Garry's Mod сСрвСр ΠΈ Git ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΡ‚ AMD.

Π—Π°Ρ‡Π΅ΠΌ это Π½ΡƒΠΆΠ½ΠΎ?​

ΠœΠΈΠ½ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ ΠΊΠΎΠ΄Π° GMod сСрвСра:

  • Π—Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄: ΠœΠΈΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ слоТнСС Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΡƒΡ‚Π΅Ρ‡ΠΊΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· ScriptHook ΠΈΠ»ΠΈ ΠΊΡ€Π°ΠΆΡƒ сборки).
  • УскоряСт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ: УмСньшСниС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя запуска сСрвСра.
  • АвтоматизируСт Π΄Π΅ΠΏΠ»ΠΎΠΉ: Π’ΠΎΡ€ΠΊΡ„Π»ΠΎΡƒ позволяСт автоматичСски Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π΅Π»ΠΈΠ· для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½-сСрвСра.

ΠŸΠΎΡΡ‚ Garry's Mod - ΠœΠΈΠ½ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ ΠΊΠΎΠ΄Π° сСрвСра ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚, ΠΊΠ°ΠΊ минификация Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ΠΌΠ΅Π½Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ для Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠΎΠ² ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ инструмСнты ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, xUnkNx/glua-minify). ΠŸΠΎΡΡ‚ Π”Ρ€ΡƒΠΆΠΈΠΌ Garry's Mod сСрвСр ΠΈ Git ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ для GMod, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ (Π»ΠΎΠ³ΠΈ, кэш) ΠΈ упрощая ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ DEV ΠΈ PROD сСрвСрами с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ VS Code Remote SSH.

Воркфлоу​

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½ GitHub Actions Π²ΠΎΡ€ΠΊΡ„Π»ΠΎΡƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ:

  1. ЗапускаСтся ΠΏΡ€ΠΈ создании Ρ‚Π΅Π³Π° с прСфиксом v* (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, v1.0.0).
  2. ΠœΠΈΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ клиСнтскиС ΠΈ ΠΎΠ±Ρ‰ΠΈΠ΅ Lua-Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΏΠ°ΠΏΠΊΠ΅ addons.
  3. Π‘ΠΎΠ·Π΄Π°Ρ‘Ρ‚ zip-Π°Ρ€Ρ…ΠΈΠ² с ΠΌΠΈΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
  4. ΠŸΡƒΠ±Π»ΠΈΠΊΡƒΠ΅Ρ‚ Π°Ρ€Ρ…ΠΈΠ² ΠΊΠ°ΠΊ GitHub Release.
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 }}

Как это работаСт​

  1. Π’Ρ€ΠΈΠ³Π³Π΅Ρ€: Π’ΠΎΡ€ΠΊΡ„Π»ΠΎΡƒ запускаСтся ΠΏΡ€ΠΈ создании Ρ‚Π΅Π³Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, git tag v1.0.0 && git push origin v1.0.0).
  2. Π¨Π°Π³ΠΈ:
    • УстанавливаСтся Lua 5.3.
    • БкачиваСтся minify.lua для ΠΌΠΈΠ½ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ.
    • Боздаётся дирСктория build, ΠΊΡƒΠ΄Π° ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ .git, .github, scripts, build ΠΈ скрытыС Ρ„Π°ΠΉΠ»Ρ‹.
    • ΠœΠΈΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Lua-Ρ„Π°ΠΉΠ»Ρ‹ (cl_*.lua, sh_*.lua, Ρ„Π°ΠΉΠ»Ρ‹ Π² client, shared, autorun) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ minify.lua. Если минификация Π½Π΅ ΡƒΠ΄Π°Π»Π°ΡΡŒ, Ρ„Π°ΠΉΠ» копируСтся Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
    • Боздаётся zip-Π°Ρ€Ρ…ΠΈΠ² release.zip с ΠΌΠΈΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
    • Архив публикуСтся ΠΊΠ°ΠΊ GitHub Release.

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ замСтки​

  • ΠœΠΈΠ½ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ xUnkNx/glua-minify, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ синтаксис GMod (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ !, !=, continue), Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ стандартных Lua-ΠΌΠΈΠ½ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ².
  • Git-интСграция: ΠŸΠΎΡΡ‚ Π”Ρ€ΡƒΠΆΠΈΠΌ Garry's Mod сСрвСр ΠΈ Git ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ .gitignore для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ мусорных Ρ„Π°ΠΉΠ»ΠΎΠ² (Π»ΠΎΠ³ΠΈ, кэш) ΠΈ хранСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΡƒΠΆΠ½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, /cfg/server.cfg, /lua/bin, /gamemodes/darkrp). Π­Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ DEV ΠΈ PROD сСрвСрами.
  • ΠžΡ‚Π»Π°Π΄ΠΊΠ°: ΠœΠΈΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ слоТнСС ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ GLuaFixer ΠΈΠ»ΠΈ Pretty Print Π² Visual Studio Code для форматирования ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈ нСобходимости.
  • DEPLOY: Для дСплоя Π½Π° сСрвСр создайтС скрипт deploy.sh, ΠΊΠ°ΠΊ описано Π² постС ΠΎ ΠΌΠΈΠ½ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π°Ρ€Ρ…ΠΈΠ²Π° Π½Π° ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½.
caution

ΠœΠΈΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ слоТСн для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ сТимаСтся Π² ΠΎΠ΄Π½Ρƒ строку. Π₯Ρ€Π°Π½ΠΈΡ‚Π΅ Π½Π΅ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π° DEV-сСрвСрС ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ PROD Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ€Π΅Π»ΠΈΠ·ΠΎΠ².

ВдохновСниС​

Π­Ρ‚ΠΎΡ‚ Π²ΠΎΡ€ΠΊΡ„Π»ΠΎΡƒ создан Π½Π° основС Π΄Π²ΡƒΡ… постов ΠΎΡ‚ AMD:

Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π½ΠΎΡΡ‚ΡŒ amd-nick​

Π­Ρ‚ΠΎΡ‚ пост ΠΈ вСсь ΠΌΠΎΠΉ Π±Π»ΠΎΠ³ Π²Π΄ΠΎΡ…Π½ΠΎΠ²Π»Π΅Π½Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΠΌΠΈ AMD (amd-nick) с blog.amd-nick.me. Π•Π³ΠΎ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½Ρ‹Π΅, Ρ‡Ρ‘Ρ‚ΠΊΠΈΠ΅ ΠΈ ΠΏΠΎΠ»Π½Ρ‹Π΅ ΡŽΠΌΠΎΡ€Π° Π³Π°ΠΉΠ΄Ρ‹ ΠΏΠΎ Garry's Mod, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΌΠΈΠ½ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΈ настройку Git, ΠΏΠΎΠΌΠΎΠ³Π»ΠΈ ΠΌΠ½Π΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ свои ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ знаниями. AMD β€” настоящий мастСр, Ρ‡ΡŒΠΈ совСты ΡΠΏΠ°ΡΠ°ΡŽΡ‚ ΠΎΡ‚ Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ Π±ΠΎΠ»ΠΈ ΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΡ€ΠΎΡ‰Π΅. Press F Π»Π΅Π³Π΅Π½Π΄Π΅! πŸ™Œ