用途:release-cog 帮助发布 Cog 新版本,规范并逐步执行 Cog 的发布流程。Cog 是多语言多构件项目,需协调多个发布产物。
发布产物包括:CLI 二进制(Go,macOS/Linux,x86_64/ARM64);coglet Python wheel(Rust/PyO3,Linux x86_64/ARM64、macOS ARM64);cog SDK Python wheel(Python,通用);coglet Rust crate(发布到 crates.io)。发布类型分稳定版(如 v0.18.0,走 main,发布到 PyPI、crates.io、Homebrew)、预发布版(如 v0.18.0-rc1,走 main,到 PyPI、crates.io,不更新 Homebrew)、开发版(如 v0.18.0-dev2,任意分支,均不发布)。
主要流程:用 mise run version 查看版本,mise run version:bump 0.18.0 更新 VERSION.txt、Cargo.toml、Cargo.lock 并提交;创建 release/v0.18.0 分支并推送;用 gh pr create --base main --head release/v0.18.0 向 main 提 PR 并合并;从 main 打标签并推送(稳定版 git tag v0.18.0;预发布 git tag v0.18.0-rc1;开发版 git tag v0.18.0-dev1);用 gh workflow view release-build.yaml 或 gh run watch 监控构建;稳定版/预发布版需在 GitHub Releases 页面发布草稿,触发 release-publish.yaml 发布到 PyPI 和 crates.io。
自动化工作流:release-build.yaml 在版本标签触发,校验标签与 VERSION.txt、Cargo.toml 一致,校验稳定/预发布标签在 main 上,构建 SDK wheel 与各平台 coglet wheel,用 GoReleaser 构建 CLI 并创建草稿;release-publish.yaml 在发布时触发,发布 coglet wheel 与 crate、cog SDK 到 PyPI,稳定版更新 Homebrew tap。
版本文件:VERSION.txt 为唯一版本来源,另有 crates/Cargo.toml 和 Cargo.lock。SDK 对 coglet 的版本约束在构建时更新为匹配版本。
发布前检查:mise run test 与 mise run lint 通过,版本正确且 mise run version:check 通过,Cargo.toml 与 VERSION.txt 一致,更新变更日志与文档。
限制与排错:版本不一致、标签不在 main 会报错;失败发布需删除 release 与标签后重试;紧急时可用 twine 手动发布 wheel,并先发布 coglet 再发布 cog。发布依赖 OIDC 受信任发布及配置 pypi、crates-io、homebrew 环境,另需 CGO 和 Zig 用于特定构建。