Files
Laby/.gitea/workflows/aegis.yml
T
2026-08-29 03:08:17 +02:00

121 lines
3.6 KiB
YAML

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@v2
- uses: gitea/setup-node@v1
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@v2
with:
name: audit-result
path: audit-result.json
perf:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: gitea/checkout@v2
- uses: gitea/setup-node@v1
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@v2
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@v2
- uses: gitea/setup-node@v1
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@v2
with:
name: selfplay-results
path: selfplay-results.json
report:
needs: [audit, perf]
if: always()
runs-on: ubuntu-latest
steps:
- uses: gitea/checkout@v2
- uses: gitea/setup-node@v1
with:
node-version: 20
- name: Download artifacts
uses: gitea/download-artifact@v2
- name: Build HTML report
run: node tests/report.mjs
- name: Upload report
uses: gitea/upload-artifact@v2
with:
name: report
path: report.html