From 0f0058673e76ef915794fb79079eaebdc9928fd3 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 4 Sep 2022 17:13:34 +0200 Subject: [PATCH] cli: stop using lerna to execute build scripts when building dist workspace Signed-off-by: Patrik Oldsberg --- .../src/lib/packager/createDistWorkspace.ts | 36 ++++++++++++------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/packages/cli/src/lib/packager/createDistWorkspace.ts b/packages/cli/src/lib/packager/createDistWorkspace.ts index bce6c5c14c..53e00ab6d9 100644 --- a/packages/cli/src/lib/packager/createDistWorkspace.ts +++ b/packages/cli/src/lib/packager/createDistWorkspace.ts @@ -39,6 +39,7 @@ import { } from '../builder'; import { copyPackageDist } from './copyPackageDist'; import { getRoleInfo } from '../role'; +import { runParallelWorkers } from '../parallel'; // These packages aren't safe to pack in parallel since the CLI depends on them const UNSAFE_PACKAGES = [ @@ -88,6 +89,14 @@ type Options = { skeleton?: 'skeleton.tar' | 'skeleton.tar.gz'; }; +function prefixLogFunc(prefix: string, out: 'stdout' | 'stderr') { + return (data: Buffer) => { + for (const line of data.toString('utf8').split(/\r?\n/)) { + process[out].write(`${prefix} ${line}\n`); + } + }; +} + /** * Uses `yarn pack` to package local packages and unpacks them into a dist workspace. * The target workspace will end up containing dist version of each package and @@ -124,7 +133,7 @@ export async function createDistWorkspace( ); const standardBuilds = new Array(); - const customBuild = new Array(); + const customBuild = new Array<{ dir: string; name: string }>(); for (const pkg of packages) { if (!toBuild.has(pkg.packageJson.name)) { @@ -135,13 +144,13 @@ export async function createDistWorkspace( console.warn( `Building ${pkg.packageJson.name} separately because it has no role`, ); - customBuild.push(pkg.packageJson.name); + customBuild.push({ dir: pkg.dir, name: pkg.packageJson.name }); continue; } const buildScript = pkg.packageJson.scripts?.build; if (!buildScript) { - customBuild.push(pkg.packageJson.name); + customBuild.push({ dir: pkg.dir, name: pkg.packageJson.name }); continue; } @@ -149,7 +158,7 @@ export async function createDistWorkspace( console.warn( `Building ${pkg.packageJson.name} separately because it has a custom build script, '${buildScript}'`, ); - customBuild.push(pkg.packageJson.name); + customBuild.push({ dir: pkg.dir, name: pkg.packageJson.name }); continue; } @@ -157,7 +166,7 @@ export async function createDistWorkspace( console.warn( `Building ${pkg.packageJson.name} separately because it is a bundled package`, ); - customBuild.push(pkg.packageJson.name); + customBuild.push({ dir: pkg.dir, name: pkg.packageJson.name }); continue; } @@ -181,14 +190,15 @@ export async function createDistWorkspace( await buildPackages(standardBuilds); if (customBuild.length > 0) { - const scopeArgs = customBuild.flatMap(name => ['--scope', name]); - const lernaArgs = - options.parallelism && Number.isInteger(options.parallelism) - ? ['--concurrency', options.parallelism.toString()] - : []; - - await run('yarn', ['lerna', ...lernaArgs, 'run', ...scopeArgs, 'build'], { - cwd: paths.targetRoot, + await runParallelWorkers({ + items: customBuild, + worker: async ({ name, dir }) => { + await run('yarn', ['run', 'build'], { + cwd: dir, + stdoutLogFunc: prefixLogFunc(`${name}: `, 'stdout'), + stderrLogFunc: prefixLogFunc(`${name}: `, 'stderr'), + }); + }, }); } }