关于 release-smoke-test
release-smoke-test 是用于 oh-my-opencode-slim 发布前验证的技能,面向准备发布到 npm 的维护者。它在临时应用中测试打包产物,并记录产物、环境、结果及限制。
主要功能
- 01构建并打包候选版本
- 02在临时应用中安装 tarball
- 03配置隔离的 OpenCode 环境
- 04检查插件来源与调试日志
- 05记录验证详情和限制
适用场景
- 01发布到 npm 前验证候选版本
- 02检查打包产物是否复现崩溃
- 03区分隔离测试与宿主提供方测试结果
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ alvinunreal/ oh-my-opencode-slim --skill release-smoke-test安装后在 Claude Code 中输入/release-smoke-test确认已加载。
详细介绍
发布冒烟测试
使用此技能在公开发布到 npm 前验证 oh-my-opencode-slim 候选版本。测试打包后的产物,而不是 @latest,也不是源码树。
核心工作流
- 从发布准备分支或提交开始。
- 构建并打包候选版本。
- 将 tarball 安装到临时应用中。
- 创建隔离的 OpenCode 配置,并指向已安装的
node_modules/oh-my-opencode-slim/dist/index.js。 - 运行
opencode debug config,并在进行隔离冒烟测试时,确认plugin_origins仅包含预期的插件。 - 运行非纯模式的
opencode run --print-logs --log-level DEBUG。 - 在隔离日志中搜索原始崩溃特征。
- 在发布 issue 或 PR 中记录确切的产物、模型、OpenCode 版本、命令形式、结果和限制。
打包候选版本
使用临时目录进行操作,确保发布验证不依赖本地包缓存。
SMOKE=/tmp/oh-my-opencode-slim-release-smoke
rm -rf "$SMOKE"
mkdir -p "$SMOKE/pkg" "$SMOKE/app" "$SMOKE/home" "$SMOKE/xdg/opencode" "$SMOKE/run"
bun run build
npm pack --pack-destination "$SMOKE/pkg"
安装 tarball:
cd "$SMOKE/app"
bun init -y
bun add "$SMOKE/pkg"/oh-my-opencode-slim-*.tgz
node -p "require('./node_modules/oh-my-opencode-slim/package.json').version"
隔离配置
编写最简 OpenCode 配置:
cat > "$SMOKE/xdg/opencode/opencode.json" <<EOF
{
"model": "opencode/deepseek-v4-flash-free",
"plugin": [
"file://$SMOKE/app/node_modules/oh-my-opencode-slim/dist/index.js"
],
"agent": {
"orchestrator": {
"model": "opencode/deepseek-v4-flash-free"
}
}
}
EOF
使用 env -i 可获得最干净的冒烟测试环境。它会清除主机上的 OPENCODE_*、ORCA_* 和项目覆盖变量,这些变量可能会在不知情的情况下添加插件或提供商别名。
env -i PATH="$PATH" HOME="$SMOKE/home" XDG_CONFIG_HOME="$SMOKE/xdg" \
opencode debug config
确认:
plugin_origins恰好只有一项。- 该项指向临时应用中打包后的
dist/index.js。 - 使用的模型符合本次冒烟测试的预期。
如果 OpenCode 需要使用主机环境中的提供商别名,请再运行一次非隔离的、针对特定模型的冒烟测试,并明确标注其隔离性较弱。
运行时冒烟测试
使用超时运行实际提示词:
env -i PATH="$PATH" HOME="$SMOKE/home" XDG_CONFIG_HOME="$SMOKE/xdg" \
timeout 120 \
opencode run --print-logs --log-level DEBUG "Say OK only."
预期结果:
OK
在日志中搜索错误特征。对于 OpenCode 1.17.11 的格式错误消息崩溃,请使用:
rg "message\\.info\\.role|undefined is not an object|Cannot read properties of undefined|TypeError" \
"$SMOKE/home/.local/share/opencode/log" -n 2>/dev/null || true
不应出现任何匹配项。
OpenAI / 主机提供商冒烟测试
如果完全隔离的环境无法解析 OpenAI 提供商别名,请单独运行主机提供商冒烟测试,同时确保插件路径仍指向 tarball 安装位置。
mkdir -p "$SMOKE/config"
cat > "$SMOKE/config/opencode.json" <<EOF
{
"model": "openai/gpt-6-sol-fast",
"plugin": [
"file://$SMOKE/app/node_modules/oh-my-opencode-slim/dist/index.js"
],
"agent": {
"orchestrator": {
"model": "openai/gpt-6-sol-fast"
}
}
}
EOF
OPENCODE_CONFIG_DIR="$SMOKE/config" \
timeout 120 \
opencode run --print-logs --log-level DEBUG "Say OK only."
请将其报告为主机提供商冒烟测试,因为现有的项目、用户或 Orca OpenCode 配置仍可能被合并。使用 opencode debug config 说明还加载了哪些配置。
报告模板
## Release-candidate smoke validation
- Commit under test:
- Tarball:
- Installed package version:
- OpenCode version:
- Config isolation: sanitized `env -i` / host-provider
- Plugin origin:
- Model:
- Command:
- Result:
- Crash signature search:
- Limitations:
评论
支持 Markdown