diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 5d81cfe42c2d1e62cfee194f2b3c374a82f75b21..81a08eab90ce0824a8ea3769b46154c4dad0629b 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -456,16 +456,6 @@ If you need to _override_ constraints that Renovate detects from the repository, !!! note Make sure not to mix this up with the term `compatibility`, which Renovate uses in the context of version releases, e.g. if a Docker image is `node:12.16.0-alpine` then the `-alpine` suffix represents `compatibility`. -## deepExtract - -<!-- prettier-ignore --> -!!! warning - The `deepExtract` configuration option is deprecated, and will be removed in a future Renovate release. - -If configured to `true`, then dependency extraction will be done using the relevant package manager instead of JavaScript-based parsing. - -This option applies only to the `gradle` manager. - ## defaultRegistryUrls Override a datasource's default registries with this config option. diff --git a/docs/usage/java.md b/docs/usage/java.md index 8519614716f01999ad2e945423ee10e84930a4f2..ccdad420fd0798a6854786a1e6d7bb942ba94591 100644 --- a/docs/usage/java.md +++ b/docs/usage/java.md @@ -87,12 +87,6 @@ Any repository URLs found within will be added as `registryUrls` to extracted de ## Custom registry support, and authentication -Unless using `deepExtract`, Renovate does not make use of authentication credentials available to Gradle. - -<!-- prettier-ignore --> -!!! warning - The `deepExtract` configuration option is deprecated, and will be removed in a future Renovate release. - The manager for Gradle makes use of the `maven` datasource. Renovate can be configured to access additional repositories and access repositories authenticated. diff --git a/lib/config/migration.spec.ts b/lib/config/migration.spec.ts index 7a9d69145a8443f4fa9d5db07bddd4b9c41031fa..c03227160d143b0aecff1940c37a79676d0635f6 100644 --- a/lib/config/migration.spec.ts +++ b/lib/config/migration.spec.ts @@ -44,6 +44,7 @@ describe('config/migration', () => { onboarding: 'false' as never, multipleMajorPrs: true, gitFs: false, + deepExtract: true, ignoreNpmrcFile: true, separateMajorReleases: true, separatePatchReleases: true, diff --git a/lib/config/migrations/migrations-service.ts b/lib/config/migrations/migrations-service.ts index 40a4e20c3af22dbb9cc6ccab117fa8c6abb9f84a..08c37db75c1b0267bf58368e85a8eea2a3bfda39 100644 --- a/lib/config/migrations/migrations-service.ts +++ b/lib/config/migrations/migrations-service.ts @@ -23,6 +23,7 @@ import type { Migration, MigrationConstructor } from './types'; export class MigrationsService { static readonly removedProperties: ReadonlySet<string> = new Set([ + 'deepExtract', 'gitFs', 'groupBranchName', 'groupCommitMessage', diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index 51fddda4d5b22daa5324bdfba9c59caf57f5debe..20d2633428a2c37380a81a0958d51aa57533ba71 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -208,15 +208,6 @@ const options: RenovateOptions[] = [ cli: false, env: false, }, - { - name: 'deepExtract', - description: `Enable extraction of dependencies using package managers.`, - type: 'boolean', - default: false, - cli: false, - env: false, - supportedManagers: ['gradle'], - }, { name: 'repositoryCache', description: 'Option to do repository extract caching.', diff --git a/lib/modules/manager/gradle-wrapper/artifacts-real.spec.ts b/lib/modules/manager/gradle-wrapper/artifacts-real.spec.ts index ddb4e1d468de85fee6a1105dd12fc31e84e02f6f..34d460f87062fca277eb71a16d0eb4dc97bb831f 100644 --- a/lib/modules/manager/gradle-wrapper/artifacts-real.spec.ts +++ b/lib/modules/manager/gradle-wrapper/artifacts-real.spec.ts @@ -6,7 +6,7 @@ import { git, partial } from '../../../../test/util'; import { GlobalConfig } from '../../../config/global'; import type { RepoGlobalConfig } from '../../../config/types'; import type { StatusResult } from '../../../util/git/types'; -import { ifSystemSupportsGradle } from '../gradle/deep/__testutil__/gradle'; +import { ifSystemSupportsGradle } from '../gradle/__testutil__/gradle'; import type { UpdateArtifactsConfig } from '../types'; import * as gradleWrapper from '.'; diff --git a/lib/modules/manager/gradle-wrapper/utils.ts b/lib/modules/manager/gradle-wrapper/utils.ts index a87cebc63557a025c41e489f1536209707595055..3c8e42ae974f7465189f0b7619ad7346ebe24943 100644 --- a/lib/modules/manager/gradle-wrapper/utils.ts +++ b/lib/modules/manager/gradle-wrapper/utils.ts @@ -14,6 +14,7 @@ export const extraEnv = { '-Dorg.gradle.parallel=true -Dorg.gradle.configureondemand=true -Dorg.gradle.daemon=false -Dorg.gradle.caching=false', }; +// istanbul ignore next export function gradleWrapperFileName(): string { if ( os.platform() === 'win32' && diff --git a/lib/modules/manager/gradle/shallow/__fixtures__/1/libs.versions.toml b/lib/modules/manager/gradle/__fixtures__/1/libs.versions.toml similarity index 100% rename from lib/modules/manager/gradle/shallow/__fixtures__/1/libs.versions.toml rename to lib/modules/manager/gradle/__fixtures__/1/libs.versions.toml diff --git a/lib/modules/manager/gradle/shallow/__fixtures__/2/libs.versions.toml b/lib/modules/manager/gradle/__fixtures__/2/libs.versions.toml similarity index 100% rename from lib/modules/manager/gradle/shallow/__fixtures__/2/libs.versions.toml rename to lib/modules/manager/gradle/__fixtures__/2/libs.versions.toml diff --git a/lib/modules/manager/gradle/deep/__fixtures__/build.gradle.example1 b/lib/modules/manager/gradle/__fixtures__/build.gradle.example1 similarity index 100% rename from lib/modules/manager/gradle/deep/__fixtures__/build.gradle.example1 rename to lib/modules/manager/gradle/__fixtures__/build.gradle.example1 diff --git a/lib/modules/manager/gradle/shallow/__snapshots__/extract.spec.ts.snap b/lib/modules/manager/gradle/__snapshots__/extract.spec.ts.snap similarity index 87% rename from lib/modules/manager/gradle/shallow/__snapshots__/extract.spec.ts.snap rename to lib/modules/manager/gradle/__snapshots__/extract.spec.ts.snap index 2cc2c28a0b916028cbb5ad85ea992d6965f77f98..36342d7b6a10b2524b2d1f6eed6b8856681869b1 100644 --- a/lib/modules/manager/gradle/shallow/__snapshots__/extract.spec.ts.snap +++ b/lib/modules/manager/gradle/__snapshots__/extract.spec.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`modules/manager/gradle/shallow/extract extracts from cross-referenced files 1`] = ` +exports[`modules/manager/gradle/extract extracts from cross-referenced files 1`] = ` Array [ Object { "datasource": "maven", diff --git a/lib/modules/manager/gradle/shallow/__snapshots__/parser.spec.ts.snap b/lib/modules/manager/gradle/__snapshots__/parser.spec.ts.snap similarity index 96% rename from lib/modules/manager/gradle/shallow/__snapshots__/parser.spec.ts.snap rename to lib/modules/manager/gradle/__snapshots__/parser.spec.ts.snap index e9d3cf53893a7d398e59c62b7dd99e8772a9c1bf..859b4fba3ec2c2e4c9d08e60b9ac7f8a21ee8fd7 100644 --- a/lib/modules/manager/gradle/shallow/__snapshots__/parser.spec.ts.snap +++ b/lib/modules/manager/gradle/__snapshots__/parser.spec.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`modules/manager/gradle/shallow/parser calculations parses fixture from "gradle" manager 1`] = ` +exports[`modules/manager/gradle/parser calculations parses fixture from "gradle" manager 1`] = ` Array [ Object { "currentValue": "1.5.2.RELEASE", diff --git a/lib/modules/manager/gradle/deep/__testutil__/gradle.ts b/lib/modules/manager/gradle/__testutil__/gradle.ts similarity index 98% rename from lib/modules/manager/gradle/deep/__testutil__/gradle.ts rename to lib/modules/manager/gradle/__testutil__/gradle.ts index 41568651fb2635765a1180aee95d6e57db2a6237..66b9b3e17569ca225f96d64cdcdcdaf6d3e709f3 100644 --- a/lib/modules/manager/gradle/deep/__testutil__/gradle.ts +++ b/lib/modules/manager/gradle/__testutil__/gradle.ts @@ -39,7 +39,7 @@ function determineJavaVersion(): number { } catch (e) { error = e; } - if (javaVersionCommand.error) { + if (javaVersionCommand?.error) { error = javaVersionCommand.error; } if (error) { diff --git a/lib/modules/manager/gradle/shallow/common.ts b/lib/modules/manager/gradle/common.ts similarity index 95% rename from lib/modules/manager/gradle/shallow/common.ts rename to lib/modules/manager/gradle/common.ts index 6991dcfd281953c0d919f6deca45b20e5e0a562d..054cd5f63e9578923db0960310088c613c9a4d3a 100644 --- a/lib/modules/manager/gradle/shallow/common.ts +++ b/lib/modules/manager/gradle/common.ts @@ -1,4 +1,4 @@ -export { MAVEN_REPO } from '../../../datasource/maven/common'; +export { MAVEN_REPO } from '../../datasource/maven/common'; export const JCENTER_REPO = 'https://jcenter.bintray.com/'; export const GOOGLE_REPO = 'https://dl.google.com/android/maven2/'; diff --git a/lib/modules/manager/gradle/deep/__fixtures__/MultiProjectUpdatesReport.json b/lib/modules/manager/gradle/deep/__fixtures__/MultiProjectUpdatesReport.json deleted file mode 100644 index cd74529111cd44f2f3673976bb4a0b1e9b4f0da5..0000000000000000000000000000000000000000 --- a/lib/modules/manager/gradle/deep/__fixtures__/MultiProjectUpdatesReport.json +++ /dev/null @@ -1,37 +0,0 @@ -[ - { - "project": "project1", - "repositories": ["https://repo.maven.apache.org/maven2/"], - "dependencies": [ - { - "name": "spring-boot-starter-jersey", - "group": "org.springframework.boot", - "version": null - }, - { - "name": "cglib-nodep", - "group": "cglib", - "version": "3.1" - } - ] - }, - { - "project": "project2", - "repositories": [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io" - ], - "dependencies": [ - { - "name": "spring-boot-starter-jersey", - "group": "org.springframework.boot", - "version": null - }, - { - "name": "spock-core", - "group": "org.spockframework", - "version": "1.0-groovy-2.4" - } - ] - } -] diff --git a/lib/modules/manager/gradle/deep/__fixtures__/gradle-wrappers/5/gradle/wrapper/gradle-wrapper.jar b/lib/modules/manager/gradle/deep/__fixtures__/gradle-wrappers/5/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index f3d88b1c2faf2fc91d853cd5d4242b5547257070..0000000000000000000000000000000000000000 Binary files a/lib/modules/manager/gradle/deep/__fixtures__/gradle-wrappers/5/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/lib/modules/manager/gradle/deep/__fixtures__/gradle-wrappers/5/gradle/wrapper/gradle-wrapper.properties b/lib/modules/manager/gradle/deep/__fixtures__/gradle-wrappers/5/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 75b8c7c8c67a003599a36935d1c6a41519fc2207..0000000000000000000000000000000000000000 --- a/lib/modules/manager/gradle/deep/__fixtures__/gradle-wrappers/5/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/lib/modules/manager/gradle/deep/__fixtures__/gradle-wrappers/5/gradlew b/lib/modules/manager/gradle/deep/__fixtures__/gradle-wrappers/5/gradlew deleted file mode 100755 index 2fe81a7d95e4f9ad2c9b2a046707d36ceb3980b3..0000000000000000000000000000000000000000 --- a/lib/modules/manager/gradle/deep/__fixtures__/gradle-wrappers/5/gradlew +++ /dev/null @@ -1,183 +0,0 @@ -#!/usr/bin/env sh - -# -# Copyright 2015 the original author or authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -exec "$JAVACMD" "$@" diff --git a/lib/modules/manager/gradle/deep/__fixtures__/gradle-wrappers/5/gradlew.bat b/lib/modules/manager/gradle/deep/__fixtures__/gradle-wrappers/5/gradlew.bat deleted file mode 100644 index 9618d8d9607cd91a0efb866bcac4810064ba6fac..0000000000000000000000000000000000000000 --- a/lib/modules/manager/gradle/deep/__fixtures__/gradle-wrappers/5/gradlew.bat +++ /dev/null @@ -1,100 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/lib/modules/manager/gradle/deep/__fixtures__/gradle-wrappers/6/gradle/wrapper/gradle-wrapper.jar b/lib/modules/manager/gradle/deep/__fixtures__/gradle-wrappers/6/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index f3d88b1c2faf2fc91d853cd5d4242b5547257070..0000000000000000000000000000000000000000 Binary files a/lib/modules/manager/gradle/deep/__fixtures__/gradle-wrappers/6/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/lib/modules/manager/gradle/deep/__fixtures__/gradle-wrappers/6/gradle/wrapper/gradle-wrapper.properties b/lib/modules/manager/gradle/deep/__fixtures__/gradle-wrappers/6/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 6ce793f21e85406ef67d65597882475c4baf6f05..0000000000000000000000000000000000000000 --- a/lib/modules/manager/gradle/deep/__fixtures__/gradle-wrappers/6/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.0-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/lib/modules/manager/gradle/deep/__fixtures__/gradle-wrappers/6/gradlew b/lib/modules/manager/gradle/deep/__fixtures__/gradle-wrappers/6/gradlew deleted file mode 100755 index 2fe81a7d95e4f9ad2c9b2a046707d36ceb3980b3..0000000000000000000000000000000000000000 --- a/lib/modules/manager/gradle/deep/__fixtures__/gradle-wrappers/6/gradlew +++ /dev/null @@ -1,183 +0,0 @@ -#!/usr/bin/env sh - -# -# Copyright 2015 the original author or authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -exec "$JAVACMD" "$@" diff --git a/lib/modules/manager/gradle/deep/__fixtures__/gradle-wrappers/6/gradlew.bat b/lib/modules/manager/gradle/deep/__fixtures__/gradle-wrappers/6/gradlew.bat deleted file mode 100644 index 9618d8d9607cd91a0efb866bcac4810064ba6fac..0000000000000000000000000000000000000000 --- a/lib/modules/manager/gradle/deep/__fixtures__/gradle-wrappers/6/gradlew.bat +++ /dev/null @@ -1,100 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/lib/modules/manager/gradle/deep/__fixtures__/minimal-project/build.gradle b/lib/modules/manager/gradle/deep/__fixtures__/minimal-project/build.gradle deleted file mode 100644 index 0014edfd551f4d87030aeb0a68bc70d54b3d3943..0000000000000000000000000000000000000000 --- a/lib/modules/manager/gradle/deep/__fixtures__/minimal-project/build.gradle +++ /dev/null @@ -1,11 +0,0 @@ -plugins { - id 'java' -} - -repositories { - jcenter() -} - -dependencies { - implementation 'org.apache.commons:commons-collections4:4.4' -} diff --git a/lib/modules/manager/gradle/deep/__fixtures__/minimal-project/settings.gradle b/lib/modules/manager/gradle/deep/__fixtures__/minimal-project/settings.gradle deleted file mode 100644 index 04859231ff40e378ffa47417a567e66bdc989164..0000000000000000000000000000000000000000 --- a/lib/modules/manager/gradle/deep/__fixtures__/minimal-project/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'minimal-test' diff --git a/lib/modules/manager/gradle/deep/__fixtures__/updatesReport.json b/lib/modules/manager/gradle/deep/__fixtures__/updatesReport.json deleted file mode 100644 index e509965ec50d1dbec180bfc4853621b01a259487..0000000000000000000000000000000000000000 --- a/lib/modules/manager/gradle/deep/__fixtures__/updatesReport.json +++ /dev/null @@ -1,51 +0,0 @@ -[ - { - "project": "telegram-images", - "repositories": [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io" - ], - "dependencies": [ - { - "name": "spring-boot-starter-jersey", - "group": "org.springframework.boot", - "version": null - }, - { - "name": "spock-core", - "group": "org.spockframework", - "version": "1.0-groovy-2.4" - }, - { - "name": "cglib-nodep", - "group": "cglib", - "version": "3.1" - }, - { - "name": "scala-library", - "group": "org.scala-lang", - "version": "%scala-version%" - }, - { - "name": "scala-logging_%%", - "group": "com.typesafe.scala-logging", - "version": "3.9.0" - }, - { - "name": "foo", - "group": "foo", - "version": null - }, - { - "name": "bar", - "group": "bar", - "version": null - }, - { - "name": "baz", - "group": "baz", - "version": null - } - ] - } -] diff --git a/lib/modules/manager/gradle/deep/__fixtures__/updatesReportEmpty.json b/lib/modules/manager/gradle/deep/__fixtures__/updatesReportEmpty.json deleted file mode 100644 index 7a6996ca94790c8315c6399c7487f62231337be1..0000000000000000000000000000000000000000 --- a/lib/modules/manager/gradle/deep/__fixtures__/updatesReportEmpty.json +++ /dev/null @@ -1,9 +0,0 @@ -[ - { - "project": "telegram-images", - "repositories": [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io" - ] - } -] diff --git a/lib/modules/manager/gradle/deep/__snapshots__/index.spec.ts.snap b/lib/modules/manager/gradle/deep/__snapshots__/index.spec.ts.snap deleted file mode 100644 index b770de8095b3df1c64efd3df313bf05c1bb91c72..0000000000000000000000000000000000000000 --- a/lib/modules/manager/gradle/deep/__snapshots__/index.spec.ts.snap +++ /dev/null @@ -1,1244 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`modules/manager/gradle/deep/index extractPackageFile should execute gradle if gradlew is not available 1`] = ` -Array [ - Object { - "datasource": "maven", - "deps": Array [ - Object { - "currentValue": null, - "depGroup": "org.springframework.boot", - "depName": "org.springframework.boot:spring-boot-starter-jersey", - "name": "spring-boot-starter-jersey", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "1.0-groovy-2.4", - "depGroup": "org.spockframework", - "depName": "org.spockframework:spock-core", - "name": "spock-core", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "3.1", - "depGroup": "cglib", - "depName": "cglib:cglib-nodep", - "name": "cglib-nodep", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "%scala-version%", - "depGroup": "org.scala-lang", - "depName": "org.scala-lang:scala-library", - "name": "scala-library", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - "skipReason": "version-placeholder", - }, - Object { - "currentValue": "3.9.0", - "datasource": "sbt-package", - "depGroup": "com.typesafe.scala-logging", - "depName": "com.typesafe.scala-logging:scala-logging", - "name": "scala-logging_%%", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "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": "This.Is.Valid.Version.Good.Luck", - "depGroup": "bar", - "depName": "bar:bar", - "name": "bar", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": null, - "depGroup": "baz", - "depName": "baz:baz", - "name": "baz", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - ], - "packageFile": "build.gradle", - }, -] -`; - -exports[`modules/manager/gradle/deep/index extractPackageFile should execute gradle if gradlew is not available 2`] = ` -Array [ - Object { - "cmd": "gradle --init-script renovate-plugin.gradle renovate", - "options": Object { - "cwd": "/foo/bar", - "encoding": "utf-8", - "env": Object { - "GRADLE_OPTS": "-Dorg.gradle.parallel=true -Dorg.gradle.configureondemand=true -Dorg.gradle.daemon=false -Dorg.gradle.caching=false", - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 60000, - }, - }, -] -`; - -exports[`modules/manager/gradle/deep/index extractPackageFile should execute gradlew when available 1`] = ` -Array [ - Object { - "datasource": "maven", - "deps": Array [ - Object { - "currentValue": null, - "depGroup": "org.springframework.boot", - "depName": "org.springframework.boot:spring-boot-starter-jersey", - "name": "spring-boot-starter-jersey", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "1.0-groovy-2.4", - "depGroup": "org.spockframework", - "depName": "org.spockframework:spock-core", - "name": "spock-core", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "3.1", - "depGroup": "cglib", - "depName": "cglib:cglib-nodep", - "name": "cglib-nodep", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "%scala-version%", - "depGroup": "org.scala-lang", - "depName": "org.scala-lang:scala-library", - "name": "scala-library", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - "skipReason": "version-placeholder", - }, - Object { - "currentValue": "3.9.0", - "datasource": "sbt-package", - "depGroup": "com.typesafe.scala-logging", - "depName": "com.typesafe.scala-logging:scala-logging", - "name": "scala-logging_%%", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "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": "This.Is.Valid.Version.Good.Luck", - "depGroup": "bar", - "depName": "bar:bar", - "name": "bar", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": null, - "depGroup": "baz", - "depName": "baz:baz", - "name": "baz", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - ], - "packageFile": "build.gradle", - }, -] -`; - -exports[`modules/manager/gradle/deep/index extractPackageFile should execute gradlew when available 2`] = ` -Array [ - Object { - "cmd": "<gradlew> --init-script renovate-plugin.gradle renovate", - "options": Object { - "cwd": "/foo/bar", - "encoding": "utf-8", - "env": Object { - "GRADLE_OPTS": "-Dorg.gradle.parallel=true -Dorg.gradle.configureondemand=true -Dorg.gradle.daemon=false -Dorg.gradle.caching=false", - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 60000, - }, - }, -] -`; - -exports[`modules/manager/gradle/deep/index extractPackageFile should execute gradlew.bat when available on Windows 1`] = ` -Array [ - Object { - "datasource": "maven", - "deps": Array [ - Object { - "currentValue": null, - "depGroup": "org.springframework.boot", - "depName": "org.springframework.boot:spring-boot-starter-jersey", - "name": "spring-boot-starter-jersey", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "1.0-groovy-2.4", - "depGroup": "org.spockframework", - "depName": "org.spockframework:spock-core", - "name": "spock-core", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "3.1", - "depGroup": "cglib", - "depName": "cglib:cglib-nodep", - "name": "cglib-nodep", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "%scala-version%", - "depGroup": "org.scala-lang", - "depName": "org.scala-lang:scala-library", - "name": "scala-library", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - "skipReason": "version-placeholder", - }, - Object { - "currentValue": "3.9.0", - "datasource": "sbt-package", - "depGroup": "com.typesafe.scala-logging", - "depName": "com.typesafe.scala-logging:scala-logging", - "name": "scala-logging_%%", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "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": "This.Is.Valid.Version.Good.Luck", - "depGroup": "bar", - "depName": "bar:bar", - "name": "bar", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": null, - "depGroup": "baz", - "depName": "baz:baz", - "name": "baz", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - ], - "packageFile": "build.gradle", - }, -] -`; - -exports[`modules/manager/gradle/deep/index extractPackageFile should execute gradlew.bat when available on Windows 2`] = ` -Array [ - Object { - "cmd": "<gradlew> --init-script renovate-plugin.gradle renovate", - "options": Object { - "cwd": "/foo/bar", - "encoding": "utf-8", - "env": Object { - "GRADLE_OPTS": "-Dorg.gradle.parallel=true -Dorg.gradle.configureondemand=true -Dorg.gradle.daemon=false -Dorg.gradle.caching=false", - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 60000, - }, - }, -] -`; - -exports[`modules/manager/gradle/deep/index extractPackageFile should return empty if renovate report is invalid 1`] = ` -Array [ - Object { - "cmd": "<gradlew> --init-script renovate-plugin.gradle renovate", - "options": Object { - "cwd": "/foo/bar", - "encoding": "utf-8", - "env": Object { - "GRADLE_OPTS": "-Dorg.gradle.parallel=true -Dorg.gradle.configureondemand=true -Dorg.gradle.daemon=false -Dorg.gradle.caching=false", - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 60000, - }, - }, -] -`; - -exports[`modules/manager/gradle/deep/index extractPackageFile should return empty if there are no dependencies 1`] = ` -Array [ - Object { - "cmd": "<gradlew> --init-script renovate-plugin.gradle renovate", - "options": Object { - "cwd": "/foo/bar", - "encoding": "utf-8", - "env": Object { - "GRADLE_OPTS": "-Dorg.gradle.parallel=true -Dorg.gradle.configureondemand=true -Dorg.gradle.daemon=false -Dorg.gradle.caching=false", - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 60000, - }, - }, -] -`; - -exports[`modules/manager/gradle/deep/index extractPackageFile should return empty if there is no dependency report 1`] = ` -Array [ - Object { - "cmd": "<gradlew> --init-script renovate-plugin.gradle renovate", - "options": Object { - "cwd": "/foo/bar", - "encoding": "utf-8", - "env": Object { - "GRADLE_OPTS": "-Dorg.gradle.parallel=true -Dorg.gradle.configureondemand=true -Dorg.gradle.daemon=false -Dorg.gradle.caching=false", - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 60000, - }, - }, -] -`; - -exports[`modules/manager/gradle/deep/index extractPackageFile should return gradle dependencies for build.gradle in subdirectories if there is gradlew in the same directory 1`] = ` -Array [ - Object { - "datasource": "maven", - "deps": Array [ - Object { - "currentValue": null, - "depGroup": "org.springframework.boot", - "depName": "org.springframework.boot:spring-boot-starter-jersey", - "name": "spring-boot-starter-jersey", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "1.0-groovy-2.4", - "depGroup": "org.spockframework", - "depName": "org.spockframework:spock-core", - "name": "spock-core", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "3.1", - "depGroup": "cglib", - "depName": "cglib:cglib-nodep", - "name": "cglib-nodep", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "%scala-version%", - "depGroup": "org.scala-lang", - "depName": "org.scala-lang:scala-library", - "name": "scala-library", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - "skipReason": "version-placeholder", - }, - Object { - "currentValue": "3.9.0", - "datasource": "sbt-package", - "depGroup": "com.typesafe.scala-logging", - "depName": "com.typesafe.scala-logging:scala-logging", - "name": "scala-logging_%%", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "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": "This.Is.Valid.Version.Good.Luck", - "depGroup": "bar", - "depName": "bar:bar", - "name": "bar", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": null, - "depGroup": "baz", - "depName": "baz:baz", - "name": "baz", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - ], - "packageFile": "baz/qux/build.gradle", - }, -] -`; - -exports[`modules/manager/gradle/deep/index extractPackageFile should return gradle dependencies for build.gradle in subdirectories if there is gradlew in the same directory 2`] = ` -Array [ - Object { - "cmd": "<gradlew> --init-script renovate-plugin.gradle renovate", - "options": Object { - "cwd": "/foo/bar/baz/qux", - "encoding": "utf-8", - "env": Object { - "GRADLE_OPTS": "-Dorg.gradle.parallel=true -Dorg.gradle.configureondemand=true -Dorg.gradle.daemon=false -Dorg.gradle.caching=false", - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 60000, - }, - }, -] -`; - -exports[`modules/manager/gradle/deep/index extractPackageFile should return gradle.kts dependencies 1`] = ` -Array [ - Object { - "datasource": "maven", - "deps": Array [ - Object { - "currentValue": null, - "depGroup": "org.springframework.boot", - "depName": "org.springframework.boot:spring-boot-starter-jersey", - "name": "spring-boot-starter-jersey", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "1.0-groovy-2.4", - "depGroup": "org.spockframework", - "depName": "org.spockframework:spock-core", - "name": "spock-core", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "3.1", - "depGroup": "cglib", - "depName": "cglib:cglib-nodep", - "name": "cglib-nodep", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "%scala-version%", - "depGroup": "org.scala-lang", - "depName": "org.scala-lang:scala-library", - "name": "scala-library", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - "skipReason": "version-placeholder", - }, - Object { - "currentValue": "3.9.0", - "datasource": "sbt-package", - "depGroup": "com.typesafe.scala-logging", - "depName": "com.typesafe.scala-logging:scala-logging", - "name": "scala-logging_%%", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "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": "This.Is.Valid.Version.Good.Luck", - "depGroup": "bar", - "depName": "bar:bar", - "name": "bar", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": null, - "depGroup": "baz", - "depName": "baz:baz", - "name": "baz", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - ], - "packageFile": "build.gradle.kts", - }, -] -`; - -exports[`modules/manager/gradle/deep/index extractPackageFile should return gradle.kts dependencies 2`] = ` -Array [ - Object { - "cmd": "<gradlew> --init-script renovate-plugin.gradle renovate", - "options": Object { - "cwd": "/foo/bar", - "encoding": "utf-8", - "env": Object { - "GRADLE_OPTS": "-Dorg.gradle.parallel=true -Dorg.gradle.configureondemand=true -Dorg.gradle.daemon=false -Dorg.gradle.caching=false", - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 60000, - }, - }, -] -`; - -exports[`modules/manager/gradle/deep/index extractPackageFile should update an existing module dependency 1`] = ` -Array [ - Object { - "datasource": "maven", - "deps": Array [ - Object { - "currentValue": null, - "depGroup": "org.springframework.boot", - "depName": "org.springframework.boot:spring-boot-starter-jersey", - "name": "spring-boot-starter-jersey", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "1.0-groovy-2.4", - "depGroup": "org.spockframework", - "depName": "org.spockframework:spock-core", - "name": "spock-core", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "3.1", - "depGroup": "cglib", - "depName": "cglib:cglib-nodep", - "name": "cglib-nodep", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "%scala-version%", - "depGroup": "org.scala-lang", - "depName": "org.scala-lang:scala-library", - "name": "scala-library", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - "skipReason": "version-placeholder", - }, - Object { - "currentValue": "3.9.0", - "datasource": "sbt-package", - "depGroup": "com.typesafe.scala-logging", - "depName": "com.typesafe.scala-logging:scala-logging", - "name": "scala-logging_%%", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "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": "This.Is.Valid.Version.Good.Luck", - "depGroup": "bar", - "depName": "bar:bar", - "name": "bar", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": null, - "depGroup": "baz", - "depName": "baz:baz", - "name": "baz", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - ], - "packageFile": "build.gradle", - }, -] -`; - -exports[`modules/manager/gradle/deep/index extractPackageFile should update an existing module dependency 2`] = ` -Array [ - Object { - "cmd": "<gradlew> --init-script renovate-plugin.gradle renovate", - "options": Object { - "cwd": "/foo/bar", - "encoding": "utf-8", - "env": Object { - "GRADLE_OPTS": "-Dorg.gradle.parallel=true -Dorg.gradle.configureondemand=true -Dorg.gradle.daemon=false -Dorg.gradle.caching=false", - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 60000, - }, - }, -] -`; - -exports[`modules/manager/gradle/deep/index extractPackageFile should use docker even if gradlew is available 1`] = ` -Array [ - Object { - "datasource": "maven", - "deps": Array [ - Object { - "currentValue": null, - "depGroup": "org.springframework.boot", - "depName": "org.springframework.boot:spring-boot-starter-jersey", - "name": "spring-boot-starter-jersey", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "1.0-groovy-2.4", - "depGroup": "org.spockframework", - "depName": "org.spockframework:spock-core", - "name": "spock-core", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "3.1", - "depGroup": "cglib", - "depName": "cglib:cglib-nodep", - "name": "cglib-nodep", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "%scala-version%", - "depGroup": "org.scala-lang", - "depName": "org.scala-lang:scala-library", - "name": "scala-library", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - "skipReason": "version-placeholder", - }, - Object { - "currentValue": "3.9.0", - "datasource": "sbt-package", - "depGroup": "com.typesafe.scala-logging", - "depName": "com.typesafe.scala-logging:scala-logging", - "name": "scala-logging_%%", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "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": "This.Is.Valid.Version.Good.Luck", - "depGroup": "bar", - "depName": "bar:bar", - "name": "bar", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": null, - "depGroup": "baz", - "depName": "baz:baz", - "name": "baz", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - ], - "packageFile": "build.gradle", - }, -] -`; - -exports[`modules/manager/gradle/deep/index extractPackageFile should use docker even if gradlew is available 2`] = ` -Array [ - Object { - "cmd": "docker pull renovate/java:11.0.12", - "options": Object { - "encoding": "utf-8", - }, - }, - Object { - "cmd": "docker ps --filter name=renovate_java -aq", - "options": Object { - "encoding": "utf-8", - }, - }, - Object { - "cmd": "docker rm -f gradle output", - "options": Object { - "encoding": "utf-8", - }, - }, - Object { - "cmd": "docker run --rm --name=renovate_java --label=renovate_child -v \\"/foo/bar\\":\\"/foo/bar\\" -e GRADLE_OPTS -w \\"/foo/bar\\" renovate/java:11.0.12 bash -l -c \\"<gradlew> --init-script renovate-plugin.gradle renovate\\"", - "options": Object { - "cwd": "/foo/bar", - "encoding": "utf-8", - "env": Object { - "GRADLE_OPTS": "-Dorg.gradle.parallel=true -Dorg.gradle.configureondemand=true -Dorg.gradle.daemon=false -Dorg.gradle.caching=false", - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 60000, - }, - }, -] -`; - -exports[`modules/manager/gradle/deep/index extractPackageFile should use docker even if gradlew.bat is available on Windows 1`] = ` -Array [ - Object { - "datasource": "maven", - "deps": Array [ - Object { - "currentValue": null, - "depGroup": "org.springframework.boot", - "depName": "org.springframework.boot:spring-boot-starter-jersey", - "name": "spring-boot-starter-jersey", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "1.0-groovy-2.4", - "depGroup": "org.spockframework", - "depName": "org.spockframework:spock-core", - "name": "spock-core", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "3.1", - "depGroup": "cglib", - "depName": "cglib:cglib-nodep", - "name": "cglib-nodep", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "%scala-version%", - "depGroup": "org.scala-lang", - "depName": "org.scala-lang:scala-library", - "name": "scala-library", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - "skipReason": "version-placeholder", - }, - Object { - "currentValue": "3.9.0", - "datasource": "sbt-package", - "depGroup": "com.typesafe.scala-logging", - "depName": "com.typesafe.scala-logging:scala-logging", - "name": "scala-logging_%%", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "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": "This.Is.Valid.Version.Good.Luck", - "depGroup": "bar", - "depName": "bar:bar", - "name": "bar", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": null, - "depGroup": "baz", - "depName": "baz:baz", - "name": "baz", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - ], - "packageFile": "build.gradle", - }, -] -`; - -exports[`modules/manager/gradle/deep/index extractPackageFile should use docker even if gradlew.bat is available on Windows 2`] = ` -Array [ - Object { - "cmd": "docker pull renovate/java:11.0.12", - "options": Object { - "encoding": "utf-8", - }, - }, - Object { - "cmd": "docker ps --filter name=renovate_java -aq", - "options": Object { - "encoding": "utf-8", - }, - }, - Object { - "cmd": "docker rm -f gradle output", - "options": Object { - "encoding": "utf-8", - }, - }, - Object { - "cmd": "docker run --rm --name=renovate_java --label=renovate_child -v \\"/foo/bar\\":\\"/foo/bar\\" -e GRADLE_OPTS -w \\"/foo/bar\\" renovate/java:11.0.12 bash -l -c \\"<gradlew> --init-script renovate-plugin.gradle renovate\\"", - "options": Object { - "cwd": "/foo/bar", - "encoding": "utf-8", - "env": Object { - "GRADLE_OPTS": "-Dorg.gradle.parallel=true -Dorg.gradle.configureondemand=true -Dorg.gradle.daemon=false -Dorg.gradle.caching=false", - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 60000, - }, - }, -] -`; - -exports[`modules/manager/gradle/deep/index extractPackageFile should use docker if required 1`] = ` -Array [ - Object { - "datasource": "maven", - "deps": Array [ - Object { - "currentValue": null, - "depGroup": "org.springframework.boot", - "depName": "org.springframework.boot:spring-boot-starter-jersey", - "name": "spring-boot-starter-jersey", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "1.0-groovy-2.4", - "depGroup": "org.spockframework", - "depName": "org.spockframework:spock-core", - "name": "spock-core", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "3.1", - "depGroup": "cglib", - "depName": "cglib:cglib-nodep", - "name": "cglib-nodep", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "%scala-version%", - "depGroup": "org.scala-lang", - "depName": "org.scala-lang:scala-library", - "name": "scala-library", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - "skipReason": "version-placeholder", - }, - Object { - "currentValue": "3.9.0", - "datasource": "sbt-package", - "depGroup": "com.typesafe.scala-logging", - "depName": "com.typesafe.scala-logging:scala-logging", - "name": "scala-logging_%%", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "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": "This.Is.Valid.Version.Good.Luck", - "depGroup": "bar", - "depName": "bar:bar", - "name": "bar", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": null, - "depGroup": "baz", - "depName": "baz:baz", - "name": "baz", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - ], - "packageFile": "build.gradle", - }, -] -`; - -exports[`modules/manager/gradle/deep/index extractPackageFile should use docker if required 2`] = ` -Array [ - Object { - "cmd": "docker pull renovate/java:11.0.12", - "options": Object { - "encoding": "utf-8", - }, - }, - Object { - "cmd": "docker ps --filter name=renovate_java -aq", - "options": Object { - "encoding": "utf-8", - }, - }, - Object { - "cmd": "docker rm -f gradle output", - "options": Object { - "encoding": "utf-8", - }, - }, - Object { - "cmd": "docker run --rm --name=renovate_java --label=renovate_child -v \\"/foo/bar\\":\\"/foo/bar\\" -e GRADLE_OPTS -w \\"/foo/bar\\" renovate/java:11.0.12 bash -l -c \\"install-tool gradle latest && gradle --init-script renovate-plugin.gradle renovate\\"", - "options": Object { - "cwd": "/foo/bar", - "encoding": "utf-8", - "env": Object { - "GRADLE_OPTS": "-Dorg.gradle.parallel=true -Dorg.gradle.configureondemand=true -Dorg.gradle.daemon=false -Dorg.gradle.caching=false", - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 60000, - }, - }, -] -`; - -exports[`modules/manager/gradle/deep/index extractPackageFile should use repositories only for current project 1`] = ` -Array [ - Object { - "datasource": "maven", - "deps": Array [ - Object { - "currentValue": null, - "depGroup": "org.springframework.boot", - "depName": "org.springframework.boot:spring-boot-starter-jersey", - "name": "spring-boot-starter-jersey", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - Object { - "currentValue": "3.1", - "depGroup": "cglib", - "depName": "cglib:cglib-nodep", - "name": "cglib-nodep", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - ], - }, - Object { - "currentValue": "1.0-groovy-2.4", - "depGroup": "org.spockframework", - "depName": "org.spockframework:spock-core", - "name": "spock-core", - "registryUrls": Array [ - "https://repo.maven.apache.org/maven2/", - "https://jitpack.io", - ], - }, - ], - "packageFile": "build.gradle", - }, -] -`; - -exports[`modules/manager/gradle/deep/index extractPackageFile should use repositories only for current project 2`] = ` -Array [ - Object { - "cmd": "<gradlew> --init-script renovate-plugin.gradle renovate", - "options": Object { - "cwd": "/foo/bar", - "encoding": "utf-8", - "env": Object { - "GRADLE_OPTS": "-Dorg.gradle.parallel=true -Dorg.gradle.configureondemand=true -Dorg.gradle.daemon=false -Dorg.gradle.caching=false", - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 60000, - }, - }, -] -`; diff --git a/lib/modules/manager/gradle/deep/build-gradle.spec.ts b/lib/modules/manager/gradle/deep/build-gradle.spec.ts deleted file mode 100644 index 516bf725c623c760ce8cb34376391003d076a204..0000000000000000000000000000000000000000 --- a/lib/modules/manager/gradle/deep/build-gradle.spec.ts +++ /dev/null @@ -1,790 +0,0 @@ -import { - collectVersionVariables, - init, - updateGradleVersion, -} from './build-gradle'; - -describe('modules/manager/gradle/deep/build-gradle', () => { - beforeEach(() => { - init(); - }); - - it('returns the same file if dependency is null', () => { - const gradleFile = "runtime('mysql:mysql-connector-java:6.0.5')"; - const updatedGradleFile = updateGradleVersion(gradleFile, null, null); - expect(updatedGradleFile).toEqual(gradleFile); - }); - - it('returns the same file if version is not found', () => { - const gradleFile = "runtime('mysql:mysql-connector-java:6.0.5')"; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'org.codehaus.groovy', name: 'groovy', version: '2.4.9' }, - '7.0.0' - ); - expect(updatedGradleFile).toEqual(gradleFile); - }); - - it('returns a file updated if the version is found', () => { - const gradleFile = "runtime ( 'mysql:mysql-connector-java:6.0.5' )"; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - "runtime ( 'mysql:mysql-connector-java:7.0.0' )" - ); - }); - - it('should returns a file updated with keeping an extension if the version is found', () => { - const gradleFile = - "runtime ( 'com.crashlytics.sdk.android:crashlytics:2.8.0@aar' )"; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { - group: 'com.crashlytics.sdk.android', - name: 'crashlytics', - version: '2.8.0', - }, - '2.10.1' - ); - expect(updatedGradleFile).toBe( - "runtime ( 'com.crashlytics.sdk.android:crashlytics:2.10.1@aar' )" - ); - }); - - it('should returns a file updated with keeping a classifier and an extension if the version is found', () => { - const gradleFile = "runtime ( 'junit:junit:4.0:javadoc@jar' )"; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'junit', name: 'junit', version: '4.0' }, - '5.0' - ); - expect(updatedGradleFile).toBe( - "runtime ( 'junit:junit:5.0:javadoc@jar' )" - ); - }); - - it('returns an updated file if the version in single quotes defined as map is found', () => { - const gradleFile = `compile group : 'mysql' , - name : 'mysql-connector-java', - version: '6.0.5'`; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `compile group : 'mysql' , - name : 'mysql-connector-java', - version: '7.0.0'` - ); - }); - - it('returns an updated file if the version in single quotes defined as map is found in a different order', () => { - const gradleFile = `compile name : 'mysql-connector-java', - group : 'mysql', - version: '6.0.5'`; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `compile name : 'mysql-connector-java', - group : 'mysql', - version: '7.0.0'` - ); - }); - - it('returns an updated file if the version in double quotes defined as map is found', () => { - const gradleFile = `compile group : 'mysql' , - name : 'mysql-connector-java', - version: "6.0.5"`; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `compile group : 'mysql' , - name : 'mysql-connector-java', - version: "7.0.0"` - ); - }); - - it('returns an updated file if the version in double quotes defined as map is found in a different order', () => { - const gradleFile = `compile name : 'mysql-connector-java', - version: "6.0.5", - group : 'mysql'`; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `compile name : 'mysql-connector-java', - version: "7.0.0", - group : 'mysql'` - ); - }); - - it('returns an updated file if the version in triple single quotes defined as map is found', () => { - const gradleFile = `compile group : 'mysql' , - name : 'mysql-connector-java', - version: '''6.0.5'''`; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `compile group : 'mysql' , - name : 'mysql-connector-java', - version: '''7.0.0'''` - ); - }); - - it('returns an updated file if the version in triple single quotes defined as map is found in a different order', () => { - const gradleFile = `compile version: '''6.0.5''', - group : 'mysql', - name : 'mysql-connector-java'`; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `compile version: '''7.0.0''', - group : 'mysql', - name : 'mysql-connector-java'` - ); - }); - - it('returns an updated file if the version in triple double quotes defined as map is found', () => { - const gradleFile = `compile group : 'mysql' , - name : 'mysql-connector-java', - version: """6.0.5"""`; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `compile group : 'mysql' , - name : 'mysql-connector-java', - version: """7.0.0"""` - ); - }); - - it('returns an updated file if the version in triple double quotes defined as map is found in a different order', () => { - const gradleFile = `compile version: """6.0.5""", - name : 'mysql-connector-java', - group : 'mysql'`; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `compile version: """7.0.0""", - name : 'mysql-connector-java', - group : 'mysql'` - ); - }); - - it('returns a file updated if the version defined as a Kotlin named argument is found', () => { - const gradleFile = `compile(group = "mysql" , - name = "mysql-connector-java", - version = "6.0.5")`; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `compile(group = "mysql" , - name = "mysql-connector-java", - version = "7.0.0")` - ); - }); - - it('returns a file updated if the version defined as a Kotlin named argument is found in a different order', () => { - const gradleFile = `compile(group = "mysql", - version = "6.0.5", - name = "mysql-connector-java")`; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `compile(group = "mysql", - version = "7.0.0", - name = "mysql-connector-java")` - ); - }); - - it('should returns a file updated if the version defined in a variable as a string is found', () => { - const gradleFile = `String mysqlVersion= "6.0.5" - runtime ( "mysql:mysql-connector-java:$mysqlVersion" ) - `; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe(`String mysqlVersion= "7.0.0" - runtime ( "mysql:mysql-connector-java:$mysqlVersion" ) - `); - }); - - it('should returns a file updated if the version defined in a expression as a string is found', () => { - const gradleFile = `String mysqlVersion = "6.0.5" - runtime ( "mysql:mysql-connector-java:\${mysqlVersion}" ) - `; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe(`String mysqlVersion = "7.0.0" - runtime ( "mysql:mysql-connector-java:\${mysqlVersion}" ) - `); - }); - - it('should returns a file updated if the version defined in a variable as a map is found', () => { - const gradleFile = `String mysqlVersion = "6.0.5" - compile group : 'mysql' , - name : 'mysql-connector-java', - version : mysqlVersion - `; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `String mysqlVersion = "7.0.0" - compile group : 'mysql' , - name : 'mysql-connector-java', - version : mysqlVersion - ` - ); - }); - - it('should returns a file updated if the version defined in a variable as a map is found in a different order', () => { - const gradleFile = `String mysqlVersion = "6.0.5" - compile name : 'mysql-connector-java', - group : 'mysql' , - version : mysqlVersion - `; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `String mysqlVersion = "7.0.0" - compile name : 'mysql-connector-java', - group : 'mysql' , - version : mysqlVersion - ` - ); - }); - - it('returns an updated file if the version defined in a variable in a simple template string without curly braces as a map is found', () => { - const gradleFile = `String mysqlVersion = "6.0.5" - compile group : 'mysql' , - name : 'mysql-connector-java', - version : "$mysqlVersion" - `; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `String mysqlVersion = "7.0.0" - compile group : 'mysql' , - name : 'mysql-connector-java', - version : "$mysqlVersion" - ` - ); - }); - - it('returns an updated file if the version defined in a variable in a simple template string with curly braces as a map is found', () => { - const gradleFile = `String mysqlVersion = "6.0.5" - compile group : 'mysql' , - name : 'mysql-connector-java', - version : "\${mysqlVersion}" - `; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `String mysqlVersion = "7.0.0" - compile group : 'mysql' , - name : 'mysql-connector-java', - version : "\${mysqlVersion}" - ` - ); - }); - - it('returns an updated file if the version defined in a variable in a simple template string with curly braces as a map is found in a different order', () => { - const gradleFile = `String mysqlVersion = "6.0.5" - compile name : 'mysql-connector-java', - version : "\${mysqlVersion}", - group : 'mysql' - `; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `String mysqlVersion = "7.0.0" - compile name : 'mysql-connector-java', - version : "\${mysqlVersion}", - group : 'mysql' - ` - ); - }); - - it('returns an updated file if the version defined in a variable in a triple template string without curly braces as a map is found', () => { - const gradleFile = `String mysqlVersion = "6.0.5" - compile group : 'mysql' , - name : 'mysql-connector-java', - version : """$mysqlVersion""" - `; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `String mysqlVersion = "7.0.0" - compile group : 'mysql' , - name : 'mysql-connector-java', - version : """$mysqlVersion""" - ` - ); - }); - - it('returns an updated file if the version defined in a variable in a triple template string with curly braces as a map is found', () => { - const gradleFile = `String mysqlVersion = "6.0.5" - compile group : 'mysql' , - name : 'mysql-connector-java', - version : """\${mysqlVersion}""" - `; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `String mysqlVersion = "7.0.0" - compile group : 'mysql' , - name : 'mysql-connector-java', - version : """\${mysqlVersion}""" - ` - ); - }); - - it('should returns a file updated if the version defined in a variable as a Kotlin named argument is found', () => { - const gradleFile = `val mysqlVersion = "6.0.5" - compile(group = "mysql" , - name = "mysql-connector-java", - version = mysqlVersion) - `; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `val mysqlVersion = "7.0.0" - compile(group = "mysql" , - name = "mysql-connector-java", - version = mysqlVersion) - ` - ); - }); - - it('should returns a file updated if the version defined in a variable as a Kotlin named argument is found in a different order', () => { - const gradleFile = `val mysqlVersion = "6.0.5" - compile(name = "mysql-connector-java", - group = "mysql" , - version = mysqlVersion) - `; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `val mysqlVersion = "7.0.0" - compile(name = "mysql-connector-java", - group = "mysql" , - version = mysqlVersion) - ` - ); - }); - - it('returns an updated file if the version defined in a variable in a template string without curly braces as a Kotlin named argument is found', () => { - const gradleFile = `val mysqlVersion = "6.0.5" - compile(group = "mysql" , - name = "mysql-connector-java", - version = "$mysqlVersion") - `; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `val mysqlVersion = "7.0.0" - compile(group = "mysql" , - name = "mysql-connector-java", - version = "$mysqlVersion") - ` - ); - }); - - it('returns an updated file if the version defined in a variable in a template string with curly braces as a Kotlin named argument is found', () => { - const gradleFile = `val mysqlVersion = "6.0.5" - compile(group = "mysql" , - name = "mysql-connector-java", - version = "\${mysqlVersion}") - `; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `val mysqlVersion = "7.0.0" - compile(group = "mysql" , - name = "mysql-connector-java", - version = "\${mysqlVersion}") - ` - ); - }); - - it('returns an updated file if the version defined in a variable in a template string with curly braces as a Kotlin named argument is found in a different order', () => { - const gradleFile = `val mysqlVersion = "6.0.5" - compile(version = "\${mysqlVersion}" , - name = "mysql-connector-java", - group = "mysql") - `; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `val mysqlVersion = "7.0.0" - compile(version = "\${mysqlVersion}" , - name = "mysql-connector-java", - group = "mysql") - ` - ); - }); - - it('returns an updated file if the plugin version defined in a variable is found', () => { - const gradleFile = `val mysqlVersion = "6.0.5" - id("mysql") version mysqlVersion - `; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `val mysqlVersion = "7.0.0" - id("mysql") version mysqlVersion - ` - ); - }); - - it('returns an updated file if the plugin version defined in a variable in a template string without curly braces is found', () => { - const gradleFile = `val mysqlVersion = "6.0.5" - id("mysql") version "$mysqlVersion" - `; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `val mysqlVersion = "7.0.0" - id("mysql") version "$mysqlVersion" - ` - ); - }); - - it('returns an updated file if the plugin version defined in a variable in a template string with curly braces is found', () => { - const gradleFile = `val mysqlVersion = "6.0.5" - id("mysql") version "\${mysqlVersion}" - `; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `val mysqlVersion = "7.0.0" - id("mysql") version "\${mysqlVersion}" - ` - ); - }); - - it('returns an updated file if the plugin version defined in a variable in a template string with triple double quotes is found', () => { - const gradleFile = `String mysqlVersion = "6.0.5" - id 'mysql' version """$mysqlVersion""" - `; - const updatedGradleFile = updateGradleVersion( - gradleFile, - { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - `String mysqlVersion = "7.0.0" - id 'mysql' version """$mysqlVersion""" - ` - ); - }); - - it('should replace a external groovy variable assigned to a specific dependency', () => { - const gradleFile = - 'runtime ( "mysql:mysql-connector-java:${mysqlVersion}" )'; - const mysqlDependency = { - group: 'mysql', - depGroup: 'mysql', - name: 'mysql-connector-java', - version: '6.0.5', - }; - collectVersionVariables([mysqlDependency], gradleFile); - - const gradleWithVersionFile = 'String mysqlVersion = "6.0.5"'; - const updatedGradleFile = updateGradleVersion( - gradleWithVersionFile, - mysqlDependency, - '7.0.0' - ); - expect(updatedGradleFile).toBe('String mysqlVersion = "7.0.0"'); - }); - - it('should replace a external groovy map variable assigned to a specific dependency', () => { - const gradleFile = - 'runtime ( "mysql:mysql-connector-java:${versions.mysqlVersion}" )'; - const mysqlDependency = { - group: 'mysql', - depGroup: 'mysql', - name: 'mysql-connector-java', - version: '6.0.5', - }; - collectVersionVariables([mysqlDependency], gradleFile); - - const gradleWithVersionFile = 'ext.versions = [ mysqlVersion: "6.0.5" ]'; - const updatedGradleFile = updateGradleVersion( - gradleWithVersionFile, - mysqlDependency, - '7.0.0' - ); - expect(updatedGradleFile).toBe('ext.versions = [ mysqlVersion: "7.0.0" ]'); - }); - - it('should replace a external groovy map nested variable assigned to a specific dependency', () => { - const gradleFile = - 'runtime ( "mysql:mysql-connector-java:${versions.nested.mysqlVersion}" )'; - const mysqlDependency = { - group: 'mysql', - depGroup: 'mysql', - name: 'mysql-connector-java', - version: '6.0.5', - }; - collectVersionVariables([mysqlDependency], gradleFile); - - const gradleWithVersionFile = - 'ext.versions = [ nested: [ mysqlVersion: "6.0.5" ] ]'; - const updatedGradleFile = updateGradleVersion( - gradleWithVersionFile, - mysqlDependency, - '7.0.0' - ); - expect(updatedGradleFile).toBe( - 'ext.versions = [ nested: [ mysqlVersion: "7.0.0" ] ]' - ); - }); - - it('should replace a external property variable assigned to a specific dependency', () => { - const gradleFile = - 'runtime ( "mysql:mysql-connector-java:${mysqlVersion}" )'; - const mysqlDependency = { - group: 'mysql', - depGroup: 'mysql', - name: 'mysql-connector-java', - version: '6.0.5', - }; - collectVersionVariables([mysqlDependency], gradleFile); - - const propertyFile = 'mysqlVersion=6.0.5'; - const updatedGradleFile = updateGradleVersion( - propertyFile, - mysqlDependency, - '7.0.0' - ); - expect(updatedGradleFile).toBe('mysqlVersion=7.0.0'); - }); - - it('should replace a external property variable assigned to a specific dependency parenthesis syntax', () => { - const gradleFile = - "implementation platform(group: 'mysql', name: 'mysql-connector-java', version: mysqlVersion)"; - const mysqlDependency = { - group: 'mysql', - depGroup: 'mysql', - name: 'mysql-connector-java', - version: '6.0.5', - }; - collectVersionVariables([mysqlDependency], gradleFile); - - const propertyFile = 'mysqlVersion=6.0.5'; - const updatedGradleFile = updateGradleVersion( - propertyFile, - mysqlDependency, - '7.0.0' - ); - expect(updatedGradleFile).toBe('mysqlVersion=7.0.0'); - }); - - it('should replace a external variable assigned to a map dependency', () => { - const gradleFile = `compile group : 'mysql' , - name : 'mysql-connector-java', - version : mysqlVersion - `; - const mysqlDependency = { - group: 'mysql', - depGroup: 'mysql', - name: 'mysql-connector-java', - version: '6.0.5', - }; - collectVersionVariables([mysqlDependency], gradleFile); - - const gradleWithVersionFile = 'String mysqlVersion = "6.0.5"'; - const updatedGradleFile = updateGradleVersion( - gradleWithVersionFile, - mysqlDependency, - '7.0.0' - ); - expect(updatedGradleFile).toBe('String mysqlVersion = "7.0.0"'); - }); - - it('should replace a external variable assigned to a Kotlin named argument dependency', () => { - const gradleFile = `compile(group = "mysql" , - name = "mysql-connector-java", - version = mysqlVersion) - `; - const mysqlDependency = { - group: 'mysql', - depGroup: 'mysql', - name: 'mysql-connector-java', - version: '6.0.5', - }; - collectVersionVariables([mysqlDependency], gradleFile); - - const gradleWithVersionFile = 'val mysqlVersion = "6.0.5"'; - const updatedGradleFile = updateGradleVersion( - gradleWithVersionFile, - mysqlDependency, - '7.0.0' - ); - expect(updatedGradleFile).toBe('val mysqlVersion = "7.0.0"'); - }); - - it('should replace a external variable assigned to a interpolated dependency', () => { - const gradleFile = - 'runtime ( "mysql:mysql-connector-java:$mysqlVersion" )'; - const mysqlDependency = { - group: 'mysql', - depGroup: 'mysql', - name: 'mysql-connector-java', - version: '6.0.5', - }; - collectVersionVariables([mysqlDependency], gradleFile); - - const gradleWithVersionFile = 'String mysqlVersion = "6.0.5"'; - const updatedGradleFile = updateGradleVersion( - gradleWithVersionFile, - mysqlDependency, - '7.0.0' - ); - expect(updatedGradleFile).toBe('String mysqlVersion = "7.0.0"'); - }); - - it('should replace a external extra variable assigned to a Kotlin named argument dependency', () => { - const gradleFile = `compile(group = "mysql" , - name = "mysql-connector-java", - version = mysqlVersion) - `; - const mysqlDependency = { - group: 'mysql', - depGroup: 'mysql', - name: 'mysql-connector-java', - version: '6.0.5', - }; - collectVersionVariables([mysqlDependency], gradleFile); - - const gradleWithVersionFile = 'val mysqlVersion by extra("6.0.5")'; - const updatedGradleFile = updateGradleVersion( - gradleWithVersionFile, - mysqlDependency, - '7.0.0' - ); - expect(updatedGradleFile).toBe('val mysqlVersion by extra("7.0.0")'); - }); - - it('should replace a external lazy extra variable assigned to a Kotlin named argument dependency', () => { - const gradleFile = `compile(group = "mysql" , - name = "mysql-connector-java", - version = mysqlVersion) - `; - const mysqlDependency = { - group: 'mysql', - depGroup: 'mysql', - name: 'mysql-connector-java', - version: '6.0.5', - }; - collectVersionVariables([mysqlDependency], gradleFile); - - const gradleWithVersionFile = 'val mysqlVersion by extra { "6.0.5" }'; - const updatedGradleFile = updateGradleVersion( - gradleWithVersionFile, - mysqlDependency, - '7.0.0' - ); - expect(updatedGradleFile).toBe('val mysqlVersion by extra { "7.0.0" }'); - }); - - it('should replace a external variable assigned to a plugin dependency', () => { - const gradleFile = 'id("mysql") version "$mysqlVersion";'; - const mysqlDependency = { - group: 'mysql', - depGroup: 'mysql', - name: 'mysql-connector-java', - version: '6.0.5', - }; - collectVersionVariables([mysqlDependency], gradleFile); - - const gradleWithVersionFile = 'String mysqlVersion = "6.0.5"'; - const updatedGradleFile = updateGradleVersion( - gradleWithVersionFile, - mysqlDependency, - '7.0.0' - ); - expect(updatedGradleFile).toBe('String mysqlVersion = "7.0.0"'); - }); -}); diff --git a/lib/modules/manager/gradle/deep/build-gradle.ts b/lib/modules/manager/gradle/deep/build-gradle.ts deleted file mode 100644 index c1cd02d243ccd397c2e084d78b9ab97533ab2fbd..0000000000000000000000000000000000000000 --- a/lib/modules/manager/gradle/deep/build-gradle.ts +++ /dev/null @@ -1,402 +0,0 @@ -import { regEx } from '../../../../util/regex'; -import type { - BuildDependency, - GradleDependency, - UpdateFunction, -} from './types'; - -/** - * Functions adapted/ported from https://github.com/patrikerdes/gradle-use-latest-versions-plugin - * gradle-use-latest-versions-plugin is licensed under MIT and Copyright (c) 2018 Patrik Erdes - */ - -let variables: Record<string, string> = {}; - -const groovyQuotes = `(?:["'](?:""|'')?)`; -const groovyVersionVariable = `(?:${groovyQuotes}\\$)?{?([^\\s"'{}$)]+)}?${groovyQuotes}?`; -const kotlinVersionVariable = `(?:"\\$)?{?([^\\s"{}$]+?)}?"?`; - -// https://github.com/patrikerdes/gradle-use-latest-versions-plugin/blob/8cf9c3917b8b04ba41038923cab270d2adda3aa6/src/main/groovy/se/patrikerdes/DependencyUpdate.groovy#L27-L29 -function moduleStringVersionFormatMatch(dependency: GradleDependency): RegExp { - return regEx( - `(${groovyQuotes}${dependency.group}:${dependency.name}:)[^$].*?(([:@].*?)?${groovyQuotes})` - ); -} - -function groovyPluginStringVersionFormatMatch( - dependency: GradleDependency -): RegExp { - return regEx( - `(id\\s+${groovyQuotes}${dependency.group}${groovyQuotes}\\s+version\\s+${groovyQuotes})[^"$].*?(${groovyQuotes})` - ); -} - -function kotlinPluginStringVersionFormatMatch( - dependency: GradleDependency -): RegExp { - return regEx( - `(id\\("${dependency.group}"\\)\\s+version\\s+")[^$].*?(")`, - undefined, - false - ); -} - -function dependencyStringVersionFormatMatch( - dependency: GradleDependency -): RegExp { - return regEx( - `(dependency\\s+['"]${dependency.group}:${dependency.name}:)[^'"]+(['"])`, - undefined, - false - ); -} - -function allMapFormatOrders( - group: string, - name: string, - version: string, - prefix: string, - postfix: string -): RegExp[] { - const comma = '\\s*,\\s*'; - return [ - `${group}${comma}${name}${comma}${version}`, - `${group}${comma}${version}${comma}${name}`, - `${name}${comma}${group}${comma}${version}`, - `${version}${comma}${group}${comma}${name}`, - `${name}${comma}${version}${comma}${group}`, - `${version}${comma}${name}${comma}${group}`, - ].map((regex) => regEx(`${prefix}${regex}${postfix}`, undefined, false)); -} - -function moduleMapVersionFormatMatch(dependency: GradleDependency): RegExp[] { - // two captures groups: start and end. The version is in between them - const group = `group\\s*:\\s*${groovyQuotes}${dependency.group}${groovyQuotes}`; - const name = `name\\s*:\\s*${groovyQuotes}${dependency.name}${groovyQuotes}`; - const version = `version\\s*:\\s*${groovyQuotes})[^{}$"']+?(${groovyQuotes}`; - return allMapFormatOrders(group, name, version, '(', ')'); -} - -function moduleKotlinNamedArgumentVersionFormatMatch( - dependency: GradleDependency -): RegExp[] { - // two captures groups: start and end. The version is in between them - const group = `group\\s*=\\s*"${dependency.group}"`; - const name = `name\\s*=\\s*"${dependency.name}"`; - const version = `version\\s*=\\s*")[^{}$]*?("`; - return allMapFormatOrders(group, name, version, '(', ')'); -} - -function moduleMapVariableVersionFormatMatch( - dependency: GradleDependency -): RegExp[] { - // one capture group: the version variable - const group = `group\\s*:\\s*${groovyQuotes}${dependency.group}${groovyQuotes}`; - const name = `name\\s*:\\s*${groovyQuotes}${dependency.name}${groovyQuotes}`; - const version = `version\\s*:\\s*${groovyVersionVariable}`; - return allMapFormatOrders(group, name, version, '', ''); -} - -function moduleKotlinNamedArgumentVariableVersionFormatMatch( - dependency: GradleDependency -): RegExp[] { - // one capture group: the version variable - const group = `group\\s*=\\s*"${dependency.group}"`; - const name = `name\\s*=\\s*"${dependency.name}"`; - const version = `version\\s*=\\s*${kotlinVersionVariable}`; - return allMapFormatOrders(group, name, version, '', '[\\s),]'); -} - -function moduleStringVariableInterpolationVersionFormatMatch( - dependency: GradleDependency -): RegExp { - return regEx( - `${groovyQuotes}${dependency.group}:${dependency.name}:\\$([^{].*?)${groovyQuotes}` - ); -} - -function moduleStringVariableExpressionVersionFormatMatch( - dependency: GradleDependency -): RegExp { - return regEx( - `${groovyQuotes}${dependency.group}:${dependency.name}:\\$` + - `{([^{].*?)}${groovyQuotes}` - ); -} - -function groovyPluginVariableVersionFormatMatch( - dependency: GradleDependency -): RegExp { - return regEx( - `id\\s+${groovyQuotes}${dependency.group}${groovyQuotes}\\s+version\\s+${groovyVersionVariable}(?:\\s|;|})` - ); -} - -function kotlinPluginVariableVersionFormatMatch( - dependency: GradleDependency -): RegExp { - return regEx( - `id\\("${dependency.group}"\\)\\s+version\\s+${kotlinVersionVariable}(?:\\s|;|})` - ); -} - -function kotlinImplementationVariableVersionFormatMatch( - dependency: GradleDependency -): RegExp { - // implementation("com.graphql-java", "graphql-java", graphqlVersion) - return regEx( - `(?:implementation|testImplementation)\\s*\\(\\s*['"]${dependency.group}['"]\\s*,\\s*['"]${dependency.name}['"]\\s*,\\s*([a-zA-Z_][a-zA-Z_0-9]*)\\s*\\)\\s*(?:\\s|;|})` - ); -} - -function kotlinPluginVariableDotVersionFormatMatch( - dependency: GradleDependency -): RegExp { - // id("org.jetbrains.kotlin.jvm").version(kotlinVersion) - return regEx( - `id\\s*\\(\\s*"${dependency.group}"\\s*\\)\\s*\\.\\s*version\\s*\\(\\s*([a-zA-Z_][a-zA-Z_0-9]*)\\s*\\)\\s*(?:\\s|;|})` - ); -} - -function dependencyStringVariableExpressionFormatMatch( - dependency: GradleDependency -): RegExp { - return regEx( - `\\s*dependency\\s+['"]${dependency.group}:${dependency.name}:` + - '${([^}]*)}' + // eslint-disable-line no-template-curly-in-string - `['"](?:\\s|;|})` - ); -} - -function dependencyStringLiteralExpressionFormatMatch( - dependency: GradleDependency -): RegExp { - return regEx( - `\\s*dependency\\s+['"]${dependency.group}:${dependency.name}:([^'"{}$]+)['"](?:\\s|;|})` - ); -} - -function variableDefinitionFormatMatch(variable: string): RegExp { - return regEx(`(${variable}\\s*=\\s*?["'])(.*)(["'])`); -} - -function variableMapDefinitionFormatMatch( - variable: string, - version: string -): RegExp { - return regEx( - `(${variable}\\s*:\\s*?["'])(${version})(["'])`, - undefined, - false - ); -} - -export function collectVersionVariables( - dependencies: BuildDependency[], - buildGradleContent: string -): void { - for (const dep of dependencies) { - const dependency: GradleDependency = { - ...dep, - group: dep.depGroup, - }; - const regexes = [ - moduleStringVariableExpressionVersionFormatMatch(dependency), - moduleStringVariableInterpolationVersionFormatMatch(dependency), - groovyPluginVariableVersionFormatMatch(dependency), - kotlinPluginVariableVersionFormatMatch(dependency), - dependencyStringVariableExpressionFormatMatch(dependency), - ...moduleMapVariableVersionFormatMatch(dependency), - ...moduleKotlinNamedArgumentVariableVersionFormatMatch(dependency), - kotlinImplementationVariableVersionFormatMatch(dependency), - kotlinPluginVariableDotVersionFormatMatch(dependency), - ]; - - const depName = `${dependency.group}:${dependency.name}`; - for (const regex of regexes) { - const match = regex.exec(buildGradleContent); - if (match) { - variables[depName] = match[1]; - } - } - - if (!dep.currentValue) { - const dependencyLiteralRegex = - dependencyStringLiteralExpressionFormatMatch(dependency); - const currentValue = dependencyLiteralRegex.exec(buildGradleContent)?.[1]; - if (currentValue) { - dep.currentValue = currentValue; - } - } - } -} - -export function init(): void { - variables = {}; -} - -function updateVersionLiterals( - dependency: GradleDependency, - buildGradleContent: string, - newValue: string -): string | null { - const regexes: RegExp[] = [ - moduleStringVersionFormatMatch(dependency), - groovyPluginStringVersionFormatMatch(dependency), - kotlinPluginStringVersionFormatMatch(dependency), - dependencyStringVersionFormatMatch(dependency), - ...moduleMapVersionFormatMatch(dependency), - ...moduleKotlinNamedArgumentVersionFormatMatch(dependency), - ]; - let result = buildGradleContent; - for (const regex of regexes) { - const match = regex.exec(result); - if (match) { - result = result.replace(match[0], `${match[1]}${newValue}${match[2]}`); - } - } - return result === buildGradleContent ? null : result; -} - -function updateLocalVariables( - dependency: GradleDependency, - buildGradleContent: string, - newValue: string -): string | null { - const regexes: RegExp[] = [ - ...moduleMapVariableVersionFormatMatch(dependency), - moduleStringVariableInterpolationVersionFormatMatch(dependency), - moduleStringVariableExpressionVersionFormatMatch(dependency), - groovyPluginVariableVersionFormatMatch(dependency), - kotlinPluginVariableVersionFormatMatch(dependency), - kotlinImplementationVariableVersionFormatMatch(dependency), - ...moduleKotlinNamedArgumentVariableVersionFormatMatch(dependency), - ]; - for (const regex of regexes) { - const match = regex.exec(buildGradleContent); - if (match) { - const variableDefinitionRegex = variableDefinitionFormatMatch(match[1]); - const variableDefinitionMatch = - variableDefinitionRegex.exec(buildGradleContent); - if (variableDefinitionMatch) { - return buildGradleContent.replace( - variableDefinitionMatch[0], - `${variableDefinitionMatch[1]}${newValue}${variableDefinitionMatch[3]}` - ); - } - } - } - return null; -} - -function updateGlobalVariables( - dependency: GradleDependency, - buildGradleContent: string, - newValue: string -): string | null { - const variable = variables[`${dependency.group}:${dependency.name}`]; - if (variable) { - const regex = variableDefinitionFormatMatch(variable); - const match = regex.exec(buildGradleContent); - if (match) { - return buildGradleContent.replace( - match[0], - `${match[1]}${newValue}${match[3]}` - ); - } - } - return null; -} - -function updateGlobalMapVariables( - dependency: GradleDependency, - buildGradleContent: string, - newValue: string -): string | null { - let variable = variables[`${dependency.group}:${dependency.name}`]; - if (variable && dependency.version) { - while (variable && variable.split('.').length > 0) { - const regex = variableMapDefinitionFormatMatch( - variable, - dependency.version - ); - const match = regex.exec(buildGradleContent); - if (match) { - return buildGradleContent.replace( - match[0], - `${match[1]}${newValue}${match[3]}` - ); - } - - // Remove first path segment of variable and try again - variable = variable.split('.').splice(1).join('.'); - } - } - return null; -} - -function updateKotlinVariablesByExtra( - dependency: GradleDependency, - buildGradleContent: string, - newValue: string -): string | null { - const variable = variables[`${dependency.group}:${dependency.name}`]; - if (variable) { - const regex = regEx( - `(val ${variable} by extra(?: {|\\()\\s*")(.*)("\\s*[})])` - ); - const match = regex.exec(buildGradleContent); - if (match) { - return buildGradleContent.replace( - match[0], - `${match[1]}${newValue}${match[3]}` - ); - } - } - return null; -} - -function updatePropertyFileGlobalVariables( - dependency: GradleDependency, - buildGradleContent: string, - newValue: string -): string | null { - const variable = variables[`${dependency.group}:${dependency.name}`]; - if (variable) { - const regex = regEx(`(${variable}\\s*=\\s*)(.*)`, undefined, false); - const match = regex.exec(buildGradleContent); - if (match) { - return buildGradleContent.replace(match[0], `${match[1]}${newValue}`); - } - } - return null; -} - -export function updateGradleVersion( - buildGradleContent: string, - dependency: GradleDependency, - newValue: string -): string { - if (dependency) { - const updateFunctions: UpdateFunction[] = [ - updateVersionLiterals, - updateLocalVariables, - updateGlobalVariables, - updateGlobalMapVariables, - updatePropertyFileGlobalVariables, - updateKotlinVariablesByExtra, - ]; - - for (const updateFunction of updateFunctions) { - const gradleContentUpdated = updateFunction( - dependency, - buildGradleContent, - newValue - ); - if (gradleContentUpdated) { - return gradleContentUpdated; - } - } - } - return buildGradleContent; -} diff --git a/lib/modules/manager/gradle/deep/gradle-updates-report.spec.ts b/lib/modules/manager/gradle/deep/gradle-updates-report.spec.ts deleted file mode 100644 index afb05a75b0aadac814a8960c02ab21ea552e55b5..0000000000000000000000000000000000000000 --- a/lib/modules/manager/gradle/deep/gradle-updates-report.spec.ts +++ /dev/null @@ -1,67 +0,0 @@ -import fs from 'fs-extra'; -import tmp, { DirectoryResult } from 'tmp-promise'; -import upath from 'upath'; -import { GlobalConfig } from '../../../../config/global'; -import { exec } from '../../../../util/exec'; -import { extraEnv } from '../../gradle-wrapper/utils'; -import { ifSystemSupportsGradle } from './__testutil__/gradle'; -import { - GRADLE_DEPENDENCY_REPORT_FILENAME, - createRenovateGradlePlugin, -} from './gradle-updates-report'; -import { GRADLE_DEPENDENCY_REPORT_OPTIONS } from '.'; - -const fixtures = 'lib/modules/manager/gradle/deep/__fixtures__'; - -describe('modules/manager/gradle/deep/gradle-updates-report', () => { - for (const gradleVersion of [5, 6]) { - ifSystemSupportsGradle(gradleVersion).describe( - 'createRenovateGradlePlugin', - () => { - let workingDir: DirectoryResult; - - beforeEach(async () => { - workingDir = await tmp.dir({ unsafeCleanup: true }); - GlobalConfig.set({ localDir: workingDir.path }); - }); - - afterEach(() => workingDir.cleanup()); - - it(`generates a report for Gradle version ${gradleVersion}`, async () => { - await fs.copy(`${fixtures}/minimal-project`, workingDir.path); - await fs.copy( - `${fixtures}/gradle-wrappers/${gradleVersion}`, - workingDir.path - ); - await createRenovateGradlePlugin(); - - const gradlew = upath.join(workingDir.path, 'gradlew'); - await exec(`${gradlew} ${GRADLE_DEPENDENCY_REPORT_OPTIONS}`, { - cwd: workingDir.path, - extraEnv, - }); - expect( - fs.readJSONSync( - `${workingDir.path}/${GRADLE_DEPENDENCY_REPORT_FILENAME}` - ) - ).toMatchSnapshot([ - { - dependencies: [ - { - group: 'org.apache.commons', - name: 'commons-collections4', - version: '4.4', - }, - ], - project: 'minimal-test', - repositories: [ - 'https://jcenter.bintray.com/', - 'https://plugins.gradle.org/m2', - ], - }, - ]); - }, 120000); - } - ); - } -}); diff --git a/lib/modules/manager/gradle/deep/gradle-updates-report.ts b/lib/modules/manager/gradle/deep/gradle-updates-report.ts deleted file mode 100644 index 7b7b0b1e82e4dd34d94bb1b45180dccf23999fa1..0000000000000000000000000000000000000000 --- a/lib/modules/manager/gradle/deep/gradle-updates-report.ts +++ /dev/null @@ -1,157 +0,0 @@ -import upath from 'upath'; -import { logger } from '../../../../logger'; -import { - localPathExists, - readLocalFile, - writeLocalFile, -} from '../../../../util/fs'; -import { regEx } from '../../../../util/regex'; -import { SbtPackageDatasource } from '../../../datasource/sbt-package'; -import type { - BuildDependency, - GradleDependencyWithRepos, - GradleProject, -} from './types'; - -export const GRADLE_DEPENDENCY_REPORT_FILENAME = 'gradle-renovate-report.json'; - -export async function createRenovateGradlePlugin( - gradleRoot = '.' -): Promise<void> { - const content = ` -import groovy.json.JsonOutput -import org.gradle.api.internal.artifacts.dependencies.DefaultExternalModuleDependency -import java.util.concurrent.ConcurrentLinkedQueue - -def output = new ConcurrentLinkedQueue<>(); - -allprojects { - tasks.register("renovate") { - doLast { - def project = ['project': project.name] - output << project - - def repos = (repositories + buildscript.repositories + settings.pluginManagement.repositories) - .findAll { it instanceof MavenArtifactRepository && it.url.scheme ==~ /https?/ } - .collect { "$it.url" } - .unique() - project.repositories = repos - - def deps = (buildscript.configurations + configurations + settings.buildscript.configurations) - .collect { it.dependencies + it.dependencyConstraints } - .flatten() - .findAll { it instanceof DefaultExternalModuleDependency || it instanceof DependencyConstraint } - .findAll { 'Pinned to the embedded Kotlin' != it.reason } // Embedded Kotlin dependencies - .collect { ['name':it.name, 'group':it.group, 'version':it.version] } - project.dependencies = deps - } - } -} -gradle.buildFinished { - def outputFile = new File('${GRADLE_DEPENDENCY_REPORT_FILENAME}') - def json = JsonOutput.toJson(output) - outputFile.write json -}`; - const gradleInitFile = upath.join(gradleRoot, 'renovate-plugin.gradle'); - logger.debug( - 'Creating renovate-plugin.gradle file with renovate gradle plugin' - ); - await writeLocalFile(gradleInitFile, content); -} - -async function readGradleReport(localDir: string): Promise<GradleProject[]> { - const renovateReportFilename = upath.join( - localDir, - GRADLE_DEPENDENCY_REPORT_FILENAME - ); - if (!(await localPathExists(renovateReportFilename))) { - return []; - } - - const contents = await readLocalFile(renovateReportFilename, 'utf8'); - try { - return JSON.parse(contents); - } catch (err) { - logger.error({ err }, 'Invalid Gradle extract JSON'); - return []; - } -} - -function mergeDependenciesWithRepositories( - project: GradleProject -): GradleDependencyWithRepos[] { - if (!project.dependencies) { - return []; - } - return project.dependencies.map((dep) => ({ - ...dep, - repos: [...project.repositories], - })); -} - -function flattenDependencies( - accumulator: GradleDependencyWithRepos[], - currentValue: GradleDependencyWithRepos[] -): GradleDependencyWithRepos[] { - accumulator.push(...currentValue); - return accumulator; -} - -function combineReposOnDuplicatedDependencies( - accumulator: GradleDependencyWithRepos[], - currentValue: GradleDependencyWithRepos -): GradleDependencyWithRepos[] { - const existingDependency = accumulator.find( - (dep) => dep.name === currentValue.name && dep.group === currentValue.group - ); - if (existingDependency) { - const nonExistingRepos = currentValue.repos.filter( - (repo) => !existingDependency.repos.includes(repo) - ); - existingDependency.repos.push(...nonExistingRepos); - } else { - accumulator.push(currentValue); - } - return accumulator; -} - -function buildDependency( - gradleModule: GradleDependencyWithRepos -): BuildDependency { - return { - name: gradleModule.name, - depGroup: gradleModule.group, - depName: `${gradleModule.group}:${gradleModule.name}`, - currentValue: gradleModule.version, - registryUrls: gradleModule.repos, - }; -} - -export async function extractDependenciesFromUpdatesReport( - localDir: string -): Promise<BuildDependency[]> { - const gradleProjectConfigurations = await readGradleReport(localDir); - - const dependencies = gradleProjectConfigurations - .map(mergeDependenciesWithRepositories, []) - .reduce(flattenDependencies, []) - .reduce(combineReposOnDuplicatedDependencies, []); - - return dependencies - .map((gradleModule) => buildDependency(gradleModule)) - .map((dep) => { - /* https://github.com/renovatebot/renovate/issues/4627 */ - const { depName, currentValue } = dep; - if (depName.endsWith('_%%')) { - return { - ...dep, - depName: depName.replace(regEx(/_%%/), ''), - datasource: SbtPackageDatasource.id, - }; - } - if (regEx(/^%.*%$/).test(currentValue)) { - return { ...dep, skipReason: 'version-placeholder' }; - } - return dep; - }); -} diff --git a/lib/modules/manager/gradle/deep/index-real.spec.ts b/lib/modules/manager/gradle/deep/index-real.spec.ts deleted file mode 100644 index 7744c619de94862a511d92905382668e95e773c5..0000000000000000000000000000000000000000 --- a/lib/modules/manager/gradle/deep/index-real.spec.ts +++ /dev/null @@ -1,72 +0,0 @@ -import fsExtra from 'fs-extra'; -import tmp, { DirectoryResult } from 'tmp-promise'; -import { GlobalConfig } from '../../../../config/global'; -import type { RepoGlobalConfig } from '../../../../config/types'; -import type { ExtractConfig } from '../../types'; -import { ifSystemSupportsGradle } from './__testutil__/gradle'; -import * as manager from '.'; - -const fixtures = 'lib/modules/manager/gradle/deep/__fixtures__'; - -const baseConfig = { - gradle: { - timeout: 60, - }, -}; - -describe('modules/manager/gradle/deep/index-real', () => { - ifSystemSupportsGradle(6).describe('executeGradle integration', () => { - const SUCCESS_FILE_NAME = 'success.indicator'; - let workingDir: DirectoryResult; - let testRunConfig: ExtractConfig; - let successFile: string; - let adminConfig: RepoGlobalConfig; - - beforeEach(async () => { - workingDir = await tmp.dir({ unsafeCleanup: true }); - successFile = ''; - adminConfig = { localDir: workingDir.path }; - GlobalConfig.set(adminConfig); - testRunConfig = { ...baseConfig }; - await fsExtra.copy(`${fixtures}/minimal-project`, workingDir.path); - await fsExtra.copy(`${fixtures}/gradle-wrappers/6`, workingDir.path); - - const mockPluginContent = ` -allprojects { - tasks.register("renovate") { - doLast { - new File('${SUCCESS_FILE_NAME}').write 'success' - } - } -}`; - await fsExtra.writeFile( - `${workingDir.path}/renovate-plugin.gradle`, - mockPluginContent - ); - successFile = `${workingDir.path}/${SUCCESS_FILE_NAME}`; - }); - - afterEach(async () => { - await workingDir.cleanup(); - GlobalConfig.reset(); - }); - - it('executes an executable gradle wrapper', async () => { - const gradlew = await fsExtra.stat(`${workingDir.path}/gradlew`); - await manager.executeGradle(testRunConfig, workingDir.path, gradlew); - await expect(fsExtra.readFile(successFile, 'utf8')).resolves.toBe( - 'success' - ); - }, 120000); - - it('executes a not-executable gradle wrapper', async () => { - await fsExtra.chmod(`${workingDir.path}/gradlew`, '444'); - const gradlew = await fsExtra.stat(`${workingDir.path}/gradlew`); - - await manager.executeGradle(testRunConfig, workingDir.path, gradlew); - await expect(fsExtra.readFile(successFile, 'utf8')).resolves.toBe( - 'success' - ); - }, 120000); - }); -}); diff --git a/lib/modules/manager/gradle/deep/index.spec.ts b/lib/modules/manager/gradle/deep/index.spec.ts deleted file mode 100644 index 4e8e204fe06a5d8ba3293cf40c3a84204a0134f0..0000000000000000000000000000000000000000 --- a/lib/modules/manager/gradle/deep/index.spec.ts +++ /dev/null @@ -1,506 +0,0 @@ -import type { Stats } from 'fs'; -import os from 'os'; -import { join } from 'upath'; -import { extractAllPackageFiles, updateDependency } from '..'; -import { envMock, exec, mockExecAll } from '../../../../../test/exec-util'; -import { - addReplacingSerializer, - env, - fs, - loadFixture, -} from '../../../../../test/util'; -import { GlobalConfig } from '../../../../config/global'; -import type { RepoGlobalConfig } from '../../../../config/types'; -import * as docker from '../../../../util/exec/docker'; -import { - ReleaseResult, - getPkgReleases as _getPkgReleases, -} from '../../../datasource'; -import type { ExtractConfig } from '../../types'; - -jest.mock('child_process'); -jest.mock('../../../../util/exec/env'); -jest.mock('../../../../util/fs'); -jest.mock('../../../datasource'); - -const getPkgReleases: jest.MockInstance< - ReturnType<typeof _getPkgReleases>, - jest.ArgsType<typeof _getPkgReleases> -> = _getPkgReleases as never; - -const adminConfig: RepoGlobalConfig = { - localDir: join('/foo/bar'), -}; - -const dockerAdminConfig = { - ...adminConfig, - binarySource: 'docker', -}; - -const gradleOutput = { - stdout: 'gradle output', - stderr: '', -}; - -const config: ExtractConfig = { - deepExtract: true, - gradle: { - timeout: 60, - }, -}; - -const buildGradle = ` -dependency 'foo:foo:1.2.3' -dependency "bar:bar:This.Is.Valid.Version.Good.Luck" -dependency "baz:baz:\${bazVersion}" -`; - -const graddleWrapperPropertiesData = loadFixture( - '/gradle-wrappers/6/gradle/wrapper/gradle-wrapper.properties' -); - -addReplacingSerializer('gradlew.bat', '<gradlew>'); -addReplacingSerializer('./gradlew', '<gradlew>'); - -const javaReleases: ReleaseResult = { - releases: [ - { version: '8.0.302' }, - { version: '11.0.12' }, - { version: '16.0.2' }, - ], -}; - -describe('modules/manager/gradle/deep/index', () => { - const updatesReport = loadFixture('updatesReport.json'); - - function setupMocks({ - wrapperFilename = `gradlew`, - wrapperPropertiesFilename = 'gradle/wrapper/gradle-wrapper.properties', - pluginFilename = 'renovate-plugin.gradle', - report = updatesReport, - reportFilename = 'gradle-renovate-report.json', - packageFilename = 'build.gradle', - output = gradleOutput, - } = {}) { - fs.stat.mockImplementationOnce((_dirname) => { - if (wrapperFilename) { - return Promise.resolve({ - isFile: () => true, - } as Stats); - } - return Promise.reject(); - }); - fs.writeLocalFile.mockImplementation((f, _content) => { - if (f?.endsWith(pluginFilename)) { - return Promise.resolve(); - } - return Promise.reject(); - }); - fs.localPathExists.mockImplementation((f) => { - if (f?.endsWith(reportFilename)) { - return Promise.resolve(!!report); - } - if (f?.endsWith(wrapperPropertiesFilename)) { - return Promise.resolve(true); - } - return Promise.resolve(false); - }); - fs.readLocalFile.mockImplementation((f) => { - if (f?.endsWith(reportFilename)) { - return report ? Promise.resolve(report) : Promise.reject(); - } - if (f?.endsWith(packageFilename)) { - return Promise.resolve(buildGradle); - } - if (f?.endsWith(wrapperPropertiesFilename)) { - return Promise.resolve(graddleWrapperPropertiesData); - } - return Promise.resolve(''); - }); - - return mockExecAll(exec, output); - } - - beforeAll(() => { - GlobalConfig.set(adminConfig); - }); - - afterAll(() => { - GlobalConfig.reset(); - }); - - beforeEach(() => { - jest.resetAllMocks(); - jest.resetModules(); - docker.resetPrefetchedImages(); - env.getChildProcessEnv.mockReturnValue(envMock.basic); - }); - - describe('extractPackageFile', () => { - it('should update an existing module dependency', async () => { - const execSnapshots = setupMocks(); - const dependencies = await extractAllPackageFiles(config, [ - 'build.gradle', - ]); - expect(dependencies).toHaveLength(1); - expect(dependencies[0]?.deps).toHaveLength(8); - expect(dependencies).toMatchSnapshot([ - { - datasource: 'maven', - packageFile: 'build.gradle', - }, - ]); - expect(execSnapshots).toMatchSnapshot(); - }); - - it('should return gradle.kts dependencies', async () => { - const execSnapshots = setupMocks({ packageFilename: 'build.gradle.kts' }); - const dependencies = await extractAllPackageFiles(config, [ - 'build.gradle.kts', - ]); - expect(dependencies).toHaveLength(1); - expect(dependencies[0]?.deps).toHaveLength(8); - expect(dependencies).toMatchSnapshot([ - { - datasource: 'maven', - packageFile: 'build.gradle.kts', - }, - ]); - expect(execSnapshots).toMatchSnapshot(); - }); - - it('should return empty if there are no dependencies', async () => { - const execSnapshots = setupMocks({ - report: loadFixture('updatesReportEmpty.json'), - }); - const dependencies = await extractAllPackageFiles(config, [ - 'build.gradle', - ]); - expect(dependencies).toBeEmptyArray(); - expect(execSnapshots).toMatchSnapshot(); - }); - - it('should return empty if there is no dependency report', async () => { - const execSnapshots = setupMocks({ report: null }); - const dependencies = await extractAllPackageFiles(config, [ - 'build.gradle', - ]); - expect(dependencies).toBeEmptyArray(); - expect(execSnapshots).toMatchSnapshot(); - }); - - it('should return empty if renovate report is invalid', async () => { - const execSnapshots = setupMocks({ report: '!@#$%' }); - const dependencies = await extractAllPackageFiles(config, [ - 'build.gradle', - ]); - expect(dependencies).toBeEmptyArray(); - expect(execSnapshots).toMatchSnapshot(); - }); - - it('should use repositories only for current project', async () => { - const execSnapshots = setupMocks({ - report: loadFixture(`MultiProjectUpdatesReport.json`), - }); - const dependencies = await extractAllPackageFiles(config, [ - 'build.gradle', - ]); - expect(dependencies).toHaveLength(1); - expect(dependencies[0]?.deps).toHaveLength(3); - expect(dependencies).toMatchSnapshot([ - { - datasource: 'maven', - packageFile: 'build.gradle', - }, - ]); - expect(execSnapshots).toMatchSnapshot(); - }); - - it('should execute gradlew when available', async () => { - const execSnapshots = setupMocks(); - const dependencies = await extractAllPackageFiles(config, [ - 'build.gradle', - ]); - expect(dependencies).toHaveLength(1); - expect(dependencies[0]?.deps).toHaveLength(8); - expect(dependencies).toMatchSnapshot([ - { - datasource: 'maven', - packageFile: 'build.gradle', - }, - ]); - expect(execSnapshots).toMatchSnapshot(); - }); - - it('should execute gradlew.bat when available on Windows', async () => { - const execSnapshots = setupMocks({ wrapperFilename: 'gradlew.bat' }); - jest.spyOn(os, 'platform').mockReturnValueOnce('win32'); - const dependencies = await extractAllPackageFiles(config, [ - 'build.gradle', - ]); - expect(dependencies).toHaveLength(1); - expect(dependencies[0]?.deps).toHaveLength(8); - expect(dependencies).toMatchSnapshot([ - { - datasource: 'maven', - packageFile: 'build.gradle', - }, - ]); - expect(execSnapshots).toMatchSnapshot(); - }); - - it('should execute gradle if gradlew is not available', async () => { - const execSnapshots = setupMocks({ - wrapperFilename: null, - wrapperPropertiesFilename: null, - }); - const dependencies = await extractAllPackageFiles(config, [ - 'build.gradle', - ]); - expect(dependencies).toHaveLength(1); - expect(dependencies[0]?.deps).toHaveLength(8); - expect(dependencies).toMatchSnapshot([ - { - datasource: 'maven', - packageFile: 'build.gradle', - }, - ]); - expect(execSnapshots).toMatchSnapshot(); - }); - - it('should return null and gradle should not be executed if no root build.gradle', async () => { - const execSnapshots = setupMocks({ - wrapperFilename: null, - report: null, - wrapperPropertiesFilename: null, - }); - const packageFiles = ['foo/build.gradle']; - expect(await extractAllPackageFiles(config, packageFiles)).toBeNull(); - expect(execSnapshots).toBeEmpty(); - }); - - it('should return gradle dependencies for build.gradle in subdirectories if there is gradlew in the same directory', async () => { - const execSnapshots = setupMocks({ - wrapperFilename: 'baz/qux/gradlew', - wrapperPropertiesFilename: - 'baz/qux/gradle/wrapper/gradle-wrapper.properties', - packageFilename: 'baz/qux/build.gradle', - reportFilename: 'baz/qux/gradle-renovate-report.json', - pluginFilename: 'baz/qux/renovate-plugin.gradle', - }); - - const dependencies = await extractAllPackageFiles(config, [ - 'baz/qux/build.gradle', - ]); - expect(dependencies).toHaveLength(1); - expect(dependencies[0]?.deps).toHaveLength(8); - expect(dependencies).toMatchSnapshot([ - { - datasource: 'maven', - packageFile: 'baz/qux/build.gradle', - }, - ]); - expect(execSnapshots).toMatchSnapshot(); - }); - - it('should use docker if required', async () => { - GlobalConfig.set(dockerAdminConfig); - const execSnapshots = setupMocks({ - wrapperFilename: null, - wrapperPropertiesFilename: null, - }); - getPkgReleases.mockResolvedValueOnce(javaReleases); - const dependencies = await extractAllPackageFiles(config, [ - 'build.gradle', - ]); - expect(dependencies).toHaveLength(1); - expect(dependencies[0]?.deps).toHaveLength(8); - expect(dependencies).toMatchSnapshot([ - { - datasource: 'maven', - packageFile: 'build.gradle', - }, - ]); - expect(execSnapshots[0].cmd).toBe('docker pull renovate/java:11.0.12'); - expect(execSnapshots).toMatchSnapshot(); - }); - - it('should use docker even if gradlew is available', async () => { - GlobalConfig.set(dockerAdminConfig); - const execSnapshots = setupMocks(); - getPkgReleases.mockResolvedValueOnce(javaReleases); - const dependencies = await extractAllPackageFiles(config, [ - 'build.gradle', - ]); - expect(dependencies).toHaveLength(1); - expect(dependencies[0]?.deps).toHaveLength(8); - expect(dependencies).toMatchSnapshot([ - { - datasource: 'maven', - packageFile: 'build.gradle', - }, - ]); - expect(execSnapshots[0].cmd).toBe('docker pull renovate/java:11.0.12'); - expect(execSnapshots).toMatchSnapshot(); - }); - - it('should use docker even if gradlew.bat is available on Windows', async () => { - GlobalConfig.set(dockerAdminConfig); - jest.spyOn(os, 'platform').mockReturnValueOnce('win32'); - const execSnapshots = setupMocks({ wrapperFilename: 'gradlew.bat' }); - getPkgReleases.mockResolvedValueOnce(javaReleases); - const dependencies = await extractAllPackageFiles(config, [ - 'build.gradle', - ]); - expect(dependencies).toHaveLength(1); - expect(dependencies[0]?.deps).toHaveLength(8); - expect(dependencies).toMatchSnapshot([ - { - datasource: 'maven', - packageFile: 'build.gradle', - }, - ]); - expect(execSnapshots[0].cmd).toBe('docker pull renovate/java:11.0.12'); - expect(execSnapshots).toMatchSnapshot(); - }); - }); - - describe('updateDependency', () => { - it('should update an existing module dependency', () => { - const execSnapshots = mockExecAll(exec, gradleOutput); - - const buildGradleContent = loadFixture(`build.gradle.example1`); - // prettier-ignore - const upgrade = { - deepExtract: true, - depGroup: 'cglib', name: 'cglib-nodep', version: '3.1', newValue: '3.2.8', - }; - const buildGradleContentUpdated = updateDependency({ - fileContent: buildGradleContent, - upgrade, - }); - - expect(buildGradleContent).not.toMatch('cglib:cglib-nodep:3.2.8'); - - expect(buildGradleContentUpdated).toMatch('cglib:cglib-nodep:3.2.8'); - expect(buildGradleContentUpdated).not.toMatch('cglib:cglib-nodep:3.1'); - - expect(execSnapshots).toBeEmpty(); - }); - - it('should update an existing plugin dependency', () => { - const execSnapshots = mockExecAll(exec, gradleOutput); - - const buildGradleContent = ` - plugins { - id "com.github.ben-manes.versions" version "0.20.0" - } - `; - const upgrade = { - deepExtract: true, - depGroup: 'com.github.ben-manes.versions', - name: 'com.github.ben-manes.versions.gradle.plugin', - version: '0.20.0', - newValue: '0.21.0', - }; - const buildGradleContentUpdated = updateDependency({ - fileContent: 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"' - ); - - expect(execSnapshots).toBeEmpty(); - }); - - it('should update an existing plugin dependency with Kotlin DSL', () => { - const execSnapshots = mockExecAll(exec, gradleOutput); - - const buildGradleContent = ` - plugins { - id("com.github.ben-manes.versions") version "0.20.0" - } - `; - const upgrade = { - deepExtract: true, - depGroup: 'com.github.ben-manes.versions', - name: 'com.github.ben-manes.versions.gradle.plugin', - version: '0.20.0', - newValue: '0.21.0', - }; - const buildGradleContentUpdated = updateDependency({ - fileContent: 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"' - ); - - expect(execSnapshots).toBeEmpty(); - }); - - it('should update dependencies in same file', () => { - const execSnapshots = mockExecAll(exec, gradleOutput); - - const buildGradleContent = loadFixture(`build.gradle.example1`); - - const upgrade = { - deepExtract: true, - depGroup: 'org.apache.openjpa', - name: 'openjpa', - version: '3.1.1', - newValue: '3.1.2', - }; - - const buildGradleContentUpdated = updateDependency({ - fileContent: buildGradleContent, - upgrade, - }); - - expect(buildGradleContent).not.toContain( - 'org.apache.openjpa:openjpa:3.1.2' - ); - - expect(buildGradleContentUpdated).not.toContain( - "dependency 'org.apache.openjpa:openjpa:3.1.1'" - ); - expect(buildGradleContentUpdated).not.toContain( - "dependency 'org.apache.openjpa:openjpa:3.1.1'" - ); - - expect(buildGradleContentUpdated).toContain( - "classpath 'org.apache.openjpa:openjpa:3.1.2'" - ); - expect(buildGradleContentUpdated).toContain( - "classpath 'org.apache.openjpa:openjpa:3.1.2'" - ); - - expect(execSnapshots).toBeEmpty(); - }); - - it('should return null for replacement', () => { - const res = updateDependency({ - fileContent: undefined, - upgrade: { deepExtract: true, updateType: 'replacement' }, - }); - expect(res).toBeNull(); - }); - }); -}); diff --git a/lib/modules/manager/gradle/deep/index.ts b/lib/modules/manager/gradle/deep/index.ts deleted file mode 100644 index bc584876fc457543fc204504afbc9aa956e6880a..0000000000000000000000000000000000000000 --- a/lib/modules/manager/gradle/deep/index.ts +++ /dev/null @@ -1,186 +0,0 @@ -import type { Stats } from 'fs'; -import upath from 'upath'; -import { GlobalConfig } from '../../../../config/global'; -import { TEMPORARY_ERROR } from '../../../../constants/error-messages'; -import { logger } from '../../../../logger'; -import { ExternalHostError } from '../../../../types/errors/external-host-error'; -import { exec } from '../../../../util/exec'; -import type { ExecOptions } from '../../../../util/exec/types'; -import { readLocalFile, stat } from '../../../../util/fs'; -import { MavenDatasource } from '../../../datasource/maven'; -import { - extraEnv, - getJavaVersioning, - gradleWrapperFileName, - prepareGradleCommand, -} from '../../gradle-wrapper/utils'; -import type { - ExtractConfig, - PackageFile, - UpdateDependencyConfig, - Upgrade, -} from '../../types'; -import { - collectVersionVariables, - init, - updateGradleVersion, -} from './build-gradle'; -import { - createRenovateGradlePlugin, - extractDependenciesFromUpdatesReport, -} from './gradle-updates-report'; -import type { GradleDependency } from './types'; -import { getDockerConstraint, getDockerPreCommands } from './utils'; - -export const GRADLE_DEPENDENCY_REPORT_OPTIONS = - '--init-script renovate-plugin.gradle renovate'; -const TIMEOUT_CODE = 143; - -async function prepareGradleCommandFallback( - gradlewName: string, - cwd: string, - gradlew: Stats | null, - args: string -): Promise<string> { - const cmd = await prepareGradleCommand(gradlewName, cwd, gradlew, args); - if (cmd === null) { - return `gradle ${args}`; - } - return cmd; -} - -export async function executeGradle( - config: ExtractConfig, - cwd: string, - gradlew: Stats | null, - gradleRoot = '.' -): Promise<void> { - let stdout: string; - let stderr: string; - let timeout: number; - if (config.gradle?.timeout) { - timeout = config.gradle.timeout * 1000; - } - const cmd = await prepareGradleCommandFallback( - gradleWrapperFileName(), - cwd, - gradlew, - GRADLE_DEPENDENCY_REPORT_OPTIONS - ); - const execOptions: ExecOptions = { - timeout, - cwd, - docker: { - image: 'java', - tagConstraint: - config.constraints?.java ?? (await getDockerConstraint(gradleRoot)), - tagScheme: getJavaVersioning(), - }, - preCommands: await getDockerPreCommands(gradleRoot), - extraEnv, - }; - try { - logger.debug({ cmd }, 'Start gradle command'); - ({ stdout, stderr } = await exec(cmd, execOptions)); - } catch (err) /* istanbul ignore next */ { - if (err.message === TEMPORARY_ERROR) { - throw err; - } - if (err.code === TIMEOUT_CODE) { - throw new ExternalHostError(err, 'gradle'); - } - logger.warn({ errMessage: err.message }, 'Gradle extraction failed'); - return; - } - logger.debug(stdout + stderr); - logger.debug('Gradle report complete'); -} - -export async function extractAllPackageFiles( - config: ExtractConfig, - packageFiles: string[] -): Promise<PackageFile[] | null> { - let rootBuildGradle: string | undefined; - let gradlew: Stats | null; - const { localDir } = GlobalConfig.get(); - for (const packageFile of packageFiles) { - const dirname = upath.dirname(packageFile); - const gradlewPath = upath.join(dirname, gradleWrapperFileName()); - gradlew = await stat(upath.join(localDir, gradlewPath)).catch(() => null); - - if (['build.gradle', 'build.gradle.kts'].includes(packageFile)) { - rootBuildGradle = packageFile; - break; - } - - // If there is gradlew in the same directory, the directory should be a Gradle project root - if (gradlew?.isFile() === true) { - rootBuildGradle = packageFile; - break; - } - } - if (!rootBuildGradle) { - logger.warn('No root build.gradle nor build.gradle.kts found - skipping'); - return null; - } - logger.debug('Extracting dependencies from all gradle files'); - - const gradleRoot = upath.dirname(rootBuildGradle); - const cwd = upath.join(localDir, gradleRoot); - - await createRenovateGradlePlugin(gradleRoot); - await executeGradle(config, cwd, gradlew, gradleRoot); - - init(); - - const dependencies = await extractDependenciesFromUpdatesReport(gradleRoot); - if (dependencies.length === 0) { - return []; - } - - const gradleFiles: PackageFile[] = []; - for (const packageFile of packageFiles) { - const content = await readLocalFile(packageFile, 'utf8'); - // istanbul ignore else - if (content) { - gradleFiles.push({ - packageFile, - datasource: MavenDatasource.id, - deps: dependencies, - }); - - collectVersionVariables(dependencies, content); - } else { - logger.debug({ packageFile }, 'packageFile has no content'); - } - } - - return gradleFiles; -} - -function buildGradleDependency(config: Upgrade): GradleDependency { - return { - group: config.depGroup, - name: config.name, - version: config.currentValue, - }; -} - -export function updateDependency({ - fileContent, - upgrade, -}: UpdateDependencyConfig): string { - // prettier-ignore - logger.debug(`gradle.updateDependency(): packageFile:${upgrade.packageFile} depName:${upgrade.depName}, version:${upgrade.currentValue} ==> ${upgrade.newValue}`); - - if (upgrade.updateType === 'replacement') { - logger.warn('gradle manager does not support replacement updates yet'); - return null; - } - - return updateGradleVersion( - fileContent, - buildGradleDependency(upgrade), - upgrade.newValue - ); -} diff --git a/lib/modules/manager/gradle/deep/types.ts b/lib/modules/manager/gradle/deep/types.ts deleted file mode 100644 index ba4df121fc565a4e2dc739afd208546c6aa892ce..0000000000000000000000000000000000000000 --- a/lib/modules/manager/gradle/deep/types.ts +++ /dev/null @@ -1,27 +0,0 @@ -export interface GradleDependency { - group: string; - name: string; - version?: string; -} - -export interface UpdateFunction { - (dependency: GradleDependency, buildGradleContent: string, newValue: string): - | string - | null; -} - -export interface GradleProject { - project: string; - repositories: string[]; - dependencies: GradleDependency[]; -} - -export type GradleDependencyWithRepos = GradleDependency & { repos: string[] }; - -export interface BuildDependency { - name: string; - depGroup: string; - depName?: string; - currentValue?: string; - registryUrls?: string[]; -} diff --git a/lib/modules/manager/gradle/deep/utils.ts b/lib/modules/manager/gradle/deep/utils.ts deleted file mode 100644 index 5285314a51695b4ac3a25f27cfe42a2449299b6b..0000000000000000000000000000000000000000 --- a/lib/modules/manager/gradle/deep/utils.ts +++ /dev/null @@ -1,42 +0,0 @@ -import upath from 'upath'; -import { GlobalConfig } from '../../../../config/global'; -import { localPathExists, readLocalFile } from '../../../../util/fs'; -import { - extractGradleVersion, - getJavaContraint, -} from '../../gradle-wrapper/utils'; - -const GradleWrapperProperties = 'gradle/wrapper/gradle-wrapper.properties'; - -export async function getDockerConstraint( - gradleRoot: string -): Promise<string | null> { - if (GlobalConfig.get('binarySource') !== 'docker') { - // ignore - return null; - } - - const fileContent = await readLocalFile( - upath.join(gradleRoot, GradleWrapperProperties), - 'utf8' - ); - - const version = extractGradleVersion(fileContent)?.version; - - return getJavaContraint(version); -} - -export async function getDockerPreCommands( - gradleRoot: string -): Promise<string[]> { - if (GlobalConfig.get('binarySource') !== 'docker') { - // ignore - return null; - } - - if (await localPathExists(upath.join(gradleRoot, GradleWrapperProperties))) { - return null; - } - - return ['install-tool gradle latest']; -} diff --git a/lib/modules/manager/gradle/shallow/extract.spec.ts b/lib/modules/manager/gradle/extract.spec.ts similarity index 97% rename from lib/modules/manager/gradle/shallow/extract.spec.ts rename to lib/modules/manager/gradle/extract.spec.ts index 546f8fc37174a7244b116d25552bb85205a6672e..ec7c372c5c882f0be25a6e10b223d105594e8333 100644 --- a/lib/modules/manager/gradle/shallow/extract.spec.ts +++ b/lib/modules/manager/gradle/extract.spec.ts @@ -1,8 +1,8 @@ -import { extractAllPackageFiles } from '..'; -import { fs, loadFixture } from '../../../../../test/util'; -import type { ExtractConfig } from '../../types'; +import { fs, loadFixture } from '../../../../test/util'; +import type { ExtractConfig } from '../types'; +import { extractAllPackageFiles } from '.'; -jest.mock('../../../../util/fs'); +jest.mock('../../../util/fs'); function mockFs(files: Record<string, string>): void { fs.readLocalFile.mockImplementation((fileName: string): Promise<string> => { @@ -13,7 +13,7 @@ function mockFs(files: Record<string, string>): void { }); } -describe('modules/manager/gradle/shallow/extract', () => { +describe('modules/manager/gradle/extract', () => { afterAll(() => { jest.resetAllMocks(); }); diff --git a/lib/modules/manager/gradle/shallow/extract.ts b/lib/modules/manager/gradle/extract.ts similarity index 89% rename from lib/modules/manager/gradle/shallow/extract.ts rename to lib/modules/manager/gradle/extract.ts index 8dcc957d76e02640d8dec75c0fa415fbe5a364b9..7fd945f5ad32431a8c8d7d4d00158e47728efed5 100644 --- a/lib/modules/manager/gradle/shallow/extract.ts +++ b/lib/modules/manager/gradle/extract.ts @@ -1,19 +1,15 @@ import upath from 'upath'; -import { logger } from '../../../../logger'; -import { readLocalFile } from '../../../../util/fs'; -import { - MavenDatasource, - defaultRegistryUrls, -} from '../../../datasource/maven'; -import type { - ExtractConfig, - PackageDependency, - PackageFile, -} from '../../types'; -import type { GradleManagerData } from '../types'; +import { logger } from '../../../logger'; +import { readLocalFile } from '../../../util/fs'; +import { MavenDatasource, defaultRegistryUrls } from '../../datasource/maven'; +import type { ExtractConfig, PackageDependency, PackageFile } from '../types'; import { parseCatalog } from './extract/catalog'; import { parseGradle, parseProps } from './parser'; -import type { PackageVariables, VariableRegistry } from './types'; +import type { + GradleManagerData, + PackageVariables, + VariableRegistry, +} from './types'; import { getVars, isGradleFile, diff --git a/lib/modules/manager/gradle/shallow/extract/catalog.ts b/lib/modules/manager/gradle/extract/catalog.ts similarity index 96% rename from lib/modules/manager/gradle/shallow/extract/catalog.ts rename to lib/modules/manager/gradle/extract/catalog.ts index 2729da5f06b53daba623ccddab8e558580b8a85e..d5915e1b2ba9085109fe95ef00c61d0e6b1c3e1a 100644 --- a/lib/modules/manager/gradle/shallow/extract/catalog.ts +++ b/lib/modules/manager/gradle/extract/catalog.ts @@ -1,12 +1,12 @@ import { parse } from '@iarna/toml'; import deepmerge from 'deepmerge'; -import { hasKey } from '../../../../../util/object'; -import type { PackageDependency } from '../../../types'; -import type { GradleManagerData } from '../../types'; +import { hasKey } from '../../../../util/object'; +import type { PackageDependency } from '../../types'; import type { GradleCatalog, GradleCatalogArtifactDescriptor, GradleCatalogModuleDescriptor, + GradleManagerData, VersionPointer, } from '../types'; diff --git a/lib/modules/manager/gradle/index.ts b/lib/modules/manager/gradle/index.ts index a3ea5152b0b90ac8a008b8c8a39c7bd23cf9742d..5e9faad63f7a7f3ef056ce02bd00d455604638c1 100644 --- a/lib/modules/manager/gradle/index.ts +++ b/lib/modules/manager/gradle/index.ts @@ -1,31 +1,9 @@ import { ProgrammingLanguage } from '../../../constants'; import { MavenDatasource } from '../../datasource/maven'; import * as gradleVersioning from '../../versioning/gradle'; -import type { - ExtractConfig, - PackageFile, - UpdateDependencyConfig, -} from '../types'; -import * as deep from './deep'; -import * as shallow from './shallow'; -import type { GradleManagerData } from './types'; -export function extractAllPackageFiles( - config: ExtractConfig, - packageFiles: string[] -): Promise<PackageFile[] | null> { - return config.deepExtract - ? deep.extractAllPackageFiles(config, packageFiles) - : shallow.extractAllPackageFiles(config, packageFiles); -} - -export function updateDependency( - params: UpdateDependencyConfig<GradleManagerData> -): string | null { - return params.upgrade?.deepExtract - ? deep.updateDependency(params) - : shallow.updateDependency(params); -} +export { extractAllPackageFiles } from './extract'; +export { updateDependency } from './update'; export const language = ProgrammingLanguage.Java; diff --git a/lib/modules/manager/gradle/shallow/parser.spec.ts b/lib/modules/manager/gradle/parser.spec.ts similarity index 97% rename from lib/modules/manager/gradle/shallow/parser.spec.ts rename to lib/modules/manager/gradle/parser.spec.ts index b5c04fdd473b6f3bee70f36d896ee27fd893972f..0c49f9e93d34954228bc61d6603708189e6a9713 100644 --- a/lib/modules/manager/gradle/shallow/parser.spec.ts +++ b/lib/modules/manager/gradle/parser.spec.ts @@ -1,4 +1,4 @@ -import { loadFixture } from '../../../../../test/util'; +import { loadFixture } from '../../../../test/util'; import { GOOGLE_REPO, GRADLE_PLUGIN_PORTAL_REPO, @@ -7,7 +7,7 @@ import { } from './common'; import { parseGradle, parseProps } from './parser'; -describe('modules/manager/gradle/shallow/parser', () => { +describe('modules/manager/gradle/parser', () => { it('handles end of input', () => { expect(parseGradle('version = ').deps).toBeEmpty(); expect(parseGradle('id "foo.bar" version').deps).toBeEmpty(); @@ -116,7 +116,7 @@ describe('modules/manager/gradle/shallow/parser', () => { }); it('parses fixture from "gradle" manager', () => { - const content = loadFixture('build.gradle.example1', '../deep/'); + const content = loadFixture('build.gradle.example1'); const { deps } = parseGradle(content, {}, 'build.gradle'); const replacementIndices = deps.map(({ managerData, currentValue }) => content.slice(managerData.fileReplacePosition).indexOf(currentValue) diff --git a/lib/modules/manager/gradle/shallow/parser.ts b/lib/modules/manager/gradle/parser.ts similarity index 98% rename from lib/modules/manager/gradle/shallow/parser.ts rename to lib/modules/manager/gradle/parser.ts index 509747e453d19d988e4ee78b06810795bdf2a1d7..7d60b48d1f6d04497bc107b25efc413b9a5044fd 100644 --- a/lib/modules/manager/gradle/shallow/parser.ts +++ b/lib/modules/manager/gradle/parser.ts @@ -1,9 +1,8 @@ import url from 'url'; import is from '@sindresorhus/is'; -import { logger } from '../../../../logger'; -import { newlineRegex, regEx } from '../../../../util/regex'; -import type { PackageDependency } from '../../types'; -import type { GradleManagerData } from '../types'; +import { logger } from '../../../logger'; +import { newlineRegex, regEx } from '../../../util/regex'; +import type { PackageDependency } from '../types'; import { GOOGLE_REPO, GRADLE_PLUGIN_PORTAL_REPO, @@ -13,6 +12,7 @@ import { } from './common'; import { tokenize } from './tokenizer'; import type { + GradleManagerData, MatchConfig, PackageVariables, ParseGradleResult, diff --git a/lib/modules/manager/gradle/readme.md b/lib/modules/manager/gradle/readme.md index 1eca3d95d6997d9f840fec285e50102db13b4342..407861566bb9e9f61365b896f52935eeb9f7889c 100644 --- a/lib/modules/manager/gradle/readme.md +++ b/lib/modules/manager/gradle/readme.md @@ -1,9 +1,2 @@ -The `gradle` manager's default behavior uses a custom parser written in JavaScript, similar to many others managers. -It was initially known as `gradle-lite` but is now integrated into the `gradle` manager and used as default. - -If `deepExtract` is configured to `true`, Renovate instead extracts Gradle dependencies by calling a custom Gradle script. -The `gradle` binary is then used to extract Maven-type dependencies. - -<!-- prettier-ignore --> -!!! warning - The `deepExtract` configuration option is deprecated, and will be removed in a future Renovate release. +The `gradle` manager uses a custom parser written in JavaScript, similar to many others managers. +It does not call `gradle` directly in order to extract a list of dependencies. diff --git a/lib/modules/manager/gradle/shallow/index.ts b/lib/modules/manager/gradle/shallow/index.ts deleted file mode 100644 index 0ed052d9bff08a4385bd7fd6031eb565cd2e1b5b..0000000000000000000000000000000000000000 --- a/lib/modules/manager/gradle/shallow/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { extractAllPackageFiles } from './extract'; -export { updateDependency } from './update'; diff --git a/lib/modules/manager/gradle/shallow/types.ts b/lib/modules/manager/gradle/shallow/types.ts deleted file mode 100644 index ff1bcd5aa6e537ae78e008a6f8bd0a592fa2c574..0000000000000000000000000000000000000000 --- a/lib/modules/manager/gradle/shallow/types.ts +++ /dev/null @@ -1,92 +0,0 @@ -import type { PackageDependency } from '../../types'; -import type { GradleManagerData } from '../types'; -import type { TokenType } from './common'; - -export interface VariableData extends GradleManagerData { - key: string; - value: string; -} - -export type PackageVariables = Record<string, VariableData>; -export type VariableRegistry = Record<string, PackageVariables>; - -export interface Token { - type: TokenType; - value: string; - offset: number; -} - -export interface StringInterpolation extends Token { - type: TokenType.StringInterpolation; - children: Token[]; // Tokens inside double-quoted string that are subject of interpolation - isComplete: boolean; // True if token has parsed completely - isValid: boolean; // False if string contains something unprocessable -} - -// Matcher on single token -export interface SyntaxMatcher { - matchType: TokenType | TokenType[]; - matchValue?: string | string[]; - lookahead?: boolean; - tokenMapKey?: string; -} - -export type TokenMap = Record<string, Token>; - -export interface SyntaxHandlerInput { - packageFile: string; - variables: PackageVariables; - tokenMap: TokenMap; -} - -export type SyntaxHandlerOutput = { - deps?: PackageDependency<GradleManagerData>[]; - vars?: PackageVariables; - urls?: string[]; -} | null; - -export interface SyntaxMatchConfig { - matchers: SyntaxMatcher[]; - handler: (_: SyntaxHandlerInput) => SyntaxHandlerOutput; -} - -export interface MatchConfig { - tokens: Token[]; - variables: PackageVariables; - packageFile: string; -} - -export interface ParseGradleResult { - deps: PackageDependency<GradleManagerData>[]; - urls: string[]; - vars: PackageVariables; -} - -export interface GradleCatalog { - versions?: Record<string, string>; - libraries?: Record< - string, - GradleCatalogModuleDescriptor | GradleCatalogArtifactDescriptor | string - >; - plugins?: Record<string, GradleCatalogPluginDescriptor | string>; -} - -export interface GradleCatalogModuleDescriptor { - module: string; - version?: string | VersionPointer; -} - -export interface GradleCatalogArtifactDescriptor { - name: string; - group: string; - version?: string | VersionPointer; -} - -export interface GradleCatalogPluginDescriptor { - id: string; - version: string | VersionPointer; -} - -export interface VersionPointer { - ref: string; -} diff --git a/lib/modules/manager/gradle/shallow/tokenizer.spec.ts b/lib/modules/manager/gradle/tokenizer.spec.ts similarity index 98% rename from lib/modules/manager/gradle/shallow/tokenizer.spec.ts rename to lib/modules/manager/gradle/tokenizer.spec.ts index b2a4d4f5fbfb376d834355e3dafabf25ae71983a..ff5cd3519aab5caaa6fe5a804642afbc71677ea6 100644 --- a/lib/modules/manager/gradle/shallow/tokenizer.spec.ts +++ b/lib/modules/manager/gradle/tokenizer.spec.ts @@ -5,7 +5,7 @@ function tokenTypes(input): string[] { return extractRawTokens(input).map((token) => token.type); } -describe('modules/manager/gradle/shallow/tokenizer', () => { +describe('modules/manager/gradle/tokenizer', () => { it('extractTokens', () => { const samples = { ' ': [TokenType.Space], diff --git a/lib/modules/manager/gradle/shallow/tokenizer.ts b/lib/modules/manager/gradle/tokenizer.ts similarity index 99% rename from lib/modules/manager/gradle/shallow/tokenizer.ts rename to lib/modules/manager/gradle/tokenizer.ts index 95d990bfc29735f0c20f8cbc32f27522bcf236fc..4a6a19e909dd6aff89288f262b4f7f4bd37803fc 100644 --- a/lib/modules/manager/gradle/shallow/tokenizer.ts +++ b/lib/modules/manager/gradle/tokenizer.ts @@ -1,5 +1,5 @@ import moo from 'moo'; -import { regEx } from '../../../../util/regex'; +import { regEx } from '../../../util/regex'; import { TokenType } from './common'; import type { StringInterpolation, Token } from './types'; diff --git a/lib/modules/manager/gradle/types.ts b/lib/modules/manager/gradle/types.ts index 915ce0da45f9d0b88f875f1405ebd13829ee5266..365518686aa42d7ac4d5988eb0169d3bddfdb583 100644 --- a/lib/modules/manager/gradle/types.ts +++ b/lib/modules/manager/gradle/types.ts @@ -1,4 +1,96 @@ +import type { PackageDependency } from '../types'; +import type { TokenType } from './common'; + export interface GradleManagerData { fileReplacePosition?: number; packageFile?: string; } + +export interface VariableData extends GradleManagerData { + key: string; + value: string; +} + +export type PackageVariables = Record<string, VariableData>; +export type VariableRegistry = Record<string, PackageVariables>; + +export interface Token { + type: TokenType; + value: string; + offset: number; +} + +export interface StringInterpolation extends Token { + type: TokenType.StringInterpolation; + children: Token[]; // Tokens inside double-quoted string that are subject of interpolation + isComplete: boolean; // True if token has parsed completely + isValid: boolean; // False if string contains something unprocessable +} + +// Matcher on single token +export interface SyntaxMatcher { + matchType: TokenType | TokenType[]; + matchValue?: string | string[]; + lookahead?: boolean; + tokenMapKey?: string; +} + +export type TokenMap = Record<string, Token>; + +export interface SyntaxHandlerInput { + packageFile: string; + variables: PackageVariables; + tokenMap: TokenMap; +} + +export type SyntaxHandlerOutput = { + deps?: PackageDependency<GradleManagerData>[]; + vars?: PackageVariables; + urls?: string[]; +} | null; + +export interface SyntaxMatchConfig { + matchers: SyntaxMatcher[]; + handler: (_: SyntaxHandlerInput) => SyntaxHandlerOutput; +} + +export interface MatchConfig { + tokens: Token[]; + variables: PackageVariables; + packageFile: string; +} + +export interface ParseGradleResult { + deps: PackageDependency<GradleManagerData>[]; + urls: string[]; + vars: PackageVariables; +} + +export interface GradleCatalog { + versions?: Record<string, string>; + libraries?: Record< + string, + GradleCatalogModuleDescriptor | GradleCatalogArtifactDescriptor | string + >; + plugins?: Record<string, GradleCatalogPluginDescriptor | string>; +} + +export interface GradleCatalogModuleDescriptor { + module: string; + version?: string | VersionPointer; +} + +export interface GradleCatalogArtifactDescriptor { + name: string; + group: string; + version?: string | VersionPointer; +} + +export interface GradleCatalogPluginDescriptor { + id: string; + version: string | VersionPointer; +} + +export interface VersionPointer { + ref: string; +} diff --git a/lib/modules/manager/gradle/shallow/update.spec.ts b/lib/modules/manager/gradle/update.spec.ts similarity index 94% rename from lib/modules/manager/gradle/shallow/update.spec.ts rename to lib/modules/manager/gradle/update.spec.ts index c10c38886ec6c85081a108d9a48b5d89fe4a2a94..7a652f40f1dc264bea3de67948f80ebe36671bed 100644 --- a/lib/modules/manager/gradle/shallow/update.spec.ts +++ b/lib/modules/manager/gradle/update.spec.ts @@ -1,6 +1,6 @@ -import { updateDependency } from '..'; +import { updateDependency } from '.'; -describe('modules/manager/gradle/shallow/update', () => { +describe('modules/manager/gradle/update', () => { it('replaces', () => { expect( updateDependency({ diff --git a/lib/modules/manager/gradle/shallow/update.ts b/lib/modules/manager/gradle/update.ts similarity index 87% rename from lib/modules/manager/gradle/shallow/update.ts rename to lib/modules/manager/gradle/update.ts index 2c1196ebfceb303758c941b4a41b18c277561d60..dd254f4e58d90b019dbc91d5cc86eee4de808690 100644 --- a/lib/modules/manager/gradle/shallow/update.ts +++ b/lib/modules/manager/gradle/update.ts @@ -1,6 +1,6 @@ -import { logger } from '../../../../logger'; -import type { UpdateDependencyConfig } from '../../types'; -import type { GradleManagerData } from '../types'; +import { logger } from '../../../logger'; +import type { UpdateDependencyConfig } from '../types'; +import type { GradleManagerData } from './types'; import { versionLikeSubstring } from './utils'; export function updateDependency({ diff --git a/lib/modules/manager/gradle/shallow/utils.spec.ts b/lib/modules/manager/gradle/utils.spec.ts similarity index 99% rename from lib/modules/manager/gradle/shallow/utils.spec.ts rename to lib/modules/manager/gradle/utils.spec.ts index 2416d447da00f9689a194066700f6ddb80c4a4d5..54be14d032618d1b8d4947b5bf69bbbf98d1fe35 100644 --- a/lib/modules/manager/gradle/shallow/utils.spec.ts +++ b/lib/modules/manager/gradle/utils.spec.ts @@ -9,7 +9,7 @@ import { versionLikeSubstring, } from './utils'; -describe('modules/manager/gradle/shallow/utils', () => { +describe('modules/manager/gradle/utils', () => { it('versionLikeSubstring', () => { [ '1.2.3', diff --git a/lib/modules/manager/gradle/shallow/utils.ts b/lib/modules/manager/gradle/utils.ts similarity index 95% rename from lib/modules/manager/gradle/shallow/utils.ts rename to lib/modules/manager/gradle/utils.ts index e809a6e97cf255287133b29506db312abb9c8156..076646b6ddeaf6b527d7612ab0fa90ce57684edb 100644 --- a/lib/modules/manager/gradle/shallow/utils.ts +++ b/lib/modules/manager/gradle/utils.ts @@ -1,9 +1,13 @@ import upath from 'upath'; -import { regEx } from '../../../../util/regex'; -import type { PackageDependency } from '../../types'; -import type { GradleManagerData } from '../types'; +import { regEx } from '../../../util/regex'; +import type { PackageDependency } from '../types'; import { TokenType } from './common'; -import type { PackageVariables, Token, VariableRegistry } from './types'; +import type { + GradleManagerData, + PackageVariables, + Token, + VariableRegistry, +} from './types'; const artifactRegex = regEx( '^[a-zA-Z][-_a-zA-Z0-9]*(?:\\.[a-zA-Z0-9][-_a-zA-Z0-9]*?)*$' diff --git a/lib/modules/manager/types.ts b/lib/modules/manager/types.ts index 1d0e53231d32497eae942426ff93608acf0fc95d..1bece70c5c8e42a700eab2d15ba4e9bcd78ab69b 100644 --- a/lib/modules/manager/types.ts +++ b/lib/modules/manager/types.ts @@ -24,7 +24,6 @@ export interface ExtractConfig { npmrcMerge?: boolean; skipInstalls?: boolean; updateInternalDeps?: boolean; - deepExtract?: boolean; } export interface CustomExtractConfig extends ExtractConfig { @@ -191,7 +190,6 @@ export interface Upgrade<T = Record<string, any>> isLockFileMaintenance?: boolean; isRemediation?: boolean; isVulnerabilityAlert?: boolean; - deepExtract?: boolean; } export interface ArtifactError { diff --git a/tsconfig.strict.json b/tsconfig.strict.json index c1bb4fa102b45cf8dc7eec9863ae2cd72c7d3408..4325b2499022d3a3abdc5c71fa1dca5ac4143b00 100644 --- a/tsconfig.strict.json +++ b/tsconfig.strict.json @@ -165,16 +165,13 @@ "lib/modules/manager/gradle-wrapper/extract.ts", "lib/modules/manager/gradle-wrapper/index.ts", "lib/modules/manager/gradle-wrapper/utils.ts", - "lib/modules/manager/gradle/deep/__testutil__/gradle.ts", - "lib/modules/manager/gradle/deep/gradle-updates-report.ts", - "lib/modules/manager/gradle/deep/index.ts", - "lib/modules/manager/gradle/deep/utils.ts", "lib/modules/manager/gradle/index.ts", - "lib/modules/manager/gradle/shallow/extract.ts", - "lib/modules/manager/gradle/shallow/extract/catalog.ts", - "lib/modules/manager/gradle/shallow/index.ts", - "lib/modules/manager/gradle/shallow/parser.ts", - "lib/modules/manager/gradle/shallow/update.ts", + "lib/modules/manager/gradle/extract.ts", + "lib/modules/manager/gradle/extract/catalog.ts", + "lib/modules/manager/gradle/index.ts", + "lib/modules/manager/gradle/parser.ts", + "lib/modules/manager/gradle/update.ts", + "lib/modules/manager/gradle/__testutil__/gradle.ts", "lib/modules/manager/helm-requirements/extract.ts", "lib/modules/manager/helm-requirements/index.ts", "lib/modules/manager/helm-values/extract.ts",