test(starry): add Python web framework carpet (python-net)#1441
Conversation
apps/starry/python-net 在 StarryOS 上用 musl-native CPython 3.14 对一组 Python Web / ASGI / GraphQL 框架做 on-target 地毯级测试:Django(经 test.Client 驱动内存 sqlite,路由/视图/ORM/ 模板/表单/中间件)、FastAPI + uvicorn(路由/Pydantic 类型转换/依赖注入/OpenAPI,并经真实 uvicorn ASGI 服务器 over IPv4 回环)、Strawberry GraphQL(schema/查询/mutation/scalar/异步 resolver), 合计 3 模块、395 条精确值断言。四架构(x86_64 / aarch64 / riscv64 / loongarch64)单核 qemu-10 StarryOS 实测各 PYTHON_NET_OK=3/3 通过。prebuild.sh 经 qemu-user-static 把 CPython 3.14 与各 框架 apk 装进 base-rootfs staging(原生 pydantic-core 按 target 架构解析),解压 strawberry + 其依赖的 cross-web wheel 进 site-packages,再注入 per-app overlay。 Signed-off-by: 林晨 (Leo Cheng) <chengkelfan@qq.com>
There was a problem hiding this comment.
Review: PR #1441 — test(starry): add Python web framework carpet (python-net)
变更概述
新增 apps/starry/python-net/,在 StarryOS 上用 musl-native CPython 3.14 对 Django 4.2.30、FastAPI 0.121.2 + uvicorn 0.38.0、Strawberry GraphQL 0.316.0 三个 Python Web 框架做 on-target 地毯级测试,覆盖四架构(x86_64 / aarch64 / riscv64 / loongarch64)。16 个新文件,+3072 行,纯增量,零删减。
结构与模式一致性
- 文件布局完全对齐
apps/starry/python-lang/:README.md、build-.toml、qemu-.toml、prebuild.sh、python/ 测试模块。 - 四个 build-*.toml 与 python-lang 完全一致(diff 为空)。
- qemu-*.toml 使用合理的 2048M 内存(Web 框架比纯 Python 语言测试重),loongarch64 超时 18000s,其余 6000s——合理。
success_regex/fail_regex配置正确,能可靠捕获TEST PASSED/TEST FAILED/ panic。
prebuild.sh
- 与 python-lang 结构一致:extract base rootfs → normalize symlinks → apk add python3 + 框架包 → copy to overlay。
- 安装包列表完整:
python3 py3-django py3-fastapi uvicorn py3-pydantic py3-graphql-core py3-asgiref py3-dateutil py3-packaging。 - 通过
qemu-user-static运行apk add,自动解析目标架构的 native 包(含 pydantic-core)。 - strawberry-graphql 和 cross-web 以
.whl资产形式内嵌,解压进 site-packages——合理(无 apk 包)。 - 版本门控
>= 3.14确保不在低版本解释器上跳过检查。
测试模块
- DjangoCarpet.py(765 行 / 157 断言):路由/转换器/FBV/CBV/响应/ORM/sqlite/模板/表单/中间件/signing/cache,通过
django.test.Client+ 内存 sqlite。 - FastapiCarpet.py(1065 行 / 132 断言):in-process ASGI + 真实 uvicorn over IPv4 回环,路由/参数/422 校验/Depends/中间件/OpenAPI/Pydantic 2。
- StrawberryCarpet.py(860 行 / 106 断言):schema/查询/mutation/enum/interface/union/自定义 scalar/async resolver/内省/错误路径/泛型/SDL。
- 每个模块:chk() 计数器 +
XXX_RESULT ok=N fail=M+ 仅 fail=0 时打印XXX_DONE+ 非零退出。 - run_all.py:子进程运行全部模块,仅 3/3 通过时输出
TEST PASSED+ exit 0,否则TEST FAILED+ exit 1——失败传播正确。
重复 / 重叠分析
- base 分支无
python-net相关代码。 - PR #1440(node-lib)由同一作者提交,但覆盖完全不同的测试面(Node.js 库 vs Python Web 框架),无重叠。
CI 状态
Detect changed paths— successCancel stale CI runs— successmatrix.name× 2 — skipped(PR 不含 Rust/Cargo 变更,符合路径过滤预期)Publish axvisor-lvz / base container image— skipped(同上)- 无失败,无 PR 引起的 CI 问题。
阻塞项检查
- ✅ 无 Rust 代码变更(不需要 cargo fmt / clippy / test)
- ✅ 无 Cargo.toml / Cargo.lock 变更(不涉及 crates.io patch 问题)
- ✅ 无公共 API 或架构变更
- ✅ 无安全/数据丢失/资源泄漏风险
- ✅ 测试失败传播链完整
- ✅ 无重复 PR
结论
PR 结构规范、对齐已有模式、测试覆盖充分、失败传播正确、CI 无异常、无阻塞项。APPROVE。
Powered by mimo-v2.5-pro
ZR233
left a comment
There was a problem hiding this comment.
复审当前 head f534842cf1132e5a1b85c71e65752edd9b3c746a,本轮同意合入。
这个 PR 新增 apps/starry/python-net,属于 operator-facing Starry app workflow,放在 apps/starry 层级是合适的,没有把 app 场景塞进 test-suit/starryos。目录结构包含四架构 build/qemu 配置、prebuild.sh、两个 wheel 资产和 python/ 下的 Django/FastAPI/Strawberry carpet 模块;qemu-*.toml 使用 python3 /usr/bin/run_all.py 作为 guest entry,success_regex 只匹配单独一行 TEST PASSED,fail_regex 覆盖 panic 与 TEST FAILED,失败传播链清晰。
实现/准备逻辑方面,prebuild.sh 会从 managed Alpine rootfs 抽取 staging root,经 qemu-user-static 在目标架构 rootfs 里安装 CPython 3.14 与 Django/FastAPI/uvicorn/Pydantic/graphql-core 等包,再把解释器、stdlib/site-packages、native .so 依赖闭包和 carpet 模块注入 overlay;脚本还对 Python 版本做了 >=3.14 门控,不会在旧解释器上静默降级。run_all.py 逐个运行三个模块,只在全部模块通过时输出 TEST PASSED。
验证结果:
- 语法/静态检查:
bash -n apps/starry/python-net/prebuild.sh通过;python3 -m py_compile覆盖DjangoCarpet.py、FastapiCarpet.py、StrawberryCarpet.py、run_all.py均通过。 - 手动 runtime:在当前 head 本地运行
cargo xtask starry app qemu -t python-net --arch x86_64通过。guest 输出DJANGO_RESULT ok=157 fail=0、FASTAPI_RESULT ok=132 fail=0、STRAWBERRY_RESULT ok=106 fail=0、PYTHON_NET_OK=3/3,最终打印TEST PASSED并命中 success regex。 - CI:current-head GitHub checks 只有路径过滤/取消陈旧 run 等通用检查成功,app QEMU 没有被 CI 自动覆盖;本次手动 x86_64 runtime 覆盖了 CI-missing app workflow。多架构声明中 aarch64/riscv64/loongarch64 未在本轮本地重复跑,后续若要把该 app 纳入必跑矩阵,需要单独接入 CI 或提供可追溯的多架构日志。
重复/重叠检查:base 分支没有 apps/starry/python-net;open PR 中没有另一个同类 Python Web framework carpet。#1437-#1440 是同作者的 Java/Node 其他 app 场景,测试面不同,属于并列 app 覆盖而非重复。未发现阻塞问题。
概述
新增
apps/starry/python-net—— 在 StarryOS 上用 musl-native CPython 3.14 对一组 Python Web / ASGI / GraphQL 框架做 on-target 地毯级测试,四架构(x86_64 / aarch64 / riscv64 / loongarch64)单核 qemu-10 运行。每个模块是依框架公开 API 逐项铺满的工业级 carpet(精确值断言):Django 经
django.test.Client驱动内存 sqlite;FastAPI 既经 in-process 原生 ASGI、又经真实 uvicorn ASGI 服务器 over IPv4 回环驱动;Strawberry 执行真实 GraphQL 操作。每个模块仅当其内部 fail 计数为 0 时才打印锚定的*_DONEmarker。run_all.py运行全部 3 个模块,全部通过(PASS == TOTAL,无 skip)才输出TEST PASSED。合计 3 模块 / 395 条断言。覆盖
验证
四架构单核 qemu-10 StarryOS 实测,
AGGREGATE PASS=3/3+PYTHON_NET_OK=3/3+TEST PASSED:运行:
cargo xtask starry app qemu -t python-net --arch <arch>。prebuild.sh把 CPython 3.14 与各框架(Django / FastAPI / uvicorn / Pydantic + 原生 pydantic-core / GraphQL-core)经 qemu-user-staticapk add进 base-rootfs staging(每包含原生pydantic-core按 target 架构解析),把架构无关的strawberry-graphqlwheel 解压进 site-packages,再把解释器、其共享库闭包、stdlib + site-packages 与 carpet 模块注入 per-app overlay。