提问人:Brandon McConnell 提问时间:3/17/2022 更新时间:7/17/2023 访问量:2722
防止基于标签有条件地合并分支
Prevent merging of branch conditionally based on label
问:
我的团队使用无权访问草稿拉取请求的专用分支,但我仍然至少希望有一种方法来防止合并拉取请求,因为它们应用了自定义标签,例如“草稿”或“WIP”。
有没有办法建立自定义的必需状态检查来检查该标签或使用 GitHub 操作使 PR 无效,直到标签被删除或类似的东西?
答:
6赞
Matt
3/17/2022
#1
由于您没有可用的草稿拉取请求,因此我假设您也没有分支保护规则。因此,你不能真正强制执行你在问题中描述的内容。但是,可以给出一些图形提示,让用户知道 PR 是草稿。
这可以通过 GitHub Actions 中的工作流来完成。您需要添加 ,并在pull_request
触发器上键入,以便在创建 PR 或更改标签时运行工作流。之后,您可以定义一个作业,该作业仅在自定义标签(例如)存在时运行,并且只需运行出口 1
即可使检查失败。opened
labeled
unlabeled
draft
以下是完整的工作流程(例如check-draft.yml):
name: Check Draft
on:
pull_request:
# branches:
# - main
types:
- opened
- labeled
- unlabeled
jobs:
fail-for-draft:
if: contains(github.event.pull_request.labels.*.name, 'draft')
runs-on: ubuntu-latest
steps:
- name: Fail if PR is a draft
run: |
echo "This PR is currently a draft."
exit 1
PR 上草稿
标签检查失败:(请注意,即使合并按钮是灰色的,如果没有设置分支保护规则,PR 实际上也可以合并。
成功运行,PR 上没有草稿
标签:
评论
2赞
Brandon McConnell
3/17/2022
我不能要求一个更全面的解决方案。谢谢!!
2赞
yuki
4/11/2023
#2
在步骤内移动条件将显示绿色复选✅,而不是显示为跳过
name: Check Draft
on:
pull_request:
types:
- opened
- labeled
- unlabeled
jobs:
fail-for-draft:
runs-on: ubuntu-latest
steps:
- name: Fail if PR is a draft
if: contains(github.event.pull_request.labels.*.name, 'draft') # Move the condition to here
run: |
echo "This PR is currently a draft."
exit 1
1赞
Rim
7/17/2023
#3
只是想添加一些东西
如果我们在更新拉取请求的新内容时有人遇到错误,检查将再次运行,但它停留在
Expected — Waiting for status to be reported
我们可能需要添加一些额外的事件
---
name: 'Check Mergable by label ✅'
on:
pull_request:
types:
- opened
- reopened
- synchronize
- edited
- labeled
- unlabeled
jobs:
fail-by-label:
if: contains(github.event.pull_request.labels.*.name, 'do not merge')
runs-on: ubuntu-latest
steps:
- name: Fail if PR is labeled "do not merge"
run: |
echo "This PR is labeled as do not merge!"
exit 1
评论