From dcaa28359c89502b56313d5570dfad087e043943 Mon Sep 17 00:00:00 2001 From: lofyer Date: Tue, 4 Aug 2026 16:15:57 +0800 Subject: [PATCH] ci: improve packaging failure diagnostics --- build/build-release.cjs | 39 ++++++++++++++++++++++++++++----------- build/runtime-hooks.cjs | 8 +++++++- 2 files changed, 35 insertions(+), 12 deletions(-) diff --git a/build/build-release.cjs b/build/build-release.cjs index 1449ce8..f5d80df 100644 --- a/build/build-release.cjs +++ b/build/build-release.cjs @@ -536,6 +536,33 @@ function safeReleasePath(filePath) { return resolved } +function summarizeCommandOutput(value) { + const lines = String(value) + .replaceAll(ansiEscapeCharacter, '') + .replace(ansiSequenceSuffixPattern, '') + .replaceAll('\r', '\n') + .split('\n') + .map((line) => line.trim()) + .filter( + (line) => + line && + !line.includes('duplicate dependency references') + ) + .map((line) => line.slice(0, 800)) + const important = lines.filter((line) => + /error|failed|fatal|cannot|unable|enoent|codesign|hdiutil|exit code/iu.test( + line + ) + ) + return [ + ...new Set([ + ...lines.slice(0, 8), + ...important, + ...lines.slice(-14) + ]) + ].join('\n').slice(-3_000) +} + function printHelp() { console.log(`${productName} 跨平台发布构建 @@ -639,17 +666,7 @@ if (require.main === module) { main().catch((error) => { console.error(error) if (process.env.GITHUB_ACTIONS === 'true') { - const outputLines = String(error.outputTail ?? '') - .replaceAll(ansiEscapeCharacter, '') - .replace(ansiSequenceSuffixPattern, '') - .replaceAll('\r', '\n') - .split('\n') - .filter( - (line) => - line.trim() && - !line.includes('duplicate dependency references') - ) - const details = `${error.message}\n${outputLines.join('\n').slice(-3_000)}` + const details = `${error.message}\n${summarizeCommandOutput(error.outputTail ?? '')}` .replace( /((?:authorization|_authToken|api[_-]?key|password)\s*[:=]\s*)\S+/giu, '$1[redacted]' diff --git a/build/runtime-hooks.cjs b/build/runtime-hooks.cjs index 480c32c..c0e0239 100644 --- a/build/runtime-hooks.cjs +++ b/build/runtime-hooks.cjs @@ -96,13 +96,19 @@ async function downloadPackage(projectDir, packageName, integrity) { { cwd: projectDir, encoding: 'utf8', + maxBuffer: 16 * 1024 * 1024, shell: false, windowsHide: true } ) if (result.status !== 0) { throw new Error( - `Unable to fetch ${packageName}: ${result.stderr || result.stdout}` + `Unable to fetch ${packageName}: ${ + result.error?.message || + result.stderr || + result.stdout || + `npm exited with ${result.status}` + }` ) } const output = JSON.parse(result.stdout)