From c49be3d69a9047659d35b3a5188c9e075d90fb8d Mon Sep 17 00:00:00 2001 From: Johannes Feichtner <Churro@users.noreply.github.com> Date: Sat, 15 Oct 2022 19:13:19 +0200 Subject: [PATCH] fix(manager/gradle): optimize performance of Gradle lock file maintenance and ensure gradlew is executable (#18348) --- lib/modules/manager/gradle/artifacts.spec.ts | 15 +++++++++++++++ lib/modules/manager/gradle/artifacts.ts | 15 +++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/lib/modules/manager/gradle/artifacts.spec.ts b/lib/modules/manager/gradle/artifacts.spec.ts index 9bf95bc692..f2856dc899 100644 --- a/lib/modules/manager/gradle/artifacts.spec.ts +++ b/lib/modules/manager/gradle/artifacts.spec.ts @@ -209,6 +209,21 @@ describe('modules/manager/gradle/artifacts', () => { ]); }); + it('aborts lock file maintenance if packageFileName is not build.gradle(.kts) in root project', async () => { + expect( + await updateArtifacts({ + packageFileName: 'somedir/settings.gradle', + updatedDeps: [], + newPackageFileContent: '', + config: { isLockFileMaintenance: true }, + }) + ).toBeNull(); + + expect(logger.logger.trace).toHaveBeenCalledWith( + 'No build.gradle(.kts) file or not in root project - skipping lock file maintenance' + ); + }); + it('performs lock file maintenance', async () => { const execSnapshots = mockExecAll(); diff --git a/lib/modules/manager/gradle/artifacts.ts b/lib/modules/manager/gradle/artifacts.ts index f1bc77b70a..532025c071 100644 --- a/lib/modules/manager/gradle/artifacts.ts +++ b/lib/modules/manager/gradle/artifacts.ts @@ -18,8 +18,10 @@ import { extractGradleVersion, getJavaConstraint, gradleWrapperFileName, + prepareGradleCommand, } from '../gradle-wrapper/utils'; import type { UpdateArtifact, UpdateArtifactsResult } from '../types'; +import { isGradleBuildFile } from './utils'; async function getUpdatedLockfiles( oldLockFileContentMap: Record<string, string | null> @@ -102,12 +104,25 @@ export async function updateArtifacts({ ); return null; } + + if ( + config.isLockFileMaintenance && + (!isGradleBuildFile(packageFileName) || + dirname(packageFileName) !== dirname(gradlewFile)) + ) { + logger.trace( + 'No build.gradle(.kts) file or not in root project - skipping lock file maintenance' + ); + return null; + } + logger.debug('Updating found Gradle dependency lockfiles'); try { const oldLockFileContentMap = await getFileContentMap(lockFiles); await writeLocalFile(packageFileName, newPackageFileContent); + await prepareGradleCommand(gradlewFile); let cmd = `${gradlewName} --console=plain -q`; const execOptions: ExecOptions = { -- GitLab