Auto: "Auto Canary" in Monorepo mit Beta-Version schlägt fehl

Erstellt am 27. Sept. 2019  ·  14Kommentare  ·  Quelle: intuit/auto

Beschreibe den Fehler

Beim Ausführen von auto canary in einem Lerna-Monorepo treten mehrere Probleme auf.

  1. Die Version wird von 9.0.0-beta.33 auf 9.0.1-canary.809.1.1a2be58f.0 angehoben, obwohl es stattdessen 9.0.0-canary... sollte.

  2. Ganz am Anfang steht Error: Running command 'npx' failed

  3. Es kann nicht in npm veröffentlicht werden und sagt You cannot publish over the previously published versions: 9.0.0-beta.33

Die PR, die ich zu veröffentlichen versuche, ist: https://github.com/react-spring/react-spring/pull/809

Fortpflanzen

Ich habe noch keine Minimalrepro. LMK, wenn es nötig ist.

Erwartetes Verhalten

Es wurde erwartet, dass alle Pakete mit 9.0.0-canary.809.1.1a2be58f.0 als Version veröffentlicht werden.

Desktop (bitte füllen Sie die folgenden Informationen aus):

  • Betriebssystem: macOS v10.14.5
  • Browser: N/A
  • Version: v7.6.0

Zusätzlicher Kontext

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)
bug

Alle 14 Kommentare

Außerdem wird das Feld publishConfig.directory in den package.json jedes Pakets nicht beachtet.

Ich werde mir das mal anschauen!

  1. Die Version wird von 9.0.0-beta.33 auf 9.0.1-canary.809.1.1a2be58f.0 hochgestuft, obwohl es stattdessen 9.0.0-canary sein sollte.

Ich habe #609 geöffnet, um den zusätzlichen Hash darin loszuwerden. Der .0 Teil der Version liegt daran, dass wir das --preid Flag haben. Wir brauchen das für den Rest der Version, damit es nicht wirklich verschwinden kann.

@hipstersmoothie Oh, darüber habe ich mich nicht beschwert. Ich wollte mir einfach nicht die Zeit nehmen, den Hash abzutippen. 😆 Dieser Satz weist tatsächlich darauf hin, dass es 9.0.1 ist, obwohl es immer noch 9.0.0 .

Ah ich sehe. In diesem Fall ist das erwartetes Verhalten. Die Canary-Version ist die simulierte "nächste" Version. Zum Beispiel:

PR hat das Label major => Der Canary mit diesen Änderungen enthält diese wichtigen Änderungen und sollte eine neue Hauptversion sein

Der Grund, warum es zu 9.0.1 ist, dass wir standardmäßig patch wenn kein Label gefunden wird.

Oh, ok. Das Tag latest derzeit auf 8.0.27 , daher würde ich nicht erwarten, dass auto canary 9.0.1 sowieso 9.0.0-beta.33 verwirrt worden sein. Gibt es eine Möglichkeit, die Version zu erzwingen, bei 9.0.0 zu bleiben?

Im Moment verhält es sich so, dass es sich die "Neueste Version" und Ihre lokale Version ansieht und die höhere Version verwendet. In diesem Fall wurde das zu 9.0.0-beta.33 .

Gibt es eine Möglichkeit, die Version 9.0.0 zu erzwingen?

Wenn ich lerna lokal mit prerelease anstelle von preminor ausführe, wird die Version nicht erhöht. Um prerelease an den Canary-Befehl zu bekommen, könnten wir ein zusätzliches Flag hinzufügen oder ein prerelease Label verwenden, aber die Funktion wäre nicht automatisch.

Es schlägt fehl, in npm zu veröffentlichen, und sagt, Sie können nicht über die zuvor veröffentlichten Versionen veröffentlichen: 9.0.0-beta.33

Dies scheint ein Problem zu sein, wenn die package.json s in den dist Ordner gelangen. Der Schritt prepare wird ausgeführt, bevor alles, was das Auto tut, ausgeführt wird, also ist die Version das, was zuerst da war. In diesem Fall "9.0.0-beta.33"

Wenn lerna ausgeführt wird, greift es diese veraltete Version von package.json , die eine bereits veröffentlichte Version enthält, und versucht erneut zu veröffentlichen.

Wenn ich lerna lokal mit prerelease anstelle von preminor ausführe, wird die Version nicht erhöht. Um prerelease an den Canary-Befehl zu bekommen, könnten wir ein zusätzliches Flag hinzufügen oder ein prerelease Label verwenden, aber die Funktion wäre nicht automatisch.

Das sollte gut genug sein. Halten Sie " auto canary lokal von einem Branch aus, der auf einer beta / next Version aufbaut" für einen Randfall? Wenn nicht, sollte hier vielleicht automatisch unterstützt werden. Wenn ich auto canary von CI aus ausführen würde, werde ich dann immer noch auf diesen Randfall stoßen?

Wenn lerna ausgeführt wird, greift es diese veraltete Version von package.json , die eine bereits veröffentlichte Version enthält, und versucht erneut zu veröffentlichen.

Lerna unterstützt publishConfig.directory (siehe hier ), aber vielleicht vermeidet Ihre Integration mit Lerna irgendwie diesen Codepfad.

Diese Linie ist das Problem.

Da Sie dies tun, indem Sie die package.json, readme usw. in den dist-Ordner kopieren und dann einfach veröffentlichen, müssen wir das Skript prepare zu einem ganz bestimmten Zeitpunkt ausführen:

  1. lerna version - ändert package.json in die Canary-Version
  2. prepare - letztes Paket im Dist-Ordner abgelegt
  3. lerna publish - veröffentlicht den Paket-Dist-Ordner mit der korrekten Version

Für diesen Workflow müssen Sie also die Lifecycle-Skripte ausführen lassen und ignoreScripts muss auf false gesetzt werden (oder gar nicht).

Halten Sie "Auto Canary lokal von einem Zweig aus, der auf einer Beta/nächsten Version aufbaut" für einen Randfall? Wenn nicht, sollte hier vielleicht automatisch unterstützt werden.

Beta/Next-Support ist wirklich noch nicht integriert, aber ich werde auf dieses Problem zurückkommen, wenn ich versuche, es anzugehen.

Vielleicht vermeidet Ihre Integration mit Lerna diesen Codepfad irgendwie.

Wir machen keine Annahmen über die lerna-Nutzung, daher sollte dies kein wirkliches Problem sein. Sie können hier sehen lerna anrufen, um die ganze schwere Arbeit zu erledigen.

@aleclarson Ich konnte einen Kanarienvogel veröffentlichen, nachdem ich ignoreScripts . Ich glaube, ich habe alles in dieser Ausgabe angesprochen, bitte schließen Sie es!

Okay, süß! Ich habe gerade eine Problemumgehung, daher werde ich in absehbarer Zeit nicht nachsehen.

Ich werde auf jeden Fall wieder öffnen, wenn ich dazu komme, es noch einmal zu versuchen. ;)

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen