diff --git a/lib/manager/gradle/__fixtures__/updatesReport.json b/lib/manager/gradle/__fixtures__/updatesReport.json index 28f4d15907093a55b34bc91ebf19a683257514de..0fe80ecf550921f709b392e66088afc49b3d0418 100644 --- a/lib/manager/gradle/__fixtures__/updatesReport.json +++ b/lib/manager/gradle/__fixtures__/updatesReport.json @@ -30,6 +30,16 @@ "name": "scala-logging_%%", "group": "com.typesafe.scala-logging", "version": "3.9.0" + }, + { + "name": "foo", + "group": "foo", + "version": null + }, + { + "name": "bar", + "group": "bar", + "version": null } ] } diff --git a/lib/manager/gradle/__snapshots__/index.spec.ts.snap b/lib/manager/gradle/__snapshots__/index.spec.ts.snap index b9e1beaac77bf2bf852e899d6f1ad0781c4ddac8..e9758e7b91d23b46099f6e14f739671efec556a9 100644 --- a/lib/manager/gradle/__snapshots__/index.spec.ts.snap +++ b/lib/manager/gradle/__snapshots__/index.spec.ts.snap @@ -211,6 +211,26 @@ Array [ "https://jitpack.io", ], }, + Object { + "currentValue": "1.2.3", + "depGroup": "foo", + "depName": "foo:foo", + "name": "foo", + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2/", + "https://jitpack.io", + ], + }, + Object { + "currentValue": "3.4.5", + "depGroup": "bar", + "depName": "bar:bar", + "name": "bar", + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2/", + "https://jitpack.io", + ], + }, ], "packageFile": "build.gradle", }, @@ -269,6 +289,26 @@ Array [ "https://jitpack.io", ], }, + Object { + "currentValue": "1.2.3", + "depGroup": "foo", + "depName": "foo:foo", + "name": "foo", + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2/", + "https://jitpack.io", + ], + }, + Object { + "currentValue": "3.4.5", + "depGroup": "bar", + "depName": "bar:bar", + "name": "bar", + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2/", + "https://jitpack.io", + ], + }, ], "packageFile": "subproject/build.gradle", }, @@ -354,6 +394,26 @@ Array [ "https://jitpack.io", ], }, + Object { + "currentValue": "1.2.3", + "depGroup": "foo", + "depName": "foo:foo", + "name": "foo", + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2/", + "https://jitpack.io", + ], + }, + Object { + "currentValue": "3.4.5", + "depGroup": "bar", + "depName": "bar:bar", + "name": "bar", + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2/", + "https://jitpack.io", + ], + }, ], "packageFile": "foo/build.gradle", }, @@ -439,6 +499,26 @@ Array [ "https://jitpack.io", ], }, + Object { + "currentValue": "1.2.3", + "depGroup": "foo", + "depName": "foo:foo", + "name": "foo", + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2/", + "https://jitpack.io", + ], + }, + Object { + "currentValue": "3.4.5", + "depGroup": "bar", + "depName": "bar:bar", + "name": "bar", + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2/", + "https://jitpack.io", + ], + }, ], "packageFile": "build.gradle.kts", }, @@ -497,6 +577,26 @@ Array [ "https://jitpack.io", ], }, + Object { + "currentValue": "1.2.3", + "depGroup": "foo", + "depName": "foo:foo", + "name": "foo", + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2/", + "https://jitpack.io", + ], + }, + Object { + "currentValue": "3.4.5", + "depGroup": "bar", + "depName": "bar:bar", + "name": "bar", + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2/", + "https://jitpack.io", + ], + }, ], "packageFile": "subproject/build.gradle.kts", }, diff --git a/lib/manager/gradle/build-gradle.ts b/lib/manager/gradle/build-gradle.ts index a02aecb31501a9c5162ca991fa4c3b87bfef0174..84ca91c2d4b2b55f3fb884fc99c17bf063007fa7 100644 --- a/lib/manager/gradle/build-gradle.ts +++ b/lib/manager/gradle/build-gradle.ts @@ -137,6 +137,14 @@ function kotlinPluginVariableVersionFormatMatch( ); } +function dependencyStringVariableExpressionFormatMatch( + dependency: GradleDependency +): RegExp { + return regEx( + `\\s*dependency\\s+['"]${dependency.group}:${dependency.name}:([^'"]+)['"](?:\\s|;|})` + ); +} + function variableDefinitionFormatMatch(variable: string): RegExp { return regEx(`(${variable}\\s*=\\s*?["'])(.*)(["'])`); } @@ -162,16 +170,22 @@ export function collectVersionVariables( moduleStringVariableInterpolationVersionFormatMatch(dependency), groovyPluginVariableVersionFormatMatch(dependency), kotlinPluginVariableVersionFormatMatch(dependency), + dependencyStringVariableExpressionFormatMatch(dependency), ...moduleMapVariableVersionFormatMatch(dependency), ...moduleKotlinNamedArgumentVariableVersionFormatMatch(dependency), ]; + const depName = `${dependency.group}:${dependency.name}`; for (const regex of regexes) { const match = regex.exec(buildGradleContent); if (match) { - variables[`${dependency.group}:${dependency.name}`] = match[1]; + variables[depName] = match[1]; } } + + if (!dep.currentValue && variables[depName]) { + dep.currentValue = variables[depName]; + } } } diff --git a/lib/manager/gradle/index.spec.ts b/lib/manager/gradle/index.spec.ts index 53f13643de1d189b9e2cc078e194f68c36a5d192..5d9e863592606395698d9c4ad086a32e93fcfaf1 100644 --- a/lib/manager/gradle/index.spec.ts +++ b/lib/manager/gradle/index.spec.ts @@ -53,7 +53,10 @@ async function setupMocks() { const exec: jest.Mock<typeof _exec> = require('child_process').exec; const util: jest.Mocked<typeof _util> = require('../../util'); - utilfs.readLocalFile.mockResolvedValue('some content'); + utilfs.readLocalFile.mockResolvedValue(` + dependency 'foo:foo:1.2.3' + dependency "bar:bar:3.4.5" + `); env.getChildProcessEnv.mockReturnValue(envMock.basic); await util.setUtilConfig(baseConfig);