bump2version无法找到当前发布标签问题求助
问题:Semantic-Release 无法识别最新发布标签,版本更新工作流失败
背景
正在为Node.js应用升级工作流,添加自动版本更新功能。此前因.bumpversion.cfg文件拼写错误,工作流误将标签1.0.0作为起始发布版本;手动创建1.0.0、1.0.1版本后,删除了对应的发布记录及标签,现在工作流无法找到有效历史发布标签,导致版本更新失败。
已尝试操作
- 手动修改文件中的版本号
- 使用
bump2version工具更新至预期版本 - 使用
bump2version工具更新至下一版本
报错信息
An error occurred while running semantic-release: Error: Command failed with exit code 2: bump2version --allow-dirty --current-version --new-version 1.0.0 patch
相关配置
发布工作流配置
name: Create new release on: workflow_dispatch: push: branches: - main jobs: release: runs-on: ubuntu-latest if: "github.event_name == 'push' && github.ref == 'refs/heads/main' && !startsWith(github.event.head_commit.message, 'chore')" steps: - name: Checkout code uses: actions/checkout@v3 with: fetch-depth: 0 token: ${{ secrets.ADMIN_TOKEN }} - name: setup nodejs uses: actions/setup-node@v3 with: node-version: '16' - name: release using semantic-release env: GITHUB_TOKEN: ${{ secrets.ADMIN_TOKEN }} GIT_AUTHOR_NAME: secrets.automation.dev GIT_AUTHOR_EMAIL: secrets.automation.dev@il.ibm.com GIT_COMMITTER_NAME: secrets.automation.dev GIT_COMMITTER_EMAIL: secrets.automation.dev@il.ibm.com run: | sudo apt-get update sudo apt-get install python pip install --user bumpversion npm install @semantic-release/changelog npm install @semantic-release/exec npm install @semantic-release/git npm install @semantic-release/github npx semantic-release
.bumpversion.cfg 配置
[bumpversion] current_version = 1.0.40 commit = True message = Update version {current_version} -> {new_version} [bumpversion:file:package.json] search = {current_version} replace = {new_version}
.releaserc 配置
{ "debug": true, "branches": [ "main" ], "plugins": [ ["@semantic-release/commit-analyzer", { "preset": "angular", "releaseRules": [ {"type": "release","release": "patch"} ]}], "@semantic-release/release-notes-generator", "@semantic-release/changelog", [ "@semantic-release/exec", { "prepareCmd": "bump2version --allow-dirty --current-version ${lastRelease.version} --new-version ${nextRelease.version} patch" } ], [ "@semantic-release/git", { "message": "chore(release): ${nextRelease.version} [skip ci] release notes\n\n${nextRelease.notes}" } ], "@semantic-release/github" ] }
解决方案
问题根源
报错中--current-version参数后为空值,说明semantic-release无法读取到lastRelease.version。原因是删除历史标签后,semantic-release找不到有效的发布基线,无法识别最新版本信息。
修复步骤
重置版本基线标签
在本地仓库创建并推送与.bumpversion.cfg中current_version一致的基线标签(semantic-release默认识别带v前缀的标签):git tag -a v1.0.40 -m "Set release baseline" git push origin v1.0.40修正
.releaserc中的bump2version命令
当前命令额外指定了patch参数,会与semantic-release计算的版本变更类型冲突,且可直接让bump2version读取配置文件中的版本,修改prepareCmd为:"prepareCmd": "bump2version --allow-dirty --new-version ${nextRelease.version}"验证修复
推送符合commit规范的代码到main分支,或手动触发workflow_dispatch,检查工作流是否能正常生成新版本。
额外建议
- 不要手动删除已推送的发布标签,如需调整版本基线,优先通过设置基线标签的方式处理
- 确保
.bumpversion.cfg中的current_version与package.json版本号一致,避免版本冲突
内容的提问来源于stack exchange,提问作者Killerz0ne
相关产品推荐
相关产品推荐

