name: Balance Check on: push: branches: [main] paths: - 'packages/shared/src/constants/**' - 'packages/game-engine/src/**' - 'packages/game-simulation/**' pull_request: branches: [main] paths: - 'packages/shared/src/constants/**' - 'packages/game-engine/src/**' - 'packages/game-simulation/**' jobs: balance-simulation: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install pnpm uses: pnpm/action-setup@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '22' cache: 'pnpm' - name: Install dependencies run: pnpm install --frozen-lockfile - name: Run greedy simulation run: pnpm --filter @ai-tycoon/game-simulation simulate:ci - name: Run random simulation if: always() run: | cd packages/game-simulation npx tsx src/simulate.ts --strategy random --ticks 28800 --json --seed 42 - name: Upload balance reports if: always() uses: actions/upload-artifact@v4 with: name: balance-reports path: | packages/game-simulation/balance-report*.json packages/game-simulation/balance-metrics*.csv multi-run-balance: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install pnpm uses: pnpm/action-setup@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '22' cache: 'pnpm' - name: Install dependencies run: pnpm install --frozen-lockfile - name: Run multi-simulation (5 runs) run: pnpm --filter @ai-tycoon/game-simulation multirun -- --runs 5 --parallel 2 --strategy greedy --ticks 28800 --no-timeseries - name: Interpret results if: always() run: pnpm --filter @ai-tycoon/game-simulation interpret -- --summary packages/game-simulation/multirun-summary.csv - name: Upload multi-run reports if: always() uses: actions/upload-artifact@v4 with: name: multirun-reports path: packages/game-simulation/multirun-*.csv