如何只在新标签发布时触发 Github Action?

86

是否可能仅在推送新版本(即带有新标签的版本)时才触发Github Action?我不想在每次推送到主分支时都运行它们,但我也不想创建一个发布分支。

3个回答

115

1
你能否添加一个完整的(基本的)工作示例.yml?谢谢。 - Leigh Mathieson
4
“full (basic) working example”是什么意思?原问题并没有要求这样的内容。 - riQQ
2
一个单独的任务怎么办(if语句)?这个例子只展示了如何对整个工作流文件进行操作。 - Melroy van den Berg
1
有什么想法可以在新标签上触发,但仅限于主分支? - BMW
1
有没有想法如何在工作流程中访问创建的标签?例如 ${{ github.something }}。 - Jplus2
@jplus2 你可能想要查看 GitHub Actions 上下文:https://docs.github.com/en/actions/learn-github-actions/contexts - Daniel Quinn

36

目标是在推送标签时触发工作流程,例如执行以下操作:

git tag v1.0.0
git push origin v1.0.0
在工作流程文件中: 例如 ci.yml
name: CI
on:
  push:
    tags:
      - 'v[0-9]+.[0-9]+.[0-9]+'

如果有人向 GitHub 仓库推送语义化版本标签,这将会运行。

我犯了一个错误,当我从 Travis CI 迁移到 GitHub Actions 时,我 错误地 使用了

'^v[0-9]+\.[0-9]+\.[0-9]+'

作为模式,这是错误的。因此,如果工作流没有被触发,请检查您的模式语法。


4
该模式没有考虑 alpha、beta 等版本,这可能会对高级项目造成问题。 - Szabolcs
嗨@Szabolcs,我认为你是正确的,这只涉及语义版本控制的major.minor.patch部分。在GitHub工作流文档[此处](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#patterns-to-match-branches-and-tags)中使用了类似的示例。如果您有完整且强大的模式来捕获版本控制,请随时编辑帖子!谢谢。 - Yong
4
试试这个:v[0-9]+(\.[0-9]+)*([-\.]\S+)?。它可以匹配像 v1v1.2v1.2.3-alpha.1v1.2.3.alpha.1-build.123+sha.456 这样的标签。 - benjixinator
'v[0-9]+(\.[0-9]+)*([-\.]\S+)?'产生了push event contained invalid tags patterns: v[0-9]+(\.[0-9]+)*([-\.]\S+)?的无效标签模式。 - undefined

24

我已经让它可以工作了

on:
  push:
    tags:
      - '*'

我发现,如果标签在工作流创建之前(本地)已经创建,无论我删除和重新推送标签多少次,它都不会触发,除非我在本地删除并重新创建标签。对于在工作流创建之前创建的标签,该操作似乎不起作用。


3
这让我疯了一个小时,一直试图基于新标签触发。不起作用:git push origin :1.2.3.0 ; git push origin --tags起作用:git tag -d 1.2.3.0 ; git tag 1.2.3.0 ; git push origin :1.2.3.0 ; git push origin --tags - dB.

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