creevey 0.10.0-beta.18 → 0.10.0-beta.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server/docker.js +25 -6
- package/dist/server/docker.js.map +1 -1
- package/dist/server/index.js +6 -6
- package/dist/server/index.js.map +1 -1
- package/dist/server/master/start.js +7 -5
- package/dist/server/master/start.js.map +1 -1
- package/dist/server/playwright/docker-file.d.ts +2 -1
- package/dist/server/playwright/docker-file.js +17 -4
- package/dist/server/playwright/docker-file.js.map +1 -1
- package/dist/server/playwright/webdriver.d.ts +1 -1
- package/dist/server/selenium/internal.d.ts +1 -1
- package/dist/server/selenium/webdriver.d.ts +1 -1
- package/dist/server/webdriver.d.ts +1 -1
- package/dist/shared/index.d.ts +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
- package/src/server/docker.ts +28 -7
- package/src/server/index.ts +10 -7
- package/src/server/master/start.ts +7 -5
- package/src/server/playwright/docker-file.ts +19 -4
- package/src/server/playwright/webdriver.ts +1 -1
- package/src/server/selenium/internal.ts +1 -1
- package/src/server/selenium/webdriver.ts +1 -1
- package/src/server/webdriver.ts +1 -1
- package/src/shared/index.ts +1 -1
- package/src/types.ts +1 -0
package/dist/server/docker.js
CHANGED
@@ -7,6 +7,7 @@ exports.pullImages = pullImages;
|
|
7
7
|
exports.buildImage = buildImage;
|
8
8
|
exports.runImage = runImage;
|
9
9
|
const tar_stream_1 = __importDefault(require("tar-stream"));
|
10
|
+
const loglevel_1 = __importDefault(require("loglevel"));
|
10
11
|
const stream_1 = require("stream");
|
11
12
|
const dockerode_1 = __importDefault(require("dockerode"));
|
12
13
|
const messages_js_1 = require("./messages.js");
|
@@ -73,18 +74,26 @@ async function buildImage(imageName, dockerfile) {
|
|
73
74
|
pack.entry({ name: 'Dockerfile' }, dockerfile);
|
74
75
|
pack.finalize();
|
75
76
|
const { default: yoctoSpinner } = await import('yocto-spinner');
|
76
|
-
const spinner = yoctoSpinner({ text: `${imageName}: Build start` })
|
77
|
+
const spinner = yoctoSpinner({ text: `${imageName}: Build start` });
|
78
|
+
if ((0, logger_js_1.logger)().getLevel() > loglevel_1.default.levels.DEBUG) {
|
79
|
+
spinner.start();
|
80
|
+
}
|
81
|
+
let isFailed = false;
|
77
82
|
await new Promise((resolve, reject) => {
|
78
83
|
void docker.buildImage(
|
79
84
|
// @ts-expect-error Type incompatibility AsyncIterator and AsyncIterableIterator
|
80
|
-
pack,
|
85
|
+
pack,
|
86
|
+
// TODO Support buildkit decode grpc (version: '2')
|
87
|
+
{ t: imageName, labels: { creevey: imageName }, version: '1' }, (buildError, stream) => {
|
81
88
|
if (buildError || !stream) {
|
82
|
-
spinner.error(buildError?.message);
|
89
|
+
// spinner.error(buildError?.message);
|
83
90
|
reject(buildError ?? new Error('Unknown error'));
|
84
91
|
return;
|
85
92
|
}
|
86
93
|
docker.modem.followProgress(stream, onFinished, onProgress);
|
87
94
|
function onFinished(error) {
|
95
|
+
if (isFailed)
|
96
|
+
return;
|
88
97
|
if (error) {
|
89
98
|
spinner.error(error.message);
|
90
99
|
reject(error);
|
@@ -94,9 +103,19 @@ async function buildImage(imageName, dockerfile) {
|
|
94
103
|
resolve();
|
95
104
|
}
|
96
105
|
function onProgress(event) {
|
97
|
-
if (
|
98
|
-
|
99
|
-
|
106
|
+
if ('stream' in event) {
|
107
|
+
if ((0, logger_js_1.logger)().getLevel() <= loglevel_1.default.levels.DEBUG) {
|
108
|
+
(0, logger_js_1.logger)().debug(event.stream.trim());
|
109
|
+
}
|
110
|
+
else {
|
111
|
+
spinner.text = `${imageName}: [Build] - ${event.stream}`;
|
112
|
+
}
|
113
|
+
}
|
114
|
+
else if ('errorDetail' in event) {
|
115
|
+
isFailed = true;
|
116
|
+
spinner.error(event.error);
|
117
|
+
reject(new Error(event.error));
|
118
|
+
}
|
100
119
|
}
|
101
120
|
});
|
102
121
|
});
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/server/docker.ts"],"names":[],"mappings":";;;;;
|
1
|
+
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/server/docker.ts"],"names":[],"mappings":"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"}
|
package/dist/server/index.js
CHANGED
@@ -13,7 +13,6 @@ const webdriver_js_1 = require("./selenium/webdriver.js");
|
|
13
13
|
const webdriver_js_2 = require("./webdriver.js");
|
14
14
|
const utils_js_1 = require("./utils.js");
|
15
15
|
const messages_js_1 = require("./messages.js");
|
16
|
-
const docker_file_js_1 = require("./playwright/docker-file.js");
|
17
16
|
const docker_js_1 = require("./docker.js");
|
18
17
|
const promises_1 = require("fs/promises");
|
19
18
|
async function startWebdriverServer(browser, config, options) {
|
@@ -37,8 +36,6 @@ async function startWebdriverServer(browser, config, options) {
|
|
37
36
|
const { default: { version }, } = await import('playwright-core/package.json', { with: { type: 'json' } });
|
38
37
|
if (cluster_1.default.isWorker) {
|
39
38
|
// TODO Re-use dockerImage
|
40
|
-
// TODO Use https://hub.docker.com/r/playwright/chrome
|
41
|
-
// NOTE It will be possible to use `chrome` browserName
|
42
39
|
const { startPlaywrightContainer } = await import('./playwright/docker.js');
|
43
40
|
const { browserName } = config.browsers[browser];
|
44
41
|
const imageName = `creevey/${browserName}:v${version}`;
|
@@ -46,10 +43,13 @@ async function startWebdriverServer(browser, config, options) {
|
|
46
43
|
return host;
|
47
44
|
}
|
48
45
|
else {
|
49
|
-
const
|
50
|
-
|
46
|
+
const { playwrightDockerFile } = await import('./playwright/docker-file.js');
|
47
|
+
const browsers = [
|
48
|
+
...new Set(Object.values(config.browsers).map((c) => [c.browserName, c.playwrightOptions])),
|
49
|
+
];
|
50
|
+
await Promise.all(browsers.map(async ([browserName, launchOptions]) => {
|
51
51
|
const imageName = `creevey/${browserName}:v${version}`;
|
52
|
-
const dockerfile =
|
52
|
+
const dockerfile = playwrightDockerFile(browserName, version, launchOptions);
|
53
53
|
await (0, docker_js_1.buildImage)(imageName, dockerfile);
|
54
54
|
}));
|
55
55
|
const { default: getPort } = await import('get-port');
|
package/dist/server/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":";;;;;
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
@@ -18,12 +18,14 @@ const telemetry_js_1 = require("../telemetry.js");
|
|
18
18
|
const importMetaUrl = (0, url_1.pathToFileURL)(__filename).href;
|
19
19
|
async function copyStatics(reportDir) {
|
20
20
|
const clientDir = path_1.default.join(path_1.default.dirname((0, url_1.fileURLToPath)(importMetaUrl)), '../../client/web');
|
21
|
-
const
|
22
|
-
.filter((dirent) => dirent.isFile()
|
21
|
+
const assets = (await (0, promises_1.readdir)(path_1.default.join(clientDir, 'assets'), { withFileTypes: true }))
|
22
|
+
.filter((dirent) => dirent.isFile())
|
23
23
|
.map((dirent) => dirent.name);
|
24
|
-
await (0, promises_1.mkdir)(reportDir, { recursive: true });
|
25
|
-
|
26
|
-
|
24
|
+
await (0, promises_1.mkdir)(path_1.default.join(reportDir, 'assets'), { recursive: true });
|
25
|
+
await (0, promises_1.copyFile)(path_1.default.join(clientDir, 'index.html'), path_1.default.join(reportDir, 'index.html'));
|
26
|
+
await (0, promises_1.copyFile)(path_1.default.join(clientDir, 'assets', 'index.html'), path_1.default.join(reportDir, 'index.html'));
|
27
|
+
for (const asset of assets) {
|
28
|
+
await (0, promises_1.copyFile)(path_1.default.join(clientDir, 'assets', asset), path_1.default.join(reportDir, 'assets', asset));
|
27
29
|
}
|
28
30
|
}
|
29
31
|
function reportDataModule(data) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/server/master/start.ts"],"names":[],"mappings":";;;;;
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/server/master/start.ts"],"names":[],"mappings":"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"}
|
@@ -1 +1,2 @@
|
|
1
|
-
|
1
|
+
import { LaunchOptions } from 'playwright-core';
|
2
|
+
export declare function playwrightDockerFile(browser: string, version: string, serverOptions?: LaunchOptions): string;
|
@@ -6,8 +6,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.playwrightDockerFile = playwrightDockerFile;
|
7
7
|
const semver_1 = __importDefault(require("semver"));
|
8
8
|
const shelljs_1 = require("shelljs");
|
9
|
+
const browserMap = {
|
10
|
+
chromium: 'chromium',
|
11
|
+
'chromium-headless-shell': 'chromium',
|
12
|
+
chrome: 'chromium',
|
13
|
+
'chrome-beta': 'chromium',
|
14
|
+
msedge: 'chromium',
|
15
|
+
'msedge-beta': 'chromium',
|
16
|
+
'msedge-dev': 'chromium',
|
17
|
+
'bidi-chromium': 'chromium',
|
18
|
+
firefox: 'firefox',
|
19
|
+
webkit: 'webkit',
|
20
|
+
};
|
9
21
|
// TODO Support custom docker images
|
10
|
-
function playwrightDockerFile(browser, version) {
|
22
|
+
function playwrightDockerFile(browser, version, serverOptions) {
|
11
23
|
const sv = semver_1.default.coerce(version);
|
12
24
|
let npmRegistry;
|
13
25
|
try {
|
@@ -17,16 +29,17 @@ function playwrightDockerFile(browser, version) {
|
|
17
29
|
/* noop */
|
18
30
|
}
|
19
31
|
return `
|
20
|
-
FROM
|
32
|
+
FROM node:lts
|
21
33
|
|
22
34
|
WORKDIR /creevey
|
23
35
|
|
24
36
|
RUN echo "{ \\"type\\": \\"module\\" }" > package.json && \\
|
25
|
-
echo "import { ${browser} as browser } from 'playwright-core';" >> index.js && \\
|
26
|
-
echo "const ws = await browser.launchServer({ port: 4444, wsPath: 'creevey' })" >> index.js && \\${npmRegistry
|
37
|
+
echo "import { ${browserMap[browser]} as browser } from 'playwright-core';" >> index.js && \\
|
38
|
+
echo "const ws = await browser.launchServer({ ...${JSON.stringify(serverOptions)}, port: 4444, wsPath: 'creevey' })" >> index.js && \\${npmRegistry
|
27
39
|
? `
|
28
40
|
echo "registry=${npmRegistry}" > .npmrc && \\`
|
29
41
|
: ''}
|
42
|
+
npx -y playwright${sv ? `@${sv.format()}` : ''} install --with-deps ${browser} && \\
|
30
43
|
npm i playwright-core${sv ? `@${sv.format()}` : ''}
|
31
44
|
|
32
45
|
EXPOSE 4444
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"docker-file.js","sourceRoot":"","sources":["../../../src/server/playwright/docker-file.ts"],"names":[],"mappings":";;;;;
|
1
|
+
{"version":3,"file":"docker-file.js","sourceRoot":"","sources":["../../../src/server/playwright/docker-file.ts"],"names":[],"mappings":";;;;;AAkBA,oDA8BC;AAhDD,oDAA4B;AAC5B,qCAA+B;AAG/B,MAAM,UAAU,GAA2B;IACzC,QAAQ,EAAE,UAAU;IACpB,yBAAyB,EAAE,UAAU;IACrC,MAAM,EAAE,UAAU;IAClB,aAAa,EAAE,UAAU;IACzB,MAAM,EAAE,UAAU;IAClB,aAAa,EAAE,UAAU;IACzB,YAAY,EAAE,UAAU;IACxB,eAAe,EAAE,UAAU;IAC3B,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF,oCAAoC;AACpC,SAAgB,oBAAoB,CAAC,OAAe,EAAE,OAAe,EAAE,aAA6B;IAClG,MAAM,EAAE,GAAG,gBAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAElC,IAAI,WAAW,CAAC;IAChB,IAAI,CAAC;QACH,WAAW,GAAG,IAAA,cAAI,EAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,UAAU;IACZ,CAAC;IAED,OAAO;;;;;;qBAMY,UAAU,CAAC,OAAO,CAAC;uDACe,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,wDAC9E,WAAW;QACT,CAAC,CAAC;qBACW,WAAW,kBAAkB;QAC1C,CAAC,CAAC,EACN;uBACmB,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,wBAAwB,OAAO;2BACtD,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;;;;;CAKrD,CAAC;AACF,CAAC"}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { Args } from '@storybook/csf';
|
1
|
+
import type { Args } from '@storybook/csf';
|
2
2
|
import { Config, Options, ServerTest, StoriesRaw, StoryInput } from '../../types';
|
3
3
|
import { CreeveyWebdriverBase } from '../webdriver';
|
4
4
|
export declare class PlaywrightWebdriver extends CreeveyWebdriverBase {
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { Args } from '@storybook/csf';
|
1
|
+
import type { Args } from '@storybook/csf';
|
2
2
|
import { WebDriver } from 'selenium-webdriver';
|
3
3
|
import { Config, StorybookGlobals, StoryInput, StoriesRaw, Options, ServerTest } from '../../types.js';
|
4
4
|
export declare class InternalBrowser {
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { Args } from '@storybook/csf';
|
1
|
+
import type { Args } from '@storybook/csf';
|
2
2
|
import { StoryInput, BaseCreeveyTestContext, CreeveyTestContext, StoriesRaw, CreeveyWebdriver, ServerTest } from '../types.js';
|
3
3
|
export declare const storybookRootID = "storybook-root";
|
4
4
|
export declare const LOCALHOST_REGEXP: RegExp;
|
package/dist/shared/index.d.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { Parameters } from '@storybook/csf';
|
1
|
+
import type { Parameters } from '@storybook/csf';
|
2
2
|
import { SetStoriesData, StoriesRaw, StoryInput } from '../types.js';
|
3
3
|
export declare const combineParameters: (...parameterSets: Parameters[]) => Parameters;
|
4
4
|
export declare const denormalizeStoryParameters: ({ globalParameters, kindParameters, stories, }: SetStoriesData) => StoriesRaw;
|
package/dist/types.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAqjBA,oBAEC;AAED,8BAEC;AAED,wBASC;AAED,4BAEC;AAED,4BAEC;AAGD,gCAEC;AAED,oCAEC;AAED,4CAEC;AAED,0CAEC;AAED,4CAEC;AAED,sCAEC;AA5jBD,IAAY,eAUX;AAVD,WAAY,eAAe;IACzB,6CAA0B,CAAA;IAC1B,wDAAqC,CAAA;IACrC,iDAA8B,CAAA;IAC9B,mDAAgC,CAAA;IAChC,iDAA8B,CAAA;IAC9B,gEAA6C,CAAA;IAC7C,wDAAqC,CAAA;IACrC,6CAA0B,CAAA;IAC1B,mDAAgC,CAAA;AAClC,CAAC,EAVW,eAAe,+BAAf,eAAe,QAU1B;AAuWD,MAAa,WAAY,SAAQ,KAAK;IACpC,MAAM,CAA4C;CACnD;AAFD,kCAEC;AAwCD,IAAY,WAOX;AAPD,WAAY,WAAW;IACrB,kCAAmB,CAAA;IACnB,8BAAe,CAAA;IACf,kCAAmB,CAAA;IACnB,oCAAqB,CAAA;IACrB,iCAAkB,CAAA;IAClB,iCAAkB,CAAA;AACpB,CAAC,EAPW,WAAW,2BAAX,WAAW,QAOtB;AAwGD,SAAgB,IAAI;IAClB,UAAU;AACZ,CAAC;AAED,SAAgB,SAAS,CAAI,KAA2B;IACtD,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC;AAC/C,CAAC;AAED,SAAgB,MAAM,CAAC,CAA8B;IACnD,OAAO,CACL,SAAS,CAAC,CAAC,CAAC;QACZ,QAAQ,CAAC,CAAC,CAAC;QACX,IAAI,IAAI,CAAC;QACT,SAAS,IAAI,CAAC;QACd,OAAO,CAAC,CAAC,EAAE,IAAI,QAAQ;QACvB,OAAO,CAAC,CAAC,OAAO,IAAI,QAAQ,CAC7B,CAAC;AACJ,CAAC;AAED,SAAgB,QAAQ,CAAC,CAAU;IACjC,OAAO,OAAO,CAAC,IAAI,QAAQ,IAAI,CAAC,IAAI,IAAI,CAAC;AAC3C,CAAC;AAED,SAAgB,QAAQ,CAAC,CAAU;IACjC,OAAO,OAAO,CAAC,IAAI,QAAQ,CAAC;AAC9B,CAAC;AAED,8DAA8D;AAC9D,SAAgB,UAAU,CAAC,CAAU;IACnC,OAAO,OAAO,CAAC,IAAI,UAAU,CAAC;AAChC,CAAC;AAED,SAAgB,YAAY,CAAC,KAAc;IACzC,OAAO,KAAK,YAAY,WAAW,IAAI,QAAQ,IAAI,KAAK,CAAC;AAC3D,CAAC;AAED,SAAgB,gBAAgB,CAAC,OAAgB;IAC/C,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,OAAO,CAAC;AACjD,CAAC;AAED,SAAgB,eAAe,CAAC,OAAgB;IAC9C,OAAO,gBAAgB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC;AAChE,CAAC;AAED,SAAgB,gBAAgB,CAAC,OAAgB;IAC/C,OAAO,gBAAgB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC;AACjE,CAAC;AAED,SAAgB,aAAa,CAAC,OAAgB;IAC5C,OAAO,gBAAgB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC;AAC9D,CAAC"}
|
package/package.json
CHANGED
package/src/server/docker.ts
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
import tar from 'tar-stream';
|
2
|
+
import Logger from 'loglevel';
|
2
3
|
import { Writable } from 'stream';
|
3
4
|
import Dockerode, { Container } from 'dockerode';
|
4
5
|
import { DockerAuth } from '../types.js';
|
@@ -80,15 +81,20 @@ export async function buildImage(imageName: string, dockerfile: string): Promise
|
|
80
81
|
pack.finalize();
|
81
82
|
|
82
83
|
const { default: yoctoSpinner } = await import('yocto-spinner');
|
83
|
-
const spinner = yoctoSpinner({ text: `${imageName}: Build start` })
|
84
|
+
const spinner = yoctoSpinner({ text: `${imageName}: Build start` });
|
85
|
+
if (logger().getLevel() > Logger.levels.DEBUG) {
|
86
|
+
spinner.start();
|
87
|
+
}
|
88
|
+
let isFailed = false;
|
84
89
|
await new Promise<void>((resolve, reject) => {
|
85
90
|
void docker.buildImage(
|
86
91
|
// @ts-expect-error Type incompatibility AsyncIterator and AsyncIterableIterator
|
87
92
|
pack,
|
88
|
-
|
93
|
+
// TODO Support buildkit decode grpc (version: '2')
|
94
|
+
{ t: imageName, labels: { creevey: imageName }, version: '1' },
|
89
95
|
(buildError: Error | null, stream) => {
|
90
96
|
if (buildError || !stream) {
|
91
|
-
spinner.error(buildError?.message);
|
97
|
+
// spinner.error(buildError?.message);
|
92
98
|
reject(buildError ?? new Error('Unknown error'));
|
93
99
|
return;
|
94
100
|
}
|
@@ -96,6 +102,8 @@ export async function buildImage(imageName: string, dockerfile: string): Promise
|
|
96
102
|
docker.modem.followProgress(stream, onFinished, onProgress);
|
97
103
|
|
98
104
|
function onFinished(error: Error | null): void {
|
105
|
+
if (isFailed) return;
|
106
|
+
|
99
107
|
if (error) {
|
100
108
|
spinner.error(error.message);
|
101
109
|
reject(error);
|
@@ -105,10 +113,23 @@ export async function buildImage(imageName: string, dockerfile: string): Promise
|
|
105
113
|
resolve();
|
106
114
|
}
|
107
115
|
|
108
|
-
function onProgress(
|
109
|
-
|
110
|
-
|
111
|
-
|
116
|
+
function onProgress(
|
117
|
+
event:
|
118
|
+
| { stream: string }
|
119
|
+
| { errorDetail: { code: number; message: string }; error: string }
|
120
|
+
| { id: string; aux: string }, // NOTE: Only with `version: '2'`
|
121
|
+
): void {
|
122
|
+
if ('stream' in event) {
|
123
|
+
if (logger().getLevel() <= Logger.levels.DEBUG) {
|
124
|
+
logger().debug(event.stream.trim());
|
125
|
+
} else {
|
126
|
+
spinner.text = `${imageName}: [Build] - ${event.stream}`;
|
127
|
+
}
|
128
|
+
} else if ('errorDetail' in event) {
|
129
|
+
isFailed = true;
|
130
|
+
spinner.error(event.error);
|
131
|
+
reject(new Error(event.error));
|
132
|
+
}
|
112
133
|
}
|
113
134
|
},
|
114
135
|
);
|
package/src/server/index.ts
CHANGED
@@ -7,7 +7,6 @@ import { SeleniumWebdriver } from './selenium/webdriver.js';
|
|
7
7
|
import { LOCALHOST_REGEXP } from './webdriver.js';
|
8
8
|
import { isInsideDocker } from './utils.js';
|
9
9
|
import { sendWorkerMessage } from './messages.js';
|
10
|
-
import { playwrightDockerFile } from './playwright/docker-file.js';
|
11
10
|
import { buildImage } from './docker.js';
|
12
11
|
import { mkdir, writeFile } from 'fs/promises';
|
13
12
|
|
@@ -34,9 +33,6 @@ async function startWebdriverServer(browser: string, config: Config, options: Op
|
|
34
33
|
|
35
34
|
if (cluster.isWorker) {
|
36
35
|
// TODO Re-use dockerImage
|
37
|
-
|
38
|
-
// TODO Use https://hub.docker.com/r/playwright/chrome
|
39
|
-
// NOTE It will be possible to use `chrome` browserName
|
40
36
|
const { startPlaywrightContainer } = await import('./playwright/docker.js');
|
41
37
|
const { browserName } = config.browsers[browser] as BrowserConfigObject;
|
42
38
|
|
@@ -45,11 +41,18 @@ async function startWebdriverServer(browser: string, config: Config, options: Op
|
|
45
41
|
|
46
42
|
return host;
|
47
43
|
} else {
|
48
|
-
const
|
44
|
+
const { playwrightDockerFile } = await import('./playwright/docker-file.js');
|
45
|
+
const browsers = [
|
46
|
+
...new Set(
|
47
|
+
Object.values(config.browsers).map(
|
48
|
+
(c) => [(c as BrowserConfigObject).browserName, (c as BrowserConfigObject).playwrightOptions] as const,
|
49
|
+
),
|
50
|
+
),
|
51
|
+
];
|
49
52
|
await Promise.all(
|
50
|
-
browsers.map(async (browserName) => {
|
53
|
+
browsers.map(async ([browserName, launchOptions]) => {
|
51
54
|
const imageName = `creevey/${browserName}:v${version}`;
|
52
|
-
const dockerfile = playwrightDockerFile(browserName, version);
|
55
|
+
const dockerfile = playwrightDockerFile(browserName, version, launchOptions);
|
53
56
|
|
54
57
|
await buildImage(imageName, dockerfile);
|
55
58
|
}),
|
@@ -15,12 +15,14 @@ const importMetaUrl = pathToFileURL(__filename).href;
|
|
15
15
|
|
16
16
|
async function copyStatics(reportDir: string): Promise<void> {
|
17
17
|
const clientDir = path.join(path.dirname(fileURLToPath(importMetaUrl)), '../../client/web');
|
18
|
-
const
|
19
|
-
.filter((dirent) => dirent.isFile()
|
18
|
+
const assets = (await readdir(path.join(clientDir, 'assets'), { withFileTypes: true }))
|
19
|
+
.filter((dirent) => dirent.isFile())
|
20
20
|
.map((dirent) => dirent.name);
|
21
|
-
await mkdir(reportDir, { recursive: true });
|
22
|
-
|
23
|
-
|
21
|
+
await mkdir(path.join(reportDir, 'assets'), { recursive: true });
|
22
|
+
await copyFile(path.join(clientDir, 'index.html'), path.join(reportDir, 'index.html'));
|
23
|
+
await copyFile(path.join(clientDir, 'assets', 'index.html'), path.join(reportDir, 'index.html'));
|
24
|
+
for (const asset of assets) {
|
25
|
+
await copyFile(path.join(clientDir, 'assets', asset), path.join(reportDir, 'assets', asset));
|
24
26
|
}
|
25
27
|
}
|
26
28
|
|
@@ -1,8 +1,22 @@
|
|
1
1
|
import semver from 'semver';
|
2
2
|
import { exec } from 'shelljs';
|
3
|
+
import { LaunchOptions } from 'playwright-core';
|
4
|
+
|
5
|
+
const browserMap: Record<string, string> = {
|
6
|
+
chromium: 'chromium',
|
7
|
+
'chromium-headless-shell': 'chromium',
|
8
|
+
chrome: 'chromium',
|
9
|
+
'chrome-beta': 'chromium',
|
10
|
+
msedge: 'chromium',
|
11
|
+
'msedge-beta': 'chromium',
|
12
|
+
'msedge-dev': 'chromium',
|
13
|
+
'bidi-chromium': 'chromium',
|
14
|
+
firefox: 'firefox',
|
15
|
+
webkit: 'webkit',
|
16
|
+
};
|
3
17
|
|
4
18
|
// TODO Support custom docker images
|
5
|
-
export function playwrightDockerFile(browser: string, version: string): string {
|
19
|
+
export function playwrightDockerFile(browser: string, version: string, serverOptions?: LaunchOptions): string {
|
6
20
|
const sv = semver.coerce(version);
|
7
21
|
|
8
22
|
let npmRegistry;
|
@@ -13,18 +27,19 @@ export function playwrightDockerFile(browser: string, version: string): string {
|
|
13
27
|
}
|
14
28
|
|
15
29
|
return `
|
16
|
-
FROM
|
30
|
+
FROM node:lts
|
17
31
|
|
18
32
|
WORKDIR /creevey
|
19
33
|
|
20
34
|
RUN echo "{ \\"type\\": \\"module\\" }" > package.json && \\
|
21
|
-
echo "import { ${browser} as browser } from 'playwright-core';" >> index.js && \\
|
22
|
-
echo "const ws = await browser.launchServer({ port: 4444, wsPath: 'creevey' })" >> index.js && \\${
|
35
|
+
echo "import { ${browserMap[browser]} as browser } from 'playwright-core';" >> index.js && \\
|
36
|
+
echo "const ws = await browser.launchServer({ ...${JSON.stringify(serverOptions)}, port: 4444, wsPath: 'creevey' })" >> index.js && \\${
|
23
37
|
npmRegistry
|
24
38
|
? `
|
25
39
|
echo "registry=${npmRegistry}" > .npmrc && \\`
|
26
40
|
: ''
|
27
41
|
}
|
42
|
+
npx -y playwright${sv ? `@${sv.format()}` : ''} install --with-deps ${browser} && \\
|
28
43
|
npm i playwright-core${sv ? `@${sv.format()}` : ''}
|
29
44
|
|
30
45
|
EXPOSE 4444
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/// <reference types="../../../types/playwright-context" />
|
2
|
-
import { Args } from '@storybook/csf';
|
2
|
+
import type { Args } from '@storybook/csf';
|
3
3
|
import { Config, Options, ServerTest, StoriesRaw, StoryInput } from '../../types';
|
4
4
|
import { logger } from '../logger';
|
5
5
|
import { subscribeOn } from '../messages';
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/// <reference types="../../../types/selenium-context" />
|
2
|
-
import { Args } from '@storybook/csf';
|
2
|
+
import type { Args } from '@storybook/csf';
|
3
3
|
import { Config, StorybookGlobals, StoryInput, StoriesRaw, Options, ServerTest } from '../../types.js';
|
4
4
|
import { subscribeOn } from '../messages.js';
|
5
5
|
import { CreeveyWebdriverBase } from '../webdriver.js';
|
package/src/server/webdriver.ts
CHANGED
package/src/shared/index.ts
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
import _ from 'lodash';
|
2
|
-
import { Parameters } from '@storybook/csf';
|
2
|
+
import type { Parameters } from '@storybook/csf';
|
3
3
|
import { SetStoriesData, StoriesRaw, CreeveyStoryParams, StoryInput } from '../types.js';
|
4
4
|
import { deserializeRegExp, isSerializedRegExp, isRegExp, serializeRegExp } from './serializeRegExp.js';
|
5
5
|
|
package/src/types.ts
CHANGED