Replies: 1 comment
|
Thanks for the write-up. Looked into it. We don't want to sync-publish patches across the runtime packages. Bumping every sibling when one changes leaves a trail of empty releases with "no changes" changelogs, and it compounds: one And it is a config issue. The immortal PR happens when Batch the scope with {
"packageRules": [
{
"matchPackageNames": ["/^@joint//"],
"groupName": "joint",
"rangeStrategy": "replace"
}
]
}
Tested it on a repo pinned to your exact case (one package a patch ahead of its siblings): Renovate opens a single grouped PR bumping only the package that changed, and it merges fine. https://github.com/kumilingus/joint-renovate-test Longer term we're considering moving Full disclosure: I'm not a Renovate user. I worked this out with Claude from the docs plus that one test repo, so treat it as a starting point rather than the final word. If you've seen cases where |
Uh oh!
There was an error while loading. Please reload this page.
Context: I opened renovatebot/renovate#44729 to add
@joint/*to Renovate's monoreporepoGroups, so consumers using multiple@joint/*packages get their updates in a single PR. A Renovate maintainer (viceice) blocked it with the Immortal PRs concern, which is now empirically validated:@joint/reactshipped 4.3.1 alone ~6 hours later.repoGroupsis keyed bysourceUrland can't distinguish patch from minor/major releases. When one package in the group publishes a solo patch, grouped consumers get a "monorepo update" PR that refreshes on every subsequent solo patch and never converges until every sibling catches up.The package ranges themselves permit patch-level independence (
@joint/core: ~4.3.0and^4.3.0both accept any 4.3.x), and the dev tools (@joint/cli,@joint/eslint-config,@joint/vitest-plugin-mock-svg) are correctly on independent 0.x tracks. So the coupling is real at minor/major level but solo patches are technically supported — which is exactly what breaks Renovate grouping.Ask: for the runtime packages (
@joint/core,@joint/react,@joint/layout-directed-graph,@joint/layout-msagl,@joint/decorators, and the upcoming@joint/shapes-general*), would you consider synchronizing patch publishes — i.e. when one needs a patch, bump and republish all siblings at the same version even if only one has code changes? This unblocks Renovate consumers without changing any code/range semantics.A deeper alternative would be moving
@joint/corefromdependenciestopeerDependenciesin the runtime packages, which is the more conventional library-monorepo pattern and lets consumers own the core version directly. But that's a breaking change requiring a major bump; the synchronized-publish approach gets the consumer ergonomics today.All reactions