GitLab API:获取与问题关联的分支

GitLab API: Get branch associated with issue

在 GitLab 问题中,您可以将分支与问题相关联,并且在问题中会有行

@whoever created the branch branchname to address this issue.

有没有办法使用问题 API 获取该分支?我正在尝试设置一个自动化脚本,它将与具有特定标签的问题相关的所有分支合并到 prod 分支中,然后将结果作为开发分支推送,以便我可以将其部署到开发环境中。我不想使用合并请求,因为它们将在开发工作完成并准备好合并以部署到生产时使用。

不幸的是,目前没有官方API来获取问题的相关分支。

解决此问题的一些可行方法:

使用注释API

当用户使用问题界面创建分支时,您会看到一条系统消息,就像您提到的那样。此消息将出现在问题的 notes API 中。

使用 python-gitlab 库的示例:

import re
...
branch_note_pattern = '^created branch \[\`(.*)\`\].*to address this issue'
issue = project.issues.get(ISSUE_NUMBER)
all_notes = list(issue.notes.list(as_list=False))
system_notes = [note for note in all_notes if note.system]
related_branches = []
for note in system_notes:
    match = re.match(branch_note_pattern, note.body):
    if match:
        branch = match.groups()[0]
        related_branches.append(branch)

print('BRANCHES RELATED TO ISSUE', ISSUE_NUMBER)
for branch_name in related_branches:
    print(branch_name)

但是,有可能有一个相关分支没有出现该注释,因为相关分支只是基于命名约定。因此,如果有人只是创建了一个名为 <issue_number>-some-branch-name 的分支,那么它将显示为相关分支,但 API.

中不会有系统消息。

因此,如果您依赖注释 API,您可能会错过手动创建的相关分支。

使用非官方前端API

issues controller only returns related branches为了前端呈现为HTML。

如果您请求 /<:project_url>/-/issues/<:issue_number>/related_branches?format=json,您将收到一个 JSON 响应,其中包含要在问题视图中插入前端的 HTML。您可以解析此 HTML 以获取相关分支。

这将可靠地获取您将在 UI 中看到的相同相关分支,但需要更多的工作来实现,并且很脆弱,因为不能保证 API 在版本之间保持稳定GitLab 的。