ci(nightly): repair five job classes broken by the #649 QA hardening (#695)

Nightly has been red since 07-28; per-PR CI and main are green. Two investigations traced all five failing classes to #649: extended-matrix required AI bundles it never installs (removed), nightly SYSTEM_DEPS drifted from ci.yml (added libreoffice + a doc-binaries composite for pandoc/pdfcpu), the generated-case classifier only skipped ffmpeg (widened to pdfcpu/soffice/pandoc + excluded repo-audit specs from the lean docker image), a settings spec capped loginAttemptLimit and 429-cascaded the serial bucket (restore via API), and type-to-search refused keystrokes under a route announcer's programmatic focus (guard added). A nightly dispatch on the branch confirmed all five classes green.
This commit is contained in:
SnapOtter
2026-07-31 02:09:39 +08:00
committed by GitHub
parent 44b1aa9767
commit 1b41da7615
9 changed files with 167 additions and 17 deletions
+10 -6
View File
@@ -49,15 +49,19 @@ export function isEngineUnavailableResponse(statusCode: number, body: string): b
* The same gap seen from the worker instead of the route.
*
* A tool whose input needs no probing, images-to-video being the obvious one,
* is admitted normally and only discovers the missing engine when ffmpeg is
* spawned. Match the engine's own "not found" wording, which it raises before
* spawning anything. A real crash carries an exit code and stderr and has to
* stay a failure.
* is admitted normally and only discovers the missing engine when it is
* spawned. Match each engine's own "not found" wording, which it raises before
* spawning anything. The lean docker test image ships without pdfcpu,
* LibreOffice (soffice), and pandoc as well as ffmpeg, so all four gate the
* same way. A real crash carries an exit code and stderr and has to stay a
* failure.
*/
export function isEngineUnavailableFailure(error: unknown): boolean {
const message = error instanceof Error ? error.message : String(error ?? "");
if (/\b(ffmpeg|ffprobe)\b[^"]*?\bbinary not found\b/i.test(message)) return true;
return /spawn\s+\S*(ffmpeg|ffprobe)\S*\s+ENOENT/i.test(message);
if (/\b(ffmpeg|ffprobe|pdfcpu|soffice|pandoc)\b[^"]*?\bbinary not found\b/i.test(message)) {
return true;
}
return /spawn\s+\S*(ffmpeg|ffprobe|pdfcpu|soffice|pandoc)\S*\s+ENOENT/i.test(message);
}
export type GeneratedSkipCategory = (typeof GENERATED_SKIP_CATEGORIES)[number];