From c2590a56ab7a6023ba1b83c1ef67b3b21a613d73 Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@keylocation.sg> Date: Mon, 4 Dec 2017 15:41:37 +0100 Subject: [PATCH] feat: support multiple yarn workspaces in one repository (#1264) --- lib/manager/npm/monorepos.js | 42 ++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/lib/manager/npm/monorepos.js b/lib/manager/npm/monorepos.js index b01f243ad0..fbf3079092 100644 --- a/lib/manager/npm/monorepos.js +++ b/lib/manager/npm/monorepos.js @@ -8,32 +8,36 @@ module.exports = { async function checkMonorepos(config) { const monorepoPackages = []; - let workspaceDir; + logger.debug('checkMonorepos()'); + logger.trace({ config }); // yarn workspaces - let workspaces = []; for (const packageFile of config.packageFiles) { if ( packageFile.packageFile && packageFile.packageFile.endsWith('package.json') && packageFile.content.workspaces ) { - workspaceDir = path.dirname(packageFile.packageFile); - logger.info(`workspaceDir=${config.workspaceDir}`); - ({ workspaces } = packageFile.content); - } - } - if (workspaces.length) { - logger.debug({ workspaces }, 'Found yarn workspaces'); - } - for (const workspace of workspaces) { - const basePath = upath.join(workspaceDir, workspace); - logger.info(`basePath=${basePath}`); - for (const packageFile of config.packageFiles) { - if (minimatch(path.dirname(packageFile.packageFile), basePath)) { - logger.info(`Matched ${packageFile.packageFile}`); - const depName = packageFile.content.name; - monorepoPackages.push(depName); - packageFile.workspaceDir = workspaceDir; + const workspaceDir = path.dirname(packageFile.packageFile); + const { workspaces } = packageFile.content; + if (workspaces.length) { + logger.info( + { packageFile: packageFile.packageFile, workspaces }, + 'Found yarn workspaces' + ); + for (const workspace of workspaces) { + const basePath = upath.join(workspaceDir, workspace); + logger.debug(`basePath=${basePath}`); + for (const innerPackageFile of config.packageFiles) { + if ( + minimatch(path.dirname(innerPackageFile.packageFile), basePath) + ) { + logger.debug(`Matched ${innerPackageFile.packageFile}`); + const depName = innerPackageFile.content.name; + monorepoPackages.push(depName); + innerPackageFile.workspaceDir = workspaceDir; + } + } + } } } } -- GitLab