Auto: "canário automático" em monorepo com versão beta está falhando

Criado em 27 set. 2019  ·  14Comentários  ·  Fonte: intuit/auto

Descreva o bug

Ao executar auto canary em um monorepo Lerna, vários problemas estão aparecendo.

  1. A versão está sendo aumentada de 9.0.0-beta.33 para 9.0.1-canary.809.1.1a2be58f.0 quando deveria ser 9.0.0-canary... .

  2. Diz Error: Running command 'npx' failed logo no início

  3. Falha ao publicar no npm, dizendo You cannot publish over the previously published versions: 9.0.0-beta.33

O PR que estou tentando publicar é: https://github.com/react-spring/react-spring/pull/809

Reproduzir

Ainda não tenho uma reprodução mínima. LMK se for necessário.

Comportamento esperado

Todos os pacotes devem ser publicados com 9.0.0-canary.809.1.1a2be58f.0 como sua versão.

Desktop (preencha as seguintes informações):

  • SO: macOS v10.14.5
  • Navegador: N / A
  • Versão: v7.6.0

Contexto adicional

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

Todos 14 comentários

Além disso, o campo publishConfig.directory em package.json cada pacote não está sendo respeitado.

Vou dar uma olhada nisso!

  1. A versão está sendo alterada de 9.0.0-beta.33 para 9.0.1-canary.809.1.1a2be58f.0 quando deveria ser 9.0.0-canary ... em vez disso.

Abri # 609 para me livrar do hash extra. A parte .0 da versão é porque temos a bandeira --preid . Precisamos disso para o resto da versão, então não pode realmente ir embora.

@hipstersmoothie Oh, eu não estava reclamando disso. Só não queria perder tempo digitando o hash. 😆 Essa frase está na verdade apontando como está 9.0.1 quando deveria estar 9.0.0 ainda.

Ah, entendo. Nesse caso, esse é o comportamento esperado. A versão canário é a versão "próxima" simulada. Por exemplo:

PR tem major label => O canário com essas mudanças contém essas mudanças principais e deve ser uma nova versão principal

O motivo pelo qual ele foi para 9.0.1 é porque o padrão é patch quando nenhum rótulo é encontrado.

Ah ok. A tag latest atualmente aponta para 8.0.27 , então eu não esperaria que auto canary usasse 9.0.1 qualquer maneira. Deve ter sido confundido com a existência de 9.0.0-beta.33 . Existe uma maneira de forçar a versão a ficar em 9.0.0 ?

A maneira como ele se comporta agora é olhar para a "versão mais recente" e sua versão local e usar a versão superior. Portanto, neste caso, isso foi resolvido para 9.0.0-beta.33 .

Existe uma maneira de forçar a versão a ficar em 9.0.0?

Localmente, se eu executar o lerna com prerelease vez de preminor a versão não aumenta. Para obter prerelease para o comando canário, poderíamos adicionar um sinalizador extra ou usar um rótulo prerelease , mas o recurso não seria automático.

Falha ao publicar no npm, dizendo que você não pode publicar sobre as versões publicadas anteriormente: 9.0.0-beta.33

Este parece ser um problema em torno de package.json s abrindo caminho para a pasta dist . A etapa prepare é executada antes que qualquer coisa automática o faça, então a versão é o que estava lá primeiro. Neste caso, "9.0.0-beta.33"

Quando o lerna executa, ele pega esta versão obsoleta do package.json , que contém uma versão já publicada, e tenta publicá-la novamente.

Localmente, se eu executar o lerna com prerelease vez de preminor a versão não aumenta. Para obter prerelease para o comando canário, poderíamos adicionar um sinalizador extra ou usar um rótulo prerelease , mas o recurso não seria automático.

Isto deve ser bom o suficiente. Você considera "executar auto canary localmente de um branch que constrói uma versão beta / next " como um caso extremo? Caso contrário, talvez devesse haver suporte automático aqui. Além disso, se eu fosse executar auto canary do CI, ainda assim chegaria a este caso extremo?

Quando o lerna executa, ele pega esta versão obsoleta do package.json , que contém uma versão já publicada, e tenta publicar novamente.

Lerna suporta publishConfig.directory (veja aqui ), mas talvez sua integração com Lerna esteja de alguma forma evitando esse caminho de código.

É essa linha que é o problema.

Porque você faz essa coisa que você copie o package.json, leia-me, etc para a pasta dist e depois é só publicar isso, precisamos executar o prepare roteiro em um momento muito específico:

  1. lerna version - muda package.json para a versão canário
  2. prepare - pacote final colocado na pasta dist
  3. lerna publish - publica a pasta dist do pacote com a versão correta

Portanto, para este fluxo de trabalho, você deve permitir que os scripts de ciclo de vida sejam executados e ignoreScripts deve ser definido como falso (ou simplesmente não definido).

Você considera "rodar o canário automático localmente a partir de um branch que constrói uma versão beta / próxima" um caso extremo? Caso contrário, talvez devesse haver suporte automático aqui.

O suporte beta / next ainda não está integrado, mas voltarei a esse problema quando tentar resolvê-lo.

talvez sua integração com o Lerna esteja de alguma forma evitando esse caminho de código.

Não estamos fazendo suposições sobre o uso da lerna, então isso não deve ser um problema. Você pode ver aqui que estamos ligando para lerna para fazer todo o trabalho pesado.

@aleclarson Consegui publicar um canário depois de remover ignoreScripts . Acho que abordei tudo neste problema, se o fiz, feche!

Ok, querida! Eu tenho uma solução alternativa no momento, então não irei verificá-la tão cedo.

Vou reabrir se tentar novamente. ;)

Esta página foi útil?
0 / 5 - 0 avaliações