From 98a33359754420a74a9aacfdba359b8208b19dcb Mon Sep 17 00:00:00 2001 From: Jean-Luc Makiola Date: Sat, 25 Jul 2026 22:00:56 +0200 Subject: [PATCH] chore(renovate): compute the PR Age column ourselves MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Age badge was already there — config:recommended pulls in mergeConfidence:age-confidence-badges — it just rendered as a grey UNKNOWN. Fetching the badge SVGs from developer.mend.io directly shows why: Mend's Merge Confidence index covers Maven Central (truth 2y, junit-jupiter 1y, kotlin-stdlib 1y / confidence high / passing 99%) but has nothing for anything served off Google's Maven repo, so every androidx and compose coordinate comes back UNKNOWN. That's the bulk of this project, and no token changes it — the JSON API behind the badges answers 401 for everyone, npm included. So take the age from the one place that does know. Renovate derives release timestamps itself to evaluate minimumReleaseAge, and Google Maven serves last-modified on its POMs, so newVersionAgeInDays is populated where Mend is blank. Redefining the column costs one template and makes the number agree with the cooling-off tiers it's read against. Mend keeps the Confidence column, which still resolves for the Maven Central half — Kotlin, Gradle, AGP, the test stack — and those are the bumps where a compatibility signal is worth having. Dropped the all-badges preset added in the previous commit: Adoption and Passing have the same Google Maven gap, so they'd have been two more empty columns. A trailing packageRule pins the same column set for every PR, including the Gradle wrapper and Actions bumps that Mend's preset never touched and which showed no age at all. Co-Authored-By: Claude Opus 5 (1M context) --- renovate.json5 | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/renovate.json5 b/renovate.json5 index ec105b9..efc41ff 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -5,14 +5,25 @@ "config:recommended", // chore(deps): … — match the repo's conventional-commit style. ":semanticCommits", - // Adds the Age / Adoption / Passing / Confidence columns to the PR table - // (Mend's Merge Confidence badges; free, no token — Renovate only embeds - // the badge URLs and the browser loads them when the PR is viewed). - // Covers the maven datasource, i.e. everything in libs.versions.toml; - // the github-actions datasource has no badges, so those PRs stay plain. - "mergeConfidence:all-badges", ], + // `config:recommended` brings in mergeConfidence:age-confidence-badges, whose + // Age column is a Mend badge. Mend's Merge Confidence index only covers Maven + // Central: org.jetbrains.kotlin, junit, truth, turbine et al resolve, but + // every androidx/compose artifact lives on Google's Maven repo and comes back + // as a grey UNKNOWN — i.e. most of this project. Renovate already knows the + // real answer, since it derives release timestamps itself for the + // minimumReleaseAge rules below (Google Maven serves `last-modified` on its + // POMs), so take the age from there and leave Mend to the Confidence column, + // which still carries signal for the Maven Central half. + prBodyDefinitions: { + Age: "{{#if releaseTimestamp}}{{{newVersionAgeInDays}}} d{{else}}unknown{{/if}}", + }, + // Default heading links to the Merge Confidence docs; this column is ours now. + prBodyHeadingDefinitions: { + Age: "Age", + }, + // No automerge: a dependency bump goes through the same review (and, for // anything touching the build, the same on-device check) as a feature // before it can ride a release — see docs/RELEASING.md and the @@ -83,5 +94,15 @@ ], groupName: "test dependencies", }, + // Last word on the PR table. The merge-confidence preset sets prBodyColumns + // from inside a packageRule of its own, and only for the datasources Mend + // supports — so a plain top-level prBodyColumns would lose to it for maven + // deps, and the Gradle wrapper / Actions / container bumps would keep the + // default columns and show no age at all. A rule declared after it wins, + // and gives every PR the same table. + { + matchPackageNames: ["*"], + prBodyColumns: ["Package", "Type", "Change", "Age", "Confidence"], + }, ], }