GitHub Action 中 Lerna publish 工作流未按预期运行问题求助
问题原因与解决方案
问题1:PR首次提交时发布所有包
原因
你在Release阶段拉取标签的命令为git fetch --depth=1 origin +refs/tags/*:refs/tags/*,仅拉取了1层深度的标签,无法获取master分支上最新的正式发布标签作为版本对比基准。
Lerna默认找不到上一次发布的基准标签时,就会触发Assuming all packages changed逻辑,全量发布所有包。第二次提交时,首次发布生成的PR专属预发布标签已经被推送到远程,拉取后可以作为对比基准,因此只会发布变更包。
解决方案
- 修改Release阶段的标签拉取命令,去掉
--depth=1限制,拉取全量标签:
git fetch origin --tags
- 可以在
lerna publish命令后追加--since master参数,强制指定和master分支的最新提交对比变更,避免无基准时全量发布。
问题2:版本号patch段固定为0,仅递增preid后缀数字
原因
你使用的--conventional-prerelease参数的默认逻辑为:同一预发布周期(即preid相同,均为pr{PR编号})内,仅递增预发布后缀的数字,不会重新根据提交计算major/minor/patch版本段。
首次生成预发布版本时,Lerna会根据提交类型计算得到目标版本(比如feat类型提交会升级minor版本,从1.0.4升级到1.1.0),之后同一PR内的后续发布都不会再调整前面的版本段,因此patch段会固定为0。
解决方案
- 修改
publish-branch命令,去掉--conventional-prerelease参数,替换为通用的--prerelease参数,保留conventionalCommits能力:
"publish-branch": "lerna publish --prerelease --exact --no-changelog --preid pr$NUMBER --dist-tag beta --pre-dist-tag beta --no-verify-access --yes"
- 建议将Lerna从v3.20.2升级到v4及以上版本,旧版本的conventional预发布逻辑存在较多边界问题,新版本的版本计算逻辑更符合预期。
内容的提问来源于stack exchange,提问作者Dheeraj Khathuria
相关产品推荐
相关产品推荐

