Files
Auto-Trader/.github/workflows/test.yml
T
Gao Fengkai 832b2c9efd feat(desktop): add Electron shell lifecycle (#923)
* feat(desktop): add Electron shell lifecycle

Signed-off-by: QCYTSN <2558348385@qq.com>

* docs(desktop): document shell security boundary

Signed-off-by: QCYTSN <2558348385@qq.com>

* fix(desktop): address shell lifecycle review

Signed-off-by: QCYTSN <2558348385@qq.com>

* fix(desktop): constrain backend executable resolution

Signed-off-by: QCYTSN <2558348385@qq.com>

---------

Signed-off-by: QCYTSN <2558348385@qq.com>
2026-08-08 16:23:26 +08:00

164 lines
5.3 KiB
YAML

name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
# Manual trigger. On 2026-08-06 twelve commits landed on main without a
# single push-event run being created, and there was then no way to get a
# verdict on main short of pushing an empty commit.
workflow_dispatch:
jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: "3.11"
cache: pip
- name: Verify hash-locked dependencies
run: >-
pip install
--dry-run
--ignore-installed
--require-hashes
-r requirements-lock.txt
- name: Install dependencies
# `openbb` is included so agent/tests/test_openbb_bridge actually runs:
# those tests importorskip on openbb_ai, so without the extra the whole
# OpenBB Workspace bridge would report green while never being exercised.
# `stats` is included for the same reason: the quantlib econometrics
# tests skip without statsmodels/arch, and skipped is not tested.
run: pip install -e ".[dev,openbb,stats]"
- name: Verify optional extras under test are importable
# Fails loudly if an extra stops resolving, instead of letting its
# suite silently degrade to skips.
run: |
python -c "import openbb_ai, importlib.metadata as m; print('openbb-ai', m.version('openbb-ai'))"
python -c "import statsmodels; print('statsmodels', statsmodels.__version__)"
python -c "import arch; print('arch', arch.__version__)"
- name: Repository safety gates
run: bash tools/ci_grep_gates.sh
- name: Test environment variable gate
run: pytest tools/test_ci_env_var_gate.py -q
- 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@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: "22"
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
windows-background:
name: ${{ matrix.name }} / Python 3.14 background lifecycle
runs-on: ${{ matrix.runner }}
timeout-minutes: 10
strategy:
fail-fast: false
matrix:
include:
- name: Windows 11 ARM64
runner: windows-11-arm
architecture: arm64
- name: Windows Server 2025 x64
runner: windows-2025
architecture: x64
steps:
# actions/checkout v7.0.1
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
# actions/setup-python v7.0.0
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97
with:
python-version: "3.14"
architecture: ${{ matrix.architecture }}
cache: pip
- name: Install focused test dependencies
run: python -m pip install pytest pydantic pyyaml python-dotenv
- name: Run Windows background safety regressions
env:
PYTHONPATH: agent
run: >-
python -m pytest
agent/tests/test_background_tools.py
agent/tests/test_bash_tool.py
-q
desktop-electron-windows:
name: Windows desktop source lifecycle
runs-on: windows-2025
timeout-minutes: 30
steps:
# actions/checkout v7.0.1
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
# actions/setup-python v7.0.0
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97
with:
python-version: "3.12"
architecture: x64
cache: pip
# actions/setup-node v7.0.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020
with:
node-version: "22"
cache: npm
cache-dependency-path: desktop/electron/package-lock.json
- name: Install Vibe-Trading source backend
run: python -m pip install -e .
- name: Install desktop dependencies
working-directory: desktop/electron
run: npm ci
- name: Build desktop shell
working-directory: desktop/electron
run: npm run build
- name: Run desktop lifecycle and parent-death smoke tests
working-directory: desktop/electron
run: npm run smoke:lifecycle