github 操作排除来自分支的拉取请求

问题描述 投票:0回答:3

假设我有一个在每个要掌握的 PR 上运行的工作流程,其开头为:

on:
  pull_request:
    branches:
      - master

如果 PR 来自

depbot
分支,我想跳过所有工作。比如:

on:
  pull_request:
    branches:
      - master
    head_ref-ignore:
      - depbot

我认为您可以使用

跳过所有步骤(一次一个)
 if: startsWith(github.head_ref, 'depbot') == false

但这不是我想要的,因为它仍然会启动工作。我怎样才能在启动阶段实现这一目标?

github github-actions pull-request
3个回答
3
投票

根据文档,您无法在工作流程级别实现您想要的目标,因为它基于

base branches

因此,下面的这些实现将不起作用

on:
  pull_request:
    branches:    
      - 'master'    # matches refs/heads/master
      - '!depbot'   # excludes refs/heads/depbot

或者

on:
  pull_request:
    branches-ignore:    
      - 'depbot'   # ignore refs/heads/depbot

编辑答案

解决方法

解决方案可能是使用

setup job
检查
github.head_ref
上下文变量,并设置将在表达式中使用的输出,以便在满足条件时运行以下作业。

类似这样的:

jobs:
  setup:
    runs-on: ubuntu-latest
    outputs:
      condition: ${{ steps.condition.outputs.condition }}
    steps:
      - id: condition
        run: |
          if [[ ${{ github.head_ref }} == *"depbot"* ]]; then
             echo "condition=true" >> $GITHUB_OUTPUT
          else
             echo "condition=false" >> $GITHUB_OUTPUT  
          fi

  other-job:
    needs: [setup]
    runs-on: ubuntu-latest
    if: ${{ needs.setup.outputs.condition }} == 'true'
    steps:
       [ ... ]

问题是,此工作流程将始终触发,如果不满足条件,它将不会执行所需的操作。


2
投票

但这不是我想要的,因为它仍然会启动工作。

这意味着您需要启动一项“看门人”工作(并检查 github.head_ref),并且通过 工作依赖,仅在满足正确条件时才会调用第二个工作。

但要点是:您至少需要开始一项工作,才能检查状况。


0
投票

虽然有点晚了,但您可以将 [skip ci] 添加到 dependentabot 提交消息的开头,以阻止它们触发工作流程。 https://docs.github.com/en/actions/managing-workflow-runs/skipping-workflow-runs

© www.soinside.com 2019 - 2024. All rights reserved.