npm Lerna总是在运行Github操作的工作流时列出所有准备发布的包

hgtggwj0  于 2023-02-23  发布在  Git
关注(0)|答案(5)|浏览(186)

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"
    }
  }
}
axr492tv

axr492tv1#

经过几个小时的调试,我自己找到了答案,感谢@peterevans的提示
你得把两者结合起来

  • fetch-depth: 0
  • run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*

以便所有git历史和标签都暴露给lerna。

5q4ezhmt

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
再次感谢!你帮我保存了很多时间并解决了一个恼人的问题,我希望我也能帮助其他人。干杯

sqserrrh

sqserrrh3#

还有选项include-merged-tags
所以这也应该解决了问题:

lerna updated --include-merged-tags

或用于发布:

lerna publish --include-merged-tags
b91juud3

b91juud34#

您可能使用git tag xxx而没有使用-m参数。如果您自己执行git tag而不是使用lerna versionlerna publish,则需要添加-m参数以使标记被注解。https://github.com/lerna/lerna/issues/1357#issuecomment-438162152

dtcbnfnu

dtcbnfnu5#

记录我对这个问题的发现。
@eded发现了正确的问题,默认情况下,actions/checkout只获取1个提交,这是因为性能原因,因此,lerna无法访问version标签(通常需要几个提交),并假设所有的包默认情况下都已更改:

lerna info Assuming all packages changed

因此,您需要使用输入fetch-depth: '0'强制操作/ checkout 以获取所有提交和标记
这就是你需要做的,因为actions/checkout在这个问题出现后被修正为获取v2以来的所有commits * 和 * 标记。
随着monorepo的增长,这可能是一个性能问题。

相关问题