From 9a87c3f7da532bb5ac24d759ae502272aec4fa4e Mon Sep 17 00:00:00 2001
From: Michael Kriese <michael.kriese@visualon.de>
Date: Wed, 17 May 2023 10:27:10 +0200
Subject: [PATCH] fix(manager/nuget): return null for no deps (#22282)

---
 lib/modules/manager/nuget/extract.spec.ts | 14 ++++++++++----
 lib/modules/manager/nuget/extract.ts      | 11 ++++++++---
 2 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/lib/modules/manager/nuget/extract.spec.ts b/lib/modules/manager/nuget/extract.spec.ts
index ba8b9b84e7..5156a9fbd4 100644
--- a/lib/modules/manager/nuget/extract.spec.ts
+++ b/lib/modules/manager/nuget/extract.spec.ts
@@ -22,10 +22,10 @@ describe('modules/manager/nuget/extract', () => {
       GlobalConfig.reset();
     });
 
-    it('returns empty for invalid csproj', async () => {
-      expect(await extractPackageFile('nothing here', 'bogus', config)).toEqual(
-        { deps: [] }
-      );
+    it('returns null for invalid csproj', async () => {
+      expect(
+        await extractPackageFile('nothing here', 'bogus', config)
+      ).toBeNull();
     });
 
     it('extracts package version dependency', async () => {
@@ -347,6 +347,12 @@ describe('modules/manager/nuget/extract', () => {
         ).toBeNull();
       });
 
+      it('returns null for no deps', async () => {
+        expect(
+          await extractPackageFile('{"version": 1}', packageFile, config)
+        ).toBeNull();
+      });
+
       it('does not throw', async () => {
         expect(await extractPackageFile('{{', packageFile, config)).toBeNull();
       });
diff --git a/lib/modules/manager/nuget/extract.ts b/lib/modules/manager/nuget/extract.ts
index 5fafd4c659..2e329f9f38 100644
--- a/lib/modules/manager/nuget/extract.ts
+++ b/lib/modules/manager/nuget/extract.ts
@@ -74,7 +74,7 @@ function extractDepsFromXml(xmlNode: XmlDocument): PackageDependency[] {
 export async function extractPackageFile(
   content: string,
   packageFile: string,
-  config: ExtractConfig
+  _config: ExtractConfig
 ): Promise<PackageFileContent | null> {
   logger.trace({ packageFile }, 'nuget.extractPackageFile()');
 
@@ -99,7 +99,7 @@ export async function extractPackageFile(
       return null;
     }
 
-    for (const depName of Object.keys(manifest.tools)) {
+    for (const depName of Object.keys(manifest.tools ?? {})) {
       const tool = manifest.tools[depName];
       const currentValue = tool.version;
       const dep: PackageDependency = {
@@ -115,7 +115,7 @@ export async function extractPackageFile(
       deps.push(dep);
     }
 
-    return { deps };
+    return deps.length ? { deps } : null;
   }
 
   if (packageFile.endsWith('global.json')) {
@@ -134,6 +134,11 @@ export async function extractPackageFile(
   } catch (err) {
     logger.debug({ err }, `Failed to parse ${packageFile}`);
   }
+
+  if (!deps.length) {
+    return null;
+  }
+
   const res: PackageFileContent = { deps, packageFileVersion };
   const lockFileName = getSiblingFileName(packageFile, 'packages.lock.json');
   // istanbul ignore if
-- 
GitLab