From 1317c43dd3944e2e71a313b26b73615ab2273611 Mon Sep 17 00:00:00 2001 From: Wickedness Date: Sun, 5 Jul 2026 17:16:25 +0900 Subject: [PATCH] Fail release QA on runtime errors --- scripts/verify-release-candidate.mjs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/scripts/verify-release-candidate.mjs b/scripts/verify-release-candidate.mjs index 04297d3..7ee0d98 100644 --- a/scripts/verify-release-candidate.mjs +++ b/scripts/verify-release-candidate.mjs @@ -17,9 +17,21 @@ try { browser = await chromium.launch({ headless: true }); const page = await browser.newPage({ viewport: { width: 1280, height: 720 } }); const consoleMessages = []; + const pageErrors = []; + const requestFailures = []; page.on('console', (message) => { consoleMessages.push({ type: message.type(), text: message.text() }); }); + page.on('pageerror', (error) => { + pageErrors.push(error.message); + }); + page.on('requestfailed', (request) => { + requestFailures.push({ + url: request.url(), + type: request.resourceType(), + failure: request.failure()?.errorText ?? 'unknown' + }); + }); await page.goto(targetUrl, { waitUntil: 'domcontentloaded' }); await page.evaluate(() => window.localStorage.clear()); @@ -168,7 +180,10 @@ try { ); const errors = consoleMessages.filter((message) => message.type === 'error'); + const blockingRequestFailures = requestFailures.filter((request) => request.failure !== 'net::ERR_ABORTED'); assert(errors.length === 0, `Unexpected browser console errors: ${JSON.stringify(errors)}`); + assert(pageErrors.length === 0, `Unexpected browser runtime errors: ${JSON.stringify(pageErrors)}`); + assert(blockingRequestFailures.length === 0, `Unexpected browser request failures: ${JSON.stringify(blockingRequestFailures)}`); console.log(`Verified release-candidate user flow at ${targetUrl}`); } finally {