我使用了几种不同的 Github 工作流,其中一种只应该在正式发布时运行。在 .github/workflows/release.yml
文件中,有这个 on
条件:
on:
push:
tags:
- 'v*'
然而,如果我们团队中的某个人意外(或故意)从develop
分支推送标记,这仍然可以运行。理想情况下,我们希望将其锁定,使得标记必须在main
分支上(因为它是受保护的),甚至更进一步,如果我们能确保标记只参考与相应发布相关的特定合并提交,那将很不错。例如,如果我运行:
git branch --contains tags/v1.2.3
这通常会输出我标记所在的main
分支。我可以在Github工作流中添加条件来检查输出结果吗?
查看Github操作文档,不清楚多个条件是使用逻辑AND还是逻辑OR进行评估。
main
分支并检查${{ startsWith('refs/tags/v', github.ref) }}
还是推送标签并检查${{ github.ref == 'refs/heads/main' }}
,都无法使其工作。难道还有其他问题吗? - Everettgithub.ref
类似于refs/tags/xxx
;当通过分支推送时,触发操作时github.ref
是refs/heads/main
。这似乎是个进退两难的境地:当我推送一个分支时,我看不到标签,当我推送标签时,我看不到分支。 - Everettgit merge-base --is-ancestor $tag HEAD
命令来检查标签是否存在于主分支上。 - ITChap