ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

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

2026/9/13 20:24:33 拓冰建站 浏览量
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),仅供参考