【问题标题】:How to conditionally run Github workflow action only for tags made on specific branch?如何仅针对在特定分支上创建的标签有条件地运行 Github 工作流操作?
【发布时间】:2021-06-02 03:33:48
【问题描述】:

我正在使用几个不同的 Github 工作流程,其中一个应该只在官方版本上运行。在.github/workflows/release.yml 里面是这个on 条件:

on:
  push:
    tags:
      - 'v*'

但是,如果我们团队中的某个人意外(或故意)从develop 分支推送标签,这仍然可以运行。理想情况下,我们希望将其锁定,以便标签必须位于 main 分支上(因为它受到保护),甚至更进一步,如果我们能够确保标签仅引用特定的合并,那就太好了与相应版本相关的提交。例如,如果我运行

git branch --contains tags/v1.2.3

这通常会输出我制作标签的main 分支。我可以在 github 工作流中添加一个条件来检查它的输出吗?

查看Github action documentation,不清楚是使用逻辑 AND 还是逻辑 OR 评估多个条件。

【问题讨论】:

    标签: github-actions


    【解决方案1】:

    on 中指定的事件类型在它们之间有一个逻辑OR。比如

    on:
      push:
        tags: ['v[0-9].[0-9]+.[0-9]+']
        branches: [master]
    

    不幸的是,会触发任何分支上任何匹配标签的工作流,但也会触发带有或不带有标签的 master 上的任何推送。我还按照doc 中的示例更新了标记模式。

    您必须决定是否只为标签运行工作流,然后过滤掉除 master 之外的任何内容:

    on:
      push:
        tags: ['v[0-9].[0-9]+.[0-9]+']
    
    jobs:
      myjob:
        runs-on: ubuntu-latest
        if: github.ref == 'refs/heads/master'
        steps: [...]
    

    或者反过来:

    on:
      push:
        branches: [master]
    
    jobs:
      myjob:
        runs-on: ubuntu-latest
        if: startsWith(github.ref, 'refs/tags/v')
        steps: [...]
    

    例如,如果您的工作流程包含可能在推送到主服务器时运行的其他作业,您可能会选择第二种解决方案。您还会注意到,标签的过滤器在第二个过滤器上不太准确,它可能会成为一个问题。还需要注意的是,您可以使用on 中的条件跳过整个工作流,使用jobs.<job_id>.if 跳过整个作业,但也可以使用jobs.<job_id>.steps[*].if 跳过步骤

    【讨论】:

    • 我以为我有这个工作,但现在我试图在另一个回购中重复它,我不能让它与任何一个选项一起工作,要么触发将分支推送到 @987654333 @ 并检查 ${{ startsWith('refs/tags/v', github.ref) }} 或推送标签并检查 ${{ github.ref == 'refs/heads/main' }}。还有其他的吗?
    • 当动作被推送标签触发时,github.ref 类似于refs/tags/xxx;当通过推送分支触发操作时,github.refrefs/heads/main。所以这看起来像一个 Catch-22:当我推送一个分支时,我看不到标签,当我推送一个标签时,我看不到分支。
    • 您可以在标签推送触发时签出 master 并使用 git merge-base --is-ancestor $tag HEAD 检查标签是否存在于 master 分支上。
    • 很棒的响应它非常有用,我正在编辑 startWith 的参数,其中反转。非常感谢@ITChap 的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    • 2020-12-04
    • 2020-01-28
    • 2020-05-09
    • 2020-03-20
    相关资源
    最近更新 更多