fix: add timeout to fetch to prevent silent hangs

Add AbortSignal.timeout(30s) to fetch requests to ensure they fail
fast instead of hanging indefinitely when network issues occur.
This fixes issues where the action would hang and eventually get
killed by GitHub Actions without a clear error message.
This commit is contained in:
eifinger-bot
2026-05-14 18:53:01 +00:00
committed by Kevin Stillhammer
parent e7108c6ccc
commit edc4037b1b
3 changed files with 31 additions and 10 deletions
Generated Vendored
+10 -4
View File
@@ -95790,10 +95790,16 @@ function getProxyAgent() {
} }
return void 0; return void 0;
} }
var fetch = async (url2, opts) => await (0, import_undici2.fetch)(url2, { var fetch = async (url2, opts) => {
dispatcher: getProxyAgent(), const timeoutSignal = AbortSignal.timeout(3e4);
...opts const existingSignal = opts.signal;
}); const mergedSignal = existingSignal ? AbortSignal.any([timeoutSignal, existingSignal]) : timeoutSignal;
return await (0, import_undici2.fetch)(url2, {
dispatcher: getProxyAgent(),
...opts,
signal: mergedSignal
});
};
// src/download/variant-selection.ts // src/download/variant-selection.ts
function selectDefaultVariant(entries, duplicateEntryDescription) { function selectDefaultVariant(entries, duplicateEntryDescription) {
+10 -4
View File
@@ -49749,10 +49749,16 @@ function getProxyAgent() {
} }
return void 0; return void 0;
} }
var fetch = async (url, opts) => await (0, import_undici2.fetch)(url, { var fetch = async (url, opts) => {
dispatcher: getProxyAgent(), const timeoutSignal = AbortSignal.timeout(3e4);
...opts const existingSignal = opts.signal;
}); const mergedSignal = existingSignal ? AbortSignal.any([timeoutSignal, existingSignal]) : timeoutSignal;
return await (0, import_undici2.fetch)(url, {
dispatcher: getProxyAgent(),
...opts,
signal: mergedSignal
});
};
// src/download/manifest.ts // src/download/manifest.ts
var cachedManifestData = /* @__PURE__ */ new Map(); var cachedManifestData = /* @__PURE__ */ new Map();
+11 -2
View File
@@ -14,8 +14,17 @@ export function getProxyAgent() {
return undefined; return undefined;
} }
export const fetch = async (url: string, opts: RequestInit) => export const fetch = async (url: string, opts: RequestInit) => {
await undiciFetch(url, { // Merge timeout signal with any existing signal from opts
const timeoutSignal = AbortSignal.timeout(30_000);
const existingSignal = opts.signal;
const mergedSignal = existingSignal
? AbortSignal.any([timeoutSignal, existingSignal])
: timeoutSignal;
return await undiciFetch(url, {
dispatcher: getProxyAgent(), dispatcher: getProxyAgent(),
...opts, ...opts,
signal: mergedSignal,
}); });
};