From da6f2ed7d58ef8e7c3dd845251d3a7b190a5ccac Mon Sep 17 00:00:00 2001 From: Johannes Feichtner <343448+Churro@users.noreply.github.com> Date: Mon, 29 May 2023 06:02:24 +0200 Subject: [PATCH] fix(manager/gradle): normalize version aliases in version catalogs (#22470) --- .../gradle/__fixtures__/1/libs.versions.toml | 3 +- .../gradle/__fixtures__/2/libs.versions.toml | 4 +-- lib/modules/manager/gradle/extract.spec.ts | 21 +++++++++----- lib/modules/manager/gradle/extract/catalog.ts | 29 ++++++++++++++----- 4 files changed, 38 insertions(+), 19 deletions(-) diff --git a/lib/modules/manager/gradle/__fixtures__/1/libs.versions.toml b/lib/modules/manager/gradle/__fixtures__/1/libs.versions.toml index 8aac96c8ed..cbcc3e272a 100644 --- a/lib/modules/manager/gradle/__fixtures__/1/libs.versions.toml +++ b/lib/modules/manager/gradle/__fixtures__/1/libs.versions.toml @@ -17,5 +17,6 @@ kotest = [ "kotest-runner-junit5", "kotest-assertions-core-jvm" ] [plugins] detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } -publish-on-central = { id = "org.danilopianini.publish-on-central", version.ref = "publish.on.central" } +publish-on-central = { id = "org.danilopianini.publish-on-central", version.ref = "publish_on.central" } grgit = { id = "org.ajoberstar.grgit", version.unknown = "this will fail" } +grgit2 = { id = "org.ajoberstar.grgit2", version.ref = "unknown-ref" } diff --git a/lib/modules/manager/gradle/__fixtures__/2/libs.versions.toml b/lib/modules/manager/gradle/__fixtures__/2/libs.versions.toml index e68088f183..62f98ea855 100644 --- a/lib/modules/manager/gradle/__fixtures__/2/libs.versions.toml +++ b/lib/modules/manager/gradle/__fixtures__/2/libs.versions.toml @@ -1,12 +1,12 @@ [versions] kotlin = "1.5.21" -retrofit = "2.8.2" +retro_fit = "2.8.2" [libraries] okHttp = "com.squareup.okhttp3:okhttp:4.9.0" okio = { module = "com.squareup.okio:okio", version = "2.8.0" } picasso = { group = "com.squareup.picasso", name = "picasso", version = "2.5.1" } -retrofit2-retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" } +retrofit2-retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retro_fit" } google-firebase-analytics = { module = "com.google.firebase:firebase-analytics" } google-firebase-crashlytics = { group = "com.google.firebase", name = "firebase-crashlytics" } google-firebase-messaging = "com.google.firebase:firebase-messaging" diff --git a/lib/modules/manager/gradle/extract.spec.ts b/lib/modules/manager/gradle/extract.spec.ts index e1f6f422ca..d54aa0c921 100644 --- a/lib/modules/manager/gradle/extract.spec.ts +++ b/lib/modules/manager/gradle/extract.spec.ts @@ -606,6 +606,11 @@ describe('modules/manager/gradle/extract', () => { registryUrls: ['https://plugins.gradle.org/m2/'], skipReason: 'unspecified-version', }, + { + depName: 'org.ajoberstar.grgit2', + depType: 'plugin', + skipReason: 'unspecified-version', + }, ], }, ]); @@ -631,7 +636,7 @@ describe('modules/manager/gradle/extract', () => { groupName: 'com.squareup.okhttp3', currentValue: '4.9.0', managerData: { - fileReplacePosition: 99, + fileReplacePosition: 100, packageFile: 'gradle/libs.versions.toml', }, }, @@ -640,7 +645,7 @@ describe('modules/manager/gradle/extract', () => { groupName: 'com.squareup.okio', currentValue: '2.8.0', managerData: { - fileReplacePosition: 161, + fileReplacePosition: 162, packageFile: 'gradle/libs.versions.toml', }, }, @@ -649,16 +654,16 @@ describe('modules/manager/gradle/extract', () => { groupName: 'com.squareup.picasso', currentValue: '2.5.1', managerData: { - fileReplacePosition: 243, + fileReplacePosition: 244, packageFile: 'gradle/libs.versions.toml', }, }, { depName: 'com.squareup.retrofit2:retrofit', - groupName: 'retrofit', + groupName: 'retro.fit', currentValue: '2.8.2', managerData: { - fileReplacePosition: 41, + fileReplacePosition: 42, packageFile: 'gradle/libs.versions.toml', }, }, @@ -691,7 +696,7 @@ describe('modules/manager/gradle/extract', () => { packageName: 'org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin', managerData: { - fileReplacePosition: 661, + fileReplacePosition: 663, packageFile: 'gradle/libs.versions.toml', }, registryUrls: ['https://plugins.gradle.org/m2/'], @@ -716,7 +721,7 @@ describe('modules/manager/gradle/extract', () => { packageName: 'org.danilopianini.multi-jvm-test-plugin:org.danilopianini.multi-jvm-test-plugin.gradle.plugin', managerData: { - fileReplacePosition: 822, + fileReplacePosition: 824, packageFile: 'gradle/libs.versions.toml', }, registryUrls: ['https://plugins.gradle.org/m2/'], @@ -818,7 +823,7 @@ describe('modules/manager/gradle/extract', () => { }, { depName: 'mocha-junit:mocha-junit', - groupName: 'mocha-junit-reporter', + groupName: 'mocha.junit.reporter', currentValue: '2.0.2', managerData: { fileReplacePosition: 82, diff --git a/lib/modules/manager/gradle/extract/catalog.ts b/lib/modules/manager/gradle/extract/catalog.ts index 7061d8e8d4..ed11cab6dd 100644 --- a/lib/modules/manager/gradle/extract/catalog.ts +++ b/lib/modules/manager/gradle/extract/catalog.ts @@ -55,8 +55,22 @@ function isVersionPointer( return hasKey('ref', obj); } -function normalizeVersionPointer(versionPointer: string): string { - return versionPointer.replace(regEx(/[._]/g), '-'); +function normalizeAlias(alias: string): string { + return alias.replace(regEx(/[-_]/g), '.'); +} + +function findOriginalAlias( + versions: Record<string, GradleVersionPointerTarget>, + alias: string +): string { + const normalizedAlias = normalizeAlias(alias); + for (const sectionKey of Object.keys(versions)) { + if (normalizeAlias(sectionKey) === normalizedAlias) { + return sectionKey; + } + } + + return alias; } interface VersionExtract { @@ -83,13 +97,12 @@ function extractVersion({ versionSubContent: string; }): VersionExtract { if (isVersionPointer(version)) { - const parsedVersion = normalizeVersionPointer(version.ref); - // everything else is ignored + const originalAlias = findOriginalAlias(versions, version.ref); return extractLiteralVersion({ - version: versions[parsedVersion], + version: versions[originalAlias], depStartIndex: versionStartIndex, depSubContent: versionSubContent, - sectionKey: parsedVersion, + sectionKey: originalAlias, }); } else { return extractLiteralVersion({ @@ -210,7 +223,7 @@ function extractDependency({ }; } const versionRef = isVersionPointer(descriptor.version) - ? normalizeVersionPointer(descriptor.version.ref) + ? normalizeAlias(descriptor.version.ref) : null; if (isArtifactDescriptor(descriptor)) { const { group, name } = descriptor; @@ -289,7 +302,7 @@ export function parseCatalog( dependency.skipReason = skipReason; } if (isVersionPointer(version) && dependency.commitMessageTopic) { - dependency.groupName = normalizeVersionPointer(version.ref); + dependency.groupName = normalizeAlias(version.ref); delete dependency.commitMessageTopic; } -- GitLab