多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

FreeCAD 如何提交 Backport 请求让 CI 为发布分支自动创建回溯 PR?

FreeCAD 如何提交 Backport 请求让 CI 为发布分支自动创建回溯 PR? FreeCAD 如何提交 Backport 请求让 CI 为发布分支自动创建回溯 PR【免费下载链接】FreeCADOfficial source code of FreeCAD, a free and opensource multiplatform 3D parametric modeler.项目地址: https://gitcode.com/GitHub_Trending/fr/FreeCAD当你把一个修复合并进 FreeCAD 的main分支后如果这个修复也需要进入下一个点发布point release就需要发起 Backport回溯请求。FreeCAD 仓库为这个流程准备了两样东西一个专门的 Issue 模板用于提交请求以及一个 CI 工作流当带特定格式的 backport 标签的 PR 被合并或已合并 PR 被打上标签时自动用korthout/backport-action为对应发布分支创建回溯 PR。这篇文章按实际流程说明如何提交请求、标签该打什么格式、CI 在什么条件下触发、以及创建出的回溯 PR 在 CI 中的特殊待遇。整体流程用仓库提供的 Request a Backport Issue 模板提交请求关联原始 PR 并说明理由请求进入 triage维护者确认后把backport 分支名格式的标签打到已合并的 PR上backport.yml 工作流被触发自动创建指向目标分支的回溯 PR。第一步用 Issue 模板提交 Backport 请求Backport 请求的入口是 3-BACKPORT_REQUEST.yml 定义的 Issue 模板在仓库的 Issues 页面选择 Request a Backport 模板即可其用途是建议把 main 开发分支上的某个 commit 回溯到下一个点发布。模板会自动处理两件事标题自动加上[Backport]前缀标签自动挂上needs triage和backport两个标签。模板本身要求填写两个字段字段是否必填用途Original PR必填指向包含待回溯 commit 的 PR 链接模板占位符示例为https://github.com/FreeCAD/FreeCAD/pulls/1234替换为你实际的 PR 链接Description and Justification选填解释为什么这个 PR或其中某个单独 commit应该被回溯到下一个点发布提交后请求会带着backport标签进入 triage这一步由维护者完成你的任务是提供原始 PR 链接和充分的理由。第二步给已合并的 PR 打backport 分支名标签请求被接受后触发自动回溯的关键动作是给 PR 添加形如backport 分支名的标签。这一点由 backport.yml 中的匹配规则决定# Regex pattern to match github labels # The capture group catches the target branch # i.e. label backport releases/FreeCAD-1-0 will create backport # PR for branch releases/FreeCAD-1-0 label_pattern: ^backport ([^ ])$也就是说标签必须以backport开头注意空格正则捕获组里的部分就是回溯目标分支名。文件注释中给出的文档示例是标签backport releases/FreeCAD-1-0会为分支releases/FreeCAD-1-0创建回溯 PR。标签中的分支名要与仓库实际存在的发布分支对应不能随意填写。CI 的触发条件同一条工作流的触发与过滤条件如下引自 backport.ymlon: pull_request_target: types: [closed, labeled] branches: [main, releases/*] # Run the action if a PR is merged with backport labels # OR # when already merged PR is labeled with backport labels if: github.event.pull_request.merged ( github.event.action closed || ( github.event.action labeled startsWith(github.event.label.name, backport ) ) )这覆盖了两种合法操作顺序PR带着backport ...标签被合并closed事件PR先合并、之后再补打backport ...标签labeled事件且标签名以backport开头。两条路径都要求github.event.pull_request.merged为真——未合并的 PR 打标签不会触发回溯。触发分支限定为main和releases/*工作流只在 PR 的 base 分支匹配时运行。回溯 PR 是如何创建的工作流的backportjob 名称为 Create backport pull request在ubuntu-latest上运行需要contents: write和pull-requests: write权限凭据来自仓库的secrets.GH_TOKEN_FOR_CI_RUNNERS由仓库维护者配置贡献者无需也不应自行提供。核心步骤调用korthout/backport-actionv4.5.2相关参数及其在注释中说明的用途- name: Create backport pull requests uses: korthout/backport-action66065406958f46e82238fd59546f5a99e69e22aa # v4.5.2 with: github_token: ${{ secrets.GH_TOKEN_FOR_CI_RUNNERS }} github_workspace: ${{ github.workspace }} # permit PRs with merge commits to be backported merge_commits: skip # copy labels to backport to identify affected systems and priorities copy_labels_pattern: .* label_pattern: ^backport ([^ ])$merge_commits: skip允许包含 merge commit 的 PR 被回溯copy_labels_pattern: .*把原 PR 的标签复制到回溯 PR 上用于标识受影响的系统和优先级。验证方式在满足触发条件后回到该 PR 的 Actions 页面检查名为 Create backport pull request 的 job 是否执行成功随后仓库中会出现一个由 backport-action 创建、指向标签捕获组所指定分支文档示例中为releases/FreeCAD-1-0的回溯 PR。回溯分支在 CI 中的特殊待遇仓库其他 CI 配置对回溯产物有明确的豁免规则了解这些边界可以避免误判CI_primary.yml 中head 分支以refs/heads/backport-开头的 PR 会跳过主 CI 的相应 jobif: !startsWith(github.head_ref, refs/heads/backport-)CI_approved.yml 里有同样的排除条件。这说明 backport-action 创建的回溯 PR 走backport-前缀的分支且不与主 CI 的常规流程重复跑。auto-close_stale_issues_and_pull-requests.yml 的exempt-pr-labels中包含Needs backport即挂着该标签的 PR 不会被 stale 自动关闭。在 pull_request_template.md 的评审指引中Release 部分明确列有一项 Has the PR been considered for backporting to the latest release branch?——评审者会关注 PR 是否已考虑回溯到最新的 release 分支这也是为什么提交 PR 时就值得思考是否要走 backport 流程。小结与限制回溯请求的官方入口是 Request a Backport Issue 模板最终自动创建回溯 PR 的动作依赖已合并 PR 上的backport 分支名标签而不是 Issue 本身。标签格式必须严格匹配^backport ([^ ])$且事件必须发生在main或releases/*分支上的已合并 PR 上否则 CI 不会触发。仓库文档没有给出回溯 PR 创建成功后的额外检查命令可核对的结果就是 Actions 中该 job 的执行状态和仓库中新生成的回溯 PR 及其目标分支。【免费下载链接】FreeCADOfficial source code of FreeCAD, a free and opensource multiplatform 3D parametric modeler.项目地址: https://gitcode.com/GitHub_Trending/fr/FreeCAD创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表