-
Notifications
You must be signed in to change notification settings - Fork 0
CI CD
Scopul implementării unui pipeline de Continuous Integration (CI) și Continuous Deployment/Delivery (CD) este de a asigura:
- Build automat și constant al proiectului (pe fiecare commit sau pull request)
- Testare automată (testele unitare și eventual teste funcționale/integrare)
- Deployment facil (după ce build-ul și testele au trecut cu succes)
- Sistemul de versionare (Git): pentru gestionarea codului sursă
- Platforma CI/CD: GitHub Actions
- Masini de testare: Windows GitHub-Hosted Runners
- Scripturi de build & test: MSBuild + MSTest din Visual Studio 2022
Avem un workflow GitHub Actions care rulează un pipeline de CI/CD pentru un proiectul nostru dezvoltat exclusiv pentru Windows. Workflow-ul gestioneaza procesul de build, testare și publicare a versiunilor. Principalele etape sunt:
- Configurarea jobului
- Rulează pe Windows (windows-latest)
- Utilizează o matrice pentru a compila atât în Debug, cât și în Release pentru platforma x64
- Obținerea codului sursă
- Clonează repository-ul împreună cu toate submodulele.
- Setarea mediului de build
- Adaugă MSBuild și VSTest în PATH
- Instalează 7zip pentru manipularea arhivelor
- Generarea fișierelor de proiect
- Rulează
generate_project.bat
pentru configurarea inițială
- Compilarea codului
- Compileaza soluția folosind MSBuild, la care avem parametrii din matricea pentru Configuration și Platform
- Instalarea și configurarea Mesa (OpenGL software renderer)
- Descarcă Mesa și extrage fișierele necesare pentru a putea simula aplicatiile care necesita un GPU pe procesor
- Windows GitHub-Hosted Runners sunt masini care nu au placi video dedicate
- Creează symlinks pentru librăriile OpenGL
- Rularea Unit-Tests
- Rulează
VSTest.console.exe
pentru a executa testele unitare - Generează un raport
.trx
pentru fiecare configurație
- Publicarea rezultatelor testelor
- Utilizează
EnricoMi/publish-unit-test-result-action
pentru a încărca rezultatele testelor pe GitHub
- Pregătirea artifactelor pentru release (doar pentru tag-urile Release)
- Copiază fișierele
.exe
și.dll
într-un folder destinat release-ului - Copiază resursele necesare (resources, shaders, maps, config)
- Gestionarea versiunilor
- Extrage numele tag-ului din GitHub
- Adaugă numele tag-ului la folderul rezultat
- Arhivarea și publicarea release-ului
- Creează o arhiva
.zip
cu tot continutul - Încarcă arhiva pe GitHub Releases folosind
softprops/action-gh-release
În dezvoltarea acestui proiect, folosirea unor medii separate a ajutat la izolarea diferitelor etape de lucru și la minimizarea riscurilor când apar modificări majore.
-
Scop: Dezvoltare și testare locală/inițială a codului.
-
Caracteristici:
- Codul este în stadiu incipient, cu funcționalități noi sau netestate suficient.
- Build de tip Debug.
- Logare extinsă pentru a diagnostica probleme (log-uri detaliate, mesaje de eroare, assert-uri etc.).
- În Visual Studio 2022, se folosește configurația Debug și se poate rula direct din IDE.
- Se lucrează pe ramuri de feature separate (branch-uri), iar la final se face un Pull Request către ramura principală (main).
- Fiecare branch are un nume sugestiv și implementează un anumit feature sau un bug fix legat de modul de funcționare/logica al jocului
-
menu
se ocupă de desenarea interfeței UI a jocului. -
client-server-architecture
se ocupă cu developarea unui sistem de conexiune între mai mulți jucători pentru a putea dezvolta mai multe moduri de joc de tip multiplyer. -
gamemodes
se ocupă cu depanarea funcționalităților developate pe branch-ulclient-server-architecture
-
Configurări specifice:
- Fișiere de tip config
-
config/game.json
se ocupă de gestionarea conexiunilor dintre entități și texturi -
config/input.json
se ocupă de maparea tastelor într-un joc. Fiecare acțiune (deplasare, interacțiune, tragere, schimbarea armelor, pauză etc.) este asociată cu un cod de tastă specific.
-
Scop: Mediu intermediar pentru testare înainte de lansarea oficială.
-
Caracteristici:
- Cod considerat relativ stabil, dar încă în faza de validare.
- Build de tip Release.
- Teste unitare.
-
Generare de hartă:
- Folosim algoritmul Perlin Noise pe baza dimensiunilor hartei (width, height) pentru a genera harta într-un mod procedural. Astfel la fiecare rulare se generează o mapă nouă conţinând:
- celule libere
- pereţi
- uşi
- obstacole
- shop
- Folosim algoritmul Perlin Noise pe baza dimensiunilor hartei (width, height) pentru a genera harta într-un mod procedural. Astfel la fiecare rulare se generează o mapă nouă conţinând:
-
Configurarea logicii modurilor de joc
- Crearea unui server si stabilirea arhitecturii modurilor de joc, în corespondenţă cu acesta.
- Zombie Survival
- Team Deathmatch
- Crearea unui server si stabilirea arhitecturii modurilor de joc, în corespondenţă cu acesta.
-
config/save.json
...
-
Scop: Mediu final, pentru utilizatorii/jucătorii reali.
-
Caracteristici:
- Build de tip Release.
- Stabilitate maximă, testată în prealabil în staging.
- În pipeline-ul CI/CD, avem un tag care este released pe ramura main.
-
Config specific :
- La sectiunea de Releases este adaugat produsul final, impreuna cu toate dependențele, in varianta cea mai optimizata. Utilizatorul trebuie doar sa descarce arhiva windows-x64-vX.X.X.zip, unde este prezent executabilul jocului.