From 4e68e6a9315ab09b7f97a7b7359fc8c30b9c2be4 Mon Sep 17 00:00:00 2001 From: Sho Ikeda <suicaicoca@gmail.com> Date: Wed, 24 Jul 2019 23:18:32 +0900 Subject: [PATCH] feat(gradle): Support updating plugin dependencies --- lib/manager/gradle/build-gradle.ts | 19 +++++++++++++ lib/manager/gradle/gradle-updates-report.ts | 2 +- test/manager/gradle/index.spec.ts | 31 ++++++++++++++++++++- 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/lib/manager/gradle/build-gradle.ts b/lib/manager/gradle/build-gradle.ts index d3f406b984..0bd1f5ed5c 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 1dcf9da855..d83000462f 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 f2f27b37ab..81a2ca3fe3 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"' + ); + }); }); }); -- GitLab