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

ans*_*eva 7 github github-actions

我们有一个公共 SDK 存储库,我正在为其编写多个 github 工作流程。develop其中一个工作流程包括当 PR 从 发起到时生成发布 SDK(缩小,用私钥编码)mastertask/**另一个此类操作是在从一个分支到另一个分支引发 PR 时运行静态代码检查develop。我尝试使用以下工作流程:

name: validate PR raised from task/** branched to develop branch
on:
  pull_request:
    branches: [ task/** ]

  pull_request_target:
    branches: [ develop ]
  ...

Run Code Online (Sandbox Code Playgroud)

该代码被推送到开发分支。但这会在每次提出或修改 PR 时触发工作流程两次,表明该操作正在使用“OR”配置运行。我只想在“AND”条件下运行此工作流程一次(即当源分支为task/**AND 目标分支为develop

对于我的第一个用例,只有内部开发人员才能触发生成构建,这一点非常重要。那么是否可以针对特定目标和源分支运行操作?

Mat*_*att 8

您可以触发向基本分支发出拉取请求的工作流程,并进一步细化要基于头分支运行的作业。因此,您可以使用 中提供的信息并在条件github.head_ref中对其进行评估。因此,每当表达式不匹配时,作业就会被跳过。以下是与您的描述相符的两个工作流程:if

构建-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..."
Run Code Online (Sandbox Code Playgroud)

验证.yml:

name: Validate

on:
  pull_request:
    branches: [ develop ]

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

  • @anshsachdeva 是的,可以通过省略“on”块中的分支名称,然后组合“if”条件中的检查来实现这一点。`github.base_ref` 中的信息可用于了解基础分支。 (2认同)
  • 谢谢,这是一个聪明的方法@Matt (2认同)