Initial project version
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
---
|
||||
name: Bug Report
|
||||
about: Ein Fehler oder ein unerwartetes Verhalten in der Test-/Audit-Suite.
|
||||
title: '[Bug] '
|
||||
labels: ['bug', 'needs triage']
|
||||
---
|
||||
|
||||
## Beschreibung
|
||||
|
||||
Beschreibe knapp, was fehlerhaft ist und was du stattdessen **erwartet** hättest.
|
||||
|
||||
**Fehlermeldung / Exit-Code (falls vorhanden):**
|
||||
|
||||
```text
|
||||
```
|
||||
|
||||
## Reproduktion
|
||||
|
||||
Wie kann der Fehler reproduziert werden? Bitte als schrittweise Anleitung:
|
||||
|
||||
1. Gehe zu …
|
||||
2. Führe aus `npm run …`
|
||||
3. Siehe Fehler …
|
||||
|
||||
**Betroffenes Skript:**
|
||||
|
||||
- [ ] `tests/audit.mjs`
|
||||
- [ ] `tests/selfplay.mjs`
|
||||
- [ ] `tests/perf-test.mjs`
|
||||
- [ ] `tests/report.mjs`
|
||||
- [ ] CI-Workflow (`.gitea/workflows/aegis.yml`)
|
||||
- [ ] Sonstiges: …
|
||||
|
||||
## Erwartetes vs. tatsächliches Verhalten
|
||||
|
||||
| | Verhalten |
|
||||
|---|---|
|
||||
| **Erwartet** | … |
|
||||
| **Tatsächlich** | … |
|
||||
|
||||
## Erzeugte Artefakte (falls vorhanden)
|
||||
|
||||
Füge relevante Ausschnitte bei (z. B. `audit-result.json`, `perf-result.json`, `selfplay-results.json`):
|
||||
|
||||
```json
|
||||
```
|
||||
|
||||
## Umgebung
|
||||
|
||||
| Feld | Wert |
|
||||
|---|---|
|
||||
| OS | |
|
||||
| Node.js-Version | |
|
||||
| Playwright / Chromium | |
|
||||
| Game-`Aegis-Labyrinth.html`-Version | |
|
||||
| Suite-Version | |
|
||||
|
||||
## Zusätzliche Hinweise
|
||||
|
||||
Screenshots, Logs oder weitere Kontext-Informationen.
|
||||
@@ -0,0 +1,11 @@
|
||||
blank_issues_enabled: true
|
||||
contact_links:
|
||||
- name: Dokumentation (in-Repo)
|
||||
url: https://git.spaeth.biz/Lila-Kuh/Laby#dokumentation
|
||||
about: API, Audits, CI und Ausgabe-Formate sind in docs/ dokumentiert.
|
||||
- name: Changelog & Versionen
|
||||
url: https://git.spaeth.biz/Lila-Kuh/Laby/blob/main/CHANGELOG.md
|
||||
about: Laufende Version + Historie (Game + Suite).
|
||||
- name: Frage / allgemeine Hilfe
|
||||
url: https://git.spaeth.biz/Lila-Kuh/Laby/issues/new?template=bug_report.md
|
||||
about: Falls du dir unsicher bist, welcher Template-Typ passt.
|
||||
@@ -0,0 +1,38 @@
|
||||
---
|
||||
name: Feature Request
|
||||
about: Ein Vorschlag für eine neue Funktion, Erweiterung oder Verbesserung.
|
||||
title: '[Feat] '
|
||||
labels: ['enhancement', 'needs triage']
|
||||
---
|
||||
|
||||
## Kurzzusammenfassung
|
||||
|
||||
Worum geht es in einem Satz?
|
||||
|
||||
## Motivation
|
||||
|
||||
Warum ist diese Funktion / Erweiterung wichtig? Welchen konkreten Nutzen bringt sie?
|
||||
|
||||
- **Problem / Ziel:** …
|
||||
- **Nutzen für das Projekt:** …
|
||||
|
||||
## Vorschlag (konkret)
|
||||
|
||||
Beschreibe den gewünschten Ablauf oder die gewünschte Implementierung. Je konkreter, desto besser.
|
||||
|
||||
- Betroffene Skripte / Bereiche:
|
||||
- [ ] `tests/audit.mjs`
|
||||
- [ ] `tests/selfplay.mjs`
|
||||
- [ ] `tests/perf-test.mjs`
|
||||
- [ ] `tests/report.mjs`
|
||||
- [ ] CI-Workflow (`.gitea/workflows/aegis.yml`)
|
||||
- [ ] Dokumentation (`docs/`)
|
||||
- [ ] Sonstiges: …
|
||||
|
||||
## Alternativen (falls vorhanden)
|
||||
|
||||
Welche anderen Ansätze hast du schon in Betracht gezogen oder kennst du?
|
||||
|
||||
## Zusätzliche Hinweise
|
||||
|
||||
Beispiele, Links, Mockups oder verwandte Issues.
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
name: Performance Issue
|
||||
about: Ein Performance-Problem (FPS, Heap, Frame-Timing) im getesteten Game oder in der Suite.
|
||||
title: '[Perf] '
|
||||
labels: ['performance', 'needs triage']
|
||||
---
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
Kurz: Was ist langsam / wo genau?
|
||||
|
||||
## Messwerte
|
||||
|
||||
| Metrik | Wert | Ziel |
|
||||
|---|---|---|
|
||||
| FPS (Ø) | | ≥ 55 |
|
||||
| Heap (used) | | |
|
||||
| Frame-Timing (max) | | |
|
||||
|
||||
## Setup / Lastprofil
|
||||
|
||||
| Feld | Wert |
|
||||
|---|---|
|
||||
| Level (Index / Name) | |
|
||||
| Anzahl Türme | |
|
||||
| Messdauer (ms) | |
|
||||
| Anzahl Feinde | |
|
||||
|
||||
## `perf-result.json` (Ausschnitt)
|
||||
|
||||
```json
|
||||
```
|
||||
|
||||
## Beobachtete Problemzonen
|
||||
|
||||
- [ ] Particles (`Game.particles`)
|
||||
- [ ] Projectiles (`Game.projectiles`)
|
||||
- [ ] Holograms (`Game.holograms`)
|
||||
- [ ] Beams (`Game.beams`)
|
||||
- [ ] Enemy-Update (O(n²))
|
||||
- [ ] Sonstiges: …
|
||||
|
||||
## Erwartung
|
||||
|
||||
Was sollte erreicht werden (FPS-Ziel, Heap-Limit, spürbar glatter)?
|
||||
|
||||
## Hinweise / Reproduktion
|
||||
|
||||
Level, Turm-Aufstellung, Schritte. Siehe auch `docs/06_Refactoring_Game.md`.
|
||||
@@ -0,0 +1,120 @@
|
||||
name: Aegis CI
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- 'Aegis-Labyrinth.html'
|
||||
- 'tests/*.mjs'
|
||||
- '.gitea/workflows/aegis.yml'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'Aegis-Labyrinth.html'
|
||||
- 'tests/*.mjs'
|
||||
- '.gitea/workflows/aegis.yml'
|
||||
schedule:
|
||||
- cron: '0 2 * * *' # Nightly: 02:00 UTC
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
audit:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 10
|
||||
steps:
|
||||
- uses: gitea/checkout
|
||||
|
||||
- uses: gitea/setup-node
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- name: Install Playwright + Chromium
|
||||
run: npm i playwright && npx playwright install --with-deps chromium
|
||||
|
||||
- name: Run audits
|
||||
run: node tests/audit.mjs
|
||||
|
||||
- name: Assert audit results
|
||||
run: |
|
||||
node -e "
|
||||
const r = JSON.parse(require('fs').readFileSync('audit-result.json','utf8'));
|
||||
const fail = [];
|
||||
|
||||
// 1) Connectivity: jede Welle start- & exit-reachbar.
|
||||
if (!r.self.connectivity.every(c => c.reachable && c.exit)) fail.push('connectivity');
|
||||
|
||||
// 2) Attacks: jeder Turm muss entweder Projektile, Holos oder Schaden erzeugen.
|
||||
const badAttacks = r.self.attacks.filter(a => (a.projectiles||0)===0 && (a.holos||0)===0 && a.hurt===false);
|
||||
if (badAttacks.length) fail.push('attacks:' + badAttacks.map(a=>a.id).join(','));
|
||||
|
||||
// 3) Skills: alle Skills müssen Rank >= 4 erreichen.
|
||||
if (r.self.skills.some(s => (s.rank||0) < 4)) fail.push('skills');
|
||||
|
||||
// 4) Placement: Wall akzeptiert, Path abgelehnt.
|
||||
if (!r.self.placement || r.self.placement.wallAccepted === false || r.self.placement.pathAccepted === true) fail.push('placement');
|
||||
|
||||
if (fail.length) { console.error('FAIL:', fail.join(' | ')); process.exit(1); }
|
||||
console.log('✅ All audits passed');
|
||||
"
|
||||
|
||||
- name: Upload audit artifact
|
||||
if: always()
|
||||
uses: gitea/upload-artifact
|
||||
with:
|
||||
name: audit-result
|
||||
path: audit-result.json
|
||||
|
||||
perf:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 10
|
||||
steps:
|
||||
- uses: gitea/checkout
|
||||
- uses: gitea/setup-node
|
||||
with:
|
||||
node-version: 20
|
||||
- run: npm i playwright && npx playwright install --with-deps chromium
|
||||
- name: FPS measurement
|
||||
run: node tests/perf-test.mjs 10000 50
|
||||
- name: Upload perf artifact
|
||||
if: always()
|
||||
uses: gitea/upload-artifact
|
||||
with:
|
||||
name: perf-result
|
||||
path: perf-result.json
|
||||
|
||||
selfplay:
|
||||
needs: audit
|
||||
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- uses: gitea/checkout
|
||||
- uses: gitea/setup-node
|
||||
with:
|
||||
node-version: 20
|
||||
- run: npm i playwright && npx playwright install --with-deps chromium
|
||||
- name: Run 50 self-play episodes
|
||||
run: node tests/selfplay.mjs 50
|
||||
- name: Upload self-play artifact
|
||||
if: always()
|
||||
uses: gitea/upload-artifact
|
||||
with:
|
||||
name: selfplay-results
|
||||
path: selfplay-results.json
|
||||
|
||||
report:
|
||||
needs: [audit, perf]
|
||||
if: always()
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: gitea/checkout
|
||||
- uses: gitea/setup-node
|
||||
with:
|
||||
node-version: 20
|
||||
- name: Download artifacts
|
||||
uses: gitea/download-artifact
|
||||
- name: Build HTML report
|
||||
run: node tests/report.mjs
|
||||
- name: Upload report
|
||||
uses: gitea/upload-artifact
|
||||
with:
|
||||
name: report
|
||||
path: report.html
|
||||
Reference in New Issue
Block a user