仅当推送到特定分支且标签存在时才触发 github 工作流

Pat*_*ick 5 github github-actions

我只想在代码被推送到特定分支并且标签存在时触发 Github 工作流,但我的配置(github 工作流)没有按预期工作:

name: Deployment
on:
  push:
    branches:
      - feature/BRANCH-NAME
    tags:
      - *
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - uses: actions/setup-node@v1
        with:
          node-version: '10.x'

      - name: Install dependencies
        run: |
          npm install

      - name: Lint & build
        run: |
          npm run build
Run Code Online (Sandbox Code Playgroud)

即使标签不存在,也会触发工作流。

我怎么能解决这个问题?

Pat*_*ick 8

由于我找不到实现AND条件的方法(即在 master 上标记 AND),我使用了以下解决方法:

name: Worflow demo
on:
  push:
    tags:
      - v*

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1

      - name: Exit if not on master branch
        if: endsWith(github.ref, 'master') == false
        run: exit -1

      - name: Next job ...
Run Code Online (Sandbox Code Playgroud)

如果有标记(例如 tag v1.0.0)提交推送,这将触发:

on:
  push:
    tags:
      - v*
Run Code Online (Sandbox Code Playgroud)

第一步('Exit if not on master branch')然后检查当前分支是否没有结束master并退出工作流(后续测试不会开始):

- name: Exit if not on master branch
  if: endsWith(github.ref, 'master') == false
  run: exit -1
Run Code Online (Sandbox Code Playgroud)

希望这对其他人也有帮助。

  • @Patrick 这似乎不起作用。当触发标签时,`github.ref = refs/tags/<TAG-NAME>` 并且*不*包含分支信息! (9认同)
  • 您在发布版本时是否使用此工作流程?如果是这样,您可以使用“on:release”事件来代替“on:push”。这应该可以实现您想要的效果,因为它仅在主分支上有标记版本时才会触发。 (3认同)
  • 实际上,您需要跟踪`github.event.base_ref`来确定它是否位于“master”或“main”分支上。`github.ref` 中将包含类似 `refs/tags/<theTag>` 的内容。这是标签推送(或发布创建)的示例 https://github.com/longrunningprocess/gha-sandbox/runs/4861490865?check_suite_focus=true#step:2:212 (3认同)
  • @Patrick我尝试了你的解决方案,但是当推送标记的提交时 github.ref 是空的 (2认同)
  • @BillyClark [`base_ref` 文档](https://docs.github.com/en/actions/learn-github-actions/contexts#github-context) 说“此属性仅在触发工作流的事件时可用run 是 `pull_request` 或 `pull_request_target`。” 它真的适用于推送标签触发器吗? (2认同)