fix(presets/monorepo): group ckeditor5-premium-features with ckeditor5#44725
Open
aqeelat wants to merge 2 commits into
Open
fix(presets/monorepo): group ckeditor5-premium-features with ckeditor5#44725aqeelat wants to merge 2 commits into
aqeelat wants to merge 2 commits into
Conversation
The `ckeditor5-premium-features` npm package has never shipped a `repository` field in its package.json (verified across every published version from `0.0.1` through `48.3.1`), so Renovate cannot derive a `sourceUrl` for it. The URL entry added in renovatebot#39194 has never matched. The broader `@ckeditor/ckeditor5-*` pattern is unsafe for grouping by name: wrapper packages such as `@ckeditor/ckeditor5-angular` (v11.x) and `@ckeditor/ckeditor5-react` (v11.x) carry the prefix but live in separate repos with independent versioning and must not be grouped with the main release train (currently v48.x). Hand-craft the `ckeditor` preset with two OR'd packageRules (flattened during config migration): 1. matchSourceUrls for `https://github.com/ckeditor/ckeditor5` -- covers scoped packages whose sourceUrl is normalized to this form by `addMetaData`. 2. matchPackageNames for `ckeditor5-premium-features` -- covers the premium package by name since it has no sourceUrl. Follows the precedent in `replacements.preset.ts` of layering hand-crafted presets on top of the data-driven ones when the data schema cannot express the required shape.
aqeelat
force-pushed
the
fix/ckeditor-monorepo-pattern
branch
from
July 20, 2026 07:08
344f40c to
45710f1
Compare
massageConfig strips packageRules whose keys are all match*/exclude* (lib/config/massage.ts:83-93), and fetchPreset runs massage on every preset it returns (lib/config/presets/index.ts:188). Without a non-match field, the two ckeditor sub-rules were dropped during preset resolution, which collapsed the consumer rule's nested packageRules to [] and caused migrateConfig to discard the rule entirely. validation.ts:503 likewise requires each rule to have at least one non-match field. Adding a description to each sub-rule satisfies both invariants.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Changes
Replace the broken
repoGroups.ckeditorURL entry with a hand-crafted preset inlib/config/presets/internal/monorepos.preset.tsthat uses two OR'dpackageRules:matchSourceUrls: ['https://github.com/ckeditor/ckeditor5']— covers scoped@ckeditor/ckeditor5-*packages whosesourceUrlis normalized to this canonical form byaddMetaData.matchPackageNames: ['ckeditor5-premium-features']— covers the premium package by name, since it ships norepositoryfield.Each sub-rule carries a
descriptionso it survivesmassageConfig(which strips match-only rules) and satisfies the validator's non-match-field requirement. Follows the precedent inreplacements.preset.tsof layering hand-crafted presets on top of the data-driven ones.Context
The URL entry added in #39194 has never matched. The
ckeditor5-premium-featuresnpm package has never shipped arepositoryfield in itspackage.json(verified across0.0.1,41.4.0, and48.3.1), so the npm datasource cannot derive asourceUrlfor it.A name-pattern fix (
/^@ckeditor/ckeditor5-/) was considered and rejected: wrapper packages such as@ckeditor/ckeditor5-angular(v11.2.0) and@ckeditor/ckeditor5-react(v11.2.0) carry the prefix but live in separate repos with independent versioning and must not be grouped with the main release train (currently v48.3.1).AI assistance disclosure
Authored with the assistance of opencode (glm-5.2). Investigation, edit, and PR body generated by the AI agent under user direction.
Documentation
How I've tested my work
Two-rule OR semantics work via the existing migration flattening at
lib/config/migration.ts:163-185.pnpm vitest run lib/config/presets/internal/index.spec.ts lib/data/index.spec.ts lib/config/presets/internal/monorepos.spec.ts lib/config/presets/internal/group.spec.ts— 1869/1869 pass.