Lerna在运行Github操作的工作流期间没有正确检测包的变化。
1.如果我没有做任何与软件包相关的更改,请提交并在本地运行lerna updated
。它告诉我没有找到更改的软件包这是正确的和预期的。
1.如果我做了与软件包相关的更改,请在本地提交并运行lerna updated
。它告诉我找到了x个准备发布的软件包,这也是正确的和预期的。
但是,如果我推送基于1 or 2
的提交,我在github操作工作流中运行lerna updated
的步骤总是告诉/列出所有可发布的包,这是错误的。
我想知道为什么以及如何修复它???
如果我没有进行任何与软件包相关的更改,则会在本地看到以下内容
lerna notice cli v3.20.2
lerna info versioning independent
lerna info Looking for changed packages since @xxx/bar@2.3.4
lerna info No changed packages found
这是我在将无软件包相关更改推送到Github后在工作流日志中看到的内容
> lerna updated -l
lerna notice cli v3.20.2
lerna info versioning independent
lerna info Assuming all packages changed
@xxx/bar v2.3.4 packages/Bar
@xxx/foo v1.4.4 packages/Foo
@xxx/hulk v1.0.4 packages/Hulk
lerna success found 3 packages ready to publish
这是我的工作流
name: Publish
on:
push:
branches:
- master
jobs:
unit-test:
name: UnitTest
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: 12
- run: npm ci
- run: npm test
publish:
name: Publish NPM Packages
needs: unit-test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: 12
registry-url: https://registry.npmjs.org/
- run: npm ci
- run: git config --global user.email "xxx"
- run: git config --global user.name "xxx"
- run: npm run updated
env:
NODE_AUTH_TOKEN: ${{secrets.NPM_AUTH_TOKEN}}
这是我的包裹,杰森
{
"name": "root",
"devDependencies": {
"jest": "^25.1.0",
"lerna": "^3.20.2"
},
"scripts": {
"updated": "lerna updated -l",
"test": "jest"
}
}
这是我的学习环境
{
"packages": [
"packages/*"
],
"version": "independent",
"command": {
"publish": {
"allowBranch": "master",
"conventionalCommits": true,
"message": "chore(release): updated release notes and package versions"
}
}
}
5条答案
按热度按时间axr492tv1#
经过几个小时的调试,我自己找到了答案,感谢@peterevans的提示
你得把两者结合起来
fetch-depth: 0
run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
以便所有git历史和标签都暴露给lerna。
5q4ezhmt2#
哇-不敢相信我终于找到了解决同样问题的方法-非常感谢!
我认为这是github操作的一个大问题(特别是@actions/checkout),因此我在这里告诉他们:https://github.com/actions/checkout/issues/217
我还通知了这里的
lerna
人员:https://github.com/lerna/lerna/issues/2542和这里的
semantic-release
人:https://github.com/semantic-release/semantic-release/issues/1526再次感谢!你帮我保存了很多时间并解决了一个恼人的问题,我希望我也能帮助其他人。干杯
sqserrrh3#
还有选项include-merged-tags
所以这也应该解决了问题:
或用于发布:
b91juud34#
您可能使用
git tag xxx
而没有使用-m
参数。如果您自己执行git tag
而不是使用lerna version
或lerna publish
,则需要添加-m
参数以使标记被注解。https://github.com/lerna/lerna/issues/1357#issuecomment-438162152dtcbnfnu5#
记录我对这个问题的发现。
@eded发现了正确的问题,默认情况下,actions/checkout只获取1个提交,这是因为性能原因,因此,lerna无法访问version标签(通常需要几个提交),并假设所有的包默认情况下都已更改:
因此,您需要使用输入
fetch-depth: '0'
强制操作/ checkout 以获取所有提交和标记这就是你需要做的,因为actions/checkout在这个问题出现后被修正为获取v2以来的所有commits * 和 * 标记。
随着monorepo的增长,这可能是一个性能问题。