【问题标题】:Lerna always lists all packages ready to publish when running workflow of Github actions在运行 Github 操作的工作流程时,Lerna 总是列出所有准备发布的包
【发布时间】:2020-05-27 13:20:21
【问题描述】:

Lerna 在运行 Github 操作的工作流程期间无法正确检测包更改。

  1. 如果我没有进行任何与包相关的更改,请提交并运行lerna updatedlocally。它告诉我找不到更改的包这是正确的和预期的。

  2. 如果我进行与包相关的更改,请在本地提交并运行 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 无关的包相关的更改推送到 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}}

这是我的 package.json

{
  "name": "root",
  "devDependencies": {
    "jest": "^25.1.0",
    "lerna": "^3.20.2"
  },
  "scripts": {
    "updated": "lerna updated -l",
    "test": "jest"
  }
}

这是我的 lerna 设置

{
  "packages": [
    "packages/*"
  ],
  "version": "independent",
  "command": {
    "publish": {
      "allowBranch": "master",
      "conventionalCommits": true,
      "message": "chore(release): updated release notes and package versions"
    }
  }
}

【问题讨论】:

  • 我对 lerna 一无所知,所以这是一个长镜头,但 lerna 是否会尝试读取 git 提交以确定它是否应该发布?如果是这种情况,您可能想尝试使用actions/checkoutfetch-depth 输入来签出不止1 次提交(这是默认设置)。见here

标签: github npm github-actions lerna monorepo


【解决方案1】:

经过数小时的调试。我自己找到了答案,感谢@peterevans 的提示

你必须将两者结合起来

这样所有的 git 历史和标签都暴露给 lerna。

【讨论】:

    【解决方案2】:

    哇 - 不敢相信我终于找到了解决同一问题的方法 - 非常感谢!

    我认为这是 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

    再次感谢!你帮我节省了很多时间并解决了一个烦人的问题,我希望我也能帮助其他人。干杯

    【讨论】:

      【解决方案3】:

      还有include-merged-tags的选项

      所以这也应该可以解决问题:

      lerna updated --include-merged-tags
      

      或用于发布:

      lerna publish --include-merged-tags
      

      【讨论】:

      • 不使用此标志的用例是什么?为什么要不包含合并标签?或者,换句话说,为什么这不是默认行为,我们可以用标志排除?
      • @GaryB96 我认为这是对开发人员的疏忽,他没有潜在地破坏人们的东西,而是将其作为一种选择。
      【解决方案4】:

      您可能使用不带-m 参数的git tag xxx。如果您自己执行git tag 而不是使用lerna versionlerna publish,则应添加-m 参数以使标签注释。 参考:https://github.com/lerna/lerna/issues/1357#issuecomment-438162152

      【讨论】:

        猜你喜欢
        • 2021-12-20
        • 1970-01-01
        • 2019-12-27
        • 2021-11-02
        • 2023-01-05
        • 2020-01-21
        • 1970-01-01
        • 2022-12-18
        • 1970-01-01
        相关资源
        最近更新 更多