From 4753eb0ae2f9f0d726aa7c80f217895e20a739ae Mon Sep 17 00:00:00 2001 From: Dylan Owen Date: Wed, 25 Oct 2023 01:10:23 -0400 Subject: [PATCH] feat(versioning/gradle): Support Gradle prefix versions (#25379) --- lib/modules/versioning/gradle/compare.ts | 1 + lib/modules/versioning/gradle/index.spec.ts | 7 +++++++ lib/modules/versioning/gradle/index.ts | 22 +++++++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/lib/modules/versioning/gradle/compare.ts b/lib/modules/versioning/gradle/compare.ts index ed858b98a7f40c..f9f2a7546ec0d3 100644 --- a/lib/modules/versioning/gradle/compare.ts +++ b/lib/modules/versioning/gradle/compare.ts @@ -50,6 +50,7 @@ export function tokenize(versionStr: string): Token[] | null { function yieldToken(): void { if (currentVal === '') { + // We tried to yield an empty token, which means we're in a bad state. result = null; } if (result) { diff --git a/lib/modules/versioning/gradle/index.spec.ts b/lib/modules/versioning/gradle/index.spec.ts index 9141d62826adbc..cef0b7c0d54256 100644 --- a/lib/modules/versioning/gradle/index.spec.ts +++ b/lib/modules/versioning/gradle/index.spec.ts @@ -267,6 +267,13 @@ describe('modules/versioning/gradle/index', () => { currentValue | rangeStrategy | currentVersion | newVersion | expected ${'1'} | ${null} | ${null} | ${'1.1'} | ${'1.1'} ${'[1.2.3,]'} | ${null} | ${null} | ${'1.2.4'} | ${null} + ${'+'} | ${null} | ${null} | ${'1.2.4'} | ${null} + ${'1.+'} | ${null} | ${null} | ${'1.2.4'} | ${'1.+'} + ${'1.+'} | ${null} | ${null} | ${'2.1.2'} | ${'2.+'} + ${'1.+'} | ${null} | ${null} | ${'2'} | ${'2.+'} + ${'1.3.+'} | ${null} | ${null} | ${'1.3.4'} | ${'1.3.+'} + ${'1.3.+'} | ${null} | ${null} | ${'1.5.2'} | ${'1.5.+'} + ${'1.3.+'} | ${null} | ${null} | ${'2'} | ${'2'} ${'[1.2.3]'} | ${'pin'} | ${'1.2.3'} | ${'1.2.4'} | ${'1.2.4'} ${'[1.0.0,1.2.3]'} | ${'pin'} | ${'1.0.0'} | ${'1.2.4'} | ${'1.2.4'} ${'[1.0.0,1.2.23]'} | ${'pin'} | ${'1.0.0'} | ${'1.2.23'} | ${'1.2.23'} diff --git a/lib/modules/versioning/gradle/index.ts b/lib/modules/versioning/gradle/index.ts index 9b3a46a1be5f29..9b61742a39177a 100644 --- a/lib/modules/versioning/gradle/index.ts +++ b/lib/modules/versioning/gradle/index.ts @@ -195,6 +195,28 @@ function getNewValue({ if (isVersion(currentValue) || rangeStrategy === 'pin') { return newVersion; } + + // Check if our version is of the form "1.2.+" + const prefixRange = parsePrefixRange(currentValue); + const parsedNewVersion = parse(newVersion); + if (prefixRange && parsedNewVersion) { + if (prefixRange.tokens.length > 0) { + if (prefixRange.tokens.length <= parsedNewVersion.length) { + const newPrefixed = prefixRange.tokens + .map((_, i) => parsedNewVersion[i].val) + .join('.'); + + return `${newPrefixed}.+`; + } else { + // our new version is shorter than our prefix range so drop our prefix range + return newVersion; + } + } else { + // our version is already "+" which includes ever version + return null; + } + } + return null; }