Skip to content

Commit

Permalink
feat(browser): In list-available command, show which versions can b…
Browse files Browse the repository at this point in the history
…e used.

Implements #496
  • Loading branch information
mountaindude committed Feb 15, 2024
1 parent 0229d37 commit e9fc470
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 10 deletions.
12 changes: 7 additions & 5 deletions src/butler-sheet-icons.js
Expand Up @@ -560,12 +560,12 @@ const program = new Command();
const res = await browserInstall(options, command);
logger.debug(`Call to browserInstall succeeded: ${res}`);
} catch (err) {
logger.error(`BROWSER MAIN 9: ${err}`);
if (err.message) {
logger.error(`BROWSER MAIN 9 (message): ${err.message}`);
}
if (err.stack) {
logger.error(`BROWSER MAIN 9 (stack): ${err.stack}`);
} else if (err.message) {
logger.error(`BROWSER MAIN 9 (message): ${err.message}`);
} else {
logger.error(`BROWSER MAIN 9: ${err}`);
}
}
})
Expand Down Expand Up @@ -596,7 +596,9 @@ const program = new Command();
.action(async (options, command) => {
try {
const res = await browserListAvailable(options, command);
logger.debug(`Call to browserAvailable succeeded: ${res}`);
logger.debug(
`Call to browserAvailable succeeded: ${JSON.stringify(res, null, 2)}`
);
} catch (err) {
logger.error(`BROWSER MAIN 10: ${err}`);
if (err.message) {
Expand Down
22 changes: 21 additions & 1 deletion src/lib/browser/browser-install.js
@@ -1,4 +1,9 @@
const { install, resolveBuildId, detectBrowserPlatform } = require('@puppeteer/browsers');
const {
install,
resolveBuildId,
detectBrowserPlatform,
canDownload,
} = require('@puppeteer/browsers');
const path = require('path');
const { homedir } = require('os');

Expand Down Expand Up @@ -42,6 +47,21 @@ const browserInstall = async (options, _command) => {
logger.info(
`Resolved browser build id: "${buildId}" for browser "${options.browser}" version "${options.browserVersion}"`
);

// Ensure browser can be downloaded
const canDownloadBrowser = await canDownload({
browser: options.browser,
buildId,
cacheDir: browserPath,
unpack: true,
});

if (!canDownloadBrowser) {
throw new Error(
`Browser "${options.browser}" version "${options.browserVersion}" cannot be downloaded. Please use the "list-available" command to check available versions`
);
}

logger.info('Installing browser...');

const browser = await install({
Expand Down
32 changes: 28 additions & 4 deletions src/lib/browser/browser-list-available.js
@@ -1,4 +1,4 @@
const { detectBrowserPlatform } = require('@puppeteer/browsers');
const { detectBrowserPlatform, canDownload } = require('@puppeteer/browsers');
const path = require('path');
const { homedir } = require('os');
const axios = require('axios');
Expand Down Expand Up @@ -45,6 +45,8 @@ async function browserListAvailable(options) {
// Get versions for the selected browser
let browsersAvailable = [];
if (options.browser === 'chrome') {
// https://developer.chrome.com/docs/web-platform/versionhistory/guide
//
// Chome version history API:
// https://developer.chrome.com/docs/versionhistory/guide/
//
Expand All @@ -69,6 +71,10 @@ async function browserListAvailable(options) {
// "nextPageToken": ""
// }

logger.debug(
`Get Chrome versions from: https://versionhistory.googleapis.com/v1/chrome/platforms/${platform}/channels/${options.channel}/versions`
);

const axiosConfig = {
method: 'get',
responseType: 'json',
Expand All @@ -82,9 +88,27 @@ async function browserListAvailable(options) {
// Output Chrome versions and names to info log
if (browsersAvailable.length > 0) {
logger.info(`Chrome versions from "${options.channel}" channel:`);
browsersAvailable.forEach((version) => {
logger.info(` ${version.version}, "${version.name}"`);
});
logger.info(
'Note that not all versions may be available for use with Butler Sheet Icons.'
);

// eslint-disable-next-line no-restricted-syntax
for (const version of browsersAvailable) {
// Can this version be downloaded?
// eslint-disable-next-line no-await-in-loop
const canDownloadBrowser = await canDownload({
browser: options.browser,
buildId: version.version,
cacheDir: browserPath,
unpack: true,
});

if (canDownloadBrowser) {
logger.info(` ${version.version}, "${version.name}"`);
} else {
logger.info(` ${version.version}, "${version.name}" (not available)`);
}
}
} else {
logger.info('No Chrome versions available');
}
Expand Down

0 comments on commit e9fc470

Please sign in to comment.