From f79fe4f45dd12fda4339123c584f37989ef40f40 Mon Sep 17 00:00:00 2001 From: Sag Date: Wed, 2 Sep 2026 13:18:20 +0200 Subject: [PATCH] Stopped Renovate reopening the Redis major PR after we close it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We've closed the Redis major PR three times now and it has come back every time — #2153, then #2155, then #2156 — each one carrying the "Immortal: this PR will be recreated if closed unmerged" banner. That banner isn't arbitrary. Renovate records a closure as "this branch with this title was rejected", and it refuses to trust that record when the PR's contents can shift underneath it. A grouped PR whose members move to different versions is exactly that case: our Redis group pairs ioredis 5.11.1 -> 6.0.0 with the redis image 7-alpine -> 8-alpine, which trips the check in generateBranchConfig and marks the branch immortal. It also explains why the other majors we closed that day stayed closed — ubuntu (#2154) and mysql (#2152) were single-dep PRs whose titles name a version, so their closures mean something durable. recreateWhen: 'never' on the rule tells Renovate to honour the closure anyway. Two things worth knowing about that: - This group's title has no version in it ("Update Redis (major)"), so closing the PR now silences later Redis majors under the same title. The Dependency Dashboard lists it with a checkbox that forces the PR back, which is the escape hatch when we do want to do the upgrade. - Only Redis gets the setting. MySQL and Node are grouped the same way and could develop the same behaviour if both members ever take majors at differing versions, but neither has, and a rule that isn't earning its place is a rule someone has to reason about later. The alternative was pinning ioredis below 6 the way the shared preset pins @elastic/elasticsearch. That says "not this version, and here's why", which is a stronger claim than we can make — we haven't decided against Redis 8, we've just decided against it this week. ref #2148 --- .github/renovate.json5 | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 2d233c85..fc431a03 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -79,6 +79,7 @@ 'major', ], automerge: false, + recreateWhen: 'never', }, // Node gets the strictest treatment of the three. CI installs Node from