Auto: 测试版 monorepo 中的“自动金丝雀”失败

创建于 2019-09-27  ·  14评论  ·  资料来源: intuit/auto

描述错误

在 Lerna monorepo 中运行auto canary时,会出现多个问题。

  1. 版本从9.0.0-beta.33增加到9.0.1-canary.809.1.1a2be58f.0 ,而应该是9.0.0-canary...

  2. 它在开头说Error: Running command 'npx' failed

  3. 发布到 npm 失败,说You cannot publish over the previously published versions: 9.0.0-beta.33

我试图发布的 PR 是: https :

再现

我还没有最小的重现。 如果有必要,LMK。

预期行为

期望所有软件包都以9.0.0-canary.809.1.1a2be58f.0作为它们的版本发布。

桌面(请填写以下信息):

  • 操作系统:macOS v10.14.5
  • 浏览器:不适用
  • 版本:v7.6.0

附加上下文

GH_TOKEN="xxx" auto canary --build 1 --pr 809
Error: Running command 'npx' failed


Changes:
 - @react-spring/addons: 9.0.0-beta.33 => 9.0.1-canary.809.1.1a2be58f.0
 - @react-spring/animated: 9.0.0-beta.33 => 9.0.1-canary.809.1.1a2be58f.0
 - @react-spring/core: 9.0.0-beta.33 => 9.0.1-canary.809.1.1a2be58f.0
 - react-spring: 9.0.0-beta.34 => 9.0.1-canary.809.1.1a2be58f.0
 - @react-spring/shared: 9.0.0-beta.33 => 9.0.1-canary.809.1.1a2be58f.0
 - @react-spring/konva: 9.0.0-beta.33 => 9.0.1-canary.809.1.1a2be58f.0
 - @react-spring/native: 9.0.0-beta.33 => 9.0.1-canary.809.1.1a2be58f.0
 - @react-spring/three: 9.0.0-beta.33 => 9.0.1-canary.809.1.1a2be58f.0
 - @react-spring/web: 9.0.0-beta.34 => 9.0.1-canary.809.1.1a2be58f.0
 - @react-spring/zdog: 9.0.0-beta.33 => 9.0.1-canary.809.1.1a2be58f.0



lerna notice cli v3.15.0
lerna info current version 9.0.0-beta.34
lerna WARN force-publish all packages
lerna info Assuming all packages changed
lerna WARN version Skipping working tree validation, proceed at your own risk
lerna info auto-confirmed 
lerna info execute Skipping git tag/commit
lerna info execute Skipping git push
lerna info execute Skipping releases
lerna info publish Publishing packages to npm...
lerna notice Skipping all user and access validation due to third-party registry
lerna notice Make sure you're authenticated properly ¯\_(ツ)_/¯
lerna http fetch PUT 403 https://registry.npmjs.org/@react-spring%2fshared 1475ms
lerna ERR! E403 You cannot publish over the previously published versions: 9.0.0-beta.33.

    at ChildProcess.<anonymous> (~/.nvm/versions/node/v11.10.1/pnpm-global/3/node_modules/.pnpm/registry.npmjs.org/@auto-it/core/7.6.1/node_modules/@auto-it/core/dist/utils/exec-promise.js:98:36)
    at ChildProcess.emit (events.js:197:13)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:254:12)

所有14条评论

此外,每个包的package.jsonpublishConfig.directory字段没有得到尊重。

我去看看这个!

  1. 该版本从 9.0.0-beta.33 提升到 9.0.1-canary.809.1.1a2be58f.0,而它应该是 9.0.0-canary... 。

我打开了 #609 以去除那里的额外哈希值。 版本的.0部分是因为我们有--preid标志。 我们需要这个版本的其余部分,所以它不能真正消失。

@hipstersmoothie哦,我不是在抱怨那个。 我只是不想花时间输入哈希值。 😆 这句话实际上是在指出它是如何9.0.1而它应该仍然是9.0.0

啊,我明白了。 在这种情况下,这是预期的行为。 金丝雀版本是模拟的“下一个”版本。 例如:

PR 有major标签 => 有这些变化的金丝雀包含那些主要的变化,应该是一个新的主要版本

它转到9.0.1的原因是因为当没有找到标签时,我们默认为patch

哦好的。 latest标签当前指向8.0.27 ,所以我不希望auto canary使用9.0.1 。 它一定被9.0.0-beta.33的存在弄糊涂了。 有没有办法强制版本保持在9.0.0

他们现在的行为方式是查看“最新版本”和您的本地版本并使用更高版本。 所以在这种情况下,解析为9.0.0-beta.33

有没有办法强制版本停留在9.0.0?

在本地,如果我使用prerelease而不是preminor运行 lerna,则版本不会增加。 要将prerelease加入 canary 命令,我们可以添加一个额外的标志或使用prerelease标签,但该功能不会是自动的。

它无法发布到 npm,说您不能在以前发布的版本上发布:9.0.0-beta.33

这似乎是package.json进入dist文件夹的问题。 prepare步骤在自动执行任何操作之前运行,因此版本是最初存在的版本。 在这种情况下“9.0.0-beta.33”

当 lerna 运行时,它会选择package.json这个陈旧版本,其中包含一个已经发布的版本,并尝试再次发布。

在本地,如果我使用prerelease而不是preminor运行 lerna,则版本不会增加。 要将prerelease加入 canary 命令,我们可以添加额外的标志或使用prerelease标签,但该功能不是自动的。

那应该足够好了。 您是否认为“从基于beta / next版本的分支在本地运行auto canary ”是一种边缘情况? 如果没有,也许这里应该有自动支持。 另外,如果我从 CI 运行auto canary ,我还会遇到这种边缘情况吗?

当 lerna 运行时,它会选择package.json这个陈旧版本,其中包含一个已经发布的版本,并尝试再次发布。

Lerna 支持publishConfig.directory (参见此处),但也许您与 Lerna 的集成以某种方式避免了该代码路径。

问题出在这一行

因为你做这个事情,你复制过的package.json,自述等进入dist文件夹中,然后发布,我们需要运行prepare在非常特定的时间脚本:

  1. lerna version - 将 package.json 更改为金丝雀版本
  2. prepare - 放在 dist 文件夹中的最终包
  3. lerna publish - 发布具有正确版本的包 dist 文件夹

因此,对于此工作流,您必须让生命周期脚本运行,并且必须将ignoreScripts设置为 false(或根本不设置)。

您是否认为“从构建 beta/下一个版本的分支在本地运行自动金丝雀”是一种边缘情况? 如果没有,也许这里应该有自动支持。

测试版/下一个支持确实还没有内置,但是当我尝试解决它时,我会回到这个问题。

也许您与 Lerna 的集成以某种方式避免了该代码路径。

我们不对 lerna 的使用做任何假设,所以这应该不是问题。 你可以在这里看到,我们只是调用lerna来完成所有繁重的工作。

@aleclarson在删除ignoreScripts后,我能够发布金丝雀。 我想我已经解决了这个问题中的所有问题,如果我有请关闭!

好甜! 我现在有一个解决方法,所以我不会很快检查。

如果我有时间再试一次,我一定会重新打开。 ;)

此页面是否有帮助?
0 / 5 - 0 等级