Descreva o bug
Ao executar auto canary
em um monorepo Lerna, vários problemas estão aparecendo.
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...
.
Diz Error: Running command 'npx' failed
logo no início
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):
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)
Além disso, o campo publishConfig.directory
em package.json
cada pacote não está sendo respeitado.
Vou dar uma olhada nisso!
- 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 depreminor
a versão não aumenta. Para obterprerelease
para o comando canário, poderíamos adicionar um sinalizador extra ou usar um rótuloprerelease
, 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:
lerna version
- muda package.json para a versão canárioprepare
- pacote final colocado na pasta distlerna publish
- publica a pasta dist do pacote com a versão corretaPortanto, 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. ;)