我要提问
ARTICLE DETAIL

资讯详情

前沿编程新知与开发实战干货的深度解读。

hiredis 维护分支 Backport 实战:从 cherry-pick 到 Release Drafter 自动草稿发布

hiredis 维护分支 Backport 实战:从 cherry-pick 到 Release Drafter 自动草稿发布 数据库客户端后端【免费下载链接】hiredisMinimalistic C client for Redis 1.2项目地址https://gitcode.com/gh_mirrors/hi/hiredis点击查看免费下载hiredisRedis 官方 C 客户端通过release/vX.Y.X维护分支管理历史发布线的补丁修复。本文以仓库内 backport-pr 技能文档 为核心骨架完整讲解评估目标发布线 → 创建主题分支 → cherry-pick → 全量测试 → 提 PR → merge 落地的逐分支回移植流程并揭示 Release Drafter 自动生成补丁版本草稿的底层机制。读完本文你将掌握一套可复制的 hiredis 维护分支 backport 操作规程并理解为什么这类改动必须以合并的 PR 形式才能进入发布草稿的变更日志。一、机制前提为什么 backport 必须走 PRRelease Drafter 构建草稿发布中的$CHANGES变更清单时只统计last-release-tag...branch-head区间内已合并的 PR。这意味着直接 push 到维护分支的 commit永远不会出现在变更日志中它们唯一的作用是向$CONTRIBUTORS贡献提交者名单commit 与 PR 的关联关系无法事后补建——GitHub 只在一份包含该精确 SHA 的 PR 被合并的那一刻建立关联。因此backport 到release/vX.Y.X的修复必须以已合并的 PR形式到达分支否则补丁即使合入代码也不会被列入自动起草的补丁版本发布说明。仓库内的配套配置印证了这一机制release-drafter.yml 在push到master时触发release-drafter/release-drafterv7动作而 release-drafter-config.yml 中的template模板正是由$CHANGES变更列表与$CONTRIBUTORS贡献者致谢两段拼接而成。二、维护分支的命名与枚举约定hiredis 的维护分支遵循如下约定每个发布线一条分支命名为release/vX.Y.X其中X是字面后缀literalX例如 1.0 线的分支名为release/v1.0.X分支从该线的发布 tag创建例如从v1.0.2创建release/v1.0.X跳过发布候选版本RC枚举需要 backport 的版本线时v1.1.0-rc1这类 tag 不应被当作创建基准用远端 tag 而非本地克隆枚举版本本地克隆的 tag 可能过期必须使用git ls-remote --tags查询远端若某条线的维护分支尚不存在应从该线最新的非 RC tag创建分支并先补齐 Release Drafter 配置见下文第五节再落地 backport。以当前仓库的实际 tag 情况为例git ls-remote --tags origin可见v1.0.0-rc1、v1.0.1、v1.0.2构成 1.0 线最新非 RC tag 是v1.0.2对应分支release/v1.0.X1.1 线则包含v1.1.0-rc1、v1.1.0、v1.1.1应以v1.1.1为基准后续v1.2.0、v1.2.1、v1.3.0、v1.3.1、v1.4.0、v1.4.1依此类推。三、逐分支 backport 的标准流程3.1 动手前先评估每个目标发布线不要急于对每条发布线执行回移植。修复涉及的代码在不同发布线之间可能差异巨大甚至旧线根本不受影响。正确做法是在操作任何东西之前先审查修复内容与每条目标线的代码确认该线上确实存在脆弱/有缺陷的代码再决定是否 backport 到该线。3.2 创建主题分支从维护分支切出主题分支命名格式为backport-topic-X.Y.x例如backport-nesting-depth-1.0.xgit checkout release/v1.0.X git checkout -b backport-nesting-depth-1.0.x3.3 cherry-pick 保留原作者身份git cherry-pick shagit cherry-pick会保留原始提交的作者信息——这正是原始作者能进入草稿发布Contributors名单的原因。如果产生冲突采用最小化解决原则优先丢弃过时的注释或上下文而不是重构周边代码。3.4 构建与全量测试合并门槛每条分支都必须通过构建与完整测试这是合并的硬性门槛make hiredis-test ./hiredis-test其中./hiredis-test必须针对真实运行的 Redis 服务器跑完全部测试套件——连接类测试不是可选项。运行测试前先确认服务器在线redis-cli ping若服务器未运行立即停止并提示用户启动例如redis-server --daemonize yes不得自行启动服务器、不得跳过连接测试、不得在未达到干净的-Werror构建 全部测试通过的情况下继续提 PR。仓库源码为这条门槛提供了完整佐证-Werror是默认开启的Makefile 中WARNINGS-Wall -Wextra -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers且USE_WERROR默认值为 1未显式关闭时追加-Werror测试目标的真实构成Makefile 定义了hiredis-test链接test.o与 hiredis 静态库、testmake test后直接./hiredis-test以及checkTEST_SSL$(USE_SSL) ./test.sh三个目标技能文档采用的make hiredis-test ./hiredis-test是其中最直接的一步到位方式真实 Redis 服务器由测试脚本拉起test.sh 会生成临时redis.conf含daemonize yes、端口 56379、Unix socket启动redis-server后轮询等待 socket 文件出现再以./hiredis-test -h 127.0.0.1 -p 56379 -s socket执行全套测试测试套件覆盖面test.c 的main()依次执行分配器注入、命令格式化、回复解析、阻塞连接错误处理以及针对 TCP、Unix socket、SSLHIREDIS_TEST_SSL、异步 APIHIREDIS_TEST_ASYNC、轮询适配器、继承 fd 的各类连接与超时/IO 错误测试任何失败都会以非零退出码收尾并打印*** N TESTS FAILED ***全部通过则输出ALL TESTS PASSED。3.5 提交 PR 与标签gh pr create --base release/vX.Y.X --head backport-topic-X.Y.x提交 PR 时有三个关键要求标题即变更日志条目——保持上游 commit 的原始主题subject打对标签使其落入正确的变更日志分类bug对应 Bug Fixes、maintenance、feature等标签必须已存在于仓库中Release Drafter 只统计已有标签在 PR 描述中致谢原始作者对于安全修复还要致谢漏洞报告者hiredis 的安全漏洞上报渠道见 SECURITY.md经由 Redis Vulnerability Disclosure Program 接收。标签与分类的对应关系可以直接从 release-drafter-config.yml 读到breakingchange→ Breaking Changes、experimental→ Experimental Features、feature/enhancement→ New Features、fix/bugfix/bug/BUG→ Bug Fixes、maintenance→ Maintenance同时该配置的autolabelerrelease-drafter-config.yml会自动为bug-*、maintenance-*、feature-*分支以及*.md/.github/*文件改动打上相应标签。3.6 以 merge commit 合并gh pr merge --merge --delete-branch必须使用merge commit而非 squash 或 rebase合并。合并产生的 push 会触发 Release Drafter 工作流从而更新该分支对应的草稿发布。3.7 例外CI/基础设施变更不走 PR工作流文件workflows、Release Drafter 配置等CI/基础设施变更不提交 PR而是直接 push 到维护分支只有功能性 backport 才走 PR 流程。这是刻意为之这些变更不应进入$CHANGES变更日志直接推送即可。四、发布草稿的验证方法backport 落地后按以下方式验证草稿是否正确生成# 查看 Release Drafter 工作流的运行状态 gh run list --workflow Release Drafter --branch release/vX.Y.X # 查看当前所有草稿发布 gh api repos/redis/hiredis/releases --jq .[] | select(.draft)说明技能文档中的repos/redis/hiredis是针对上游仓库的写法实际执行时应替换为当前维护操作所对应的真实owner/repo本仓库的 git remote 为gitcode.com/gh_mirrors/hi/hiredis.git。验证时有两点重要认知草稿对未认证/低权限 token 不可见——返回空结果可能意味着认证问题而不是草稿不存在一份正确的草稿应当满足版本号指向下一个补丁版本、目标分支是维护分支release/vX.Y.X、每个 backport PR 出现在其正确分类下、同时致谢 backporter 与原始 commit 作者。五、已知的坑点gotchas技能文档明确提醒草稿的版本号会在每次发布后自动自校正一旦filter-by-range机制就位无需手工固定版本号。换句话说不要为了看起来正确而去手动改草稿版本——发布流程会自动把它推进到下一个补丁版本。六、命令速查与检查清单按单条维护分支汇总的完整操作序列# 0. 从远端枚举版本线勿用本地 tag git ls-remote --tags origin # 1. 评估该线上是否确实存在待修复代码 git show release/vX.Y.X:path/to/file # 2. 创建主题分支并 cherry-pick git checkout -b backport-topic-X.Y.x release/vX.Y.X git cherry-pick sha # 3. 确认 Redis 在线构建并全量测试 redis-cli ping make hiredis-test ./hiredis-test # 4. 提 PRbase维护分支head主题分支标题保持上游 commit 主题打已有标签 gh pr create --base release/vX.Y.X --head backport-topic-X.Y.x # 5. merge commit 合并触发 Release Drafter gh pr merge --merge --delete-branch # 6. 验证草稿 gh run list --workflow Release Drafter --branch release/vX.Y.X gh api repos/owner/repo/releases --jq .[] | select(.draft)逐分支检查清单修复代码确实存在于该线 ✓ → 分支命名release/vX.Y.X、主题分支命名backport-topic-X.Y.x✓ → cherry-pick 保留原作者 ✓ →-Werror构建干净 ✓ → 真实 Redis 服务器上全量测试通过 ✓ → PR 标签已存在且分类正确 ✓ → 以 merge commit 合并 ✓ → 草稿版本/分支/分类/致谢四项核对无误 ✓。结语hiredis 的 backport 流程本质上是围绕 Release Drafter 机制设计的只有合并的 PR 才能进入变更日志所以每一步——主题分支命名、cherry-pick、标签、merge commit——都在为自动生成正确的补丁版本草稿服务。结合 Makefile、test.sh、test.c 与 .github/release-drafter-config.yml 可以确认全量测试是合并门槛、-Werror默认开启、分类与标签一一对应。这套流程不仅适用于 hiredis 本体其评估 → 回移植 → 测试 → PR → 验证草稿的模式也值得其他维护多版本线的 C 语言项目借鉴。赞分享数据库客户端后端【免费下载链接】hiredisMinimalistic C client for Redis 1.2项目地址https://gitcode.com/gh_mirrors/hi/hiredis点击查看免费下载相关推荐Rundeck 仓库 backport-pr Skill 实战指南从 PR 到发布分支的自动化 Cherry-Pick 全流程Rundeck 仓库 backport pr Skill 实战指南从 PR 到发布分支的自动化 Cherry Pick 全流程 导读 本文以 Rundeck运维任务调度后端Ansible Stable 分支回迁Backport实战六步工作流、Cherry-pick 细节与自动化脚本Ansible Stable 分支回迁Backport实战六步工作流、Cherry pick 细节与自动化脚本 Ansible 上游仓库采用所有 PRDevOps运维配置管理工作流自动化任务调度PaddleX 发版 SOP 全解从 release 分支、cherry-pick 到 vX.Y.Z 标签的标准化发布流程PaddleX 发版 SOP 全解从 release 分支、cherry pick 到 vX.Y.Z 标签的标准化发布流程 导读 本文以 PaddleX 仓库人工智能大模型低代码计算机视觉深度学习模型推理服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表