Backed out changeset b71c8c052463 (bug 1943846) for causing mass failures. CLOSED...
[gecko.git] / remote / test / puppeteer / Herebyfile.mjs
blob9a6ece898862ffadf1f5d00a4486aac9de984c62
1 /**
2  * @license
3  * Copyright 2024 Google Inc.
4  * SPDX-License-Identifier: Apache-2.0
5  */
7 /* eslint-disable import/order */
9 import {readFile, writeFile, copyFile} from 'fs/promises';
11 import versionData from './versions.json' with {type: 'json'};
13 import {docgen, spliceIntoSection} from '@puppeteer/docgen';
14 import {execa} from 'execa';
15 import {task} from 'hereby';
16 import semver from 'semver';
18 function addNoTocHeader(markdown) {
19   return `---
20 hide_table_of_contents: true
21 ---
23 ${markdown}`;
26 /**
27  * This logic should match the one in `website/docusaurus.config.js`.
28  */
29 function getApiUrl(version) {
30   if (semver.gte(version, '19.3.0')) {
31     return `https://github.com/puppeteer/puppeteer/blob/puppeteer-${version}/docs/api/index.md`;
32   } else if (semver.gte(version, '15.3.0')) {
33     return `https://github.com/puppeteer/puppeteer/blob/${version}/docs/api/index.md`;
34   } else {
35     return `https://github.com/puppeteer/puppeteer/blob/${version}/docs/api.md`;
36   }
39 export const docsNgSchematicsTask = task({
40   name: 'docs:ng-schematics',
41   run: async () => {
42     const readme = await readFile('packages/ng-schematics/README.md', 'utf-8');
43     await writeFile('docs/guides/ng-schematics.md', readme);
44   },
45 });
47 export const docsBrowserSupportTask = task({
48   name: 'docs:supported-browsers',
49   run: async () => {
50     const content = await readFile('docs/supported-browsers.md', {
51       encoding: 'utf8',
52     });
53     // Create table view
54     const buffer = [
55       '| Puppeteer | Chrome | Firefox |',
56       '| --------- | ------ | ------- |',
57     ];
58     for (const [puppeteerVersion, browserVersions] of versionData.versions) {
59       if (puppeteerVersion === 'NEXT') {
60         continue;
61       }
63       const puppeteerVer = `[Puppeteer ${puppeteerVersion}](${getApiUrl(
64         puppeteerVersion,
65       )})`;
67       let firefoxVer = '';
68       if (semver.gte(puppeteerVersion, '23.0.0')) {
69         // Firefox pin need a prefix of `stable_` to be downloaded
70         // For the user that is not relaxant on this page
71         firefoxVer = `[Firefox](https://www.mozilla.org/en-US/firefox/) ${browserVersions.firefox.split('_').at(-1)}`;
72       } else if (semver.gte(puppeteerVersion, '2.1.0')) {
73         firefoxVer = `Firefox Nightly (at the time)`;
74       } else {
75         firefoxVer = `Firefox not supported`;
76       }
78       let chromeVer = '';
79       if (semver.gte(puppeteerVersion, '20.0.0')) {
80         chromeVer = `[Chrome for Testing](https://developer.chrome.com/blog/chrome-for-testing/) ${browserVersions.chrome}`;
81       } else {
82         chromeVer = `Chromium ${browserVersions.chrome}`;
83       }
85       buffer.push(`| ${puppeteerVer} | ${chromeVer} | ${firefoxVer} |`);
86     }
87     await writeFile(
88       'docs/supported-browsers.md',
89       spliceIntoSection('version', content, buffer.join('\n')),
90     );
91   },
92 });
94 export const docsTask = task({
95   name: 'docs',
96   dependencies: [docsNgSchematicsTask, docsBrowserSupportTask],
97   run: async () => {
98     // Copy main page.
99     const mainPage = await readFile('README.md', 'utf-8');
100     await writeFile('docs/index.md', addNoTocHeader(mainPage));
102     // Generate documentation
103     for (const [name, folder] of [
104       ['browsers', 'browsers-api'],
105       ['puppeteer', 'api'],
106     ]) {
107       docgen(`docs/${name}.api.json`, `docs/${folder}`);
108     }
110     // Update main @puppeteer/browsers page.
111     const readme = await readFile('packages/browsers/README.md', 'utf-8');
112     const index = await readFile('docs/browsers-api/index.md', 'utf-8');
113     await writeFile(
114       'docs/browsers-api/index.md',
115       index.replace('# API Reference', readme),
116     );
118     // Copy combined changelog.
119     await copyFile('CHANGELOG.md', 'docs/CHANGELOG.md');
121     // Format everything.
122     await execa('prettier', ['--ignore-path', 'none', '--write', 'docs']);
123   },