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

GitHub Actions中semantic-release未更新版本导致npm发布失败

配置错误说明

你的配置有3个核心问题,其中两个直接导致semantic-release不执行版本更新、后续npm发布失败:

  • checkout浅克隆导致semantic-release无法分析提交:actions/checkout@v3默认配置下只会拉取最近1次提交的浅克隆副本,semantic-release需要读取完整的git提交历史、对比历史tag来判断是否需要生成新版本、以及新版本的版本号等级,浅克隆下拿不到足够的git元数据,会直接跳过版本更新流程。
  • 作业间文件系统完全隔离:GitHub Actions的每个job都运行在独立的临时虚拟机实例中,release作业里semantic-release生成的版本号修改、changelog、tag等所有文件变更,都会在第一个作业结束后随临时实例销毁。第二个publish-npm作业重新执行checkout拉取的是远程仓库的原始代码,根本拿不到semantic-release处理后的代码,就算前一个作业完成了版本更新,第二个作业拿到的还是旧版本代码,发布必然失败。
  • 发布逻辑重复冲突:你已经给semantic-release传入了NPM_TOKEN,semantic-release默认携带的npm插件会在版本更新完成后自动执行npm发布,你额外拆分独立作业手动执行npm publish属于重复逻辑,会触发版本重复的报错。
修正方案

优先选择单作业方案,这也是semantic-release官方推荐的配置方式:

name: Release
on:
  push:
    branches:
      - main
jobs:
  release:
    name: Release
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0 # 拉取完整git提交历史
      - uses: actions/setup-node@v3
        with:
          node-version: 16
          registry-url: https://registry.npmjs.org/
      - name: Install dependencies
        run: npm ci
      - name: Run semantic-release
        env:
          GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
        run: npx semantic-release

如果你因为特殊业务逻辑必须拆分两个作业,需要先在semantic-release配置里关闭默认的npm发布能力,再通过artifact在作业间传递处理后的代码,配置参考如下:

name: Release
on:
  push:
    branches:
      - main
jobs:
  release:
    name: Release
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - uses: actions/setup-node@v3
        with:
          node-version: 16
      - name: Install dependencies
        run: npm ci
      - name: Run semantic-release
        env:
          GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
        run: npx semantic-release
      - name: Upload processed code
        uses: actions/upload-artifact@v3
        with:
          name: release-code
          path: ./*
  publish-npm:
    needs: release
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/download-artifact@v3
        with:
          name: release-code
          path: .
      - uses: actions/setup-node@v3
        with:
          node-version: 16
          registry-url: https://registry.npmjs.org/
      - run: npm publish
        env:
          NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:09:41