chore: remove jobs (#11136)
This commit is contained in:
parent
3171115085
commit
8a2b9f1280
93
Herebyfile.mjs
Normal file
93
Herebyfile.mjs
Normal file
@ -0,0 +1,93 @@
|
||||
import {copyFile, readFile, writeFile} from 'fs/promises';
|
||||
|
||||
import {execa} from 'execa';
|
||||
import {task} from 'hereby';
|
||||
import semver from 'semver';
|
||||
|
||||
import {docgen, spliceIntoSection} from '@puppeteer/docgen';
|
||||
|
||||
export const docsNgSchematicsTask = task({
|
||||
name: 'docs:ng-schematics',
|
||||
run: async () => {
|
||||
const readme = await readFile('packages/ng-schematics/README.md', 'utf-8');
|
||||
const index = await readFile('docs/integrations/ng-schematics.md', 'utf-8');
|
||||
await writeFile(
|
||||
'docs/integrations/ng-schematics.md',
|
||||
index.replace('# API Reference\n', readme)
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
/**
|
||||
* This logic should match the one in `website/docusaurus.config.js`.
|
||||
*/
|
||||
function getApiUrl(version) {
|
||||
if (semver.gte(version, '19.3.0')) {
|
||||
return `https://github.com/puppeteer/puppeteer/blob/puppeteer-${version}/docs/api/index.md`;
|
||||
} else if (semver.gte(version, '15.3.0')) {
|
||||
return `https://github.com/puppeteer/puppeteer/blob/${version}/docs/api/index.md`;
|
||||
} else {
|
||||
return `https://github.com/puppeteer/puppeteer/blob/${version}/docs/api.md`;
|
||||
}
|
||||
}
|
||||
|
||||
export const docsChromiumSupportTask = task({
|
||||
name: 'docs:chromium-support',
|
||||
run: async () => {
|
||||
const content = await readFile('docs/chromium-support.md', {
|
||||
encoding: 'utf8',
|
||||
});
|
||||
const {versionsPerRelease} = await import('./versions.js');
|
||||
const buffer = [];
|
||||
for (const [chromiumVersion, puppeteerVersion] of versionsPerRelease) {
|
||||
if (puppeteerVersion === 'NEXT') {
|
||||
continue;
|
||||
}
|
||||
if (semver.gte(puppeteerVersion, '20.0.0')) {
|
||||
buffer.push(
|
||||
` * [Chrome for Testing](https://goo.gle/chrome-for-testing) ${chromiumVersion} - [Puppeteer ${puppeteerVersion}](${getApiUrl(
|
||||
puppeteerVersion
|
||||
)})`
|
||||
);
|
||||
} else {
|
||||
buffer.push(
|
||||
` * Chromium ${chromiumVersion} - [Puppeteer ${puppeteerVersion}](${getApiUrl(
|
||||
puppeteerVersion
|
||||
)})`
|
||||
);
|
||||
}
|
||||
}
|
||||
await writeFile(
|
||||
'docs/chromium-support.md',
|
||||
spliceIntoSection('version', content, buffer.join('\n'))
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
export const docsTask = task({
|
||||
name: 'docs',
|
||||
dependencies: [docsNgSchematicsTask, docsChromiumSupportTask],
|
||||
run: async () => {
|
||||
// Copy main page.
|
||||
await copyFile('README.md', 'docs/index.md');
|
||||
|
||||
// Generate documentation
|
||||
for (const [name, folder] of [
|
||||
['browsers', 'browsers-api'],
|
||||
['puppeteer', 'api'],
|
||||
]) {
|
||||
docgen(`docs/${name}.api.json`, `docs/${folder}`);
|
||||
}
|
||||
|
||||
// Update main @puppeteer/browsers page.
|
||||
const readme = await readFile('packages/browsers/README.md', 'utf-8');
|
||||
const index = await readFile('docs/browsers-api/index.md', 'utf-8');
|
||||
await writeFile(
|
||||
'docs/browsers-api/index.md',
|
||||
index.replace('# API Reference', readme)
|
||||
);
|
||||
|
||||
// Format everything.
|
||||
await execa('prettier', ['--ignore-path', 'none', '--write', 'docs']);
|
||||
},
|
||||
});
|
@ -4,26 +4,26 @@ The following versions of Chromium are supported, mapped to Puppeteer version:
|
||||
|
||||
<!-- version-start -->
|
||||
|
||||
- [Chrome for Testing](https://goo.gle/chrome-for-testing) 117.0.5938.149 - [Puppeteer v21.3.7](https://pptr.dev/21.3.7)
|
||||
- [Chrome for Testing](https://goo.gle/chrome-for-testing) 117.0.5938.92 - [Puppeteer v21.3.2](https://pptr.dev/21.3.2)
|
||||
- [Chrome for Testing](https://goo.gle/chrome-for-testing) 117.0.5938.62 - [Puppeteer v21.3.0](https://pptr.dev/21.3.0)
|
||||
- [Chrome for Testing](https://goo.gle/chrome-for-testing) 116.0.5845.96 - [Puppeteer v21.1.0](https://pptr.dev/21.1.0)
|
||||
- [Chrome for Testing](https://goo.gle/chrome-for-testing) 115.0.5790.170 - [Puppeteer v21.0.2](https://pptr.dev/21.0.2)
|
||||
- [Chrome for Testing](https://goo.gle/chrome-for-testing) 115.0.5790.102 - [Puppeteer v21.0.0](https://pptr.dev/21.0.0)
|
||||
- [Chrome for Testing](https://goo.gle/chrome-for-testing) 115.0.5790.98 - [Puppeteer v20.9.0](https://pptr.dev/20.9.0)
|
||||
- [Chrome for Testing](https://goo.gle/chrome-for-testing) 114.0.5735.133 - [Puppeteer v20.7.2](https://pptr.dev/20.7.2)
|
||||
- [Chrome for Testing](https://goo.gle/chrome-for-testing) 114.0.5735.90 - [Puppeteer v20.6.0](https://pptr.dev/20.6.0)
|
||||
- [Chrome for Testing](https://goo.gle/chrome-for-testing) 113.0.5672.63 - [Puppeteer v20.1.0](https://pptr.dev/20.1.0)
|
||||
- [Chrome for Testing](https://goo.gle/chrome-for-testing) 112.0.5615.121 - [Puppeteer v20.0.0](https://pptr.dev/20.0.0)
|
||||
- Chromium 112.0.5614.0 - [Puppeteer v19.8.0](https://github.com/puppeteer/puppeteer/blob/v19.8.0/docs/api/index.md)
|
||||
- Chromium 111.0.5556.0 - [Puppeteer v19.7.0](https://github.com/puppeteer/puppeteer/blob/v19.7.0/docs/api/index.md)
|
||||
- Chromium 110.0.5479.0 - [Puppeteer v19.6.0](https://github.com/puppeteer/puppeteer/blob/v19.6.0/docs/api/index.md)
|
||||
- Chromium 109.0.5412.0 - [Puppeteer v19.4.0](https://github.com/puppeteer/puppeteer/blob/v19.4.0/docs/api/index.md)
|
||||
- [Chrome for Testing](https://goo.gle/chrome-for-testing) 117.0.5938.149 - [Puppeteer v21.3.7](https://github.com/puppeteer/puppeteer/blob/puppeteer-v21.3.7/docs/api/index.md)
|
||||
- [Chrome for Testing](https://goo.gle/chrome-for-testing) 117.0.5938.92 - [Puppeteer v21.3.2](https://github.com/puppeteer/puppeteer/blob/puppeteer-v21.3.2/docs/api/index.md)
|
||||
- [Chrome for Testing](https://goo.gle/chrome-for-testing) 117.0.5938.62 - [Puppeteer v21.3.0](https://github.com/puppeteer/puppeteer/blob/puppeteer-v21.3.0/docs/api/index.md)
|
||||
- [Chrome for Testing](https://goo.gle/chrome-for-testing) 116.0.5845.96 - [Puppeteer v21.1.0](https://github.com/puppeteer/puppeteer/blob/puppeteer-v21.1.0/docs/api/index.md)
|
||||
- [Chrome for Testing](https://goo.gle/chrome-for-testing) 115.0.5790.170 - [Puppeteer v21.0.2](https://github.com/puppeteer/puppeteer/blob/puppeteer-v21.0.2/docs/api/index.md)
|
||||
- [Chrome for Testing](https://goo.gle/chrome-for-testing) 115.0.5790.102 - [Puppeteer v21.0.0](https://github.com/puppeteer/puppeteer/blob/puppeteer-v21.0.0/docs/api/index.md)
|
||||
- [Chrome for Testing](https://goo.gle/chrome-for-testing) 115.0.5790.98 - [Puppeteer v20.9.0](https://github.com/puppeteer/puppeteer/blob/puppeteer-v20.9.0/docs/api/index.md)
|
||||
- [Chrome for Testing](https://goo.gle/chrome-for-testing) 114.0.5735.133 - [Puppeteer v20.7.2](https://github.com/puppeteer/puppeteer/blob/puppeteer-v20.7.2/docs/api/index.md)
|
||||
- [Chrome for Testing](https://goo.gle/chrome-for-testing) 114.0.5735.90 - [Puppeteer v20.6.0](https://github.com/puppeteer/puppeteer/blob/puppeteer-v20.6.0/docs/api/index.md)
|
||||
- [Chrome for Testing](https://goo.gle/chrome-for-testing) 113.0.5672.63 - [Puppeteer v20.1.0](https://github.com/puppeteer/puppeteer/blob/puppeteer-v20.1.0/docs/api/index.md)
|
||||
- [Chrome for Testing](https://goo.gle/chrome-for-testing) 112.0.5615.121 - [Puppeteer v20.0.0](https://github.com/puppeteer/puppeteer/blob/puppeteer-v20.0.0/docs/api/index.md)
|
||||
- Chromium 112.0.5614.0 - [Puppeteer v19.8.0](https://github.com/puppeteer/puppeteer/blob/puppeteer-v19.8.0/docs/api/index.md)
|
||||
- Chromium 111.0.5556.0 - [Puppeteer v19.7.0](https://github.com/puppeteer/puppeteer/blob/puppeteer-v19.7.0/docs/api/index.md)
|
||||
- Chromium 110.0.5479.0 - [Puppeteer v19.6.0](https://github.com/puppeteer/puppeteer/blob/puppeteer-v19.6.0/docs/api/index.md)
|
||||
- Chromium 109.0.5412.0 - [Puppeteer v19.4.0](https://github.com/puppeteer/puppeteer/blob/puppeteer-v19.4.0/docs/api/index.md)
|
||||
- Chromium 108.0.5351.0 - [Puppeteer v19.2.0](https://github.com/puppeteer/puppeteer/blob/v19.2.0/docs/api/index.md)
|
||||
- Chromium 107.0.5296.0 - [Puppeteer v18.1.0](https://github.com/puppeteer/puppeteer/blob/v18.1.0/docs/api/index.md)
|
||||
- Chromium 106.0.5249.0 - [Puppeteer v17.1.0](https://github.com/puppeteer/puppeteer/blob/v17.1.0/docs/api/index.md)
|
||||
- Chromium 105.0.5173.0 - [Puppeteer v15.5.0](https://github.com/puppeteer/puppeteer/blob/v15.5.0/docs/api/index.md)
|
||||
- Chromium 104.0.5109.0 - Puppeteer v15.1.0
|
||||
- Chromium 104.0.5109.0 - [Puppeteer v15.1.0](https://github.com/puppeteer/puppeteer/blob/v15.1.0/docs/api.md)
|
||||
- Chromium 103.0.5059.0 - [Puppeteer v14.2.0](https://github.com/puppeteer/puppeteer/blob/v14.2.0/docs/api.md)
|
||||
- Chromium 102.0.5002.0 - [Puppeteer v14.0.0](https://github.com/puppeteer/puppeteer/blob/v14.0.0/docs/api.md)
|
||||
- Chromium 101.0.4950.0 - [Puppeteer v13.6.0](https://github.com/puppeteer/puppeteer/blob/v13.6.0/docs/api.md)
|
||||
|
990
package-lock.json
generated
990
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
15
package.json
15
package.json
@ -7,12 +7,11 @@
|
||||
},
|
||||
"scripts": {
|
||||
"build": "wireit",
|
||||
"build:docs": "wireit",
|
||||
"check:pinned-deps": "tsx tools/ensure-pinned-deps",
|
||||
"check": "npm run check --workspaces --if-present && run-p check:*",
|
||||
"clean": "npm run clean --workspaces --if-present",
|
||||
"debug": "mocha --inspect-brk",
|
||||
"docs": "run-s build:docs generate:markdown",
|
||||
"docs": "wireit",
|
||||
"format:eslint": "eslint --ext js --ext ts --fix .",
|
||||
"format:prettier": "prettier --write .",
|
||||
"format:expectations": "node tools/sort-test-expectations.js",
|
||||
@ -52,11 +51,13 @@
|
||||
"./test/installation:build"
|
||||
]
|
||||
},
|
||||
"build:docs": {
|
||||
"docs": {
|
||||
"command": "hereby docs",
|
||||
"dependencies": [
|
||||
"./packages/browsers:build:docs",
|
||||
"./packages/puppeteer:build:docs",
|
||||
"./packages/puppeteer-core:build:docs"
|
||||
"./packages/puppeteer-core:build:docs",
|
||||
"./tools/docgen:build"
|
||||
]
|
||||
},
|
||||
"doctest": {
|
||||
@ -115,10 +116,9 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@actions/core": "1.10.1",
|
||||
"@microsoft/api-documenter": "7.23.9",
|
||||
"@microsoft/api-extractor": "7.38.0",
|
||||
"@microsoft/api-extractor-model": "7.28.2",
|
||||
"@pptr/testserver": "file:packages/testserver",
|
||||
"@puppeteer/docgen": "file:tools/docgen",
|
||||
"@prettier/sync": "0.3.0",
|
||||
"@types/debug": "4.1.9",
|
||||
"@types/diff": "5.0.5",
|
||||
@ -147,6 +147,8 @@
|
||||
"eslint-import-resolver-typescript": "3.6.1",
|
||||
"eslint-plugin-import": "2.28.1",
|
||||
"eslint-plugin-mocha": "10.2.0",
|
||||
"execa": "8.0.1",
|
||||
"hereby": "1.8.7",
|
||||
"eslint-plugin-prettier": "5.0.1",
|
||||
"eslint-plugin-rulesdir": "0.2.2",
|
||||
"eslint-plugin-tsdoc": "0.2.17",
|
||||
@ -188,6 +190,7 @@
|
||||
"test/installation",
|
||||
"tools/eslint",
|
||||
"tools/doctest",
|
||||
"tools/docgen",
|
||||
"tools/mocha-runner"
|
||||
]
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
import {mkdir, readFile, writeFile} from 'fs/promises';
|
||||
import {mkdir, readFile, readdir, writeFile} from 'fs/promises';
|
||||
import {join} from 'path/posix';
|
||||
|
||||
import esbuild from 'esbuild';
|
||||
import {execa} from 'execa';
|
||||
@ -38,7 +39,7 @@ export const generateInjectedTask = task({
|
||||
entryPoints: ['src/injected/injected.ts'],
|
||||
bundle: true,
|
||||
format: 'cjs',
|
||||
target: 'chrome117',
|
||||
target: ['chrome117', 'firefox118'],
|
||||
minify: true,
|
||||
write: false,
|
||||
});
|
||||
@ -80,16 +81,23 @@ export const buildTask = task({
|
||||
name: 'build',
|
||||
dependencies: [buildTscTask],
|
||||
run: async () => {
|
||||
const packages = ['mitt', 'rxjs'];
|
||||
const formats = ['esm', 'cjs'];
|
||||
const packages = (await readdir('third_party', {withFileTypes: true}))
|
||||
.filter(dirent => {
|
||||
return dirent.isDirectory();
|
||||
})
|
||||
.map(({name}) => {
|
||||
return name;
|
||||
});
|
||||
const builders = [];
|
||||
for (const name of packages) {
|
||||
for (const format of formats) {
|
||||
const filePath = `lib/${format}/third_party/${name}/${name}.js`;
|
||||
for (const format of formats) {
|
||||
const folder = join('lib', format, 'third_party');
|
||||
for (const name of packages) {
|
||||
const path = join(folder, name, `${name}.js`);
|
||||
builders.push(
|
||||
await esbuild.build({
|
||||
entryPoints: [filePath],
|
||||
outfile: filePath,
|
||||
entryPoints: [path],
|
||||
outfile: path,
|
||||
bundle: true,
|
||||
allowOverwrite: true,
|
||||
format,
|
||||
|
@ -126,8 +126,6 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "18.17.15",
|
||||
"execa": "8.0.1",
|
||||
"hereby": "1.8.7",
|
||||
"mitt": "3.0.1",
|
||||
"parsel-js": "1.1.2",
|
||||
"rxjs": "7.8.1"
|
||||
|
@ -5,9 +5,11 @@
|
||||
|
||||
import {writeFile, mkdir, copyFile} from 'fs/promises';
|
||||
import {dirname, join} from 'path';
|
||||
import semver from 'semver';
|
||||
import {fileURLToPath} from 'url';
|
||||
|
||||
import core from '@actions/core';
|
||||
import semver from 'semver';
|
||||
|
||||
import packageJson from '../packages/puppeteer-core/package.json' assert {type: 'json'};
|
||||
|
||||
const codifyAndJoinValues = values => {
|
||||
@ -79,7 +81,6 @@ This issue has an invalid Puppeteer version: \`${value}\`. Versions must follow
|
||||
|
||||
(async () => {
|
||||
let input = '';
|
||||
// @ts-expect-error: `iterator` is new and experimental.
|
||||
for await (const chunk of process.stdin.iterator({
|
||||
destroyOnReturn: false,
|
||||
})) {
|
||||
|
@ -19,7 +19,6 @@ import fs from 'fs';
|
||||
/**
|
||||
* Calls chmod with the mode in argv[2] on paths in argv[3...length-1].
|
||||
*/
|
||||
|
||||
const mode = process.argv[2];
|
||||
|
||||
for (let i = 3; i < process.argv.length; i++) {
|
||||
|
32
tools/docgen/package.json
Normal file
32
tools/docgen/package.json
Normal file
@ -0,0 +1,32 @@
|
||||
{
|
||||
"name": "@puppeteer/docgen",
|
||||
"version": "0.1.0",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"main": "./lib/docgen.js",
|
||||
"description": "Documentation generator for Puppeteer",
|
||||
"license": "Apache-2.0",
|
||||
"scripts": {
|
||||
"build": "wireit",
|
||||
"clean": "../clean.js"
|
||||
},
|
||||
"wireit": {
|
||||
"build": {
|
||||
"command": "tsc -b",
|
||||
"clean": "if-file-deleted",
|
||||
"files": [
|
||||
"src/**"
|
||||
],
|
||||
"output": [
|
||||
"lib/**",
|
||||
"tsconfig.tsbuildinfo"
|
||||
]
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"@microsoft/api-documenter": "7.23.9",
|
||||
"@microsoft/api-extractor-model": "7.28.2",
|
||||
"@microsoft/tsdoc": "0.14.2",
|
||||
"@rushstack/node-core-library": "3.61.0"
|
||||
}
|
||||
}
|
@ -23,22 +23,22 @@
|
||||
|
||||
import * as path from 'path';
|
||||
|
||||
import type {DocumenterConfig} from '@microsoft/api-documenter/lib/documenters/DocumenterConfig';
|
||||
import {CustomMarkdownEmitter} from '@microsoft/api-documenter/lib/markdown/CustomMarkdownEmitter';
|
||||
import {CustomDocNodes} from '@microsoft/api-documenter/lib/nodes/CustomDocNodeKind';
|
||||
import {DocEmphasisSpan} from '@microsoft/api-documenter/lib/nodes/DocEmphasisSpan';
|
||||
import {DocHeading} from '@microsoft/api-documenter/lib/nodes/DocHeading';
|
||||
import {DocNoteBox} from '@microsoft/api-documenter/lib/nodes/DocNoteBox';
|
||||
import {DocTable} from '@microsoft/api-documenter/lib/nodes/DocTable';
|
||||
import {DocTableCell} from '@microsoft/api-documenter/lib/nodes/DocTableCell';
|
||||
import {DocTableRow} from '@microsoft/api-documenter/lib/nodes/DocTableRow';
|
||||
import {MarkdownDocumenterAccessor} from '@microsoft/api-documenter/lib/plugin/MarkdownDocumenterAccessor';
|
||||
import type {DocumenterConfig} from '@microsoft/api-documenter/lib/documenters/DocumenterConfig.js';
|
||||
import {CustomMarkdownEmitter} from '@microsoft/api-documenter/lib/markdown/CustomMarkdownEmitter.js';
|
||||
import {CustomDocNodes} from '@microsoft/api-documenter/lib/nodes/CustomDocNodeKind.js';
|
||||
import {DocEmphasisSpan} from '@microsoft/api-documenter/lib/nodes/DocEmphasisSpan.js';
|
||||
import {DocHeading} from '@microsoft/api-documenter/lib/nodes/DocHeading.js';
|
||||
import {DocNoteBox} from '@microsoft/api-documenter/lib/nodes/DocNoteBox.js';
|
||||
import {DocTable} from '@microsoft/api-documenter/lib/nodes/DocTable.js';
|
||||
import {DocTableCell} from '@microsoft/api-documenter/lib/nodes/DocTableCell.js';
|
||||
import {DocTableRow} from '@microsoft/api-documenter/lib/nodes/DocTableRow.js';
|
||||
import {MarkdownDocumenterAccessor} from '@microsoft/api-documenter/lib/plugin/MarkdownDocumenterAccessor.js';
|
||||
import {
|
||||
type IMarkdownDocumenterFeatureOnBeforeWritePageArgs,
|
||||
MarkdownDocumenterFeatureContext,
|
||||
} from '@microsoft/api-documenter/lib/plugin/MarkdownDocumenterFeature';
|
||||
import {PluginLoader} from '@microsoft/api-documenter/lib/plugin/PluginLoader';
|
||||
import {Utilities} from '@microsoft/api-documenter/lib/utils/Utilities';
|
||||
} from '@microsoft/api-documenter/lib/plugin/MarkdownDocumenterFeature.js';
|
||||
import {PluginLoader} from '@microsoft/api-documenter/lib/plugin/PluginLoader.js';
|
||||
import {Utilities} from '@microsoft/api-documenter/lib/utils/Utilities.js';
|
||||
import {
|
||||
ApiClass,
|
||||
ApiDeclaredItem,
|
@ -18,7 +18,7 @@ import {ApiModel} from '@microsoft/api-extractor-model';
|
||||
|
||||
import {MarkdownDocumenter} from './custom_markdown_documenter.js';
|
||||
|
||||
export const generateDocs = (jsonPath: string, outputDir: string): void => {
|
||||
export function docgen(jsonPath: string, outputDir: string): void {
|
||||
const apiModel = new ApiModel();
|
||||
apiModel.loadPackage(jsonPath);
|
||||
|
||||
@ -28,4 +28,21 @@ export const generateDocs = (jsonPath: string, outputDir: string): void => {
|
||||
outputFolder: outputDir,
|
||||
});
|
||||
markdownDocumenter.generateFiles();
|
||||
};
|
||||
}
|
||||
|
||||
export function spliceIntoSection(
|
||||
sectionName: string,
|
||||
content: string,
|
||||
sectionContent: string
|
||||
): string {
|
||||
const lines = content.split('\n');
|
||||
const offset =
|
||||
lines.findIndex(line => {
|
||||
return line.includes(`<!-- ${sectionName}-start -->`);
|
||||
}) + 1;
|
||||
const limit = lines.slice(offset).findIndex(line => {
|
||||
return line.includes(`<!-- ${sectionName}-end -->`);
|
||||
});
|
||||
lines.splice(offset, limit, ...sectionContent.split('\n'));
|
||||
return lines.join('\n');
|
||||
}
|
11
tools/docgen/tsconfig.json
Normal file
11
tools/docgen/tsconfig.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"extends": "../../tsconfig.base.json",
|
||||
"compilerOptions": {
|
||||
"rootDir": "./src",
|
||||
"outDir": "./lib",
|
||||
"sourceMap": true,
|
||||
"declaration": false,
|
||||
"declarationMap": false,
|
||||
"composite": false
|
||||
}
|
||||
}
|
@ -31,6 +31,7 @@ import {readFile} from 'node:fs/promises';
|
||||
import {createRequire} from 'node:module';
|
||||
|
||||
import actions from '@actions/core';
|
||||
|
||||
import {computeExecutablePath, install} from '@puppeteer/browsers';
|
||||
|
||||
const require = createRequire(import.meta.url);
|
||||
|
@ -34,6 +34,9 @@ const allDeps = {...devDependencies};
|
||||
const invalidDeps = new Map<string, string>();
|
||||
|
||||
for (const [depKey, depValue] of Object.entries(allDeps)) {
|
||||
if (depValue.startsWith('file:')) {
|
||||
continue;
|
||||
}
|
||||
if (LOCAL_PACKAGE_NAMES.includes(depKey)) {
|
||||
continue;
|
||||
}
|
||||
|
@ -1,174 +0,0 @@
|
||||
/**
|
||||
* Copyright 2022 Google Inc. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {copyFile, readFile, rm, writeFile} from 'fs/promises';
|
||||
import {join, resolve} from 'path';
|
||||
import {chdir} from 'process';
|
||||
|
||||
import semver from 'semver';
|
||||
|
||||
import {generateDocs} from './internal/custom_markdown_action.js';
|
||||
import {job} from './internal/job.js';
|
||||
import {spawnAndLog} from './internal/util.js';
|
||||
|
||||
chdir(resolve(join(__dirname, '..')));
|
||||
|
||||
function getOffsetAndLimit(
|
||||
sectionName: string,
|
||||
lines: string[]
|
||||
): [offset: number, limit: number] {
|
||||
const offset =
|
||||
lines.findIndex(line => {
|
||||
return line.includes(`<!-- ${sectionName}-start -->`);
|
||||
}) + 1;
|
||||
const limit = lines.slice(offset).findIndex(line => {
|
||||
return line.includes(`<!-- ${sectionName}-end -->`);
|
||||
});
|
||||
return [offset, limit];
|
||||
}
|
||||
|
||||
function spliceIntoSection(
|
||||
sectionName: string,
|
||||
content: string,
|
||||
sectionContent: string
|
||||
): string {
|
||||
const lines = content.split('\n');
|
||||
const [offset, limit] = getOffsetAndLimit(sectionName, lines);
|
||||
lines.splice(offset, limit, ...sectionContent.split('\n'));
|
||||
return lines.join('\n');
|
||||
}
|
||||
|
||||
(async () => {
|
||||
const copyMain = job('Copy main page', async ({inputs, outputs}) => {
|
||||
await copyFile(inputs[0]!, outputs[0]!);
|
||||
})
|
||||
.inputs(['README.md'])
|
||||
.outputs(['docs/index.md'])
|
||||
.build();
|
||||
|
||||
// Chrome Versions
|
||||
const updateSupportedList = job(
|
||||
'Update the Chrome supported list',
|
||||
async ({inputs, outputs}) => {
|
||||
let content = await readFile(inputs[2]!, {encoding: 'utf8'});
|
||||
const versionModulePath = join('..', inputs[0]!);
|
||||
const {versionsPerRelease} = await import(versionModulePath);
|
||||
const versionsArchived = JSON.parse(await readFile(inputs[1]!, 'utf8'));
|
||||
|
||||
// Generate versions
|
||||
const buffer: string[] = [];
|
||||
for (const [chromiumVersion, puppeteerVersion] of versionsPerRelease) {
|
||||
if (puppeteerVersion === 'NEXT') {
|
||||
continue;
|
||||
}
|
||||
if (versionsArchived.includes(puppeteerVersion.substring(1))) {
|
||||
if (semver.gte(puppeteerVersion, '20.0.0')) {
|
||||
buffer.push(
|
||||
` * [Chrome for Testing](https://goo.gle/chrome-for-testing) ${chromiumVersion} - [Puppeteer ${puppeteerVersion}](https://pptr.dev/${puppeteerVersion.slice(
|
||||
1
|
||||
)})`
|
||||
);
|
||||
} else {
|
||||
buffer.push(
|
||||
` * Chromium ${chromiumVersion} - [Puppeteer ${puppeteerVersion}](https://github.com/puppeteer/puppeteer/blob/${puppeteerVersion}/docs/api/index.md)`
|
||||
);
|
||||
}
|
||||
} else if (semver.lt(puppeteerVersion, '15.0.0')) {
|
||||
buffer.push(
|
||||
` * Chromium ${chromiumVersion} - [Puppeteer ${puppeteerVersion}](https://github.com/puppeteer/puppeteer/blob/${puppeteerVersion}/docs/api.md)`
|
||||
);
|
||||
} else if (semver.gte(puppeteerVersion, '15.3.0')) {
|
||||
buffer.push(
|
||||
` * [Chrome for Testing](https://goo.gle/chrome-for-testing) ${chromiumVersion} - [Puppeteer ${puppeteerVersion}](https://pptr.dev/${puppeteerVersion.slice(
|
||||
1
|
||||
)})`
|
||||
);
|
||||
} else {
|
||||
buffer.push(
|
||||
` * Chromium ${chromiumVersion} - Puppeteer ${puppeteerVersion}`
|
||||
);
|
||||
}
|
||||
}
|
||||
content = spliceIntoSection('version', content, buffer.join('\n'));
|
||||
|
||||
await writeFile(outputs[0]!, content);
|
||||
}
|
||||
)
|
||||
.inputs([
|
||||
'versions.js',
|
||||
'website/versionsArchived.json',
|
||||
'docs/chromium-support.md',
|
||||
])
|
||||
.outputs(['docs/chromium-support.md'])
|
||||
.build();
|
||||
|
||||
const copyNgSchematics = job(
|
||||
'Copy @puppeteer/ng-schematics main page',
|
||||
async ({inputs, outputs}) => {
|
||||
await copyFile(inputs[0]!, outputs[0]!);
|
||||
}
|
||||
)
|
||||
.inputs(['packages/ng-schematics/README.md'])
|
||||
.outputs(['docs/integrations/ng-schematics.md'])
|
||||
.build();
|
||||
|
||||
await Promise.all([copyMain, updateSupportedList, copyNgSchematics]);
|
||||
|
||||
// Generate documentation
|
||||
const puppeteerDocs = job(
|
||||
'Generate Puppeteer API markdown',
|
||||
async ({inputs, outputs}) => {
|
||||
await rm(outputs[0]!, {recursive: true, force: true});
|
||||
generateDocs(inputs[0]!, outputs[0]!);
|
||||
spawnAndLog('prettier', '--ignore-path', 'none', '--write', 'docs');
|
||||
}
|
||||
)
|
||||
.inputs([
|
||||
'docs/puppeteer.api.json',
|
||||
'tools/internal/custom_markdown_documenter.ts',
|
||||
])
|
||||
.outputs(['docs/api'])
|
||||
.build();
|
||||
|
||||
const browsersDocs = job(
|
||||
'Generate @puppeteer/browsers API markdown',
|
||||
async ({inputs, outputs}) => {
|
||||
await rm(outputs[0]!, {recursive: true, force: true});
|
||||
generateDocs(inputs[0]!, outputs[0]!);
|
||||
spawnAndLog('prettier', '--ignore-path', 'none', '--write', 'docs');
|
||||
}
|
||||
)
|
||||
.inputs([
|
||||
'docs/browsers.api.json',
|
||||
'tools/internal/custom_markdown_documenter.ts',
|
||||
])
|
||||
.outputs(['docs/browsers-api'])
|
||||
.build();
|
||||
|
||||
await Promise.all([puppeteerDocs, browsersDocs]);
|
||||
|
||||
await job(
|
||||
'Update main @puppeteer/browsers page',
|
||||
async ({inputs, outputs}) => {
|
||||
const readme = await readFile(inputs[1]!, 'utf-8');
|
||||
const index = await readFile(inputs[0]!, 'utf-8');
|
||||
await writeFile(outputs[0]!, index.replace('# API Reference\n', readme));
|
||||
}
|
||||
)
|
||||
.inputs(['docs/browsers-api/index.md', 'packages/browsers/README.md'])
|
||||
.outputs(['docs/browsers-api/index.md'])
|
||||
.build();
|
||||
})();
|
@ -21,6 +21,5 @@ import {dirname} from 'path';
|
||||
* Outputs the dummy package.json file to the path specified
|
||||
* by the first argument.
|
||||
*/
|
||||
|
||||
mkdirSync(dirname(process.argv[2]), {recursive: true});
|
||||
writeFileSync(process.argv[2], `{"type": "module"}`);
|
||||
|
@ -1,153 +0,0 @@
|
||||
import {createHash} from 'crypto';
|
||||
import {existsSync, type Stats} from 'fs';
|
||||
import {mkdir, readFile, stat, writeFile} from 'fs/promises';
|
||||
import {tmpdir} from 'os';
|
||||
import {dirname, join} from 'path';
|
||||
|
||||
import {hasMagic, globSync} from 'glob';
|
||||
|
||||
interface JobContext {
|
||||
name: string;
|
||||
inputs: string[];
|
||||
outputs: string[];
|
||||
}
|
||||
|
||||
class JobBuilder {
|
||||
#inputs: string[] = [];
|
||||
#outputs: string[] = [];
|
||||
#callback: (ctx: JobContext) => Promise<void>;
|
||||
#name: string;
|
||||
#value = '';
|
||||
#force = false;
|
||||
|
||||
constructor(name: string, callback: (ctx: JobContext) => Promise<void>) {
|
||||
this.#name = name;
|
||||
this.#callback = callback;
|
||||
}
|
||||
|
||||
get jobHash(): string {
|
||||
return createHash('sha256').update(this.#name).digest('hex');
|
||||
}
|
||||
|
||||
force() {
|
||||
this.#force = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
value(value: string) {
|
||||
this.#value = value;
|
||||
return this;
|
||||
}
|
||||
|
||||
inputs(inputs: string[]): JobBuilder {
|
||||
this.#inputs = inputs.flatMap(value => {
|
||||
if (hasMagic(value)) {
|
||||
return globSync(value);
|
||||
}
|
||||
return value;
|
||||
});
|
||||
return this;
|
||||
}
|
||||
|
||||
outputs(outputs: string[]): JobBuilder {
|
||||
if (!this.#name) {
|
||||
this.#name = outputs.join(' and ');
|
||||
}
|
||||
|
||||
this.#outputs = outputs;
|
||||
return this;
|
||||
}
|
||||
|
||||
async build(): Promise<void> {
|
||||
console.log(`Running job ${this.#name}...`);
|
||||
// For debugging.
|
||||
if (this.#force) {
|
||||
return await this.#run();
|
||||
}
|
||||
// In case we deleted an output file on purpose.
|
||||
if (!this.getOutputStats()) {
|
||||
return await this.#run();
|
||||
}
|
||||
// Run if the job has a value, but it changes.
|
||||
if (this.#value) {
|
||||
if (!(await this.isValueDifferent())) {
|
||||
return;
|
||||
}
|
||||
return await this.#run();
|
||||
}
|
||||
// Always run when there is no output.
|
||||
if (!this.#outputs.length) {
|
||||
return await this.#run();
|
||||
}
|
||||
// Make-like comparator.
|
||||
if (!(await this.areInputsNewer())) {
|
||||
return;
|
||||
}
|
||||
return await this.#run();
|
||||
}
|
||||
|
||||
async isValueDifferent(): Promise<boolean> {
|
||||
const file = join(tmpdir(), `puppeteer/${this.jobHash}.txt`);
|
||||
await mkdir(dirname(file), {recursive: true});
|
||||
if (!existsSync(file)) {
|
||||
await writeFile(file, this.#value);
|
||||
return true;
|
||||
}
|
||||
return this.#value !== (await readFile(file, 'utf8'));
|
||||
}
|
||||
|
||||
#outputStats?: Stats[];
|
||||
async getOutputStats(): Promise<Stats[] | undefined> {
|
||||
if (this.#outputStats) {
|
||||
return this.#outputStats;
|
||||
}
|
||||
try {
|
||||
this.#outputStats = await Promise.all(
|
||||
this.#outputs.map(output => {
|
||||
return stat(output);
|
||||
})
|
||||
);
|
||||
} catch {}
|
||||
return this.#outputStats;
|
||||
}
|
||||
|
||||
async areInputsNewer(): Promise<boolean> {
|
||||
const inputStats = await Promise.all(
|
||||
this.#inputs.map(input => {
|
||||
return stat(input);
|
||||
})
|
||||
);
|
||||
const outputStats = await this.getOutputStats();
|
||||
if (
|
||||
outputStats &&
|
||||
outputStats.reduce(reduceMinTime, Infinity) >
|
||||
inputStats.reduce(reduceMaxTime, 0)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
#run(): Promise<void> {
|
||||
return this.#callback({
|
||||
name: this.#name,
|
||||
inputs: this.#inputs,
|
||||
outputs: this.#outputs,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export const job = (
|
||||
name: string,
|
||||
callback: (ctx: JobContext) => Promise<void>
|
||||
): JobBuilder => {
|
||||
return new JobBuilder(name, callback);
|
||||
};
|
||||
|
||||
const reduceMaxTime = (time: number, stat: Stats) => {
|
||||
return time < stat.mtimeMs ? stat.mtimeMs : time;
|
||||
};
|
||||
|
||||
const reduceMinTime = (time: number, stat: Stats) => {
|
||||
return time > stat.mtimeMs ? stat.mtimeMs : time;
|
||||
};
|
@ -1,14 +0,0 @@
|
||||
import {spawnSync} from 'child_process';
|
||||
|
||||
export const spawnAndLog = (...args: string[]): void => {
|
||||
const {stdout, stderr} = spawnSync(args[0]!, args.slice(1), {
|
||||
encoding: 'utf-8',
|
||||
shell: true,
|
||||
});
|
||||
if (stdout) {
|
||||
console.log(stdout);
|
||||
}
|
||||
if (stderr) {
|
||||
console.error(stderr);
|
||||
}
|
||||
};
|
@ -19,12 +19,13 @@ import {writeFile, readFile} from 'fs/promises';
|
||||
import {promisify} from 'util';
|
||||
|
||||
import actions from '@actions/core';
|
||||
import {PUPPETEER_REVISIONS} from 'puppeteer-core/internal/revisions.js';
|
||||
import {SemVer} from 'semver';
|
||||
|
||||
import packageJson from '../packages/puppeteer-core/package.json' assert {type: 'json'};
|
||||
import {versionsPerRelease, lastMaintainedChromeVersion} from '../versions.js';
|
||||
|
||||
import {PUPPETEER_REVISIONS} from 'puppeteer-core/internal/revisions.js';
|
||||
|
||||
const execAsync = promisify(exec);
|
||||
|
||||
const CHROME_CURRENT_VERSION = PUPPETEER_REVISIONS.chrome;
|
||||
|
@ -21,12 +21,26 @@ const assert = require('assert');
|
||||
|
||||
const darkCodeTheme = require('prism-react-renderer/themes/dracula');
|
||||
const lightCodeTheme = require('prism-react-renderer/themes/github');
|
||||
const semver = require('semver');
|
||||
|
||||
const archivedVersions = require('./versionsArchived.json');
|
||||
|
||||
const DOC_ROUTE_BASE_PATH = '/';
|
||||
const DOC_PATH = '../docs';
|
||||
|
||||
/**
|
||||
* This logic should match the one in `Herebyfile.mjs`.
|
||||
*/
|
||||
function getApiUrl(version) {
|
||||
if (semver.gte(version, '19.3.0')) {
|
||||
return `https://github.com/puppeteer/puppeteer/blob/puppeteer-${version}/docs/api/index.md`;
|
||||
} else if (semver.gte(version, '15.3.0')) {
|
||||
return `https://github.com/puppeteer/puppeteer/blob/${version}/docs/api/index.md`;
|
||||
} else {
|
||||
return `https://github.com/puppeteer/puppeteer/blob/${version}/docs/api.md`;
|
||||
}
|
||||
}
|
||||
|
||||
/** @type {import('@docusaurus/types').Config} */
|
||||
const config = {
|
||||
title: 'Puppeteer',
|
||||
@ -283,18 +297,9 @@ const config = {
|
||||
value: '<b>Archived versions</b>',
|
||||
},
|
||||
...archivedVersions.map(version => {
|
||||
const parts = version.split('.').map(item => {
|
||||
return Number(item);
|
||||
});
|
||||
if (parts[0] <= 19 && parts[1] <= 2 && parts[2] <= 2) {
|
||||
return {
|
||||
label: version,
|
||||
href: `https://github.com/puppeteer/puppeteer/blob/v${version}/docs/api/index.md`,
|
||||
};
|
||||
}
|
||||
return {
|
||||
label: version,
|
||||
href: `https://github.com/puppeteer/puppeteer/blob/puppeteer-v${version}/docs/api/index.md`,
|
||||
href: getApiUrl(`v${version}`),
|
||||
};
|
||||
}),
|
||||
],
|
||||
|
@ -21,6 +21,7 @@
|
||||
"@mdx-js/react": "1.6.22",
|
||||
"clsx": "1.2.1",
|
||||
"prism-react-renderer": "1.3.5",
|
||||
"semver": "7.5.4",
|
||||
"react": "17.0.2",
|
||||
"react-dom": "17.0.2"
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user