π ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΠΌΠΈΠ½ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π°
ΠΡΠΎΡ ΠΏΠΎΡΡ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΡ 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 Π²ΠΎΡΠΊΡΠ»ΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ:
- ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠ΅Π³Π° Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠΌ
v*(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,v1.0.0). - ΠΠΈΠ½ΠΈΡΠΈΡΠΈΡΡΠ΅Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ ΠΈ ΠΎΠ±ΡΠΈΠ΅ Lua-ΡΠ°ΠΉΠ»Ρ Π² ΠΏΠ°ΠΏΠΊΠ΅
addons. - Π‘ΠΎΠ·Π΄Π°ΡΡ zip-Π°ΡΡ ΠΈΠ² Ρ ΠΌΠΈΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
- ΠΡΠ±Π»ΠΈΠΊΡΠ΅Ρ Π°ΡΡ ΠΈΠ² ΠΊΠ°ΠΊ 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 }}
ΠΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρβ
- Π’ΡΠΈΠ³Π³Π΅Ρ: ΠΠΎΡΠΊΡΠ»ΠΎΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠ΅Π³Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
git tag v1.0.0 && git push origin v1.0.0). - Π¨Π°Π³ΠΈ:
- Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ 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, ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² ΠΏΠΎΡΡΠ΅ ΠΎ ΠΌΠΈΠ½ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, ΡΡΠΎΠ±Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΡΡ ΠΈΠ²Π° Π½Π° ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½.
ΠΠΈΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ»ΠΎΠΆΠ΅Π½ Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠΆΠΈΠΌΠ°Π΅ΡΡΡ Π² ΠΎΠ΄Π½Ρ ΡΡΡΠΎΠΊΡ. Π₯ΡΠ°Π½ΠΈΡΠ΅ Π½Π΅ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° DEV-ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ PROD ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠ΅Π»ΠΈΠ·ΠΎΠ².
ΠΠ΄ΠΎΡ Π½ΠΎΠ²Π΅Π½ΠΈΠ΅β
ΠΡΠΎΡ Π²ΠΎΡΠΊΡΠ»ΠΎΡ ΡΠΎΠ·Π΄Π°Π½ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΄Π²ΡΡ ΠΏΠΎΡΡΠΎΠ² ΠΎΡ AMD:
- Garry's Mod - ΠΠΈΠ½ΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΠ²Π΅ΡΠ° β ΠΎΠ±ΡΡΡΠ½ΡΠ΅Ρ, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ Lua-ΠΊΠΎΠ΄ Π΄Π»Ρ Π·Π°ΡΠΈΡΡ ΠΎΡ ΠΊΡΠ°ΠΆΠΈ ΠΈ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ°, Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ
xUnkNx/glua-minify. - ΠΡΡΠΆΠΈΠΌ Garry's Mod ΡΠ΅ΡΠ²Π΅Ρ ΠΈ Git ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ β ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ Π½Π°ΡΡΡΠΎΠΈΡΡ Git-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π΄Π»Ρ GMod, ΠΈΡΠΊΠ»ΡΡΠ°Ρ Π½Π΅Π½ΡΠΆΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈ ΡΠΏΡΠΎΡΠ°Ρ ΡΠ΄Π°Π»ΡΠ½Π½ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ ΡΠ΅ΡΠ΅Π· VS Code Remote SSH.