Fail gracefully when chromium failed to download (#430)

Fail gracefully when chromium failed to download

This patch changes both install.js and Launcher.js to inform how
chromium could be downloaded manually.
This commit is contained in:
Andrey Lushnikov 2017-08-21 13:34:10 -07:00 committed by GitHub
parent 598f439a32
commit c1731dd5d7
4 changed files with 20 additions and 9 deletions

View File

@ -15,18 +15,28 @@
*/ */
const Downloader = require('./utils/ChromiumDownloader'); const Downloader = require('./utils/ChromiumDownloader');
const platform = Downloader.currentPlatform();
const revision = require('./package').puppeteer.chromium_revision; const revision = require('./package').puppeteer.chromium_revision;
const ProgressBar = require('progress'); const ProgressBar = require('progress');
const revisionInfo = Downloader.revisionInfo(platform, revision);
// Do nothing if the revision is already downloaded. // Do nothing if the revision is already downloaded.
if (Downloader.revisionInfo(Downloader.currentPlatform(), revision)) if (revisionInfo.downloaded)
return; return;
let allRevisions = Downloader.downloadedRevisions(); let allRevisions = Downloader.downloadedRevisions();
Downloader.downloadRevision(Downloader.currentPlatform(), revision, onProgress) Downloader.downloadRevision(platform, revision, onProgress)
// Remove previous chromium revisions. // Remove previous chromium revisions.
.then(() => Promise.all(allRevisions.map(({platform, revision}) => Downloader.removeRevision(platform, revision)))) .then(() => Promise.all(allRevisions.map(({platform, revision}) => Downloader.removeRevision(platform, revision))))
.catch(error => console.error('Download failed: ' + error.message)); .catch(onError);
function onError(error) {
console.error(`ERROR: Failed to download chromium r${revision}!
- Download chromium manually:
${revisionInfo.url}
- Extract chromium into ${revisionInfo.folderPath}
* Chromium executable should be at ${revisionInfo.executablePath}`);
}
let progressBar = null; let progressBar = null;
function onProgress(bytesTotal, delta) { function onProgress(bytesTotal, delta) {

View File

@ -72,7 +72,7 @@ class Launcher {
if (typeof chromeExecutable !== 'string') { if (typeof chromeExecutable !== 'string') {
let chromiumRevision = require('../package.json').puppeteer.chromium_revision; let chromiumRevision = require('../package.json').puppeteer.chromium_revision;
let revisionInfo = Downloader.revisionInfo(Downloader.currentPlatform(), chromiumRevision); let revisionInfo = Downloader.revisionInfo(Downloader.currentPlatform(), chromiumRevision);
console.assert(revisionInfo, 'Chromium revision is not downloaded. Run npm install'); console.assert(revisionInfo.downloaded, `Chromium revision is not downloaded. Run "npm install"`);
chromeExecutable = revisionInfo.executablePath; chromeExecutable = revisionInfo.executablePath;
} }
if (Array.isArray(options.args)) if (Array.isArray(options.args))

View File

@ -59,7 +59,7 @@ else
const Downloader = require('../utils/ChromiumDownloader'); const Downloader = require('../utils/ChromiumDownloader');
const chromiumRevision = require('../package.json').puppeteer.chromium_revision; const chromiumRevision = require('../package.json').puppeteer.chromium_revision;
const revisionInfo = Downloader.revisionInfo(Downloader.currentPlatform(), chromiumRevision); const revisionInfo = Downloader.revisionInfo(Downloader.currentPlatform(), chromiumRevision);
console.assert(revisionInfo, `Chromium r${chromiumRevision} is not downloaded. Run 'npm install' and try to re-run tests.`); console.assert(revisionInfo.downloaded, `Chromium r${chromiumRevision} is not downloaded. Run 'npm install' and try to re-run tests.`);
} }
let server; let server;

View File

@ -129,13 +129,11 @@ module.exports = {
/** /**
* @param {string} platform * @param {string} platform
* @param {string} revision * @param {string} revision
* @return {?{executablePath: string}} * @return {!{folderPath: string, executablePath: string, downloaded: boolean, url: string}}
*/ */
revisionInfo: function(platform, revision) { revisionInfo: function(platform, revision) {
console.assert(downloadURLs[platform], `Unsupported platform: ${platform}`); console.assert(downloadURLs[platform], `Unsupported platform: ${platform}`);
let folderPath = getFolderPath(platform, revision); let folderPath = getFolderPath(platform, revision);
if (!fs.existsSync(folderPath))
return null;
let executablePath = ''; let executablePath = '';
if (platform === 'mac') if (platform === 'mac')
executablePath = path.join(folderPath, 'chrome-mac', 'Chromium.app', 'Contents', 'MacOS', 'Chromium'); executablePath = path.join(folderPath, 'chrome-mac', 'Chromium.app', 'Contents', 'MacOS', 'Chromium');
@ -146,7 +144,10 @@ module.exports = {
else else
throw 'Unsupported platfrom: ' + platfrom; throw 'Unsupported platfrom: ' + platfrom;
return { return {
executablePath: executablePath executablePath,
folderPath,
downloaded: fs.existsSync(folderPath),
url: util.format(downloadURLs[platform], revision)
}; };
}, },
}; };