我们的项目使用受保护的分支,并且要求PR的基本分支与目标分支保持最新才能合并。我们也使用Jenkins来构建PR的未合并头,因为我们使用的插件会在目标分支发生变化时自动重建所有打开的PR,这会很快堵塞管道。因此,如果打开PR而不与目标分支保持同步,我们希望能够立即停止Jenkins管道,并通知提交者他们需要先合并。
因此,使用GitHub API,我希望能够判断拉取请求是否与目标分支是最新的。对此最接近的似乎是"可合并"拉取请求的属性,但看起来它只表示是否可以进行安全的自动合并,而不是分支是否已经是最新的。
是否有可以查看的直接API json标记?如果没有,是否有一种简单的方法可以使用git命令手动检查?
答案 0 :(得分:6)
我不知道GitHub是否通过其API公开此信息,但您可以使用Git命令手动检测此信息。您希望找到所谓的合并库,并确保此提交与master
的提示(或您的主分支)相同。
以bash脚本的形式,它看起来像这样:
if [ $(git merge-base @ master) == $(git rev-parse master) ]
then
echo "Your branch is up to date."
exit 0
else
echo "You need to merge / rebase."
exit 1
fi
如果将此脚本包含为构建步骤,则退出值应导致Jenkins在必要时使作业失败。
答案 1 :(得分:1)
答案 2 :(得分:1)
如果你想使用github API。
任何返回拉取请求对象的 API 都将包含 dplyr
字段。
如果其值为 mtcars %>%
summarise(across(c(mpg, cyl), list(mean = mean, sd = sd, median = median)))
# mpg_mean mpg_sd mpg_median cyl_mean cyl_sd cyl_median
#1 20.09062 6.026948 19.2 6.1875 1.785922 6
,则表示在创建拉取请求后更新基本分支。即:拉取请求分支已过期。
这是mergestatestatus的解释
如果您在 Jenkings 服务器中处理 webhook 响应,大多数拉取请求事件(如拉取请求创建、编辑、关闭或 issue_comment 事件)将在拉取请求对象中包含 mergeable_state
信息。
答案 3 :(得分:0)
对于想要实现将合并序列化的工作流的人们来说,这是一个非常普遍的问题。
使用Mergify可以轻松解决此问题。它通过strict workflow提供了您所需的一切。 Mergify负责更新您过时的请求请求,并为您订购有效请求请求的合并。实际上,我们构建Mergify就是为了完全解决此问题!
(免责声明:我是Mergify的作者之一)