From 14cbd68d4287f1168c167cabc9e47d5923fe3596 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Sun, 22 Jul 2018 06:49:04 +0200
Subject: [PATCH] feat: rollbackPrs

Adds new config option `rollbackPrs` which defaults to `true` (current behaviour). Setting to false will disable creation of rollback PRs - configurable globally, per-language, per-package, etc.
---
 lib/config/definitions.js                                  | 7 +++++++
 lib/workers/repository/process/lookup/index.js             | 2 +-
 .../repository/updates/__snapshots__/flatten.spec.js.snap  | 4 ++++
 website/docs/configuration-options.md                      | 4 ++++
 4 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/lib/config/definitions.js b/lib/config/definitions.js
index b0ad426459..ba72832b98 100644
--- a/lib/config/definitions.js
+++ b/lib/config/definitions.js
@@ -597,6 +597,13 @@ const options = [
     default: 'deps',
   },
   // PR Behaviour
+  {
+    name: 'rollbackPrs',
+    description:
+      'Create PRs to roll back versions if the current version is not found in the registry',
+    type: 'boolean',
+    default: true,
+  },
   {
     name: 'recreateClosed',
     description: 'Recreate PRs even if same ones were closed previously',
diff --git a/lib/workers/repository/process/lookup/index.js b/lib/workers/repository/process/lookup/index.js
index 2997eb3ef8..3e342d89b1 100644
--- a/lib/workers/repository/process/lookup/index.js
+++ b/lib/workers/repository/process/lookup/index.js
@@ -68,7 +68,7 @@ async function lookupUpdates(config) {
     const allSatisfyingVersions = allVersions.filter(version =>
       matches(version, currentValue)
     );
-    if (!allSatisfyingVersions.length) {
+    if (config.rollbackPrs && !allSatisfyingVersions.length) {
       const rollback = getRollbackUpdate(config, allVersions);
       // istanbul ignore if
       if (!rollback) {
diff --git a/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap b/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap
index 49ecb72149..bcd6f5e2da 100644
--- a/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap
+++ b/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap
@@ -50,6 +50,7 @@ Array [
     "recreateClosed": false,
     "requiredStatusChecks": Array [],
     "reviewers": Array [],
+    "rollbackPrs": true,
     "schedule": Array [],
     "semanticCommitScope": "deps",
     "semanticCommitType": "chore",
@@ -109,6 +110,7 @@ Array [
     "recreateClosed": false,
     "requiredStatusChecks": Array [],
     "reviewers": Array [],
+    "rollbackPrs": true,
     "schedule": Array [],
     "semanticCommitScope": "deps",
     "semanticCommitType": "chore",
@@ -179,6 +181,7 @@ Array [
     "recreateClosed": true,
     "requiredStatusChecks": Array [],
     "reviewers": Array [],
+    "rollbackPrs": true,
     "schedule": Array [
       "before 5am on monday",
     ],
@@ -242,6 +245,7 @@ Array [
     "recreateClosed": false,
     "requiredStatusChecks": Array [],
     "reviewers": Array [],
+    "rollbackPrs": true,
     "schedule": Array [],
     "semanticCommitScope": "deps",
     "semanticCommitType": "chore",
diff --git a/website/docs/configuration-options.md b/website/docs/configuration-options.md
index e0b6f3b62d..9c123dd853 100644
--- a/website/docs/configuration-options.md
+++ b/website/docs/configuration-options.md
@@ -589,6 +589,10 @@ Similar to `ignoreUnstable`, this option controls whether to update to versions
 
 Must be valid usernames. Note: does not currently work with the GitHub App due to an outstanding GitHub API bug.
 
+## rollbackPrs
+
+Set this to false either globally, per-language, or per-package if you want to disable Renovate's behaviour of generating rollback PRs when it can't find the current version on the registry anymore.
+
 ## schedule
 
 The `schedule` option allows you to define 1 or more times of week for Renovate updates. Running Renovate around the clock may seem too "noisy" for some projects and therefore `schedule` is a good way to reduce the noise by reducing the timeframe in which Renovate will operate on your repository.
-- 
GitLab