Lately, I was having issues with
lerna while trying to publish packages from a mono-repo.
The problem was that
lerna, sometimes, failed while publishing the changed packages (with the command
lerna publish --conventional-commits)!
I have found two examples (kindly provided by the internal Jenkins at work) to give you a little bit of context:
500 error during the publish for reasons related to NPM’s package registry registry.npmjs.org:
12:35:08 lerna info git Pushing tags...
12:35:31 npm ERR! code E500
12:35:31 npm ERR! 500 Internal Server Error - PUT https://registry.npmjs.org/[REDACTED]
lerna trying to push over a previously published version on npm:
17:22:23 lerna info git Pushing tags...
17:23:07 npm ERR! code E403
17:23:07 npm ERR! 403 403 Forbidden - PUT https://registry.npmjs.org/[REDACTED] - You cannot publish over the previously published versions: 12.115.4.
17:23:07 npm ERR! 403 In most cases, you or one of your dependencies are requesting
17:23:07 npm ERR! 403 a package version that is forbidden by your security policy.
This is most likely due to a previous partial publish on npm.
lerna publish --conventional-commits is doing the following:
- updating the changelog, following the guidelines on conventionalcommits.org
- incrementing the package version of each module linked with each other
- pushing the git tags
- trying to publish changed packages on
The problem I think is related to the fact that the
git history is pushed before publishing the packages on npm (that can fail, as seen above).
One way to solve this issue is to run an ad-hoc command that manually publishes the missing versions on
npm and silently failing for the one’s already correctly published:
lerna exec -- "npm publish || exit 0"
Please let me know what you think on twitter @christian_fei!