mirror of
https://github.com/docker/build-push-action.git
synced 2026-03-30 09:43:58 +00:00
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. Key improvements: - Clear timeout when export completes to avoid unhandled promise rejection - Handle undefined exportRes gracefully (already supported by reporter) - Continue with build reporting even if export fails 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:
parent
c213746489
commit
e6eefa1b11
2
dist/index.js
generated
vendored
2
dist/index.js
generated
vendored
File diff suppressed because one or more lines are too long
2
dist/index.js.map
generated
vendored
2
dist/index.js.map
generated
vendored
File diff suppressed because one or more lines are too long
25
src/main.ts
25
src/main.ts
@ -248,9 +248,30 @@ actionsToolkit.run(
|
|||||||
let exportRes;
|
let exportRes;
|
||||||
if (!buildError) {
|
if (!buildError) {
|
||||||
const buildxHistory = new BuildxHistory();
|
const buildxHistory = new BuildxHistory();
|
||||||
exportRes = await buildxHistory.export({
|
|
||||||
refs: ref ? [ref] : []
|
// Create a timeout promise that rejects after 30 seconds
|
||||||
|
let timeoutId: NodeJS.Timeout | undefined;
|
||||||
|
const exportTimeout = new Promise<never>((_, reject) => {
|
||||||
|
timeoutId = 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
|
||||||
|
]);
|
||||||
|
// Clear the timeout if export completes successfully
|
||||||
|
if (timeoutId) clearTimeout(timeoutId);
|
||||||
|
} catch (exportError) {
|
||||||
|
// Clear the timeout on error as well
|
||||||
|
if (timeoutId) clearTimeout(timeoutId);
|
||||||
|
// 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) {
|
if (buildId && isBlacksmithBuilder) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user