Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion apps/ssr-tests-v9/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"devDependencies": {
Comment thread
Hotell marked this conversation as resolved.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Hotell the fact there are 20 screenshot regressions is kinda scary 😱😱

"@fluentui/eslint-plugin": "*",
"@fluentui/scripts-tasks": "*",
"@fluentui/scripts-storybook": "*"
"@fluentui/scripts-storybook": "*",
"@fluentui/scripts-puppeteer": "*"
}
}
12 changes: 6 additions & 6 deletions apps/ssr-tests-v9/src/test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,18 @@ async function test(): Promise<void> {
const startTime = process.hrtime();
console.log('Starting a browser...');

const htmlPath = path.resolve(__dirname, '..', 'dist', 'index.html');

if (!fs.existsSync(htmlPath)) {
throw new Error('"dist/index.html" does not exist, please run "yarn build" first');
}

Comment thread
Hotell marked this conversation as resolved.
let browser: Browser | undefined;

try {
browser = await launchBrowser();
console.log('Using', await browser.version());

const htmlPath = path.resolve(__dirname, '..', 'dist', 'index.html');

if (!fs.existsSync(htmlPath)) {
throw new Error('"dist/index.html" does not exist, please run "yarn build" first');
}

const url = `file://${htmlPath}`;
console.log(`Using "${url}"`);

Expand Down
24 changes: 1 addition & 23 deletions apps/ssr-tests-v9/src/utils/launchBrowser.ts
Original file line number Diff line number Diff line change
@@ -1,23 +1 @@
import { Browser, launch } from 'puppeteer';

export async function launchBrowser(): Promise<Browser> {
let browser;
let attempt = 1;

while (!browser) {
try {
browser = await launch();
} catch (err) {
if (attempt === 5) {
console.error(`Failed to launch a browser after 5 attempts...`);
throw err;
}

console.warn('A browser failed to start, retrying...');
console.warn(err);
attempt++;
}
}

return browser;
}
export { launch as launchBrowser } from '@fluentui/scripts-puppeteer';
34 changes: 0 additions & 34 deletions apps/ssr-tests-v9/src/utils/visitPage.test.ts

This file was deleted.

24 changes: 2 additions & 22 deletions apps/ssr-tests-v9/src/utils/visitPage.ts
Original file line number Diff line number Diff line change
@@ -1,31 +1,11 @@
import type { Browser, Page } from 'puppeteer';
import type { Browser } from 'puppeteer';
import { visitUrl } from '@fluentui/scripts-puppeteer';
import { PROVIDER_ID } from './constants';

class RenderError extends Error {
public name = 'RangeError';
}

export async function visitUrl(page: Page, url: string) {
let attempt = 1;

while (attempt <= 5) {
try {
await page.goto(url, { timeout: 10 * 1000 /* 10 seconds */ });
break;
} catch (err) {
if (attempt === 5) {
console.error(`Failed to navigate to a page after 5 attempts...`);
throw err;
}

console.warn('A browser failed to navigate to a page, retrying...');
console.warn(err);

attempt++;
}
}
}

export async function visitPage(browser: Browser, url: string) {
const page = await browser.newPage();
await page.setRequestInterception(true);
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,7 @@
"pretty-bytes": "5.6.0",
"progress": "2.0.3",
"prompts": "2.4.2",
"puppeteer": "14.4.0",
"puppeteer": "17.1.3",
Comment thread
Hotell marked this conversation as resolved.
"raw-loader": "4.0.2",
"react": "17.0.2",
"react-app-polyfill": "2.0.0",
Expand Down
3 changes: 2 additions & 1 deletion scripts/gulp/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
"@fluentui/scripts-utils": "*",
"@fluentui/scripts-prettier": "*",
"@fluentui/scripts-puppeteer": "*",
"@fluentui/scripts-babel": "*"
"@fluentui/scripts-babel": "*",
"@fluentui/scripts-projects-test": "*"
}
}
33 changes: 7 additions & 26 deletions scripts/gulp/src/tasks/browserAdapters.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import { spawn, spawnSync } from 'child_process';
import CDP from 'chrome-remote-interface';
import puppeteer from 'puppeteer';
import * as net from 'net';

import { safeLaunchOptions } from '@fluentui/scripts-puppeteer';
import { launch } from '@fluentui/scripts-puppeteer';
import CDP from 'chrome-remote-interface';

export type Page = {
executeJavaScript: <R>(code: string) => Promise<R>;
Expand All @@ -17,39 +16,24 @@ export type Browser = {
};

export async function createChrome(): Promise<Browser> {
const options = safeLaunchOptions();
let browser: puppeteer.Browser | undefined;
let attempt = 1;
while (!browser) {
try {
browser = await puppeteer.launch(options);
} catch (err) {
if (attempt === 5) {
console.error(`Puppeteer failed to launch after 5 attempts`);
throw err;
}
console.warn('Puppeteer failed to launch (will retry):');
console.warn(err);
attempt++;
}
}
const browser = await launch();

console.log(`Chromium version: ${await browser.version()}`);

return {
openPage: async url => {
const page = await (browser as puppeteer.Browser).newPage();
const page = await browser.newPage();

await page.goto(url);

return {
executeJavaScript: async code => {
return page.evaluate(code);
},
close: async () => page.close(),
close: () => page.close(),
Comment thread
Hotell marked this conversation as resolved.
};
},
close: async () => (browser as puppeteer.Browser).close(),
close: () => browser.close(),
};
}

Expand Down Expand Up @@ -137,9 +121,6 @@ export async function createElectron(electronPath: string): Promise<Browser> {
},
};
},

// FIXME: this async is not necessary
// eslint-disable-next-line @typescript-eslint/no-empty-function
close: async () => {},
close: () => Promise.resolve(),
};
}
53 changes: 18 additions & 35 deletions scripts/gulp/src/tasks/serve.ts
Original file line number Diff line number Diff line change
@@ -1,44 +1,27 @@
import express from 'express';
import type { Server } from 'http';

import { closeServer, startServer } from '@fluentui/scripts-projects-test';
import historyApiFallback from 'connect-history-api-fallback';
import { Server } from 'http';
import { colors, log } from 'gulp-util';
import type { Express } from 'express';

type Express = ReturnType<typeof express>;

export const serve = (
export const serve = async (
directoryPath: string,
host: string,
port: number,
configureMiddleware: (express: Express) => Express = app => app,
configureMiddleware = (app: Express) => app,
): Promise<Server> => {
return new Promise((resolve, reject) => {
try {
const server = configureMiddleware(
express().use(
historyApiFallback({
verbose: false,
}),
),
)
.use(express.static(directoryPath))
.listen(port, host, () => {
log(colors.yellow(`Server running at http://${host}:${port}`));
resolve(server);
});
} catch (err) {
reject(err);
}
});
};
const middleware = (app: Express) => {
return configureMiddleware(
app.use(
historyApiFallback({
verbose: false,
}),
),
);
};

export const forceClose = (server: Server): Promise<void> => {
if (!server) {
return Promise.resolve();
}

return new Promise((resolve, reject) => {
server.keepAliveTimeout = 1000;
server.close(err => (err ? reject(err) : resolve()));
});
const { server } = await startServer({ root: directoryPath, host, port }, middleware);
return server;
};

export const forceClose = closeServer;
9 changes: 5 additions & 4 deletions scripts/projects-test/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
export * from './createReactApp';
export * from './packPackages';
export * from './performBrowserTest';
export * from './utils';
export { prepareCreateReactApp } from './createReactApp';
Comment thread
Hotell marked this conversation as resolved.
export { addResolutionPathsForProjectPackages, packProjectPackages } from './packPackages';
export { performBrowserTest, startServer, closeServer } from './performBrowserTest';
export { createTempDir, generateFiles, log, prepareTempDirs, shEcho, workspaceRoot } from './utils';
export type { TempPaths } from './utils';
Loading