From 73c8227132d42bb35694af12e381eb80bf1f29fe Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Mon, 20 Feb 2023 18:11:12 +0100
Subject: [PATCH] fix(versioning)!: bump short ranges to version (#20494)

When rangeStrategy=bump, and the existing range is "short" (e.g. `^1`), and a bump is required, the new result will be a version range (e.g. `^1.0.7`).

Closes #20488
---
 lib/modules/versioning/cargo/index.spec.ts    |  6 ++---
 lib/modules/versioning/composer/index.spec.ts |  2 +-
 lib/modules/versioning/helm/index.spec.ts     | 10 ++++----
 lib/modules/versioning/npm/index.spec.ts      | 10 ++++----
 lib/modules/versioning/npm/range.ts           | 24 -------------------
 lib/modules/versioning/poetry/index.spec.ts   |  8 +++----
 6 files changed, 18 insertions(+), 42 deletions(-)

diff --git a/lib/modules/versioning/cargo/index.spec.ts b/lib/modules/versioning/cargo/index.spec.ts
index beb92118f2..c9cc7d47f0 100644
--- a/lib/modules/versioning/cargo/index.spec.ts
+++ b/lib/modules/versioning/cargo/index.spec.ts
@@ -111,11 +111,11 @@ describe('modules/versioning/cargo/index', () => {
     ${'  =   1.0.0'}         | ${'bump'}     | ${'1.0.0'}     | ${'1.1.0'}      | ${'=1.1.0'}
     ${'=    1.0.0'}          | ${'bump'}     | ${'1.0.0'}     | ${'1.1.0'}      | ${'= 1.1.0'}
     ${'1.0.0'}               | ${'bump'}     | ${'1.0.0'}     | ${'1.1.0'}      | ${'1.1.0'}
-    ${'^1.0'}                | ${'bump'}     | ${'1.0.0'}     | ${'1.0.7'}      | ${'^1.0'}
+    ${'^1.0'}                | ${'bump'}     | ${'1.0.0'}     | ${'1.0.7'}      | ${'^1.0.7'}
     ${'^1.0.0'}              | ${'replace'}  | ${'1.0.0'}     | ${'2.0.7'}      | ${'^2.0.0'}
     ${'1.0.0'}               | ${'replace'}  | ${'1.0.0'}     | ${'2.0.7'}      | ${'2.0.0'}
-    ${'^1'}                  | ${'bump'}     | ${'1.0.0'}     | ${'2.1.7'}      | ${'^2'}
-    ${'~1'}                  | ${'bump'}     | ${'1.0.0'}     | ${'1.1.7'}      | ${'~1'}
+    ${'^1'}                  | ${'bump'}     | ${'1.0.0'}     | ${'2.1.7'}      | ${'^2.1.7'}
+    ${'~1'}                  | ${'bump'}     | ${'1.0.0'}     | ${'1.1.7'}      | ${'~1.1.7'}
     ${'5'}                   | ${'bump'}     | ${'5.0.0'}     | ${'5.1.7'}      | ${'5'}
     ${'5'}                   | ${'bump'}     | ${'5.0.0'}     | ${'6.1.7'}      | ${'6'}
     ${'5.0'}                 | ${'bump'}     | ${'5.0.0'}     | ${'5.0.7'}      | ${'5.0'}
diff --git a/lib/modules/versioning/composer/index.spec.ts b/lib/modules/versioning/composer/index.spec.ts
index 21b03a642a..8f4e30b928 100644
--- a/lib/modules/versioning/composer/index.spec.ts
+++ b/lib/modules/versioning/composer/index.spec.ts
@@ -147,7 +147,7 @@ describe('modules/versioning/composer/index', () => {
     ${'~1.0 || >=3.0 <=4.0'}  | ${'widen'}           | ${'2.9.0'}        | ${'5.0.0'}       | ${'~1.0 || >=3.0 <=5.0'}
     ${'+4.0.0'}               | ${'replace'}         | ${'4.0.0'}        | ${'4.2.0'}       | ${'4.2.0'}
     ${'v4.0.0'}               | ${'replace'}         | ${'4.0.0'}        | ${'4.2.0'}       | ${'v4.2.0'}
-    ${'^v1.0'}                | ${'bump'}            | ${'1.0.0'}        | ${'1.1.7'}       | ${'^v1.1'}
+    ${'^v1.0'}                | ${'bump'}            | ${'1.0.0'}        | ${'1.1.7'}       | ${'^v1.1.7'}
     ${'^v1.0@beta'}           | ${'bump'}            | ${'1.0.0-beta3'}  | ${'1.0.0-beta5'} | ${'^v1.0.0-beta5@beta'}
     ${'^v1.0@beta'}           | ${'replace'}         | ${'1.0.0-beta3'}  | ${'2.0.0-beta5'} | ${'^v2.0.0-beta5@beta'}
     ${'^4.0@alpha'}           | ${'replace'}         | ${'4.0.0-alpha1'} | ${'4.0.0-beta5'} | ${'^4.0.0-beta5@alpha'}
diff --git a/lib/modules/versioning/helm/index.spec.ts b/lib/modules/versioning/helm/index.spec.ts
index 58584c9485..1ef08aa9b1 100644
--- a/lib/modules/versioning/helm/index.spec.ts
+++ b/lib/modules/versioning/helm/index.spec.ts
@@ -34,13 +34,13 @@ describe('modules/versioning/helm/index', () => {
   test.each`
     currentValue            | rangeStrategy | currentVersion | newVersion              | expected
     ${'=1.0.0'}             | ${'bump'}     | ${'1.0.0'}     | ${'1.1.0'}              | ${'=1.1.0'}
-    ${'^1.0'}               | ${'bump'}     | ${'1.0.0'}     | ${'1.0.7'}              | ${'^1.0'}
+    ${'^1.0'}               | ${'bump'}     | ${'1.0.0'}     | ${'1.0.7'}              | ${'^1.0.7'}
     ${'^1'}                 | ${'bump'}     | ${'1.0.0'}     | ${'1.0.7-prerelease.1'} | ${'^1.0.7-prerelease.1'}
-    ${'^1.0'}               | ${'bump'}     | ${'1.0.0'}     | ${'1.1.7'}              | ${'^1.1'}
-    ${'~1.0'}               | ${'bump'}     | ${'1.0.0'}     | ${'1.1.7'}              | ${'~1.1'}
+    ${'^1.0'}               | ${'bump'}     | ${'1.0.0'}     | ${'1.1.7'}              | ${'^1.1.7'}
+    ${'~1.0'}               | ${'bump'}     | ${'1.0.0'}     | ${'1.1.7'}              | ${'~1.1.7'}
     ${'~1.0'}               | ${'bump'}     | ${'1.0.0'}     | ${'1.0.7-prerelease.1'} | ${'~1.0.7-prerelease.1'}
-    ${'^1'}                 | ${'bump'}     | ${'1.0.0'}     | ${'2.1.7'}              | ${'^2'}
-    ${'~1'}                 | ${'bump'}     | ${'1.0.0'}     | ${'1.1.7'}              | ${'~1'}
+    ${'^1'}                 | ${'bump'}     | ${'1.0.0'}     | ${'2.1.7'}              | ${'^2.1.7'}
+    ${'~1'}                 | ${'bump'}     | ${'1.0.0'}     | ${'1.1.7'}              | ${'~1.1.7'}
     ${'5'}                  | ${'bump'}     | ${'5.0.0'}     | ${'5.1.7'}              | ${'5'}
     ${'5'}                  | ${'bump'}     | ${'5.0.0'}     | ${'6.1.7'}              | ${'6'}
     ${'5.0'}                | ${'bump'}     | ${'5.0.0'}     | ${'5.0.7'}              | ${'5.0'}
diff --git a/lib/modules/versioning/npm/index.spec.ts b/lib/modules/versioning/npm/index.spec.ts
index 8330064d65..20dedb0f82 100644
--- a/lib/modules/versioning/npm/index.spec.ts
+++ b/lib/modules/versioning/npm/index.spec.ts
@@ -58,14 +58,14 @@ describe('modules/versioning/npm/index', () => {
   test.each`
     currentValue            | rangeStrategy        | currentVersion   | newVersion              | expected
     ${'=1.0.0'}             | ${'bump'}            | ${'1.0.0'}       | ${'1.1.0'}              | ${'=1.1.0'}
-    ${'^1.0'}               | ${'bump'}            | ${'1.0.0'}       | ${'1.0.7'}              | ${'^1.0'}
+    ${'^1.0'}               | ${'bump'}            | ${'1.0.0'}       | ${'1.0.7'}              | ${'^1.0.7'}
     ${'^1'}                 | ${'bump'}            | ${'1.0.0'}       | ${'1.0.7-prerelease.1'} | ${'^1.0.7-prerelease.1'}
     ${'~> 1.0.0'}           | ${'replace'}         | ${'1.0.0'}       | ${'1.1.7'}              | ${'~> 1.1.0'}
-    ${'^1.0'}               | ${'bump'}            | ${'1.0.0'}       | ${'1.1.7'}              | ${'^1.1'}
-    ${'~1.0'}               | ${'bump'}            | ${'1.0.0'}       | ${'1.1.7'}              | ${'~1.1'}
+    ${'^1.0'}               | ${'bump'}            | ${'1.0.0'}       | ${'1.1.7'}              | ${'^1.1.7'}
+    ${'~1.0'}               | ${'bump'}            | ${'1.0.0'}       | ${'1.1.7'}              | ${'~1.1.7'}
     ${'~1.0'}               | ${'bump'}            | ${'1.0.0'}       | ${'1.0.7-prerelease.1'} | ${'~1.0.7-prerelease.1'}
-    ${'^1'}                 | ${'bump'}            | ${'1.0.0'}       | ${'2.1.7'}              | ${'^2'}
-    ${'~1'}                 | ${'bump'}            | ${'1.0.0'}       | ${'1.1.7'}              | ${'~1'}
+    ${'^1'}                 | ${'bump'}            | ${'1.0.0'}       | ${'2.1.7'}              | ${'^2.1.7'}
+    ${'~1'}                 | ${'bump'}            | ${'1.0.0'}       | ${'1.1.7'}              | ${'~1.1.7'}
     ${'5'}                  | ${'bump'}            | ${'5.0.0'}       | ${'5.1.7'}              | ${'5'}
     ${'5'}                  | ${'bump'}            | ${'5.0.0'}       | ${'6.1.7'}              | ${'6'}
     ${'5.0'}                | ${'bump'}            | ${'5.0.0'}       | ${'5.0.7'}              | ${'5.0'}
diff --git a/lib/modules/versioning/npm/range.ts b/lib/modules/versioning/npm/range.ts
index 37140e3d9c..f8c37b0157 100644
--- a/lib/modules/versioning/npm/range.ts
+++ b/lib/modules/versioning/npm/range.ts
@@ -136,33 +136,9 @@ export function getNewValue({
         });
       }
       if (element.operator === '^') {
-        const split = currentValue.split('.');
-        if (suffix.length) {
-          return `^${newVersion}`;
-        }
-        if (split.length === 1) {
-          // ^4
-          return `^${toVersionMajor}`;
-        }
-        if (split.length === 2) {
-          // ^4.1
-          return `^${toVersionMajor}.${toVersionMinor}`;
-        }
         return `^${newVersion}`;
       }
       if (element.operator === '~') {
-        const split = currentValue.split('.');
-        if (suffix.length) {
-          return `~${newVersion}`;
-        }
-        if (split.length === 1) {
-          // ~4
-          return `~${toVersionMajor}`;
-        }
-        if (split.length === 2) {
-          // ~4.1
-          return `~${toVersionMajor}.${toVersionMinor}`;
-        }
         return `~${newVersion}`;
       }
       if (element.operator === '=') {
diff --git a/lib/modules/versioning/poetry/index.spec.ts b/lib/modules/versioning/poetry/index.spec.ts
index 7d919a24c6..d0c69c2c3e 100644
--- a/lib/modules/versioning/poetry/index.spec.ts
+++ b/lib/modules/versioning/poetry/index.spec.ts
@@ -189,15 +189,15 @@ describe('modules/versioning/poetry/index', () => {
     ${'  = 1.0.0'}      | ${'bump'}     | ${'1.0.0'}         | ${'1.1.0'}         | ${'=1.1.0'}
     ${'  =   1.0.0'}    | ${'bump'}     | ${'1.0.0'}         | ${'1.1.0'}         | ${'=1.1.0'}
     ${'=    1.0.0'}     | ${'bump'}     | ${'1.0.0'}         | ${'1.1.0'}         | ${'=1.1.0'}
-    ${'^1.0'}           | ${'bump'}     | ${'1.0.0'}         | ${'1.0.7'}         | ${'^1.0'}
+    ${'^1.0'}           | ${'bump'}     | ${'1.0.0'}         | ${'1.0.7'}         | ${'^1.0.7'}
     ${'^1.0.0'}         | ${'replace'}  | ${'1.0.0'}         | ${'2.0.7'}         | ${'^2.0.0'}
     ${'^5.0.3'}         | ${'replace'}  | ${'5.3.1'}         | ${'5.5'}           | ${'^5.0.3'}
     ${'1.0.0'}          | ${'replace'}  | ${'1.0.0'}         | ${'2.0.7'}         | ${'2.0.7'}
     ${'^1.0.0'}         | ${'replace'}  | ${'1.0.0'}         | ${'2.0.7'}         | ${'^2.0.0'}
     ${'^0.5.15'}        | ${'replace'}  | ${'0.5.15'}        | ${'0.6'}           | ${'^0.5.15'}
     ${'^0.5.15'}        | ${'replace'}  | ${'0.5.15'}        | ${'0.6b.4'}        | ${'^0.5.15'}
-    ${'^1'}             | ${'bump'}     | ${'1.0.0'}         | ${'2.1.7'}         | ${'^2'}
-    ${'~1'}             | ${'bump'}     | ${'1.0.0'}         | ${'1.1.7'}         | ${'~1'}
+    ${'^1'}             | ${'bump'}     | ${'1.0.0'}         | ${'2.1.7'}         | ${'^2.1.7'}
+    ${'~1'}             | ${'bump'}     | ${'1.0.0'}         | ${'1.1.7'}         | ${'~1.1.7'}
     ${'5'}              | ${'bump'}     | ${'5.0.0'}         | ${'5.1.7'}         | ${'5'}
     ${'5'}              | ${'bump'}     | ${'5.0.0'}         | ${'6.1.7'}         | ${'6'}
     ${'5.0'}            | ${'bump'}     | ${'5.0.0'}         | ${'5.0.7'}         | ${'5.0'}
@@ -211,7 +211,7 @@ describe('modules/versioning/poetry/index', () => {
     ${'^0.8.0-alpha.0'} | ${'bump'}     | ${'0.8.0-alpha.0'} | ${'0.8.0-alpha.1'} | ${'^0.8.0-alpha.1'}
     ${'^0.8.0-alpha.0'} | ${'bump'}     | ${'0.8.0-alpha.0'} | ${'0.8.0a1'}       | ${'^0.8.0-alpha.1'}
     ${'^1.0.0'}         | ${'replace'}  | ${'1.0.0'}         | ${'1.2.3'}         | ${'^1.0.0'}
-    ${'~1.0'}           | ${'bump'}     | ${'1.0.0'}         | ${'1.1.7'}         | ${'~1.1'}
+    ${'~1.0'}           | ${'bump'}     | ${'1.0.0'}         | ${'1.1.7'}         | ${'~1.1.7'}
     ${'1.0.*'}          | ${'replace'}  | ${'1.0.0'}         | ${'1.1.0'}         | ${'1.1.*'}
     ${'1.*'}            | ${'replace'}  | ${'1.0.0'}         | ${'2.1.0'}         | ${'2.*'}
     ${'~0.6.1'}         | ${'replace'}  | ${'0.6.8'}         | ${'0.7.0-rc.2'}    | ${'~0.7.0-rc'}
-- 
GitLab