仅在非拉取请求时运行GitHub Actions步骤

45

我有一个工作流,需要在推送或拉取请求上执行,但最后一步除外,它会将一个软件包推送到 NuGet(我不希望这在拉取请求上发生,即使是对主分支的拉取请求也是如此)。

如果工作流是由拉取请求触发的,我该如何防止“发布 NuGet”这一步骤运行?

name: .NET Core

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Setup .NET Core
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 3.1.101
    - name: Install dependencies
      run: dotnet restore
    - name: Build
      run: dotnet build --configuration Release --no-restore
    - name: Test
      run: dotnet test --no-restore --verbosity normal
    - name: Publish NuGet
      uses: brandedoutcast/publish-nuget@v2.5.2
      with:
        PROJECT_FILE_PATH: "Orleans.Sagas/Orleans.Sagas.csproj"
        NUGET_KEY: ${{secrets.NUGET_KEY}}
2个回答

81

您可以检查 github.event_name 上下文变量 ,其中包含触发工作流程运行的事件名称(例如,pull_requestpush)。

在这种情况下,您可以为所有名称不为 pull_request 的事件运行一个步骤,并在您的步骤上使用 github.event_name != 'pull_request' 条件。

例如:

 - name: Publish NuGet
   uses: brandedoutcast/publish-nuget@v2.5.2
   with:
     PROJECT_FILE_PATH: "Orleans.Sagas/Orleans.Sagas.csproj"
     NUGET_KEY: ${{secrets.NUGET_KEY}}
   if: github.event_name != 'pull_request'

10
请注意,在大多数情况下,您还需要结合仅检查主分支的检查,例如:if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request' - James
3
当我们向拉取请求添加新的提交时,github.event_name将变为push而不是pull_request。@smoonin的解决方案解决了这个问题。 - Bernardo Ramos
@James 主分支的名称是可配置的,如果例如是master呢? - Grzegorz Kaczan

9

对于未来的旅行者,我发现了这个行动非常有效。我只需要做一个if:needs.pr-check.outputs.number!= 'null'就可以按照PR或非PR来进行过滤。

https://github.com/8BitJonny/gh-get-current-pr

github.event_name != 'pull_request' 对我来说不起作用,因为 on.pull_request 触发器不存在于非由 PR 启动的工作流程中。


现在看起来应该是 if: needs.pr-check.outputs.number != null,不需要引号。 - undefined

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