我可以根据提交消息过滤 GitHub 操作步骤吗?

Ste*_*sen 8 github github-actions

我最近在我的 GitHub 操作中添加了一个静态分析步骤。但是,它有点昂贵,所以我试图减少运行此步骤的次数。我已经添加了一个适当的过滤器,以便它只在一个操作系统上运行,并且只在我的“功能”分支上运行。但是,我还想过滤掉提交消息中包含“WIP”的所有签入。(理论是,在它不再是“正在进行的工作”之前,进行全面分析是没有意义的。)

我搜索了文档,希望能找到一个可以用作github上下文对象一部分的对象,但无济于事。

关于如何实现这一目标的任何想法?

如果你想确切地看到我在做什么,Yaml 的操作如下。我希望找到一些我可以ifStatic Analysis项目声明进行的更改,以实现我的目标。

name: On Push

on: [push]

jobs:
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest]
    steps:
    - uses: actions/checkout@v1

    - name: Build
      run: |
        ./configure
        make -j 4

    - name: Run tests
      run: |
        make -j 4 check

    - name: Static Analysis
      if: runner.os == 'macOS' && startsWith(github.ref, 'refs/heads/feature/')
      run: |
        make analyze
Run Code Online (Sandbox Code Playgroud)

sma*_*c89 11

您可以利用上下文中的event属性来访问推送负载github

将以下内容添加到执行分析的步骤中:

if: !startsWith(github.event.head_commit.message, 'WIP')
Run Code Online (Sandbox Code Playgroud)

  • 这个答案几乎是正确的,但并不完全正确。它引导我找到了正确的解决方案,所以我给予 smac89 信任,但我已经编辑了答案以准确显示我需要的内容。具体来说,“github.event.commits[0]”给了我推送中最旧的提交,而我需要最新的提交。事实证明,有一个项目“github.event.head_commit”包含该信息。 (3认同)
  • 实际上,您需要在“!”之后有一个空格,并且可能用引号将其全部括起来 (2认同)

Von*_*onC 5

与您的问题相关,您现在(2021 年 2 月)有:

GitHub 操作:跳过拉取请求和推送工作流

[skip ci]

GitHub Actions 现在支持通过在提交消息中查找一些常见关键字来跳过 push 和 pull_request 工作流程。

如果有任何在你推提交信息或HEAD提交您的PR包含字符串[skip ci][ci skip][no ci][skip actions],或[actions skip]工作流程触发的pushpull_request事件将被跳过。

这不像自定义提交消息(如您​​的“WIP”)那样灵活,但它仍然可以提供帮助。