Files
FinDataHub/.github/workflows
FinDataHub ad3dbdb9dc ci: 新增 Windows job 与 MySQL service
## Windows 跨平台回归(观察期,不阻塞)

目的:验证 paths.py / process_utils.py 在 win32 上真的可用,而不是"写完就算"。
这两个模块已接线 4 个脚本,一旦 Windows 分支写错,表现是采集器静默不启动
或 PID 检测失效——本地 macOS 上完全看不出来。

**范围有意收窄:不装 akshare**。它传递依赖 py_mini_racer(62MB V8 预编译),
Windows 上是否有 3.12 wheel 未验证,属迁移计划列明的唯一硬阻塞点。
在验证它之前塞进 CI 只会让 job 长期飘红、失去信号价值。

覆盖:check_python_version --strict → compileall → test_paths_process_utils
(32 条,核心)→ Scripts/bin/tests(252 条,此前只在 POSIX 跑过)→ core + client。

continue-on-error: true + 注释写明转正条件(连续两次全绿后删掉)。
首次接跨平台 CI 若直接阻塞,一次环境差异就把主线挡死,反而逼人绕过它。

已提前修掉一处确定会失败的用例:test_newsflash_collect 的 SIGTERM 留痕测试。
Windows 的 send_signal(SIGTERM) 实际走 TerminateProcess,不触发子进程里的
Python handler,断言必然失败。已加 skipif 并注明该能力本身是 POSIX 专属。

## MySQL service(集成测试转阻塞)

python job 增加 services: mysql(mysql:8.0),集成测试成为阻塞性步骤。

三个必须处理的差异:
1. 认证插件:MySQL 8 默认 caching_sha2_password,首次连接走 full path
   需 RSA → 装 cryptography,另加 --default-authentication-plugin 双保险
   (注意 8.4 起该参数已移除,升镜像需同步改)。
   ⚠️ 本机某些 venv 没装 cryptography 也能连——那是认证缓存命中 fast path,
   不代表 CI 也需要。只看本地结果会误判依赖冗余。
2. 版本:CI 8.0 vs 生产 26.7。事务/回滚语义一致(InnoDB),套件只用
   CREATE TABLE + UNIQUE KEY,无版本敏感语法。
3. YAML 的 >- 折叠块内不能写注释:'#' 会被当成内容传给 docker,容器启动即失败。
   注释必须置于 options: 之前(已用 assert '#' not in opts 验证)。

两级排除避免重复跑:python job 单元测试步骤与 windows job 均加
--ignore=.../integration。
2026-10-26 20:56:01 +08:00
..