当从特定分支名称提出PR到特定分支名称时运行Github Action?

7
我们有一个公共的SDK仓库,我正在编写多个github工作流程。其中一个工作流程包括在从develop分支升级到master时生成一个发布SDK(经过缩小和使用私钥编码)。另一个操作是在从task/**分支升级到develop分支时运行静态代码检查。
我尝试使用以下工作流程:
name: validate PR raised from task/** branched to develop branch
on:
  pull_request:
    branches: [ task/** ]

  pull_request_target:
    branches: [ develop ]
  ...


这段代码被推送到了develop分支。但是每次提出或修改PR时,都会触发工作流两次,这表明该操作正在使用“OR”配置运行。我希望在“AND”条件下(即源分支为task/**且目标分支为develop)仅运行此工作流一次。
对于我的第一个用例,只有内部开发人员才能触发生成构建非常重要。那么是否可以针对特定的目标和源分支运行操作呢?
1个回答

8
您可以触发拉取请求到基本分支的工作流程,并根据主分支进一步细化要运行的作业。因此,您可以使用github.head_ref中可用的信息,并在if条件中进行评估。结果是,只要表达式不匹配,该作业就会被跳过。以下是符合您描述的两个工作流程:

build-sdk.yml

name: Build-SDK

on:
  pull_request:
    branches: [ master ]

jobs:
  build-sdk:
    if: github.head_ref == 'develop'
    runs-on: ubuntu-latest  
    steps:
      - run: echo "Build SDK..."

validate.yml:

name: Validate

on:
  pull_request:
    branches: [ develop ]

jobs:
  validate:
    if: startsWith(github.head_ref, 'task/')
    runs-on: ubuntu-latest  
    steps:
      - run: echo "Validate..."

1
在类似的情境下,还有一个小问题:是否可以将这两个检查结合起来?比如说 if (branch is master && head is develop) OR (branch is develop && head is task/**),然后再运行检查?基本上,我能否完全跳过 on 条件,并在 if(...) 条件中编写测试呢? - ansh sachdeva
2
@anshsachdeva 是的,可以通过在“on”块中省略分支名称,然后将检查组合在“if”条件语句中来实现。可以使用“github.base_ref”中的信息来了解基本分支。 - Matt
2
谢谢,那是个聪明的方法 @Matt - iArc13

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接