ci: improve packaging failure diagnostics

This commit is contained in:
lofyer
2026-08-04 16:15:57 +08:00
parent 4b42c1255e
commit dcaa28359c
2 changed files with 35 additions and 12 deletions
+28 -11
View File
@@ -536,6 +536,33 @@ function safeReleasePath(filePath) {
return resolved 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() { function printHelp() {
console.log(`${productName} 跨平台发布构建 console.log(`${productName} 跨平台发布构建
@@ -639,17 +666,7 @@ if (require.main === module) {
main().catch((error) => { main().catch((error) => {
console.error(error) console.error(error)
if (process.env.GITHUB_ACTIONS === 'true') { if (process.env.GITHUB_ACTIONS === 'true') {
const outputLines = String(error.outputTail ?? '') const details = `${error.message}\n${summarizeCommandOutput(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)}`
.replace( .replace(
/((?:authorization|_authToken|api[_-]?key|password)\s*[:=]\s*)\S+/giu, /((?:authorization|_authToken|api[_-]?key|password)\s*[:=]\s*)\S+/giu,
'$1[redacted]' '$1[redacted]'
+7 -1
View File
@@ -96,13 +96,19 @@ async function downloadPackage(projectDir, packageName, integrity) {
{ {
cwd: projectDir, cwd: projectDir,
encoding: 'utf8', encoding: 'utf8',
maxBuffer: 16 * 1024 * 1024,
shell: false, shell: false,
windowsHide: true windowsHide: true
} }
) )
if (result.status !== 0) { if (result.status !== 0) {
throw new Error( 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) const output = JSON.parse(result.stdout)