name: CI on: push: branches: [main] pull_request: branches: [main] jobs: test: runs-on: ubuntu-latest timeout-minutes: 10 steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6 with: python-version: "3.11" cache: pip - name: Install dependencies run: pip install -e ".[dev]" - name: CI env var gate run: python tools/ci_env_var_gate.py - name: Syntax check run: | cd agent python -m compileall -q cli python -m py_compile api_server.py python -m py_compile mcp_server.py python -m py_compile src/agent/loop.py python -m py_compile src/tools/__init__.py python -m py_compile backtest/runner.py - name: Run tests # test_e2e_harness_v2.py is gated by VIBE_TRADING_RUN_LIVE_E2E # (real-LLM only); list --ignore here so CI's intent is explicit and # the suite never silently switches state on env presence. run: pytest --ignore=agent/tests/e2e_backtest --ignore=agent/tests/test_e2e_harness_v2.py --cov=agent --cov-report=term-missing --cov-report=xml --tb=short -q - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: node-version: "20" cache: npm cache-dependency-path: frontend/package-lock.json - name: Frontend build run: | cd frontend npm ci npm run build - name: Frontend tests run: | cd frontend npx vitest run --reporter=verbose