feat: add sdk isolation release gate

This commit is contained in:
2026-09-20 00:32:04 +08:00
parent 2c8d13a523
commit a722d19cd9
7 changed files with 108 additions and 2 deletions

View File

@@ -4,6 +4,8 @@
module:`git.yuntuo.hk/k2safe/orbit/sdk/go`。SDK 使用独立 go.mod,依赖 Go 标准库与 `github.com/coder/websocket v1.8.15`,不引用服务端模型或数据库实现。
发布候选先执行 [SDK 独立发布门禁](release.md),确认 `GOWORK=off` 下依赖图、竞态测试、vet 和全包构建均通过;门禁不替代协议兼容矩阵或业务副作用回归。
任务相对延迟使用SubmitTaskRequest.DelayMS,由数据库首次受理时间计算,原键重报不重新计时;[完整延迟示例](../examples/delayed-task.md)包含Worker执行和历史核对。非零DelayMS不能与AvailableAt同用,旧服务须先升级。
[流程历史查询](../api/workflow-history.md)已提供激活/轮次/信号有界分页、历史等待与预算详情及显式权限的信号操作审计;当前视图与指定历史激活分开。

38
docs/sdk/release.md Normal file
View File

@@ -0,0 +1,38 @@
# SDK 独立发布门禁
SDK 位于独立 Go module `git.yuntuo.hk/k2safe/orbit/sdk/go`。它只能依赖 Go 标准库和显式锁定的 WebSocket 客户端,不引用 Orbit 服务端模型、存储实现、迁移代码或 MySQL 驱动。业务项目通过 SDK 接入,不需要把服务端仓库加入自己的 `go.mod`。
## 发布前检查
在仓库根目录执行:
``@@BT@sh
GO=/path/to/go \
sh scripts/test-sdk-isolation.sh
``@@BT@
门禁会强制 `GOWORK=off`,检查 `go.mod` 和完整依赖图,然后运行:
- `go test -race ./...`
- `go vet ./...`
- `go build ./...`
成功输出示例:
``@@BT@json
{"sdk_module":"git.yuntuo.hk/k2safe/orbit/sdk/go","independent":true,"package_count":27,"forbidden_dependencies":0}
``@@BT@
`package_count` 随示例增加而变化,不能作为兼容性版本号。门禁只证明源码在当前 Go 工具链下保持独立和可构建,不代表已经发布到远端模块代理,也不替代旧 SDK/新服务端和新 SDK/旧服务端的协议兼容矩阵。
## 接入方式
SDK 尚未发布正式标签时,开发项目可以使用本地 replace;发布候选必须使用独立 module 的版本标签和干净 checkout 验证。接入方应固定 SDK 版本,升级前先执行自己的接口和业务幂等回归:
``@@BT@sh
go mod edit -require=git.yuntuo.hk/k2safe/orbit/sdk/go@v0.0.0
go mod edit -replace=git.yuntuo.hk/k2safe/orbit/sdk/go=/absolute/path/to/orbit/sdk/go
go mod tidy
``@@BT@
替换路径只用于本地开发,不能提交到业务项目的发布分支。SDK 不负责 TLS 终止、凭据托管、对象存储或外部副作用核查;这些边界仍由平台接口手册和接入方运行手册定义。