如何仅在特定分支上允许手动workflow_dispatch?

Oha*_*hav 18 github github-actions

我有一个 GitHub Actions 工作流程文件,它允许使用事件手动触发workflow_dispatch。GitHub 提供了一个下拉列表来选择在哪个分支上运行工作流程。

我想知道是否有任何方法可以将该选项限制为特定分支(或特定分支)。

带有以下内容的工作流程文件示例workflow_dispatch

name: A test workflow title
on:
  push:
  workflow_dispatch:
    # branches:    # *** This seems to not be supported! ***
      # - main

jobs:
  print-hello-world:
    runs-on: ubuntu-20.04
    steps:
      - name: Print hello world
        run: echo "Hello world!"
Run Code Online (Sandbox Code Playgroud)

Oha*_*hav 13

if如果工作流是由特定分支触发的,您可以添加一个步骤来使作业失败workflow_dispatch

name: A test workflow title
on:
  push:
  workflow_dispatch:

jobs:
  print-hello-world:
    runs-on: ubuntu-20.04
    steps:
      - name: Fail if branch is not main
        if: github.event_name == 'workflow_dispatch' && github.ref != 'refs/heads/main'
        run: |
          echo "This workflow should not be triggered with workflow_dispatch on a branch other than main"
          exit 1

      - name: Print hello world
        run: echo "Hello world!"

      - name: Log github context
        run: echo "${{ toJSON(github) }}"
Run Code Online (Sandbox Code Playgroud)

也可以通过将否定条件放入作业级别来跳过作业:

jobs:
  print-hello-world:
    if: github.event_name != 'workflow_dispatch' || github.ref == 'refs/heads/main'
    runs-on: ubuntu-20.04
    steps:
    ...

Run Code Online (Sandbox Code Playgroud)