From e41681db3d2b4fc2ee47eaa2c6ad5b6a5d82b189 Mon Sep 17 00:00:00 2001
From: Peter Wagenet <peter.wagenet@gmail.com>
Date: Wed, 15 Feb 2023 23:17:36 -0800
Subject: [PATCH] fix(pnpm): don't ignore test directories for pnpm workspace
 packages (#20439)

---
 .../npm/__fixtures__/pnpm-monorepo/pnpm-lock.yaml    | 12 ++++++++++++
 .../__fixtures__/pnpm-monorepo/pnpm-workspace.yaml   |  2 ++
 .../pnpm-monorepo/test/test-package/package.json     | 12 ++++++++++++
 .../pnpm-monorepo/tests/test-package2/package.json   | 12 ++++++++++++
 .../npm/extract/__snapshots__/pnpm.spec.ts.snap      | 10 ++++++++++
 lib/modules/manager/npm/extract/pnpm.spec.ts         | 10 ++++++++++
 lib/modules/manager/npm/extract/pnpm.ts              |  6 +++++-
 7 files changed, 63 insertions(+), 1 deletion(-)
 create mode 100644 lib/modules/manager/npm/__fixtures__/pnpm-monorepo/test/test-package/package.json
 create mode 100644 lib/modules/manager/npm/__fixtures__/pnpm-monorepo/tests/test-package2/package.json

diff --git a/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/pnpm-lock.yaml b/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/pnpm-lock.yaml
index 5bb04ac300..176b4fd082 100644
--- a/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/pnpm-lock.yaml
+++ b/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/pnpm-lock.yaml
@@ -56,6 +56,18 @@ importers:
     dependencies:
       dotenv: 9.0.2
 
+  test/test-package:
+    specifiers:
+      dotenv: ^9.0.2
+    dependencies:
+      dotenv: 9.0.2
+
+  tests/test-package2:
+    specifiers:
+      dotenv: ^9.0.2
+    dependencies:
+      dotenv: 9.0.2
+
 packages:
 
   /ansi-styles/3.2.1:
diff --git a/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/pnpm-workspace.yaml b/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/pnpm-workspace.yaml
index 6298802ab9..fead9b1be6 100644
--- a/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/pnpm-workspace.yaml
+++ b/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/pnpm-workspace.yaml
@@ -6,3 +6,5 @@ packages:
   - 'solo-package-trailing-slash/'
   - './solo-package-leading-dot-slash'
   - '../pnpm-monorepo/solo-package-leading-double-dot-slash'
+  - 'test/*'
+  - 'tests/*'
diff --git a/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/test/test-package/package.json b/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/test/test-package/package.json
new file mode 100644
index 0000000000..9e85715cf5
--- /dev/null
+++ b/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/test/test-package/package.json
@@ -0,0 +1,12 @@
+{
+  "name": "@demo/test-package",
+  "version": "1.0.0",
+  "description": "",
+  "main": "index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "dependencies": {
+    "dotenv": "^9.0.2"
+  }
+}
diff --git a/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/tests/test-package2/package.json b/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/tests/test-package2/package.json
new file mode 100644
index 0000000000..9d394f90a4
--- /dev/null
+++ b/lib/modules/manager/npm/__fixtures__/pnpm-monorepo/tests/test-package2/package.json
@@ -0,0 +1,12 @@
+{
+  "name": "@demo/test-package2",
+  "version": "1.0.0",
+  "description": "",
+  "main": "index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "dependencies": {
+    "dotenv": "^9.0.2"
+  }
+}
diff --git a/lib/modules/manager/npm/extract/__snapshots__/pnpm.spec.ts.snap b/lib/modules/manager/npm/extract/__snapshots__/pnpm.spec.ts.snap
index 39c9a65868..fe4966f730 100644
--- a/lib/modules/manager/npm/extract/__snapshots__/pnpm.spec.ts.snap
+++ b/lib/modules/manager/npm/extract/__snapshots__/pnpm.spec.ts.snap
@@ -46,5 +46,15 @@ exports[`modules/manager/npm/extract/pnpm .detectPnpmWorkspaces() uses pnpm work
     "packageJsonName": "@demo/solo-trailing-slash",
     "pnpmShrinkwrap": "pnpm-lock.yaml",
   },
+  {
+    "packageFile": "test/test-package/package.json",
+    "packageJsonName": "@demo/test-package",
+    "pnpmShrinkwrap": "pnpm-lock.yaml",
+  },
+  {
+    "packageFile": "tests/test-package2/package.json",
+    "packageJsonName": "@demo/test-package2",
+    "pnpmShrinkwrap": "pnpm-lock.yaml",
+  },
 ]
 `;
diff --git a/lib/modules/manager/npm/extract/pnpm.spec.ts b/lib/modules/manager/npm/extract/pnpm.spec.ts
index f391cd7aaa..8e4ca91a0b 100644
--- a/lib/modules/manager/npm/extract/pnpm.spec.ts
+++ b/lib/modules/manager/npm/extract/pnpm.spec.ts
@@ -126,6 +126,16 @@ describe('modules/manager/npm/extract/pnpm', () => {
           packageJsonName: '@demo/solo-trailing-slash',
           pnpmShrinkwrap: undefined as undefined | string,
         },
+        {
+          packageFile: 'test/test-package/package.json',
+          packageJsonName: '@demo/test-package',
+          pnpmShrinkwrap: undefined as undefined | string,
+        },
+        {
+          packageFile: 'tests/test-package2/package.json',
+          packageJsonName: '@demo/test-package2',
+          pnpmShrinkwrap: undefined as undefined | string,
+        },
       ];
 
       await detectPnpmWorkspaces(packageFiles);
diff --git a/lib/modules/manager/npm/extract/pnpm.ts b/lib/modules/manager/npm/extract/pnpm.ts
index 55ede53b6a..b278088137 100644
--- a/lib/modules/manager/npm/extract/pnpm.ts
+++ b/lib/modules/manager/npm/extract/pnpm.ts
@@ -105,7 +105,11 @@ export async function detectPnpmWorkspaces(
       const { localDir } = GlobalConfig.get();
       const packages = await findPackages(
         upath.dirname(upath.join(localDir, workspaceYamlPath)),
-        { patterns: filters }
+        {
+          patterns: filters,
+          // Match the ignores used in @pnpm/find-workspace-packages
+          ignore: ['**/node_modules/**', '**/bower_components/**'],
+        }
       );
       const packagePaths = packages.map((pkg) =>
         upath.join(pkg.dir, 'package.json')
-- 
GitLab