尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Telepresence 版本发布前的本地准备:深入解析 `make prepare-release` 技能与发布流程

Telepresence 版本发布前的本地准备:深入解析 `make prepare-release` 技能与发布流程 云原生开发工具微服务网络【免费下载链接】telepresenceLocal development against a remote Kubernetes or OpenShift cluster项目地址https://gitcode.com/gh_mirrors/te/telepresence点击查看免费下载导读本文围绕 Telepresence 仓库中prepare-release技能.claude/skills/prepare-release/SKILL.md展开系统讲解在本地为 Telepresence 打版本提交与标签的完整操作、前置校验、版本命名规范、与CHANGELOG.yml、go.mod及ship-release技能的衔接关系。读完本文你将掌握如何通过设置TELEPRESENCE_VERSION并运行make prepare-release安全地完成一次本地发布准备并理解其背后的 Makefile 实现原理与边界约束。一、prepare-release技能是什么一次显式的本地发布准备动作在 Telepresence 仓库中发布流程被拆分为两个明确的阶段prepare-release在本地创建发布提交与两个带注释的标签annotated tag到此为止不推送任何内容ship-release承接上一阶段负责推送分支与标签、驱动 CI、生成文档 PR 并合并最终完成发布。prepare-release技能见 .claude/skills/prepare-release/SKILL.md就是对make prepare-release这一步骤的封装其核心设计意图是让本地打标签成为一次明确的用户动作而不是一串需要靠记忆拼接的命令它只停留在本地提交与本地标签推送交给ship-release它被标记为user-onlydisable-model-invocation: true这些标签最终会驱动公开发布因此创建标签必须由用户显式决策绝不能成为模型推断意图后的副作用。二、动手之前四项强制前置检查技能要求在运行任何命令之前先向用户明确展示以下四项检查结果并等待用户明确同意go后再执行#检查项具体要求1版本字符串TELEPRESENCE_VERSION必须是以下三种格式之一vX.Y.Z-test.N预发布无 Homebrew、不标记 latest、vX.Y.Z-rc.N预发布无 Homebrew、不标记 latest、vX.Y.ZGA标记 latest触发 Homebrew 更新2分支应为发布分支典型为release/v2拒绝在main风格分支上继续3工作区状态必须干净运行git status若存在与构建相关的未提交或未跟踪文件则停止4CHANGELOG.yml状态顶部条目的版本应与TELEPRESENCE_VERSION匹配不带开头的v若其date仍为(TBD)是预期现象——make prepare-release会为 GA 版本自动写入日期这四项检查分别对应仓库中的哪些事实从源码看版本字符串校验在 Makefile 中即有体现TELEPRESENCE_VERSION必须匹配v2.*否则 make 直接报错终止$(if $(filter v2.%,$(TELEPRESENCE_VERSION)),\ $(info [make] TELEPRESENCE_VERSION$(TELEPRESENCE_VERSION)),\ $(error TELEPRESENCE_VERSION variable is invalid: It must be a v2.* string, but is $(TELEPRESENCE_VERSION)))CHANGELOG.yml的date: (TBD)自动补全逻辑在 build-aux/main.mk当TELEPRESENCE_VERSION匹配v[0-9]\.[0-9]\.[0-9]即 GA 格式时用sed将date: (TBD)替换为date: $(date %Y-%m-%d)并将CHANGELOG.yml加入暂存区。三、核心操作两条命令完成本地发布准备export TELEPRESENCE_VERSIONvX.Y.Z[-suffix.N] make prepare-release执行完成后仓库中会产生一个带注释的标签vX.Y.Z[-suffix.N]一个带注释的标签rpc/vX.Y.Z[-suffix.N]一个提交commit用于更新仓库内部的 go.mod 引用。3.1make prepare-release的底层实现查看 build-aux/main.mk 可以看到该目标的具体实现.PHONY: prepare-release prepare-release: generate go mod edit -requiregithub.com/telepresenceio/telepresence/rpc/v2$(TELEPRESENCE_VERSION) git add go.mod (cd pkg/vif/testdata/router \ go mod edit -requiregithub.com/telepresenceio/telepresence/rpc/v2$(TELEPRESENCE_VERSION) \ git add go.mod) git commit --signoff --messagePrepare $(TELEPRESENCE_VERSION) || true git tag --annotate --message$(TELEPRESENCE_VERSION) $(TELEPRESENCE_VERSION) git tag --annotate --message$(TELEPRESENCE_VERSION) rpc/$(TELEPRESENCE_VERSION)逐行拆解其作用依赖generate目标先执行代码生成相关任务确保生成物如 docs/reference/cli/telepresence.md、docs/release-notes.md、docs/helm/values.schema.json 等见 build-aux/main.mk与源码一致go mod edit -require把主模块go.mod中对github.com/telepresenceio/telepresence/rpc/v2的依赖版本提升到即将发布的$(TELEPRESENCE_VERSION)pkg/vif/testdata/router子模块同步更新pkg/vif/testdata/router/go.mod同样引用github.com/telepresenceio/telepresence/rpc/v2且同样有指向./../../../../rpc的replace指令因此也需要同步提升版本并git addgit commit --signoff以Prepare version为提交信息创建带 Signed-off-by 的提交|| true表示若没有内容可提交提交失败也不中断两次git tag --annotate分别创建vX.Y.Z[-suffix.N]和rpc/vX.Y.Z[-suffix.N]两个带注释标签。为什么主模块与 rpc 模块是分开的从 go.mod 与 rpc/go.mod 可见仓库采用多模块布局主模块为github.com/telepresenceio/telepresence/v2RPC 模块为独立的github.com/telepresenceio/telepresence/rpc/v2且主模块通过replace github.com/telepresenceio/telepresence/rpc/v2 ./rpc使用本地路径。发布时打上rpc/前缀标签正是为了让该独立模块的消费者能够通过 Go modules 获取到对应版本的 RPC 包。3.2 为什么不能跳过make prepare-release而手动打标签技能明确要求禁止跳过make prepare-release直接手动打标签原因是该 make 目标会更新 go.mod 引用。如果只是手动执行git taggo.mod 中的引用不会被更新随后发布的模块将是坏的broken module。此外标签必须使用--annotate带注释以便携带版本信息若在之前失败的尝试之上重复运行make prepare-release必须先清理残留标签。检查方式为git tag --points-at HEAD如果已经列出了目标标签应停止并报告由用户决定是否删除。四、验证结果确认本地提交与标签就位执行完成后使用以下两条命令验证git log -1 --stat git tag --points-at HEADgit log -1 --stat应显示Prepare vX.Y.Z[-suffix.N]提交及其改动的文件至少包含主go.mod与pkg/vif/testdata/router/go.modGA 版本时还包含CHANGELOG.ymlgit tag --points-at HEAD应同时列出vX.Y.Z[-suffix.N]与rpc/vX.Y.Z[-suffix.N]两个标签。五、版本命名与发布类型映射TELEPRESENCE_VERSION的三种合法格式决定了发布类型参见 AGENTS.md 中的 Release 章节版本格式发布类型行为差异vX.Y.Z-test.N测试发布test build标记为 pre-release不提升为 latestvX.Y.Z-rc.N发布候选release candidate标记为 pre-release不提升为 latestvX.Y.ZGA 正式版标记为 latest触发 Homebrew 更新在发布分支上的完整操作流程为# Test release预发布不提升为 latest export TELEPRESENCE_VERSIONv2.27.0-test.0 make prepare-release # Release candidate export TELEPRESENCE_VERSIONv2.27.0-rc.0 make prepare-release # GA release成为 latest更新 Homebrew export TELEPRESENCE_VERSIONv2.27.0 make prepare-release注意prepare-release阶段不要推送标签。上述命令块中的git push origin HEAD $TELEPRESENCE_VERSION rpc/$TELEPRESENCE_VERSION只是展示推送机制真正的顺序是先推送分支、开 PR再由ship-release在 CI 全绿后推送标签。六、与CHANGELOG.yml及文档生成的关系CHANGELOG.yml是发布变更记录的单一事实来源其头部CHANGELOG.yml明确定义了 schemaversion版本号不带v前缀如2.33.0date(TBD)表示未发布YYYY-MM-DD表示已发布notes一组变更条目每条包含typebugfix/feature/security/change、title、bodyHTML 而非 Markdown以及可选的docs、image字段。与prepare-release相关的关键约定详见 .claude/skills/changelog-entry/SKILL.md 与 AGENTS.md为即将发布的版本添加条目时date应使用(TBD)make prepare-release会在TELEPRESENCE_VERSION为 GA 版本时自动写入实际日期见上文 build-aux/main.mk 的 sed 逻辑修改CHANGELOG.yml后应运行make docs-files重新生成 docs/release-notes.md、docs/release-notes.mdx 与 docs/variables.yml 等派生文档。七、边界约束prepare-release明确拒绝的行为技能以Refuse to清单的形式划定了行为边界不推送任何内容分支、提交或标签——这是ship-release的职责不跳过make prepare-release手动打标签——会跳过 go.mod 引用更新产生损坏的模块不在上次尝试之上重复运行而不先清理残留标签——若git tag --points-at HEAD已列出目标标签应停止并报告由用户决定是否删除。7.1 与ship-release的交接点prepare-release在本地提交与两个带注释标签处停止。之后需要用户手动完成交接推送分支并在其上开 PR然后调用 .claude/skills/ship-release/SKILL.md 将发布推进到底校验git tag --points-at HEAD必须同时包含vX.Y.Z与rpc/vX.Y.Z若缺rpc/同伴标签则停止说明需要先运行make prepare-release等待发布 PR 的 CI含regression门禁全绿在兄弟仓库../telepresence.io中生成并合入文档 PRmake generate-versionDOCS_VERSION取v2.X形式如2.28推送标签触发 Releases 工作流等待 macOS 签名环境人工审批最长 24 小时仅对GA 版本合并两个 PR-test.N/-rc.N预发布版本跳过合并步骤两个 PR 保持打开直到 GA。八、小结prepare-release技能把 Telepresence 发布流程中最敏感的一步——创建发布提交与本地标签——固化为一个显式、可校验、用户独占的操作。其价值在于可追溯标签与提交携带版本信息与 Signed-off-by来源清晰可验证四步前置检查 git log -1 --stat/git tag --points-at HEAD双重验证杜绝误操作不越界推送动作被严格隔离到ship-release确保标签一旦推送即公开、不可撤回的风险始终由显式决策承担。对于维护者而言掌握make prepare-release不仅意味着会敲两条命令更意味着理解版本语义test/rc/GA、模块引用更新go.mod与rpc/标签以及变更记录CHANGELOG.yml日期补全三者如何在这一步中被一次性、一致地落实。赞分享云原生开发工具微服务网络【免费下载链接】telepresenceLocal development against a remote Kubernetes or OpenShift cluster项目地址https://gitcode.com/gh_mirrors/te/telepresence点击查看免费下载相关推荐direnv 一键发布全流程指南深入解析 make prepare-release 与自动化 Release 管线direnv 一键发布全流程指南深入解析 make prepare release 与自动化 Release 管线 导读本文围绕 direnv 仓库根目录下开发工具CLIGrafana Loki 发布准备Prepare Release流程全解析基于 release-please 的自动化发布 PR 管线Grafana Loki 发布准备Prepare Release流程全解析基于 release please 的自动化发布 PR 管线 本篇指南以 Gra可观测性日志分析后端微服务对象存储云原生OpenTelemetry Collector 版本发布全流程解析从 Prepare Release 到标签推送、Release 分支与 Bugfix 版本OpenTelemetry Collector 版本发布全流程解析从 Prepare Release 到标签推送、Release 分支与 Bugfix 版本可观测性后端运维观测上一篇emoji-regex原理揭秘从源码构建到Unicode数据依赖的完整技术架构下一篇git-sync高级配置认证、钩子与性能优化全攻略创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表