diff options
Diffstat (limited to 'integration/scripts/browser.js')
-rw-r--r-- | integration/scripts/browser.js | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/integration/scripts/browser.js b/integration/scripts/browser.js index 10a07b54e..f198dba7d 100644 --- a/integration/scripts/browser.js +++ b/integration/scripts/browser.js @@ -15,6 +15,7 @@ const bunFlags = [ const bunExec = process.env.BUN_BIN || "bun"; var bunProcess; +var waitSpawn; if (!USE_EXISTING_PROCESS) { bunProcess = child_process.spawn(bunExec, bunFlags, { cwd: snippetsDir, @@ -29,10 +30,17 @@ if (!USE_EXISTING_PROCESS) { console.log("$", bunExec, bunFlags.join(" ")); bunProcess.stderr.pipe(process.stderr); bunProcess.stdout.pipe(process.stdout); + var rejecter; bunProcess.once("error", (err) => { console.error("❌ bun error", err); process.exit(1); }); + waitSpawn = new Promise((resolve, reject) => { + bunProcess.once("spawn", (code) => { + console.log("Spawned"); + resolve(); + }); + }); process.on("beforeExit", () => { bunProcess?.kill(0); }); @@ -69,6 +77,9 @@ async function main() { const promises = []; let allTestsPassed = true; + if (waitSpawn) await waitSpawn; + var canRetry = true; + async function runPage(key) { var page; try { @@ -90,13 +101,25 @@ async function main() { let testDone = new Promise((resolve) => { page.exposeFunction("testDone", resolve); }); - await page.goto(`${serverURL}/`, { - waitUntil: "domcontentloaded", - }); - await page.evaluate(` + try { + await page.goto(`${serverURL}/`, { + waitUntil: "domcontentloaded", + }); + + await page.evaluate(` globalThis.runTest("${key}"); `); - await testDone; + await testDone; + } catch (err) { + if (canRetry) { + console.log( + `❌ ${key} failed once (incase it's still booting on universal binary for the first time). Retrying...` + ); + canRetry = false; + return await runPage(key); + } + throw err; + } console.log(`✅ ${key}`); } catch (e) { @@ -113,7 +136,7 @@ async function main() { console.warn(`Failed to update snapshot: ${key}`, exception); } } - + canRetry = false; if (shouldClose) await page.close(); } |