From 8818b12fa5d1e23e9656b86f0a1c38daa1ca1304 Mon Sep 17 00:00:00 2001 From: htom Date: Mon, 3 Nov 2025 18:52:06 +0100 Subject: [PATCH 1/6] =?UTF-8?q?k=C3=B6vetelm=C3=A9ny=20lista=20hozz=C3=A1a?= =?UTF-8?q?d=C3=A1sa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Docs/funk_spec.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Docs/funk_spec.md diff --git a/Docs/funk_spec.md b/Docs/funk_spec.md new file mode 100644 index 0000000..dcb6ec2 --- /dev/null +++ b/Docs/funk_spec.md @@ -0,0 +1,32 @@ +## 5. Követelménylista + +### Szerver +| Név | Verzió | Leírás | +| --- | ------ | ------ | +| **WebSocket** | 1.0 | A szerver és a kliens között folyamatos kétirányú kommunikációt biztosít. A kapcsolat létrejötte után a szerver valós időben képes fogadni és továbbítani az eseményeket (pl. lépés végrehajtása, állapotfrissítés). Hiba esetén a kapcsolat automatikusan újraépül. | +| **Kapcsolatok csoportosítása** | 1.0 | A szerver figyeli az elérhető, szabad klienseket, majd két szabad kapcsolatot automatikusan összerendel egy meccsbe. A csoportosítás után a játékosok azonos „room”-ba kerülnek, és a szerver biztosítja az egymás közötti adatkommunikációt. | +| **Kommunikáció az engine-nel** | 1.0 | A szerver a játékosoktól érkező lépéseket és játékinformációkat továbbítja az engine-nek feldolgozásra. Az engine válasza után a szerver visszaküldi az eredményt a klienseknek (pl. érvényes lépés, matt, patt). A kommunikáció aszinkron módon zajlik, válaszidő-ellenőrzéssel. | +| **Kommunikáció a UI-al** | 1.0 | A szerver WebSocket-en keresztül adatokat továbbít a felhasználói felület és az engine között. A UI által kért műveletek (pl. új meccs létrehozása, állapotlekérés) feldolgozását a szerver közvetíti.| +### Engine +| Név | Verzió | Leírás | +| --- | ------ | ------ | +| **Bitboard** | 1.0 | A játék táblaállapotát bitműveletekkel reprezentálja a hatékonyság érdekében. Minden bábu típus és szín külön bitmask-on kerül tárolásra, lehetővé téve a gyors lekérdezéseket és lépésellenőrzéseket. | +| **Lépésgenerálás LUT** | 1.0 | Előre kiszámított lookup táblák segítségével gyorsítja a lépésgenerálást és szabályellenőrzést. Ez csökkenti a számítási időt, és optimalizálja az engine teljesítményét. | +| **Lépésgenerálás** | 1.0 | A különböző bábutípusok (gyalog, bástya, futó, stb.) lépési logikáját valósítja meg. A függvények ellenőrzik a lépés érvényességét, figyelembe véve az aktuális állást, sakkhelyzetet és speciális szabályokat (pl. sáncolás, en passant). | +| **Util függvények** | 1.0 | Segédfüggvények az engine belső működéséhez, például raycast műveletek, bitműveleti maszkok kezelése, valamint logikai ellenőrzések a lépések és ütések számításához. | + +### UI +| Név | Verzió | Leírás | +| --- | ------ | ------ | +| **Belépés** | 1.0 | A felhasználó a kezdőképernyőn keresztül adhatja meg a nevét lokális játékhoz, vagy hitelesítheti magát online játékmód esetén. Hibás adatok esetén a rendszer figyelmeztetést küld. | +| **Főmenü** | 1.0 | Az alkalmazás központi navigációs felülete, ahol a felhasználó meccset kereshet, új játékot indíthat lokálisan, vagy beállításokat módosíthat. A menü megjeleníti az aktuális státuszt (online/offline). | +| **Játék** | 1.0 | A játékfelület megjeleníti a táblát, bábukat, lépéseket, és az aktuális játékállást. Támogatja mind az online, mind a lokális módot. A felület kezeli az interakciókat (lépéskattintás, visszavonás, végeredmény kijelzés). | +| **Kommunikáció a szerverrel** | 1.0 | A kliens a szerveren keresztül kommunikál az engine-nel. A UI felel az üzenetek küldéséért (lépés, új játék, visszajelzés), valamint a szervertől kapott események vizuális megjelenítéséért. | + + +### GitHub Actions (CI/CD) +| Név | Leírás | +| --- | ------ | +| Folyamatos tesztelés | A projekt minden commit után automatikusan tesztelődik. A pipeline lefuttatja a teszteket, és értesítést küld hibás build esetén. | +| Folyamatos integráció | Az új funkciók beolvadásakor a rendszer automatikusan integrálja a változtatásokat, új buildet hoz létre, és frissíti a fejlesztői környezetet. | +| Tesztadatok | A tesztadatok legyenek elérhetőek egy táblázatban, dátummal ellátva. (Google Sheets) | From d819368962ff0007b021d328cdb4de81296f74f9 Mon Sep 17 00:00:00 2001 From: htom Date: Wed, 5 Nov 2025 12:36:30 +0100 Subject: [PATCH 2/6] Expand GitHub workflow documentation Detailed the GitHub workflow process for automated testing and releases, including branch naming conventions and test result logging. --- Docs/funk_spec.md | 19 +++++++++++++++++++ Docs/placeholder.md | 0 2 files changed, 19 insertions(+) delete mode 100644 Docs/placeholder.md diff --git a/Docs/funk_spec.md b/Docs/funk_spec.md index dcb6ec2..ac59ed9 100644 --- a/Docs/funk_spec.md +++ b/Docs/funk_spec.md @@ -30,3 +30,22 @@ | Folyamatos tesztelés | A projekt minden commit után automatikusan tesztelődik. A pipeline lefuttatja a teszteket, és értesítést küld hibás build esetén. | | Folyamatos integráció | Az új funkciók beolvadásakor a rendszer automatikusan integrálja a változtatásokat, új buildet hoz létre, és frissíti a fejlesztői környezetet. | | Tesztadatok | A tesztadatok legyenek elérhetőek egy táblázatban, dátummal ellátva. (Google Sheets) | + +## A github workflow folyamata: + +A githubon tárolt kód minden feltöltésnél a kód mindig automatikus tesztelve van, egy workflow által. Ennek a működése: +1. A brancheket a következő képpen kell elnevezni: Projekt/task_neve (a task neve a kanban tablabol jon). +2. 3 projekt van a github repository-ban: Engine, Server és a UI. Ennek megfelelően a következőképpen kell kinézniük a brancheknek: + - Engine/task_1 + - Server/task_1 + - UI/task_1 + Erre azért van szükség mert a github workflow ezek alapján az elnevezések alapján fogja eldönteni melyik teszteket futtassa. Ha az Engine projekthez lett feltöltve kód, akkor csak az ahhoz tartozó teszteket futtassa. +3. A workflow folyamat a következő: + Amikor feltöltődik a három projekt közül valamelyikére egy új commit. A github workflow megnézni mi a branch neve. Ezután letölti a projektet githubról, és lefuttatja azon projekt teszteit. A tesztek eredményét feltölti egy google táblazat fájlba, ahonnan bármikor visszenézhető. Minden teszt eredmény az annak megfelően elnevezett munkalapra kerül be (Engine, Server, UI), egymás alá táblázatos elrendezésben. Az oszlopok a következőek: Dátum, függvény neve, teszt bemenet, teszt kimenet, sikeres-e. + Amikor a main/master branchre kerül fel kód. A teszt az előbbiek alapján ugyanúgy lefut, csak itt mind a 3 projekt tesztje le fog futni és az eredmény egy main/master nevű munkalapra fog feltöltődni a táblázatban. Amint sikeresen lefut a tesztelés, elindul egy automatikus build, ami le fogja build-elni a projekteket. Ezután létrehoz egy új Release-t githubon, ahol beállítja a verzió számot a rust projektben beállított verzió számra, majd feltölti oda a fájlokat amiket a build hozott létre, és kiteszi ezt a buildet. + + +A workflow 3 külön fáljba van bontva: +1. A dispatcher (dispatch.yml). Ez indítja el a workflow-t ami teszteli a kódot a megfelelő branchen, elindítja a release workflow-t ami feltölti a master branchről buildelt projekt fájlokat. +2. A teszter (tests.yml). Ez a workflow bele fog lépni a megfelelő projekt mappába és lefutattja a megírt teszteket, és feltölti az eredményt egy google spreadsheet-be. +3. A release (release.yml). Amint sikeresek a tesztek elindul ez a workflow és lefordítja a kódot majd feltölti github-ra egy új release-ként diff --git a/Docs/placeholder.md b/Docs/placeholder.md deleted file mode 100644 index e69de29..0000000 From 7625eecbd968fa9341a2b9d80223b620184631ea Mon Sep 17 00:00:00 2001 From: htom Date: Wed, 5 Nov 2025 13:26:23 +0100 Subject: [PATCH 3/6] Workflow: Dispatch and Test runner workflow test #1 Testing the dispatcher and engine_test workflow for any bugs, the changes on these files always need to be uploaded to github to test if it is working correctly --- .github/workflows/dispatcher.yml | 65 +++++++++++++++++++++++++++++++ .github/workflows/engine_test.yml | 22 +++++++++++ .gitub/workflows/placeholder.txt | 0 3 files changed, 87 insertions(+) create mode 100644 .github/workflows/dispatcher.yml create mode 100644 .github/workflows/engine_test.yml delete mode 100644 .gitub/workflows/placeholder.txt diff --git a/.github/workflows/dispatcher.yml b/.github/workflows/dispatcher.yml new file mode 100644 index 0000000..10e64fd --- /dev/null +++ b/.github/workflows/dispatcher.yml @@ -0,0 +1,65 @@ +name: Dispatcher + +on: + push: + branches: + - '**' # minden branchre lefut + +jobs: + detect-and-dispatch: + runs-on: self-hosted # (sajat rpi-on fusson) + + steps: + - name: Detect project from branch name + id: detect + run: | + BRANCH_NAME=${GITHUB_REF##*/} + echo "Branch name: $BRANCH_NAME" + + if [[ "$BRANCH_NAME" == Engine/* ]]; then + echo "project=Engine" >> $GITHUB_OUTPUT + elif [[ "$BRANCH_NAME" == Server/* ]]; then + echo "project=Server" >> $GITHUB_OUTPUT + elif [[ "$BRANCH_NAME" == UI/* ]]; then + echo "project=UI" >> $GITHUB_OUTPUT + else + echo "project=unknown" >> $GITHUB_OUTPUT + fi + + - name: Trigger Engine tests + if: steps.detect.outputs.project == 'Engine' + uses: peter-evans/workflow-dispatch@v2 + with: + workflow: "engine_test.yml" + ref: ${{ github.ref }} + + - name: Trigger Server tests + if: steps.detect.outputs.project == 'Server' + uses: peter-evans/workflow-dispatch@v2 + with: + workflow: "server_test.yml" + ref: ${{ github.ref }} + + - name: Trigger UI tests + if: steps.detect.outputs.project == 'UI' + uses: peter-evans/workflow-dispatch@v2 + with: + workflow: "ui_test.yml" + ref: ${{ github.ref }} + + - name: Trigger all tests (main/master) + if: github.ref_name == 'main' || github.ref_name == 'master' + uses: peter-evans/workflow-dispatch@v2 + with: + workflow: "engine_test.yml" + ref: ${{ github.ref }} + - uses: peter-evans/workflow-dispatch@v2 + if: github.ref_name == 'main' || github.ref_name == 'master' + with: + workflow: "server_test.yml" + ref: ${{ github.ref }} + - uses: peter-evans/workflow-dispatch@v2 + if: github.ref_name == 'main' || github.ref_name == 'master' + with: + workflow: "ui_test.yml" + ref: ${{ github.ref }} diff --git a/.github/workflows/engine_test.yml b/.github/workflows/engine_test.yml new file mode 100644 index 0000000..d9b5b6f --- /dev/null +++ b/.github/workflows/engine_test.yml @@ -0,0 +1,22 @@ +name: Engine Tests + +on: + workflow_dispatch: + +jobs: + engine-tests: + runs-on: self-hosted + + steps: + - uses: actions/checkout@v4 + + - name: Set up Rust + uses: actions/setup-rust@v1 + with: + rust-version: stable + + - name: Run Engine tests + run: | + cd engine + ls + cargo test --verbose diff --git a/.gitub/workflows/placeholder.txt b/.gitub/workflows/placeholder.txt deleted file mode 100644 index e69de29..0000000 From a19e0bf9220670d43cb08840818f2e8f8c130e59 Mon Sep 17 00:00:00 2001 From: htom Date: Wed, 5 Nov 2025 13:30:58 +0100 Subject: [PATCH 4/6] Workflow: added missing repository checkout Repository checkout was missing from the dispatch workflow --- .github/workflows/dispatcher.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/dispatcher.yml b/.github/workflows/dispatcher.yml index 10e64fd..61ccc0f 100644 --- a/.github/workflows/dispatcher.yml +++ b/.github/workflows/dispatcher.yml @@ -5,6 +5,9 @@ on: branches: - '**' # minden branchre lefut +permissions: + contents: write + jobs: detect-and-dispatch: runs-on: self-hosted # (sajat rpi-on fusson) @@ -26,6 +29,10 @@ jobs: echo "project=unknown" >> $GITHUB_OUTPUT fi + + - name: Checkout repository + uses: actions/checkout@v4 + - name: Trigger Engine tests if: steps.detect.outputs.project == 'Engine' uses: peter-evans/workflow-dispatch@v2 From 300b3cde34400219f57c8375bc0ec12082de18eb Mon Sep 17 00:00:00 2001 From: htom Date: Wed, 5 Nov 2025 13:46:29 +0100 Subject: [PATCH 5/6] Workflow: Triggering the workflow a different way with gh script --- .github/workflows/dispatcher.yml | 127 ++++++++++++++++++------------- 1 file changed, 74 insertions(+), 53 deletions(-) diff --git a/.github/workflows/dispatcher.yml b/.github/workflows/dispatcher.yml index 61ccc0f..c5d91fe 100644 --- a/.github/workflows/dispatcher.yml +++ b/.github/workflows/dispatcher.yml @@ -3,70 +3,91 @@ name: Dispatcher on: push: branches: - - '**' # minden branchre lefut - -permissions: - contents: write + - '**' jobs: - detect-and-dispatch: - runs-on: self-hosted # (sajat rpi-on fusson) - + dispatch: + runs-on: self-hosted + outputs: + engine: ${{ steps.check.outputs.engine }} + server: ${{ steps.check.outputs.server }} + ui: ${{ steps.check.outputs.ui }} steps: - - name: Detect project from branch name - id: detect + - name: Determine which tests to run + id: check run: | - BRANCH_NAME=${GITHUB_REF##*/} - echo "Branch name: $BRANCH_NAME" + BRANCH="${{ github.ref_name }}" + echo "Branch: $BRANCH" - if [[ "$BRANCH_NAME" == Engine/* ]]; then - echo "project=Engine" >> $GITHUB_OUTPUT - elif [[ "$BRANCH_NAME" == Server/* ]]; then - echo "project=Server" >> $GITHUB_OUTPUT - elif [[ "$BRANCH_NAME" == UI/* ]]; then - echo "project=UI" >> $GITHUB_OUTPUT - else - echo "project=unknown" >> $GITHUB_OUTPUT + ENGINE=false + SERVER=false + UI=false + + if [[ "$BRANCH" == *"Engine"* ]]; then + ENGINE=true + fi + if [[ "$BRANCH" == *"Server"* ]]; then + SERVER=true + fi + if [[ "$BRANCH" == *"UI"* ]]; then + UI=true fi + # Run all on master + if [[ "$BRANCH" == "master" ]]; then + ENGINE=true + SERVER=true + UI=true + fi - - name: Checkout repository - uses: actions/checkout@v4 + echo "engine=$ENGINE" >> $GITHUB_OUTPUT + echo "server=$SERVER" >> $GITHUB_OUTPUT + echo "ui=$UI" >> $GITHUB_OUTPUT - - name: Trigger Engine tests - if: steps.detect.outputs.project == 'Engine' - uses: peter-evans/workflow-dispatch@v2 + - name: Trigger Engine Test + if: steps.check.outputs.engine == 'true' + uses: actions/github-script@v7 with: - workflow: "engine_test.yml" - ref: ${{ github.ref }} + script: | + github.rest.actions.createWorkflowDispatch({ + owner: context.repo.owner, + repo: context.repo.repo, + workflow_id: 'engine_test.yml', + ref: '${{ github.ref }}', + inputs: { + triggered_by: 'dispatch.yml', + branch: '${{ github.ref_name }}' + } + }) - - name: Trigger Server tests - if: steps.detect.outputs.project == 'Server' - uses: peter-evans/workflow-dispatch@v2 + - name: Trigger Server Test + if: steps.check.outputs.server == 'true' + uses: actions/github-script@v7 with: - workflow: "server_test.yml" - ref: ${{ github.ref }} + script: | + github.rest.actions.createWorkflowDispatch({ + owner: context.repo.owner, + repo: context.repo.repo, + workflow_id: 'server_test.yml', + ref: '${{ github.ref }}', + inputs: { + triggered_by: 'dispatch.yml', + branch: '${{ github.ref_name }}' + } + }) - - name: Trigger UI tests - if: steps.detect.outputs.project == 'UI' - uses: peter-evans/workflow-dispatch@v2 + - name: Trigger UI Test + if: steps.check.outputs.ui == 'true' + uses: actions/github-script@v7 with: - workflow: "ui_test.yml" - ref: ${{ github.ref }} - - - name: Trigger all tests (main/master) - if: github.ref_name == 'main' || github.ref_name == 'master' - uses: peter-evans/workflow-dispatch@v2 - with: - workflow: "engine_test.yml" - ref: ${{ github.ref }} - - uses: peter-evans/workflow-dispatch@v2 - if: github.ref_name == 'main' || github.ref_name == 'master' - with: - workflow: "server_test.yml" - ref: ${{ github.ref }} - - uses: peter-evans/workflow-dispatch@v2 - if: github.ref_name == 'main' || github.ref_name == 'master' - with: - workflow: "ui_test.yml" - ref: ${{ github.ref }} + script: | + github.rest.actions.createWorkflowDispatch({ + owner: context.repo.owner, + repo: context.repo.repo, + workflow_id: 'ui_test.yml', + ref: '${{ github.ref }}', + inputs: { + triggered_by: 'dispatch.yml', + branch: '${{ github.ref_name }}' + } + }) From 3df33093edd6a0a387a2a25fe7679af82712bc96 Mon Sep 17 00:00:00 2001 From: htom Date: Wed, 5 Nov 2025 14:47:50 +0100 Subject: [PATCH 6/6] Workflow: Added the workflow files, changed ls to pwd in tests --- .github/workflows/engine_test.yml | 2 +- .github/workflows/server_test.yml | 22 ++++++++++++++++++++++ .github/workflows/ui_test.yml | 22 ++++++++++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/server_test.yml create mode 100644 .github/workflows/ui_test.yml diff --git a/.github/workflows/engine_test.yml b/.github/workflows/engine_test.yml index d9b5b6f..84d187d 100644 --- a/.github/workflows/engine_test.yml +++ b/.github/workflows/engine_test.yml @@ -18,5 +18,5 @@ jobs: - name: Run Engine tests run: | cd engine - ls + pwd cargo test --verbose diff --git a/.github/workflows/server_test.yml b/.github/workflows/server_test.yml new file mode 100644 index 0000000..6a5cfb6 --- /dev/null +++ b/.github/workflows/server_test.yml @@ -0,0 +1,22 @@ +name: Server Tests + +on: + workflow_dispatch: + +jobs: + server-tests: + runs-on: self-hosted + + steps: + - uses: actions/checkout@v4 + + - name: Set up Rust + uses: actions/setup-rust@v1 + with: + rust-version: stable + + - name: Run Server tests + run: | + cd server + pwd + cargo test --verbose diff --git a/.github/workflows/ui_test.yml b/.github/workflows/ui_test.yml new file mode 100644 index 0000000..4c0bda1 --- /dev/null +++ b/.github/workflows/ui_test.yml @@ -0,0 +1,22 @@ +name: UI Tests + +on: + workflow_dispatch: + +jobs: + ui-tests: + runs-on: self-hosted + + steps: + - uses: actions/checkout@v4 + + - name: Set up Rust + uses: actions/setup-rust@v1 + with: + rust-version: stable + + - name: Run UI tests + run: | + cd ui + pwd + cargo test --verbose