RELEASE_CN.md
本文说明 OpenViking 仓库的发版目标、版本与 tag 约定、主要发版流程,以及补发和验证方式。内容以仓库中已追踪的 GitHub Actions、构建配置和包配置为准。
OpenViking 的发版目标不是单一产物,而是围绕不同使用入口发布一组相互关联的资产:
openviking Python 主包:面向本地运行时、服务端、CLI 及完整功能用户。openviking-sdk:面向只通过 HTTP 调用已有 OpenViking 服务的轻量客户端用户。ov CLI 的用户。openviking[bot] 和官方 Docker 镜像分发;历史独立发版入口单独说明,避免误用。一次正式主版本发版应确保 Python 包、Docker 镜像和 TOS 资产使用同一个主版本 tag;SDK、CLI、ClawHub 插件则使用各自独立的 tag 或 version 命名空间。
推荐使用以下 tag 约定:
| 产物 | 推荐 tag / version | 说明 |
|---|---|---|
openviking 主包 | vX.Y.Z | 主 release tag,例如 v0.3.26。 |
openviking-sdk | [email protected] | SDK 专用 tag,例如 [email protected]。 |
| Rust CLI / npm CLI | [email protected] | CLI 专用 tag,例如 [email protected]。 |
| ClawHub 插件 latest | YYYY.M.D 或 YYYY.M.D-N | 由 workflow 自动生成或手动指定。 |
| ClawHub 插件 dev | YYYY.M.D-dev.N | dev channel 使用。 |
主包版本通过 setuptools_scm 从 Git tag 解析;正式主发版建议统一使用 vX.Y.Z。SDK 版本同样通过 setuptools_scm 解析,但只匹配 python-sdk@* tag,以避免和主包 tag 混淆。
主包正式发版走根目录 GitHub Release:
v0.3.26。03. Release workflow 会在 Release published 时触发。_Build Distribution 构建 sdist 和多平台 wheel。Release TOS Upload workflow 会上传源码 zip 和安装脚本到 TOS。正式主发版的发布目标包括:
openvikingghcr.io/<owner>/<repo><dockerhub-user>/openvikinglatest 稳定路径根目录 release workflow 也支持手动触发,可选择发布目标:
none:只构建,不发布。testpypi:发布到 TestPyPI。pypi:发布到 PyPI。both:同时发布 TestPyPI 和 PyPI。如需基于已有构建产物补发 Python 包,可使用 _Publish Distribution workflow,并传入对应的 build run id。该流程适合发布失败后的补发,不建议作为正常主发版入口。
正式主发版时,Docker 镜像由主 release workflow 自动构建并发布。镜像会推送到 GHCR 和 Docker Hub,并在正式 release 下写入版本 tag 与 latest tag。
仓库还提供独立的 Build and Push Docker Image workflow,适用于:
main 分支镜像构建。注意:独立 Docker workflow 当前也会在 v*.*.* tag push 时自动触发。正式 GitHub Release 的发布口径仍以 03. Release workflow 为准;独立 Docker workflow 应视为镜像专用构建或补发路径,避免与正式 release 产物口径混淆。
为避免重复发布,正式版本优先使用主 release workflow;只有镜像补发或特殊验证时才使用独立 Docker workflow。
TOS 发布流程会生成源码 zip,并上传以下类型资产:
releases/<tag>/openviking-<tag>-source.zip正式 GitHub Release 会自动触发 TOS 上传。手动补发时可指定 tag,并通过 update_latest 决定是否覆盖稳定路径。
如果 TOS 相关 secrets 未配置完整,workflow 会跳过上传并在 step summary 中说明,不会使整个流程失败。
Python SDK 位于 sdk/python,PyPI 包名为 openviking-sdk。SDK 使用独立 tag 命名空间:
典型流程:
[email protected]。Python SDK Release workflow 被 tag 触发。setuptools_scm 解析 SDK 版本。python-sdk@<resolved-version>。sdk/python 并发布到 PyPI。SDK workflow 也支持手动触发,并可选择 testpypi、pypi 或 both。手动触发适合验证和补发;正式 SDK 发版建议使用 [email protected] tag。
Rust CLI 的 tag 格式为:
推送 cli@* tag 后,Rust CLI Build workflow 会为多个平台构建 ov 二进制,并发布 npm 包:
@openviking/cli-linux-x64、@openviking/cli-linux-arm64、@openviking/cli-darwin-x64、@openviking/cli-darwin-arm64、@openviking/cli-win32-x64@openviking/cliworkflow 会把 tag 中的版本写入平台包和 wrapper 包。如果 npm 上已存在同版本包,workflow 会跳过已发布版本。
OpenClaw 插件通过 ClawHub release (OpenViking plugin) workflow 手动发布。输入参数包括:
version:可选;为空时由 workflow 按日期自动生成。channel:auto、dev 或 latest。changelog:本次插件发布说明。workflow 会先解析 channel 和 version,再打包 examples/openclaw-plugin,推送生成的 package branch,最后调用 ClawHub 官方 trusted publishing workflow 发布。
推荐做法:
latest 或 auto。dev。VikingBot 当前不再作为推荐的独立 PyPI 包发版路径维护。现行分发方式是随主包发布:
pip install "openviking[bot]"。uv pip install -e ".[bot]"。--without-bot 或 OPENVIKING_WITH_BOT=0 关闭。根仓库中仍保留 First Release to PyPI workflow,但它会在 bot 目录执行独立 Python 包构建;当前 bot/ 目录没有独立的 pyproject.toml、setup.py 或 setup.cfg,因此该 workflow 应视为历史遗留配置,不建议用于新的 VikingBot 发版。
同时,bot/.github/workflows/release.yml 位于 bot 子目录,它应视为历史上的 bot 子项目或拆分仓库发布参考,不应当作根仓库当前可直接触发的 GitHub Actions workflow。如需恢复独立 vikingbot 包,需要先补齐 bot/ 下独立 Python 包配置、版本策略和发布凭证策略。
发版前建议逐项确认:
发版后建议验证:
pip install openviking==<version> 或 pip install openviking-sdk==<version> 可成功安装。latest / main tag。latest、main 和手动指定 tag 可通过镜像补发 workflow 重建,但应保留已发布版本 tag 的可追溯性。