/ concept-collection / turing-surface
Sign in
concept-collection / turing-surface
55 lines · 2.0 KBCodeBlameHistory
2 * Smoke-check a deployed URL in headless Chrome: load it, press Run, and
3 * confirm the solver actually advances. Usage: node scripts/check-live.mjs [url]
4 */
5import puppeteer from 'puppeteer-core';
7const url = process.argv[2] ?? 'https://concept-collection.github.io/turing-surface/';
8const browser = await puppeteer.launch({
9 executablePath: process.env.CHROME_PATH ?? '/usr/bin/google-chrome',
10 args: ['--headless=new', '--no-sandbox', '--enable-unsafe-webgpu',
11 '--use-webgpu-adapter=swiftshader', '--enable-unsafe-swiftshader'],
12});
13const page = await browser.newPage();
14await page.setViewport({ width: 1000, height: 900 });
15const problems = [];
16page.on('pageerror', (e) => problems.push(`pageerror: ${e.message}`));
17page.on('requestfailed', (r) => problems.push(`request failed: ${r.url()}`));
18page.on('console', (m) => {
19 if (m.type() === 'error' && !/GL Driver|favicon/.test(m.text())) {
20 problems.push(`console error: ${m.text()}`);
21 }
22});
24try {
25 await page.goto(url, { waitUntil: 'load', timeout: 60_000 });
26 await page.waitForFunction(
27 () => /grid/.test(document.getElementById('stats')?.textContent ?? ''),
28 { timeout: 120_000 },
29 );
30 console.log('initial:', await page.$eval('#stats', (el) => el.textContent));
31 await page.click('#runpause');
32 await page.waitForFunction(
33 () => {
34 const m = document.getElementById('stats')?.textContent?.match(/\((\d+) steps\)/);
35 return m && Number(m[1]) >= 20;
36 },
37 { timeout: 180_000 },
38 );
39 console.log('running:', await page.$eval('#stats', (el) => el.textContent));
40 const panels = await page.$$eval('.sphere-box canvas', (els) => els.length);
41 console.log('sphere canvases:', panels);
42 if (problems.length) {
43 console.log('PROBLEMS:');
44 for (const p of new Set(problems)) console.log(' ' + p);
45 process.exitCode = 1;
46 } else {
47 console.log('LIVE CHECK: PASS');
48 }
49} catch (e) {
50 console.error(`LIVE CHECK FAIL: ${e.message}`);
51 for (const p of new Set(problems)) console.error(' ' + p);
52 process.exitCode = 1;
53} finally {
54 await browser.close();
moveopenescclose