Skip to content

Commit b60c006

Browse files
authored
chore: simplify and restructure downloads (#1974)
1 parent a43eac3 commit b60c006

File tree

17 files changed

+253
-246
lines changed

17 files changed

+253
-246
lines changed

.gitignore

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,4 @@ yarn.lock
1717
/src/webkit/protocol.ts
1818
lib/
1919
playwright-*.tgz
20-
/web.js
21-
/web.js.map
2220
/types/*

download-browser.js

Lines changed: 23 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -13,78 +13,39 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
const fs = require('fs');
16+
1717
const path = require('path');
1818
const browserFetcher = require('./lib/server/browserFetcher.js');
1919
const packageJSON = require('./package.json');
2020

21-
function localDownloadOptions(browserName) {
22-
const revision = packageJSON.playwright[`${browserName}_revision`];
23-
const downloadPath = path.join(__dirname, '.local-browsers', `${browserName}-${revision}`);
24-
return {
25-
browser: browserName,
26-
progressBarBrowserName: `${browserName} r${revision}`,
27-
revision,
28-
downloadPath,
29-
executablePath: browserFetcher.executablePath({browser: browserName, downloadPath}),
30-
};
31-
}
32-
33-
function downloadOptionsFromENV(packagePath, browserName) {
21+
function resolveBrowser(packagePath, browserName) {
3422
const browsersPath = getFromENV('PLAYWRIGHT_BROWSERS_PATH');
35-
const downloadPath = browsersPath ?
36-
path.join(browsersPath, 'v' + packageJSON.version, browserName) :
37-
path.join(packagePath, '.local-browsers', browserName);
38-
return {
39-
downloadPath,
40-
skipBrowserDownload: getFromENV('PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD'),
41-
progressBarBrowserName: `${browserName} for playwright v${packageJSON.version}`,
42-
revision: packageJSON.playwright[`${browserName}_revision`],
43-
browser: browserName,
44-
host: getFromENV('PLAYWRIGHT_DOWNLOAD_HOST'),
45-
executablePath: browserFetcher.executablePath({browser: browserName, downloadPath}),
46-
};
23+
const baseDir = browsersPath || path.join(packagePath, '.local-browsers');
24+
const browserRevision = packageJSON.playwright[`${browserName}_revision`];
25+
return { baseDir, browserRevision };
4726
}
4827

49-
async function downloadBrowserWithProgressBar(options) {
50-
if (options.skipBrowserDownload) {
51-
logPolitely('Skipping browsers download because `PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD` env variable is set');
52-
return;
53-
}
54-
let progressBar = null;
55-
let lastDownloadedBytes = 0;
56-
function progress(downloadedBytes, totalBytes) {
57-
if (!progressBar) {
58-
const ProgressBar = require('progress');
59-
progressBar = new ProgressBar(`Downloading ${options.progressBarBrowserName} - ${toMegabytes(totalBytes)} [:bar] :percent :etas `, {
60-
complete: '=',
61-
incomplete: ' ',
62-
width: 20,
63-
total: totalBytes,
64-
});
65-
}
66-
const delta = downloadedBytes - lastDownloadedBytes;
67-
lastDownloadedBytes = downloadedBytes;
68-
progressBar.tick(delta);
69-
}
70-
await browserFetcher.downloadBrowser({...options, progress}).catch(e => {
71-
process.exitCode = 1;
72-
throw e;
73-
});
74-
logPolitely(`${options.progressBarBrowserName} downloaded to ${options.downloadPath}`);
28+
function executablePath(packagePath, browserName) {
29+
const { baseDir, browserRevision } = resolveBrowser(packagePath, browserName);
30+
return browserFetcher.executablePath(baseDir, browserName, browserRevision);
7531
}
7632

77-
function toMegabytes(bytes) {
78-
const mb = bytes / 1024 / 1024;
79-
return `${Math.round(mb * 10) / 10} Mb`;
33+
function targetDirectory(packagePath, browserName) {
34+
const { baseDir, browserRevision } = resolveBrowser(packagePath, browserName);
35+
return browserFetcher.targetDirectory(baseDir, browserName, browserRevision);
8036
}
8137

82-
function logPolitely(toBeLogged) {
83-
const logLevel = process.env.npm_config_loglevel;
84-
const logLevelDisplay = ['silent', 'error', 'warn'].indexOf(logLevel) > -1;
85-
86-
if (!logLevelDisplay)
87-
console.log(toBeLogged);
38+
async function downloadBrowserWithProgressBar(packagePath, browserName) {
39+
const { baseDir, browserRevision } = resolveBrowser(packagePath, browserName);
40+
if (getFromENV('PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD'))
41+
return browserFetcher.downloadBrowserWithProgressBar(null);
42+
return browserFetcher.downloadBrowserWithProgressBar({
43+
baseDir,
44+
browserName,
45+
browserRevision,
46+
progressBarName: `${browserName} for playwright v${packageJSON.version}`,
47+
serverHost: getFromENV('PLAYWRIGHT_DOWNLOAD_HOST'),
48+
});
8849
}
8950

9051
function getFromENV(name) {
@@ -94,4 +55,4 @@ function getFromENV(name) {
9455
return value;
9556
}
9657

97-
module.exports = {downloadBrowserWithProgressBar, downloadOptionsFromENV, localDownloadOptions};
58+
module.exports = { targetDirectory, executablePath, downloadBrowserWithProgressBar };

index.js

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,15 @@
1515
*/
1616
const fs = require('fs');
1717
const path = require('path');
18-
const {Playwright} = require('./lib/server/playwright.js');
19-
const {localDownloadOptions} = require('./download-browser.js');
18+
const { Playwright } = require('./lib/server/playwright.js');
19+
const { executablePath } = require('./download-browser.js');
2020

2121
const playwright = new Playwright({
2222
browsers: ['webkit', 'chromium', 'firefox'],
2323
});
2424

25-
if (fs.existsSync(path.join(__dirname, '.local-browsers'))) {
26-
playwright.chromium._executablePath = localDownloadOptions('chromium').executablePath;
27-
playwright.firefox._executablePath = localDownloadOptions('firefox').executablePath;
28-
playwright.webkit._executablePath = localDownloadOptions('webkit').executablePath;
29-
}
25+
playwright.chromium._executablePath = executablePath(__dirname, 'chromium');
26+
playwright.firefox._executablePath = executablePath(__dirname, 'firefox');
27+
playwright.webkit._executablePath = executablePath(__dirname, 'webkit');
3028

3129
module.exports = playwright;
32-

install-from-github.js

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -64,33 +64,20 @@ async function listFiles(dirpath) {
6464
}
6565

6666
async function downloadAllBrowsersAndGenerateProtocolTypes() {
67-
const {downloadBrowserWithProgressBar, localDownloadOptions} = require('./download-browser');
67+
const { targetDirectory, executablePath, downloadBrowserWithProgressBar } = require('./download-browser');
6868
const protocolGenerator = require('./utils/protocol-types-generator');
69-
const chromiumOptions = localDownloadOptions('chromium');
70-
const firefoxOptions = localDownloadOptions('firefox');
71-
const webkitOptions = localDownloadOptions('webkit');
72-
if (!(await existsAsync(chromiumOptions.downloadPath))) {
73-
await downloadBrowserWithProgressBar(chromiumOptions);
74-
await protocolGenerator.generateChromiumProtocol(chromiumOptions.executablePath).catch(console.warn);
75-
}
76-
if (!(await existsAsync(firefoxOptions.downloadPath))) {
77-
await downloadBrowserWithProgressBar(firefoxOptions);
78-
await protocolGenerator.generateFirefoxProtocol(firefoxOptions.executablePath).catch(console.warn);
79-
}
80-
if (!(await existsAsync(webkitOptions.downloadPath))) {
81-
await downloadBrowserWithProgressBar(webkitOptions);
82-
await protocolGenerator.generateWebKitProtocol(webkitOptions.downloadPath).catch(console.warn);
83-
}
69+
if (await downloadBrowserWithProgressBar(__dirname, 'chromium'))
70+
await protocolGenerator.generateChromiumProtocol(executablePath(__dirname, 'chromium')).catch(console.warn);
71+
if (await downloadBrowserWithProgressBar(__dirname, 'firefox'))
72+
await protocolGenerator.generateFirefoxProtocol(executablePath(__dirname, 'firefox')).catch(console.warn);
73+
if (await downloadBrowserWithProgressBar(__dirname, 'webkit'))
74+
await protocolGenerator.generateWebKitProtocol(executablePath(__dirname, 'webkit')).catch(console.warn);
8475

8576
// Cleanup stale revisions.
8677
const directories = new Set(await readdirAsync(path.join(__dirname, '.local-browsers')));
87-
directories.delete(chromiumOptions.downloadPath);
88-
directories.delete(firefoxOptions.downloadPath);
89-
directories.delete(webkitOptions.downloadPath);
90-
// cleanup old browser directories.
91-
directories.add(path.join(__dirname, '.local-chromium'));
92-
directories.add(path.join(__dirname, '.local-firefox'));
93-
directories.add(path.join(__dirname, '.local-webkit'));
78+
directories.delete(targetDirectory(__dirname, 'chromium'));
79+
directories.delete(targetDirectory(__dirname, 'firefox'));
80+
directories.delete(targetDirectory(__dirname, 'webkit'));
9481
await Promise.all([...directories].map(directory => rmAsync(directory)));
9582

9683
try {

package-lock.json

Lines changed: 10 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
"@types/mime": "^2.0.1",
6161
"@types/node": "^10.17.17",
6262
"@types/pngjs": "^3.4.0",
63+
"@types/progress": "^2.0.3",
6364
"@types/proxy-from-env": "^1.0.0",
6465
"@types/rimraf": "^2.0.2",
6566
"@types/ws": "^6.0.1",

packages/playwright-chromium/index.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,14 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
const path = require('path');
17-
const {Playwright} = require('playwright-core/lib/server/playwright.js');
18-
const {downloadOptionsFromENV} = require('playwright-core/download-browser.js');
16+
17+
const { Playwright } = require('playwright-core/lib/server/playwright.js');
18+
const { executablePath } = require('playwright-core/download-browser.js');
1919

2020
const playwright = new Playwright({
2121
browsers: ['chromium'],
2222
});
2323

24-
playwright.chromium._executablePath = downloadOptionsFromENV(__dirname, 'chromium').executablePath;
24+
playwright.chromium._executablePath = executablePath(__dirname, 'chromium');
2525

2626
module.exports = playwright;
27-

packages/playwright-chromium/install.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,9 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
const path = require('path');
17-
const fs = require('fs');
18-
const {downloadBrowserWithProgressBar, downloadOptionsFromENV} = require('playwright-core/download-browser');
16+
17+
const { downloadBrowserWithProgressBar } = require('playwright-core/download-browser');
1918

2019
(async function() {
21-
await downloadBrowserWithProgressBar(downloadOptionsFromENV(__dirname, 'chromium'));
20+
await downloadBrowserWithProgressBar(__dirname, 'chromium');
2221
})();

packages/playwright-firefox/index.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,14 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
const path = require('path');
17-
const {Playwright} = require('playwright-core/lib/server/playwright.js');
18-
const {downloadOptionsFromENV} = require('playwright-core/download-browser.js');
16+
17+
const { Playwright } = require('playwright-core/lib/server/playwright.js');
18+
const { executablePath } = require('playwright-core/download-browser.js');
1919

2020
const playwright = new Playwright({
2121
browsers: ['firefox'],
2222
});
2323

24-
playwright.firefox._executablePath = downloadOptionsFromENV(__dirname, 'firefox').executablePath;
24+
playwright.firefox._executablePath = executablePath(__dirname, 'firefox');
2525

2626
module.exports = playwright;
27-

packages/playwright-firefox/install.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,9 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
const path = require('path');
17-
const fs = require('fs');
18-
const {downloadBrowserWithProgressBar, downloadOptionsFromENV} = require('playwright-core/download-browser');
16+
17+
const { downloadBrowserWithProgressBar } = require('playwright-core/download-browser');
1918

2019
(async function() {
21-
await downloadBrowserWithProgressBar(downloadOptionsFromENV(__dirname, 'firefox'));
20+
await downloadBrowserWithProgressBar(__dirname, 'firefox');
2221
})();

0 commit comments

Comments
 (0)