diff --git a/lib/modules/manager/maven-wrapper/extract.spec.ts b/lib/modules/manager/maven-wrapper/extract.spec.ts index c83008c4694465..6fe4810d87231b 100644 --- a/lib/modules/manager/maven-wrapper/extract.spec.ts +++ b/lib/modules/manager/maven-wrapper/extract.spec.ts @@ -2,11 +2,18 @@ import { extractPackageFile } from '.'; const onlyWrapperProperties = 'wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar'; + +const onlyWrapperVersionProperties = 'wrapperVersion=3.3.8'; + const onlyMavenProperties = 'distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.5.4/apache-maven-3.5.4-bin.zip'; const wrapperAndMavenProperties = `distributionUrl=https://internal.artifactory.acme.org/artifactory/maven-bol/org/apache/maven/apache-maven/3.8.4/apache-maven-3.8.4-bin.zip\nwrapperUrl=https://internal.artifactory.acme.org/artifactory/maven-bol/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar`; +const wrapperVersionAndMavenProperties = `distributionUrl=https://internal.artifactory.acme.org/artifactory/maven-bol/org/apache/maven/apache-maven/3.8.4/apache-maven-3.8.4-bin.zip\nwrapperVersion=3.3.8`; + +const wrapperVersionAndMavenPropertiesAndWrapperUrl = `distributionUrl=https://internal.artifactory.acme.org/artifactory/maven-bol/org/apache/maven/apache-maven/3.8.4/apache-maven-3.8.4-bin.zip\nwrapperVersion=3.3.8\nwrapperUrl=https://internal.artifactory.acme.org/artifactory/maven-bol/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar`; + describe('modules/manager/maven-wrapper/extract', () => { describe('extractPackageFile()', () => { it('extracts version for property file with distribution type "bin" in distributionUrl', () => { @@ -64,6 +71,68 @@ describe('modules/manager/maven-wrapper/extract', () => { ]); }); + it('extracts version for property file with maven wrapper version and maven version', () => { + const res = extractPackageFile(wrapperVersionAndMavenProperties); + expect(res?.deps).toEqual([ + { + currentValue: '3.8.4', + replaceString: + 'https://internal.artifactory.acme.org/artifactory/maven-bol/org/apache/maven/apache-maven/3.8.4/apache-maven-3.8.4-bin.zip', + datasource: 'maven', + depName: 'maven', + packageName: 'org.apache.maven:apache-maven', + versioning: 'maven', + }, + { + currentValue: '3.3.8', + replaceString: null, + datasource: 'maven', + depName: 'maven-wrapper', + packageName: 'org.apache.maven.wrapper:maven-wrapper', + versioning: 'maven', + }, + ]); + }); + + it('extracts version for property file with maven wrapper version first if both wrapperUrl and version are present', () => { + const res = extractPackageFile( + wrapperVersionAndMavenPropertiesAndWrapperUrl, + ); + expect(res?.deps).toEqual([ + { + currentValue: '3.8.4', + replaceString: + 'https://internal.artifactory.acme.org/artifactory/maven-bol/org/apache/maven/apache-maven/3.8.4/apache-maven-3.8.4-bin.zip', + datasource: 'maven', + depName: 'maven', + packageName: 'org.apache.maven:apache-maven', + versioning: 'maven', + }, + { + currentValue: '3.3.8', + replaceString: null, + datasource: 'maven', + depName: 'maven-wrapper', + packageName: 'org.apache.maven.wrapper:maven-wrapper', + versioning: 'maven', + }, + ]); + }); + + it('extracts version for property file with maven wrapper version', () => { + const res = extractPackageFile(onlyWrapperVersionProperties); + expect(res?.deps).toEqual([ + { + currentValue: '3.3.8', + replaceString: null, + datasource: 'maven', + depName: 'maven-wrapper', + packageName: 'org.apache.maven.wrapper:maven-wrapper', + versioning: 'maven', + }, + ]); + }); + it('it should return null when there is no string matching the maven properties regex', () => { const res = extractPackageFile('nowrapper'); expect(res).toBeNull(); diff --git a/lib/modules/manager/maven-wrapper/extract.ts b/lib/modules/manager/maven-wrapper/extract.ts index 27c7199b1d97e1..b94303cba0249c 100644 --- a/lib/modules/manager/maven-wrapper/extract.ts +++ b/lib/modules/manager/maven-wrapper/extract.ts @@ -15,10 +15,16 @@ const WRAPPER_URL_REGEX = regEx( '^(?:wrapperUrl\\s*=\\s*)(?\\S*-(?\\d+\\.\\d+(?:\\.\\d+)?(?:-\\w+)*)(?:.jar))', ); +const WRAPPER_VERSION_REGEX = regEx(/wrapperVersion=(?\d+(\.\d+)*)/); + function extractVersions(fileContent: string): MavenVersionExtract { const lines = coerceArray(fileContent?.split(newlineRegex)); const maven = extractLineInfo(lines, DISTRIBUTION_URL_REGEX) ?? undefined; - const wrapper = extractLineInfo(lines, WRAPPER_URL_REGEX) ?? undefined; + + const wrapper = + extractLineInfo(lines, WRAPPER_VERSION_REGEX) ?? + extractLineInfo(lines, WRAPPER_URL_REGEX) ?? + undefined; return { maven, wrapper }; } @@ -28,8 +34,8 @@ function extractLineInfo(lines: string[], regex: RegExp): Version | null { const match = regex.exec(line); if (match?.groups) { return { - url: match.groups.url, - version: match.groups.version, + url: match.groups.url ?? null, + version: match.groups.version ?? null, }; } }