Skip to content

v1.3.4

Choose a tag to compare

@shuishuipingan shuishuipingan released this 09 Oct 07:47
· 23 commits to main since this release

⚠️ 如果你在用 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 不在镜像里)。