@prodcycle/prodcycle 0.6.5 → 0.6.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api-client.js +14 -1
- package/package.json +1 -1
package/dist/api-client.js
CHANGED
|
@@ -399,7 +399,20 @@ class ComplianceApiClient {
|
|
|
399
399
|
const retryAfterSeconds = parseRetryAfter(response.headers.get('retry-after'));
|
|
400
400
|
const errorBody = parsed ?? null;
|
|
401
401
|
const errorMessage = errorBody?.error?.message ?? `API request failed with status ${response.status}`;
|
|
402
|
-
|
|
402
|
+
// 429 (rate limit) and 503 (service unavailable) honor Retry-After.
|
|
403
|
+
// 502 (bad gateway) and 504 (gateway timeout) are transient ALB-layer
|
|
404
|
+
// failures — the backend wasn't reached / didn't respond in time, so
|
|
405
|
+
// the request was not processed and a fresh attempt has a clean
|
|
406
|
+
// chance of succeeding. Concrete case: openbao-openbao got an
|
|
407
|
+
// instantaneous 502 during the 2026-05-13 GA-validation sweep and
|
|
408
|
+
// the CLI bailed without retry, even though the very next repo
|
|
409
|
+
// scanned cleanly. 500 is deliberately NOT retried — that's an
|
|
410
|
+
// application-level error and retrying could double-process or
|
|
411
|
+
// just deterministically refail.
|
|
412
|
+
const isRetryable = response.status === 429 ||
|
|
413
|
+
response.status === 502 ||
|
|
414
|
+
response.status === 503 ||
|
|
415
|
+
response.status === 504;
|
|
403
416
|
if (isRetryable && attempt < MAX_RETRY_ATTEMPTS - 1) {
|
|
404
417
|
const delayMs = retryAfterSeconds != null ? retryAfterSeconds * 1000 : retryBackoffMs(attempt);
|
|
405
418
|
const cappedDelayMs = Math.min(delayMs, MAX_RETRY_AFTER_SECONDS * 1000);
|
package/package.json
CHANGED