diff --git a/lib/manager/gradle/build-gradle.ts b/lib/manager/gradle/build-gradle.ts index d3f406b9841022db0d24fd5c4bbe026833c345aa..0bd1f5ed5c359893bc219d2f24d1a571fd20a670 100644 --- a/lib/manager/gradle/build-gradle.ts +++ b/lib/manager/gradle/build-gradle.ts @@ -30,6 +30,7 @@ export function updateGradleVersion( if (dependency) { const updateFunctions: UpdateFunction[] = [ updateVersionStringFormat, + updatePluginVersionStringFormat, updateVersionMapFormat, updateVersionMapVariableFormat, updateVersionStringVariableFormat, @@ -94,6 +95,18 @@ function updateVersionStringFormat( return null; } +function updatePluginVersionStringFormat( + dependency: GradleDependency, + buildGradleContent: string, + newVersion: string +) { + const regex = pluginStringVersionFormatMatch(dependency); + if (buildGradleContent.match(regex)) { + return buildGradleContent.replace(regex, `$1${newVersion}$2`); + } + return null; +} + function updateVersionMapFormat( dependency: GradleDependency, buildGradleContent: string, @@ -196,6 +209,12 @@ function moduleStringVersionFormatMatch(dependency: GradleDependency) { ); } +function pluginStringVersionFormatMatch(dependency: GradleDependency) { + return new RegExp( + `(id\\s+["']${dependency.group}["']\\s+version\\s+["'])[^$].*?(["'])` + ); +} + function moduleMapVersionFormatMatch(dependency: GradleDependency) { // prettier-ignore return new RegExp( diff --git a/lib/manager/gradle/gradle-updates-report.ts b/lib/manager/gradle/gradle-updates-report.ts index 1dcf9da855ec0fd24996ac6ee472db8d608e8a93..d83000462f226b39e67be133e066bdcafa2ca1d7 100644 --- a/lib/manager/gradle/gradle-updates-report.ts +++ b/lib/manager/gradle/gradle-updates-report.ts @@ -44,7 +44,7 @@ allprojects { .collect { "$it.url" } .findAll { !it.startsWith('file:') } project.repositories = repos - def deps = configurations + def deps = (buildscript.configurations + configurations) .collect { it.dependencies } .flatten() .findAll { it instanceof DefaultExternalModuleDependency } diff --git a/test/manager/gradle/index.spec.ts b/test/manager/gradle/index.spec.ts index f2f27b37ab6cbf679a416c3035bdf6dca82e9b69..81a2ca3fe3f8f844f8d12442ae4d96d8d6a1dfac 100644 --- a/test/manager/gradle/index.spec.ts +++ b/test/manager/gradle/index.spec.ts @@ -153,7 +153,7 @@ describe('manager/gradle', () => { }); describe('updateDependency', () => { - it('should update an existing dependency', () => { + it('should update an existing module dependency', () => { const buildGradleContent = fsReal.readFileSync( 'test/datasource/gradle/_fixtures/build.gradle.example1', 'utf8' @@ -172,5 +172,34 @@ describe('manager/gradle', () => { expect(buildGradleContentUpdated).toMatch('cglib:cglib-nodep:3.2.8'); expect(buildGradleContentUpdated).not.toMatch('cglib:cglib-nodep:3.1'); }); + + it('should update an existing plugin dependency', () => { + const buildGradleContent = ` + plugins { + id "com.github.ben-manes.versions" version "0.20.0" + } + `; + const upgrade = { + depGroup: 'com.github.ben-manes.versions', + name: 'com.github.ben-manes.versions.gradle.plugin', + version: '0.20.0', + newValue: '0.21.0', + }; + const buildGradleContentUpdated = manager.updateDependency( + buildGradleContent, + upgrade + ); + + expect(buildGradleContent).not.toMatch( + 'id "com.github.ben-manes.versions" version "0.21.0"' + ); + + expect(buildGradleContentUpdated).toMatch( + 'id "com.github.ben-manes.versions" version "0.21.0"' + ); + expect(buildGradleContentUpdated).not.toMatch( + 'id "com.github.ben-manes.versions" version "0.20.0"' + ); + }); }); });