【问题标题】:Can I filter a GitHub action step based on the commit message?我可以根据提交消息过滤 GitHub 操作步骤吗?
【发布时间】:2020-04-13 19:14:06
【问题描述】:

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

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

关于如何实现这个目标有什么想法吗?

如果你想确切地看到我在做什么,Yaml 的动作如下。我希望找到可以对 Static Analysis 项目上的 if 语句进行的一些更改,以实现我的目标。

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

【问题讨论】:

    标签: github github-actions


    【解决方案1】:

    您可以利用github context 上的event 属性来访问push payload

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

    if: !startsWith(github.event.head_commit.message, 'WIP')
    

    【讨论】:

    • 这个答案差不多,但并不完全正确。它引导我找到了正确的解决方案,因此我给予 smac89 信用,但我已经编辑了答案以准确显示我需要的内容。特别是 github.event.commits[0] 在推送中给了我最旧的提交,而我需要最新的。原来有一个项目 github.event.head_commit 包含该信息。
    • 您实际上需要在! 之后有一个空格,并且可能用引号将其全部括起来
    • if: "!startsWith(github.event.head_commit.message, 'WIP')"
    【解决方案2】:

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

    GitHub Actions: Skip pull request and push workflows

    with [skip ci]

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

    如果您的推送或 PR 的 HEAD 提交中的任何提交消息包含字符串 [skip ci][ci skip][no ci][skip actions][actions skip]push 或 @987654330 上触发的工作流@ 事件将被跳过。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-08
      • 2021-06-18
      • 2022-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 2011-10-23
      相关资源
      最近更新 更多