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
}
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]'
+7 -1
View File
@@ -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)