fix: add timeout to buildx export operation to prevent hanging

Add a 30-second timeout to the buildxHistory.export() call to prevent
workflow jobs from hanging indefinitely when the buildx dial-stdio
process crashes or becomes unresponsive. The build will continue
with reporting even if the export fails or times out.

Fixes issue where docker run export-build command would hang with
"broken pipe" errors when buildx backend is unavailable.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Claude 2025-08-04 18:47:51 -04:00
parent c213746489
commit 3cf0b00a1a
3 changed files with 20 additions and 4 deletions

2
dist/index.js generated vendored

File diff suppressed because one or more lines are too long

2
dist/index.js.map generated vendored

File diff suppressed because one or more lines are too long

View File

@ -248,9 +248,25 @@ actionsToolkit.run(
let exportRes;
if (!buildError) {
const buildxHistory = new BuildxHistory();
exportRes = await buildxHistory.export({
refs: ref ? [ref] : []
// Create a timeout promise that rejects after 30 seconds
const exportTimeout = new Promise<never>((_, reject) => {
setTimeout(() => reject(new Error('Export operation timed out after 30 seconds')), 30000);
});
try {
// Race between the export operation and the timeout
exportRes = await Promise.race([
buildxHistory.export({
refs: ref ? [ref] : []
}),
exportTimeout
]);
} catch (exportError) {
// Log the error but continue with reporting
core.warning(`Build export failed: ${(exportError as Error).message}`);
core.info('Continuing with build reporting without export data');
}
}
if (buildId && isBlacksmithBuilder) {