Skip to content

Commit 1bda239

Browse files
Resolve ZIP write completion on output close
Wait for the write stream close event in zipFolder to ensure the file descriptor is flushed and closed before proceeding. This avoids rare truncated ZIPs on fast CI runners. Keep error and warning handling unchanged.
1 parent d301eb1 commit 1bda239

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

build.mjs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -432,16 +432,26 @@ async function zipFolder(dir) {
432432
reject(err)
433433
}
434434
}
435+
const done = () => {
436+
if (!settled) {
437+
settled = true
438+
resolve()
439+
}
440+
}
435441
output.once('error', fail)
436442
archive.once('error', fail)
437443
archive.on('warning', (err) => {
438444
// Log non-fatal archive warnings for diagnostics
439445
console.warn('[build][zip] warning:', err)
440446
})
447+
// Resolve on close to ensure FD is flushed and closed
448+
output.once('close', done)
449+
// Ensure close is emitted after finish on some fast runners
441450
output.once('finish', () => {
442-
if (!settled) {
443-
settled = true
444-
resolve()
451+
try {
452+
if (typeof output.close === 'function') output.close()
453+
} catch (_) {
454+
// ignore
445455
}
446456
})
447457
archive.pipe(output)

0 commit comments

Comments
 (0)