feat: group workspace logs inside CI logs (#7143)

---------

Co-authored-by: Zoltan Kochan <z@kochan.io>
This commit is contained in:
Nacho Aldama
2023-10-21 05:17:57 +02:00
committed by GitHub
parent 5b7ed47d8e
commit e34f6fba90
4 changed files with 41 additions and 0 deletions

View File

@@ -0,0 +1,6 @@
---
"@pnpm/plugin-commands-script-runners": patch
"pnpm": patch
---
When running scripts recursively inside a workspace, the logs of the scripts are grouped together in some CI tools. (Only works with `--workspace-concurrency 1`)

View File

@@ -48,6 +48,7 @@
"@pnpm/config": "workspace:*",
"@pnpm/error": "workspace:*",
"@pnpm/lifecycle": "workspace:*",
"@pnpm/log.group": "1.0.1",
"@pnpm/package-bins": "workspace:*",
"@pnpm/plugin-commands-installation": "workspace:*",
"@pnpm/read-package-json": "workspace:*",

View File

@@ -7,6 +7,7 @@ import {
type RunLifecycleHookOptions,
} from '@pnpm/lifecycle'
import { logger } from '@pnpm/logger'
import { groupStart } from '@pnpm/log.group'
import { sortPackages } from '@pnpm/sort-packages'
import pLimit from 'p-limit'
import realpathMissing from 'realpath-missing'
@@ -127,7 +128,16 @@ export async function runRecursive (
}
const _runScript = runScript.bind(null, { manifest: pkg.package.manifest, lifecycleOpts, runScriptOptions: { enablePrePostScripts: opts.enablePrePostScripts ?? false }, passedThruArgs })
const groupEnd = (opts.workspaceConcurrency ?? 4) > 1
? undefined
: groupStart(formatSectionName({
name: pkg.package.manifest.name,
script: scriptName,
version: pkg.package.manifest.version,
prefix: path.normalize(path.relative(opts.workspaceDir, prefix)),
}))
await _runScript(scriptName)
groupEnd?.()
result[prefix].status = 'passed'
result[prefix].duration = getExecutionDuration(startTime)
} catch (err: any) { // eslint-disable-line
@@ -174,6 +184,20 @@ export async function runRecursive (
throwOnCommandFail('pnpm recursive run', result)
}
function formatSectionName ({
script,
name,
version,
prefix,
}: {
script?: string
name?: string
version?: string
prefix: string
}) {
return `${name ?? 'unknown'}${version ? `@${version}` : ''} ${script ? `: ${script}` : ''} ${prefix}`
}
export function getSpecifiedScripts (scripts: PackageScripts, scriptName: string) {
// if scripts in package.json has script which is equal to scriptName a user passes, return it.
if (scripts[scriptName]) {

10
pnpm-lock.yaml generated
View File

@@ -1333,6 +1333,9 @@ importers:
'@pnpm/lifecycle':
specifier: workspace:*
version: link:../lifecycle
'@pnpm/log.group':
specifier: 1.0.1
version: 1.0.1
'@pnpm/logger':
specifier: ^5.0.0
version: 5.0.0
@@ -8253,6 +8256,13 @@ packages:
'@pnpm/types': 9.1.0
dev: true
/@pnpm/log.group@1.0.1:
resolution: {integrity: sha512-MncPYEfmuDeLMVJfcBSJRqWvTRuONWsF3xiCRrzNhvWZa+yffiDXXqthUxomEZkNngpecsmUmCdiLDhap1kwDA==}
engines: {node: '>=12.22.0'}
dependencies:
ci-info: 3.9.0
dev: false
/@pnpm/logger@5.0.0:
resolution: {integrity: sha512-YfcB2QrX+Wx1o6LD1G2Y2fhDhOix/bAY/oAnMpHoNLsKkWIRbt1oKLkIFvxBMzLwAEPqnYWguJrYC+J6i4ywbw==}
engines: {node: '>=12.17'}