Repository navigation
v1.3.4
⚠️ 如果你在用1.3.2或1.3.3的预构建镜像,请升级到本版 —— 那两个镜像里少了一个模块文件,容器会启动即崩(ModuleNotFoundError: No module named 'qoder_anthropic')。本版已修复,并加了 CI 冒烟防止再犯。
🐛 问题修复
- 镜像漏 COPY
qoder_anthropic.py(issue #23,报告者 loki0411):qoder_proxy.py从 1.3.2 起import qoder_anthropic,但Dockerfile的 COPY 清单是逐个文件枚举的,新增模块时漏了它 → 镜像里没有这个文件 → 容器启动即ModuleNotFoundError、无限重启。- 报告者的排查很完整(镜像内
find无该文件、镜像内qoder_proxy.py的 sha256 与 tag 一致、对照 1.3.1/1.2.19 自洽可启动),我们照此复现并修复; - 为什么我们的测试没抓到:所有测试都跑在源码树上,而这是镜像内容问题;CI 的构建步骤不会因为漏 COPY 而失败(构建本身成功)。四个发布的验证里,我们一次都没真正运行过容器 —— 这是流程缺口,不是测试缺口;
- 受影响范围:
1.3.2与1.3.3的预构建镜像(latest在 v1.3.4 发布前指向 1.3.3,因此也受影响)。源码运行不受影响; - 临时绕过(报告者提供,仍可用):compose 里挂只读文件
- ./qoder_anthropic.py:/app/qoder_anthropic.py:ro;升级到本版后可移除。
- 报告者的排查很完整(镜像内
✨ 新增功能
- CI 冒烟(防复发):构建之后新增一步,用本地单架构镜像实际跑三件事 ——① 按源码里的
import qoder_*反查每个模块文件是否真的在镜像里(这次就是这么漏的,将来任何新增文件忘 COPY 都会立刻红);②import qoder_proxy, qoder_anthropic确实可导入;③ 起容器并等/ping回应(60 秒超时,失败打印容器日志)。一句话教训:构建成功不等于镜像能跑。
- README 安装段补了镜像与版本直达入口(GHCR 包页面 + Releases 链接、可用 tag 形状、双架构说明、以及「仓库侧栏未必列出容器包」的提示)。
验证
- 双入口测试全绿:
tests/run_all.py→ 19 suites / 881 checks / 0 failed;_test_qoder.py→ 630 checks / 0 failed; - 镜像层验证由新增的 CI 冒烟承担:本版 CI 里会执行上面三步(其中第 ① 步在修复前必然失败 —— 因为
qoder_anthropic.py不在镜像里)。