From 64127779fccc6564d35cd2a568cb28556a333704 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov <zharinov@users.noreply.github.com> Date: Thu, 13 Jan 2022 17:22:28 +0300 Subject: [PATCH] fix(gradle): Resolve vars in plugin versions (#13541) --- lib/manager/gradle/shallow/parser.spec.ts | 16 +++++---- lib/manager/gradle/shallow/parser.ts | 43 +++++++++++++++++------ 2 files changed, 43 insertions(+), 16 deletions(-) diff --git a/lib/manager/gradle/shallow/parser.spec.ts b/lib/manager/gradle/shallow/parser.spec.ts index d3b844772b..0b9a710799 100644 --- a/lib/manager/gradle/shallow/parser.spec.ts +++ b/lib/manager/gradle/shallow/parser.spec.ts @@ -63,12 +63,16 @@ describe('manager/gradle/shallow/parser', () => { describe('plugins', () => { test.each` - input | output - ${'id "foo.bar" version "1.2.3"'} | ${{ depName: 'foo.bar', lookupName: 'foo.bar:foo.bar.gradle.plugin', currentValue: '1.2.3' }} - ${'id("foo.bar") version "1.2.3"'} | ${{ depName: 'foo.bar', lookupName: 'foo.bar:foo.bar.gradle.plugin', currentValue: '1.2.3' }} - ${'kotlin("jvm") version "1.3.71"'} | ${{ depName: 'org.jetbrains.kotlin.jvm', lookupName: 'org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin', currentValue: '1.3.71' }} - `('$input', ({ input, output }) => { - const { deps } = parseGradle(input); + def | input | output + ${''} | ${'id "foo.bar" version "1.2.3"'} | ${{ depName: 'foo.bar', lookupName: 'foo.bar:foo.bar.gradle.plugin', currentValue: '1.2.3' }} + ${''} | ${'id("foo.bar") version "1.2.3"'} | ${{ depName: 'foo.bar', lookupName: 'foo.bar:foo.bar.gradle.plugin', currentValue: '1.2.3' }} + ${''} | ${'kotlin("jvm") version "1.3.71"'} | ${{ depName: 'org.jetbrains.kotlin.jvm', lookupName: 'org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin', currentValue: '1.3.71' }} + ${''} | ${'id "foo.bar" version something'} | ${{ depName: 'foo.bar', currentValue: 'something', skipReason: SkipReason.UnknownVersion }} + ${'baz = "1.2.3"'} | ${'id "foo.bar" version baz'} | ${{ depName: 'foo.bar', lookupName: 'foo.bar:foo.bar.gradle.plugin', currentValue: '1.2.3' }} + ${'baz = "1.2.3"'} | ${'id("foo.bar") version baz'} | ${{ depName: 'foo.bar', lookupName: 'foo.bar:foo.bar.gradle.plugin', currentValue: '1.2.3' }} + ${'baz = "1.3.71"'} | ${'kotlin("jvm") version baz'} | ${{ depName: 'org.jetbrains.kotlin.jvm', lookupName: 'org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin', currentValue: '1.3.71' }} + `('$input', ({ def, input, output }) => { + const { deps } = parseGradle([def, input].join('\n')); expect(deps).toMatchObject([output].filter(Boolean)); }); }); diff --git a/lib/manager/gradle/shallow/parser.ts b/lib/manager/gradle/shallow/parser.ts index f3044a3002..a3762d1ffd 100644 --- a/lib/manager/gradle/shallow/parser.ts +++ b/lib/manager/gradle/shallow/parser.ts @@ -203,6 +203,7 @@ function processDepInterpolation({ function processPlugin({ tokenMap, packageFile, + variables, }: SyntaxHandlerInput): SyntaxHandlerOutput { const { pluginName, pluginVersion, methodName } = tokenMap; const plugin = pluginName.value; @@ -212,20 +213,36 @@ function processPlugin({ methodName.value === 'kotlin' ? `org.jetbrains.kotlin.${plugin}:org.jetbrains.kotlin.${plugin}.gradle.plugin` : `${plugin}:${plugin}.gradle.plugin`; - const currentValue = pluginVersion.value; - const fileReplacePosition = pluginVersion.offset; - const dep = { + + const dep: PackageDependency<GradleManagerData> = { depType: 'plugin', depName, lookupName, registryUrls: ['https://plugins.gradle.org/m2/'], - currentValue, commitMessageTopic: `plugin ${depName}`, - managerData: { - fileReplacePosition, - packageFile, - }, }; + + if (pluginVersion.type === TokenType.Word) { + const varData = variables[pluginVersion.value]; + if (varData) { + const currentValue = varData.value; + const fileReplacePosition = varData.fileReplacePosition; + dep.currentValue = currentValue; + dep.managerData = { fileReplacePosition, packageFile }; + } else { + const currentValue = pluginVersion.value; + const fileReplacePosition = pluginVersion.offset; + dep.currentValue = currentValue; + dep.managerData = { fileReplacePosition, packageFile }; + dep.skipReason = SkipReason.UnknownVersion; + } + } else { + const currentValue = pluginVersion.value; + const fileReplacePosition = pluginVersion.offset; + dep.currentValue = currentValue; + dep.managerData = { fileReplacePosition, packageFile }; + } + return { deps: [dep] }; } @@ -363,7 +380,10 @@ const matcherConfigs: SyntaxMatchConfig[] = [ }, { matchType: TokenType.String, tokenMapKey: 'pluginName' }, { matchType: TokenType.Word, matchValue: 'version' }, - { matchType: TokenType.String, tokenMapKey: 'pluginVersion' }, + { + matchType: [TokenType.String, TokenType.Word], + tokenMapKey: 'pluginVersion', + }, endOfInstruction, ], handler: processPlugin, @@ -380,7 +400,10 @@ const matcherConfigs: SyntaxMatchConfig[] = [ { matchType: TokenType.String, tokenMapKey: 'pluginName' }, { matchType: TokenType.RightParen }, { matchType: TokenType.Word, matchValue: 'version' }, - { matchType: TokenType.String, tokenMapKey: 'pluginVersion' }, + { + matchType: [TokenType.String, TokenType.Word], + tokenMapKey: 'pluginVersion', + }, endOfInstruction, ], handler: processPlugin, -- GitLab