You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Github Action:release.yml触发失败,如何触发并等待main.yml完成?

问题解决:修复Github Actions Release工作流跳过问题并实现依赖等待

问题根源分析

  1. Release工作流被跳过的直接原因:release.yml中两个Job的if: ${{ github.ref == 'refs/heads/master' }}条件完全错误。推送标签时,github.ref的值格式为refs/tags/vx.x.x,永远不会等于分支引用refs/heads/master,导致所有Job直接被跳过。
  2. 额外执行错误:npm-publish Job中使用了未定义的matrix.node变量,会导致执行阶段报错。
  3. 顺序依赖缺失:当前main.yml和release.yml是独立触发的,无法保证Release流程在CI构建完成后执行。

解决方案步骤

第一步:修复Release工作流的触发与执行错误

修改release.yml,移除错误条件并修复Node版本配置:

name: Release new version

on:
  push:
    tags:
      - "v*"

jobs:
  npm-publish:
    name: NPM Release
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repo
        uses: actions/checkout@v2
      - name: Use Node 14.x
        uses: actions/setup-node@v1
        with:
          node-version: '14.x' # 直接指定稳定版本,也可添加matrix多版本测试
          registry-url: 'https://registry.npmjs.org/' # 明确指定npm源
      - name: Install deps and build (with cache)
        uses: bahmutov/npm-install@v1
      - name: Publish
        run: npm publish
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} # setup-node官方推荐使用该变量名

  github-release:
    name: Github Release
    needs: [npm-publish]
    runs-on: ubuntu-latest
    steps:
      - uses: "marvinpinto/action-automatic-releases@latest"
        with:
          repo_token: "${{ secrets.GITHUB_TOKEN }}"
          prerelease: false

第二步:实现Release工作流等待CI完成

推荐采用更简洁的方式B,通过调整CI触发条件+工作流依赖实现顺序控制:

1. 修改main.yml,让CI在分支推送和标签推送时都触发

name: Node Continous Integration

on: 
  push:
    branches: [master]
    tags: ["v*"] # 添加标签触发规则,确保打标签时也执行CI构建

jobs:
  build:
    name: Build on Node ${{ matrix.node }} and ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        node: ['10.x', '12.x', '14.x']
        os: [ubuntu-latest, windows-latest, macOS-latest]
    steps:
      - name: Checkout repo
        uses: actions/checkout@v2
      - name: Use Node ${{ matrix.node }}
        uses: actions/setup-node@v1
        with:
          node-version: ${{ matrix.node }}
      - name: Install deps and build (with cache)
        uses: bahmutov/npm-install@v1
      - name: Build
        run: npm run build

2. 修改release.yml,仅在CI成功完成且触发源是标签时执行

name: Release new version

on:
  workflow_run:
    workflows: ["Node Continous Integration"] # 对应CI工作流的名称
    types:
      - completed
    branches: [master]

jobs:
  check-release-trigger:
    runs-on: ubuntu-latest
    outputs:
      is_tag_release: ${{ steps.check.outputs.is_tag_release }}
    steps:
      - id: check
        run: |
          # 验证原工作流的触发源是否为标签推送
          HEAD_REF="${{ github.event.workflow_run.head_ref }}"
          if [[ "$HEAD_REF" =~ ^refs/tags/v ]]; then
            echo "is_tag_release=true" >> $GITHUB_OUTPUT
          else
            echo "is_tag_release=false" >> $GITHUB_OUTPUT
          fi
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  npm-publish:
    name: NPM Release
    runs-on: ubuntu-latest
    needs: check-release-trigger
    # 仅当CI成功且是标签触发时才执行
    if: ${{ needs.check-release-trigger.outputs.is_tag_release == 'true' && github.event.workflow_run.conclusion == 'success' }}
    steps:
      - name: Checkout repo
        uses: actions/checkout@v2
      - name: Use Node 14.x
        uses: actions/setup-node@v1
        with:
          node-version: '14.x'
          registry-url: 'https://registry.npmjs.org/'
      - name: Install deps and build (with cache)
        uses: bahmutov/npm-install@v1
      - name: Publish
        run: npm publish
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

  github-release:
    name: Github Release
    needs: [npm-publish]
    runs-on: ubuntu-latest
    steps:
      - uses: "marvinpinto/action-automatic-releases@latest"
        with:
          repo_token: "${{ secrets.GITHUB_TOKEN }}"
          prerelease: false

内容的提问来源于stack exchange,提问作者Shalev Sror

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:24:26