name: tests # 说明:本文件是仓库里第一份 CI 配置,**尚未在 GitHub 上真跑过**(本机没有 # 可用的 runner)。跑之前有两个已知的、需要按仓库实际情况确认的点: # # 1. pyproject.toml 把 uv 的默认索引指到了清华镜像;GitHub runner 在境外, # 这里用 UV_DEFAULT_INDEX 覆盖回 PyPI,免得依赖国内镜像的可用性; # 2. Ubuntu 上 Qt 需要一批系统库(libGL/libEGL/xkbcommon…),缺了会让 # QApplication 建不起来——下面的 apt 步骤只为让 GUI 测试能跑,不想装 # 就把那一步删掉,GUI 测试会因为 import 失败自动跳过(见 test_client_ui.py # 顶部的 HAVE_QT 约定)。 # # 测试用标准库 unittest 编写,所以不需要 pytest;Windows 是客户端的目标平台, # Ubuntu 用来兜住"纯标准库层 + 服务端示例"的跨平台回归。 on: push: branches: [main, master] pull_request: env: UV_DEFAULT_INDEX: https://pypi.org/simple jobs: test: name: ${{ matrix.os }} / py3.13 runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [windows-latest, ubuntu-latest] steps: - uses: actions/checkout@v4 - uses: astral-sh/setup-uv@v5 with: enable-cache: true - name: 安装 Qt 运行库(Linux) if: runner.os == 'Linux' run: | sudo apt-get update sudo apt-get install -y --no-install-recommends \ libgl1 libegl1 libxkbcommon-x11-0 libdbus-1-3 libnss3 \ libxcb-cursor0 libxcb-icccm4 libxcb-keysyms1 libxcb-shape0 \ libasound2t64 - name: 同步依赖(GUI + FastAPI extras) run: uv sync --extra gui --extra fastapi - name: 全量测试 # 走 tests/run_tests.py:QtWebEngine 在 offscreen 下的解释器退出路径会崩 # (测试全绿、退出码却是 139),runner 按 unittest 的结果 os._exit run: uv run python tests/run_tests.py