Skip to content

chore(renovate): group Maven updates by groupId (incl. security)#6710

Merged
vlsi merged 1 commit into
apache:masterfrom
vlsi:dependencies/group-maven-updates-by-groupid
Jun 3, 2026
Merged

chore(renovate): group Maven updates by groupId (incl. security)#6710
vlsi merged 1 commit into
apache:masterfrom
vlsi:dependencies/group-maven-updates-by-groupid

Conversation

@vlsi
Copy link
Copy Markdown
Collaborator

@vlsi vlsi commented Jun 3, 2026

Why

Renovate opens a separate PR per groupId, and security updates are never grouped — Renovate resets their groupName to null. The recent Log4j advisory produced two separate security PRs, #6691 (log4j-core) and #6690 (log4j-1.2-api), even though both bump to the same 2.25.4.

What

  • Add a catch-all packageRule (first, matchDatasources: ["maven"]) that sets groupName to the dependency's groupId through the replace template, so every Maven update groups by groupId by default.
  • Add a vulnerabilityAlerts block with the same template, so security updates group by groupId too.
  • Remove the per-groupId rules the catch-all now covers (log4j, bouncycastle, activemq, tika, org.apache.commons, jackson-core, caffeine, miglayout, lets-plot, jodd, jmh, hamcrest, jetty, ftpserver, grgit, httpcomponents 4 and 5, weisj, auto-service, io.burt, net.minidev).
  • Keep the rules that do more than restate a single groupId: groups that span several groupIds (com.google.errorprone, classic commons, xalan/xerces, com.github.vlsi, com.helger, com.gradle, org.jetbrains.kotlin), version pins (slf4j, xml-apis), disabled entries (guava, internal src:protocol), and the GitHub Actions group.

How to verify

  • renovate-config-validator renovate.json passes.
  • renovate --platform=local --dry-run=full on this branch keeps all four Log4j artifacts in renovate/org.apache.logging.log4j, and org.bouncycastle, org.apache.activemq, org.apache.tika, org.apache.commons, and org.jetbrains.lets-plot each stay grouped by groupId through the catch-all.

Note

Grouping is by exact groupId, so a project split across several groupIds (for example Jackson's core and dataformat) forms one group per groupId. Where several groupIds should move together, keep an explicit rule after the catch-all, as com.google.errorprone already does. The same applies to a project that later adds a sub-groupId (for example org.eclipse.jetty.http2): add a rule if it should stay grouped with the parent.

🤖 Generated with Claude Code

@vlsi vlsi force-pushed the dependencies/group-maven-updates-by-groupid branch from 8661dae to 195a6ba Compare June 3, 2026 06:33
Renovate previously needed a separate packageRule for each groupId, and
security updates were never grouped: Renovate forces their groupName to
null, so log4j-core and log4j-1.2-api opened as separate PRs (apache#6691 and
apache#6690) even though both bump to the same 2.25.4.

Add a catch-all rule that groups every Maven update by its groupId, and a
vulnerabilityAlerts block that applies the same grouping to security
updates. Drop the per-groupId rules the catch-all now covers, keeping only
the rules that do more than restate a single groupId: groups that span
several groupIds (errorprone, classic commons, xalan/xerces, vlsi, helger,
gradle, kotlin), version pins (slf4j, xml-apis), disabled entries (guava,
internal src:protocol), and the GitHub Actions group.

Verified with renovate-config-validator and a `renovate --platform=local`
dry run: log4j keeps all four artifacts in one branch, and bouncycastle,
activemq, tika, commons, and lets-plot each stay grouped by groupId
through the catch-all.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@vlsi vlsi force-pushed the dependencies/group-maven-updates-by-groupid branch from 195a6ba to c43db72 Compare June 3, 2026 06:37
@vlsi vlsi added the chore label Jun 3, 2026
@vlsi vlsi merged commit e5a23bb into apache:master Jun 3, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant