Files
okxlin 2510118f57 fix: restore Actions and update dsh to 0.2.2-rc.1 (#112)
Build DeepSeek Harness from the immutable 0.2.2-rc.1 source and refresh
Caddy, npm, Docker CLI, Buildx and reviewed runtime dependencies.

Accept the expanded Caddy CEL import layout and await the asynchronous
session-log service in smoke checks without changing the opt-out policy.
Redact generated access-token URLs in failure diagnostics.

Repair OpenClaw's Zod 4.6.7 compatibility pin and replace vulnerable Joi
18.2.9 with the integrity-checked 18.3.1 package. Preserve pnpm consumers,
A2UI's v3 entry and the bounded-container protections.
2026-11-05 13:18:54 +08:00
..

OpenClaw Sandbox 构建

从 openclaw/openclaw 最新稳定 release 的确定提交构建,发布仓库为 ghcr.io/okxlin/openclaw-sandbox 和 docker.io/$DOCKERHUB_USERNAME/openclaw-sandbox, 标签均为 <上游 release>-sandbox 和 latest。

复用 DSH 的仓库配置:DOCKERHUB_USERNAME 可设为 Actions variable 或 secret, DOCKERHUB_TOKEN 设为 secret。令牌只用于发布阶段的 Docker Hub 登录,不传入镜像构建。

configs/components.json 统一记录 Node 维护通道、npm、Docker CLI/Compose 源码和 Go 工具链, 以及内嵌依赖补丁和测试镜像。正常版本维护先改清单,Dockerfile 的安装逻辑由 scripts/apply-openclaw-runtime-hardening.sh 根据上游构建阶段生成。

每日 workflow 使用 Registry Bearer 认证读取已发布镜像,Docker Hub 镜像须可公开拉取。只有 404 表示不存在;认证、网络及元数据 校验失败会停止。上游提交、基础镜像 digest、构建配方变化或构建满七天都会触发重建; 手动输入 force_rebuild=true 可强制重建。解析结果随 CI 保留,包含本次确定的输入和重建原因。 仅当两个仓库的版本标签和 latest 都指向同一份新鲜镜像时跳过;镜像缺失或发布中断会触发重试。 强制构建跳过旧镜像查询,可用于首次发布或迁移 Docker Hub 命名空间。

补建失败的历史版本时,手动填写 upstream_tag(例如 v2026.10.1)。工作流验证该稳定 release 并解析其确定提交,只检查和发布该版本的 -sandbox 标签,两个仓库的 latest 均保持不变。留空则继续跟踪最新稳定版;历史版本同样必须通过当前构建、运行测试和安全扫描。

验证在原生 amd64 runner 上完成:网关启动、错误 token 拒绝、带凭据的健康查询,以及 OpenClaw 实际创建、执行、列出和重建沙箱。测试使用独立 Docker daemon、临时命名卷和无网络沙箱, 不会把宿主 Docker socket 交给应用。该测试不调用外部模型。arm64 尚未纳入此镜像的发布范围。

Copilot 平台包内的 Foundry SDK 自带 adm-zip,无法通过 OpenClaw 的 pnpm override 更新。 构建只替换其中受影响的 0.5.17 副本,使用 SHA-512 固定的 MIT 许可版 0.6.0;保留许可和补丁记录。 回归检查覆盖正常 ZIP 读取,并阻止伪造大小字段触发巨额预分配: https://github.com/advisories/GHSA-xcpc-8h2w-3j85。

MCP OAuth 修复同步更新 SDK 1.31.0、client/core 2.2.0,并在实际依赖上验证 issuer 绑定和正常授权。 已有部署中,未记录 issuer 的旧 OAuth 凭据仍需重新授权,或依据可信的原授权服务器信息补充绑定; 预配置的 OAuth provider 也必须设置 expectedIssuer。镜像构建不会修改持久化凭据。 详见官方迁移说明:https://github.com/modelcontextprotocol/typescript-sdk/security/advisories/GHSA-6qxp-vccf-f47h。

运行时依赖替换使用 components.json 中的官方 npm tarball 和 SHA-512,保留 pnpm 消费者链接。 同样的依赖修补在 UI/A2UI 打包前执行,并使 A2UI 旧 bundle 缓存失效,避免内联旧代码。 Zod 使用 4.6.7 完整包;原 3.25.76 目录的默认入口仍指向 v3,以保持 A2UI 和 JSON Schema 转换兼容。 构建为 v3 的 .max()、.length()、.size() 补上元素解析前的超限拒绝,v4 使用上游修复; 未声明上界的容器保持原有语义。来源、路径及本地兼容修改记录在镜像的 /usr/share/doc/release-factory/openclaw-runtime-deps.json。

Joi 使用 18.3.1 修复多邮箱分隔符的二次方正则开销;构建验证默认及自定义分隔符的长空白输入: https://github.com/hapijs/joi/security/advisories/GHSA-4528-x5fx-h6hg。

镜像扫描采用 configs/trivy-policy.json:可修复 CRITICAL 阻断,应用目录的 HIGH/CRITICAL 阻断, 其余开发工具和系统包 HIGH 保留报告。测试和扫描通过后将同一个镜像推送到两个仓库,不再二次构建。 两端暂存镜像均验证通过后才发布版本标签;两端版本标签均验证通过后才更新 latest。 任一端失败都会使 workflow 失败,PR 验证不执行登录或推送。

TypeScript 7 原生编译器虽是开发依赖,仍可能经可选 peer 进入生产依赖树。 构建完成后的 runtime-assets 阶段会清理它的 pnpm 包、引用和 tsc 入口, 避免把编译器内的旧 Go 运行库带入成品镜像;TypeScript 5 运行时 API 和其他依赖保留。 若上游将 TypeScript 声明为直接运行依赖,清理会停止并要求重新审查。

本地可先运行以下检查,再按解析出的 build_args 构建上游检出目录:

python3 scripts/test-resolve-openclaw-inputs.py
bash scripts/test-apply-openclaw-runtime-hardening.sh
python3 scripts/resolve-openclaw-inputs.py --output /tmp/openclaw-inputs.json
# 上游目录必须检出为 openclaw-inputs.json 中的 upstream_sha
bash scripts/apply-openclaw-runtime-hardening.sh /path/to/openclaw-src
python3 scripts/smoke-openclaw.py your-local-image