mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
fix: process documentation during publishing (#8433)
This commit is contained in:
parent
54efc2c949
commit
d111d19f78
1
.github/release-please.yml
vendored
1
.github/release-please.yml
vendored
@ -1,4 +1,3 @@
|
|||||||
releaseType: node
|
releaseType: node
|
||||||
handleGHRelease: true
|
|
||||||
primaryBranch: main
|
primaryBranch: main
|
||||||
manifest: true
|
manifest: true
|
||||||
|
60
.github/workflows/publish.yml
vendored
60
.github/workflows/publish.yml
vendored
@ -3,10 +3,36 @@ name: Publish
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
tags:
|
tags:
|
||||||
- '*'
|
- v*
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
pre-publish:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
ref: main
|
||||||
|
- name: Install dependencies
|
||||||
|
run: npm install
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
node utils/generate_version_file.js
|
||||||
|
IS_PRE_RELEASE=1 npm run doc
|
||||||
|
- name: Configure git
|
||||||
|
run: |
|
||||||
|
git config --global user.name 'actions-bot'
|
||||||
|
git config --global user.email '<github-actions-bot@google.com>'
|
||||||
|
- name: Commit and push
|
||||||
|
run: |
|
||||||
|
git add -A
|
||||||
|
git commit -m "chore: freeze current version in code"
|
||||||
|
git push
|
||||||
|
|
||||||
publish:
|
publish:
|
||||||
|
needs: pre-publish
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
@ -17,6 +43,8 @@ jobs:
|
|||||||
run: npm install
|
run: npm install
|
||||||
- name: Build puppeteer
|
- name: Build puppeteer
|
||||||
run: npm run build
|
run: npm run build
|
||||||
|
- name: Generate release documentation
|
||||||
|
run: IS_RELEASE=1 npm run doc
|
||||||
- name: Publish puppeteer
|
- name: Publish puppeteer
|
||||||
env:
|
env:
|
||||||
NPM_TOKEN: ${{secrets.NPM_TOKEN_PUPPETEER}}
|
NPM_TOKEN: ${{secrets.NPM_TOKEN_PUPPETEER}}
|
||||||
@ -36,33 +64,3 @@ jobs:
|
|||||||
npm config set registry 'https://wombat-dressing-room.appspot.com/'
|
npm config set registry 'https://wombat-dressing-room.appspot.com/'
|
||||||
npm config set '//wombat-dressing-room.appspot.com/:_authToken' '${NPM_TOKEN}'
|
npm config set '//wombat-dressing-room.appspot.com/:_authToken' '${NPM_TOKEN}'
|
||||||
npm publish
|
npm publish
|
||||||
|
|
||||||
post-publish:
|
|
||||||
needs: publish
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
ref: main
|
|
||||||
- name: Append `-post` to version
|
|
||||||
id: post-version
|
|
||||||
run: |
|
|
||||||
npm version --no-git-tag-version --no-commit-hooks "$(jq -r .version ./package.json)-post"
|
|
||||||
echo ::set-output name=VERSION::$(jq -r .version ./package.json)
|
|
||||||
- name: Build
|
|
||||||
run: |
|
|
||||||
npm install
|
|
||||||
npm run build
|
|
||||||
npm run doc
|
|
||||||
- name: Configure git
|
|
||||||
run: |
|
|
||||||
git config --global user.name 'actions-bot'
|
|
||||||
git config --global user.email '<github-actions-bot@google.com>'
|
|
||||||
- name: Commit and push
|
|
||||||
run: |
|
|
||||||
git add -A
|
|
||||||
git commit -m "chore: bump version to ${{ steps.post-version.outputs.VERSION }}"
|
|
||||||
git push
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
. "$(dirname "$0")/_/husky.sh"
|
. "$(dirname "$0")/_/husky.sh"
|
||||||
|
|
||||||
npm run tsc && npm run eslint && npm run doc && npm run ensure-pinned-deps
|
npm run tsc && npm run eslint && npm run doc && npm run prettier && npm run ensure-pinned-deps
|
||||||
|
@ -14,3 +14,4 @@ CHANGELOG.md
|
|||||||
test/assets/
|
test/assets/
|
||||||
/.local-chromium/
|
/.local-chromium/
|
||||||
/.local-firefox/
|
/.local-firefox/
|
||||||
|
test-ts-types
|
||||||
|
@ -1,27 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright 2020 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
releaseCommitMessageFormat: 'chore(release): mark v{{currentTag}}',
|
|
||||||
skip: {
|
|
||||||
tag: true,
|
|
||||||
},
|
|
||||||
scripts: {
|
|
||||||
prerelease: 'node utils/remove_version_suffix.js',
|
|
||||||
postbump:
|
|
||||||
'node utils/generate_version_file.js && IS_RELEASE=true npm run doc && git add --update',
|
|
||||||
},
|
|
||||||
};
|
|
@ -312,17 +312,4 @@ By default, it will use the Chromium revision in `src/revisions.ts` from the `ma
|
|||||||
|
|
||||||
## Releasing to npm
|
## Releasing to npm
|
||||||
|
|
||||||
Releasing to npm consists of the following phases:
|
We use [release-please](https://github.com/googleapis/release-please) to automate releases. When a release should be done, check for the release PR in our [pull requests](https://github.com/puppeteer/puppeteer/pulls) and merge it.
|
||||||
|
|
||||||
1. Source Code: mark a release.
|
|
||||||
1. Run `npm run release`. (This automatically bumps the version number in `package.json`, populates the changelog, updates the docs, and creates a Git commit for the next step.)
|
|
||||||
1. Send a PR for the commit created in the previous step.
|
|
||||||
1. Make sure the PR passes **all checks**.
|
|
||||||
- **WHY**: there are linters in place that help to avoid unnecessary errors, e.g. [like this](https://github.com/puppeteer/puppeteer/pull/2446)
|
|
||||||
1. Merge the PR.
|
|
||||||
1. Once merged, publish the release notes from `CHANGELOG.md` using [GitHub’s “draft new release tag” option](https://github.com/puppeteer/puppeteer/releases/new).
|
|
||||||
- **NOTE**: tag names are prefixed with `'v'`, e.g. for version `1.4.0` the tag is `v1.4.0`.
|
|
||||||
1. As soon as the Git tag is created by completing the previous step, our CI automatically `npm publish`es the new releases for both the `puppeteer` and `puppeteer-core` packages.
|
|
||||||
1. Source Code: mark post-release.
|
|
||||||
1. Bump `package.json` version to the `-post` version, run `npm run doc` to update the “released APIs” section at the top of `docs/api.md` accordingly, and send a PR titled `'chore: bump version to vXXX.YYY.ZZZ-post'` ([example](https://github.com/puppeteer/puppeteer/pull/6808))
|
|
||||||
- **NOTE**: no other commits should be landed in-between release commit and bump commit.
|
|
||||||
|
22
README.md
22
README.md
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
<img src="https://user-images.githubusercontent.com/10379601/29446482-04f7036a-841f-11e7-9872-91d1fc2ea683.png" height="200" align="right">
|
<img src="https://user-images.githubusercontent.com/10379601/29446482-04f7036a-841f-11e7-9872-91d1fc2ea683.png" height="200" align="right">
|
||||||
|
|
||||||
###### [API](https://github.com/puppeteer/puppeteer/blob/v14.1.1/docs/api.md) | [FAQ](#faq) | [Contributing](https://github.com/puppeteer/puppeteer/blob/main/CONTRIBUTING.md) | [Troubleshooting](https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md)
|
###### [API](https://github.com/puppeteer/puppeteer/blob/main/docs/api.md) | [FAQ](#faq) | [Contributing](https://github.com/puppeteer/puppeteer/blob/main/CONTRIBUTING.md) | [Troubleshooting](https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md)
|
||||||
|
|
||||||
> Puppeteer is a Node library which provides a high-level API to control Chrome or Chromium over the [DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/). Puppeteer runs [headless](https://developers.google.com/web/updates/2017/04/headless-chrome) by default, but can be configured to run full (non-headless) Chrome or Chromium.
|
> Puppeteer is a Node library which provides a high-level API to control Chrome or Chromium over the [DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/). Puppeteer runs [headless](https://developers.google.com/web/updates/2017/04/headless-chrome) by default, but can be configured to run full (non-headless) Chrome or Chromium.
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ npm i puppeteer
|
|||||||
# or "yarn add puppeteer"
|
# or "yarn add puppeteer"
|
||||||
```
|
```
|
||||||
|
|
||||||
Note: When you install Puppeteer, it downloads a recent version of Chromium (~170MB Mac, ~282MB Linux, ~280MB Win) that is guaranteed to work with the API. To skip the download, download into another path, or download a different browser, see [Environment variables](https://github.com/puppeteer/puppeteer/blob/v14.1.1/docs/api.md#environment-variables).
|
Note: When you install Puppeteer, it downloads a recent version of Chromium (~170MB Mac, ~282MB Linux, ~280MB Win) that is guaranteed to work with the API. To skip the download, download into another path, or download a different browser, see [Environment variables](https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#environment-variables).
|
||||||
|
|
||||||
### puppeteer-core
|
### puppeteer-core
|
||||||
|
|
||||||
@ -63,7 +63,7 @@ Note: Prior to v1.18.1, Puppeteer required at least Node v6.4.0. Versions from v
|
|||||||
Node 8.9.0+. Starting from v3.0.0 Puppeteer starts to rely on Node 10.18.1+. All examples below use async/await which is only supported in Node v7.6.0 or greater.
|
Node 8.9.0+. Starting from v3.0.0 Puppeteer starts to rely on Node 10.18.1+. All examples below use async/await which is only supported in Node v7.6.0 or greater.
|
||||||
|
|
||||||
Puppeteer will be familiar to people using other browser testing frameworks. You create an instance
|
Puppeteer will be familiar to people using other browser testing frameworks. You create an instance
|
||||||
of `Browser`, open pages, and then manipulate them with [Puppeteer's API](https://github.com/puppeteer/puppeteer/blob/v14.1.1/docs/api.md#).
|
of `Browser`, open pages, and then manipulate them with [Puppeteer's API](https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#).
|
||||||
|
|
||||||
**Example** - navigating to https://example.com and saving a screenshot as _example.png_:
|
**Example** - navigating to https://example.com and saving a screenshot as _example.png_:
|
||||||
|
|
||||||
@ -88,7 +88,7 @@ Execute script on the command line
|
|||||||
node example.js
|
node example.js
|
||||||
```
|
```
|
||||||
|
|
||||||
Puppeteer sets an initial page size to 800×600px, which defines the screenshot size. The page size can be customized with [`Page.setViewport()`](https://github.com/puppeteer/puppeteer/blob/v14.1.1/docs/api.md#pagesetviewportviewport).
|
Puppeteer sets an initial page size to 800×600px, which defines the screenshot size. The page size can be customized with [`Page.setViewport()`](https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#pagesetviewportviewport).
|
||||||
|
|
||||||
**Example** - create a PDF.
|
**Example** - create a PDF.
|
||||||
|
|
||||||
@ -115,7 +115,7 @@ Execute script on the command line
|
|||||||
node hn.js
|
node hn.js
|
||||||
```
|
```
|
||||||
|
|
||||||
See [`Page.pdf()`](https://github.com/puppeteer/puppeteer/blob/v14.1.1/docs/api.md#pagepdfoptions) for more information about creating pdfs.
|
See [`Page.pdf()`](https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#pagepdfoptions) for more information about creating pdfs.
|
||||||
|
|
||||||
**Example** - evaluate script in the context of the page
|
**Example** - evaluate script in the context of the page
|
||||||
|
|
||||||
@ -150,7 +150,7 @@ Execute script on the command line
|
|||||||
node get-dimensions.js
|
node get-dimensions.js
|
||||||
```
|
```
|
||||||
|
|
||||||
See [`Page.evaluate()`](https://github.com/puppeteer/puppeteer/blob/v14.1.1/docs/api.md#pageevaluatepagefunction-args) for more information on `evaluate` and related methods like `evaluateOnNewDocument` and `exposeFunction`.
|
See [`Page.evaluate()`](https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#pageevaluatepagefunction-args) for more information on `evaluate` and related methods like `evaluateOnNewDocument` and `exposeFunction`.
|
||||||
|
|
||||||
<!-- [END getstarted] -->
|
<!-- [END getstarted] -->
|
||||||
|
|
||||||
@ -160,7 +160,7 @@ See [`Page.evaluate()`](https://github.com/puppeteer/puppeteer/blob/v14.1.1/docs
|
|||||||
|
|
||||||
**1. Uses Headless mode**
|
**1. Uses Headless mode**
|
||||||
|
|
||||||
Puppeteer launches Chromium in [headless mode](https://developers.google.com/web/updates/2017/04/headless-chrome). To launch a full version of Chromium, set the [`headless` option](https://github.com/puppeteer/puppeteer/blob/v14.1.1/docs/api.md#puppeteerlaunchoptions) when launching a browser:
|
Puppeteer launches Chromium in [headless mode](https://developers.google.com/web/updates/2017/04/headless-chrome). To launch a full version of Chromium, set the [`headless` option](https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#puppeteerlaunchoptions) when launching a browser:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const browser = await puppeteer.launch({ headless: false }); // default is true
|
const browser = await puppeteer.launch({ headless: false }); // default is true
|
||||||
@ -176,7 +176,7 @@ pass in the executable's path when creating a `Browser` instance:
|
|||||||
const browser = await puppeteer.launch({ executablePath: '/path/to/Chrome' });
|
const browser = await puppeteer.launch({ executablePath: '/path/to/Chrome' });
|
||||||
```
|
```
|
||||||
|
|
||||||
You can also use Puppeteer with Firefox Nightly (experimental support). See [`Puppeteer.launch()`](https://github.com/puppeteer/puppeteer/blob/v14.1.1/docs/api.md#puppeteerlaunchoptions) for more information.
|
You can also use Puppeteer with Firefox Nightly (experimental support). See [`Puppeteer.launch()`](https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#puppeteerlaunchoptions) for more information.
|
||||||
|
|
||||||
See [`this article`](https://www.howtogeek.com/202825/what%E2%80%99s-the-difference-between-chromium-and-chrome/) for a description of the differences between Chromium and Chrome. [`This article`](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/chromium_browser_vs_google_chrome.md) describes some differences for Linux users.
|
See [`this article`](https://www.howtogeek.com/202825/what%E2%80%99s-the-difference-between-chromium-and-chrome/) for a description of the differences between Chromium and Chrome. [`This article`](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/chromium_browser_vs_google_chrome.md) describes some differences for Linux users.
|
||||||
|
|
||||||
@ -188,7 +188,7 @@ Puppeteer creates its own browser user profile which it **cleans up on every run
|
|||||||
|
|
||||||
## Resources
|
## Resources
|
||||||
|
|
||||||
- [API Documentation](https://github.com/puppeteer/puppeteer/blob/v14.1.1/docs/api.md)
|
- [API Documentation](https://github.com/puppeteer/puppeteer/blob/main/docs/api.md)
|
||||||
- [Examples](https://github.com/puppeteer/puppeteer/tree/main/examples/)
|
- [Examples](https://github.com/puppeteer/puppeteer/tree/main/examples/)
|
||||||
- [Community list of Puppeteer resources](https://github.com/transitive-bullshit/awesome-puppeteer)
|
- [Community list of Puppeteer resources](https://github.com/transitive-bullshit/awesome-puppeteer)
|
||||||
|
|
||||||
@ -330,7 +330,7 @@ See [Contributing](https://github.com/puppeteer/puppeteer/blob/main/CONTRIBUTING
|
|||||||
|
|
||||||
Official Firefox support is currently experimental. The ongoing collaboration with Mozilla aims to support common end-to-end testing use cases, for which developers expect cross-browser coverage. The Puppeteer team needs input from users to stabilize Firefox support and to bring missing APIs to our attention.
|
Official Firefox support is currently experimental. The ongoing collaboration with Mozilla aims to support common end-to-end testing use cases, for which developers expect cross-browser coverage. The Puppeteer team needs input from users to stabilize Firefox support and to bring missing APIs to our attention.
|
||||||
|
|
||||||
From Puppeteer v2.1.0 onwards you can specify [`puppeteer.launch({product: 'firefox'})`](https://github.com/puppeteer/puppeteer/blob/v14.1.1/docs/api.md#puppeteerlaunchoptions) to run your Puppeteer scripts in Firefox Nightly, without any additional custom patches. While [an older experiment](https://www.npmjs.com/package/puppeteer-firefox) required a patched version of Firefox, [the current approach](https://wiki.mozilla.org/Remote) works with “stock” Firefox.
|
From Puppeteer v2.1.0 onwards you can specify [`puppeteer.launch({product: 'firefox'})`](https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#puppeteerlaunchoptions) to run your Puppeteer scripts in Firefox Nightly, without any additional custom patches. While [an older experiment](https://www.npmjs.com/package/puppeteer-firefox) required a patched version of Firefox, [the current approach](https://wiki.mozilla.org/Remote) works with “stock” Firefox.
|
||||||
|
|
||||||
We will continue to collaborate with other browser vendors to bring Puppeteer support to browsers such as Safari.
|
We will continue to collaborate with other browser vendors to bring Puppeteer support to browsers such as Safari.
|
||||||
This effort includes exploration of a standard for executing cross-browser commands (instead of relying on the non-standard DevTools Protocol used by Chrome).
|
This effort includes exploration of a standard for executing cross-browser commands (instead of relying on the non-standard DevTools Protocol used by Chrome).
|
||||||
@ -433,7 +433,7 @@ await page.evaluate(() => {
|
|||||||
|
|
||||||
You may find that Puppeteer does not behave as expected when controlling pages that incorporate audio and video. (For example, [video playback/screenshots is likely to fail](https://github.com/puppeteer/puppeteer/issues/291).) There are two reasons for this:
|
You may find that Puppeteer does not behave as expected when controlling pages that incorporate audio and video. (For example, [video playback/screenshots is likely to fail](https://github.com/puppeteer/puppeteer/issues/291).) There are two reasons for this:
|
||||||
|
|
||||||
- Puppeteer is bundled with Chromium — not Chrome — and so by default, it inherits all of [Chromium's media-related limitations](https://www.chromium.org/audio-video). This means that Puppeteer does not support licensed formats such as AAC or H.264. (However, it is possible to force Puppeteer to use a separately-installed version Chrome instead of Chromium via the [`executablePath` option to `puppeteer.launch`](https://github.com/puppeteer/puppeteer/blob/v14.1.1/docs/api.md#puppeteerlaunchoptions). You should only use this configuration if you need an official release of Chrome that supports these media formats.)
|
- Puppeteer is bundled with Chromium — not Chrome — and so by default, it inherits all of [Chromium's media-related limitations](https://www.chromium.org/audio-video). This means that Puppeteer does not support licensed formats such as AAC or H.264. (However, it is possible to force Puppeteer to use a separately-installed version Chrome instead of Chromium via the [`executablePath` option to `puppeteer.launch`](https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#puppeteerlaunchoptions). You should only use this configuration if you need an official release of Chrome that supports these media formats.)
|
||||||
- Since Puppeteer (in all configurations) controls a desktop version of Chromium/Chrome, features that are only supported by the mobile version of Chrome are not supported. This means that Puppeteer [does not support HTTP Live Streaming (HLS)](https://caniuse.com/#feat=http-live-streaming).
|
- Since Puppeteer (in all configurations) controls a desktop version of Chromium/Chrome, features that are only supported by the mobile version of Chrome are not supported. This means that Puppeteer [does not support HTTP Live Streaming (HLS)](https://caniuse.com/#feat=http-live-streaming).
|
||||||
|
|
||||||
#### Q: I am having trouble installing / running Puppeteer in my test environment. Where should I look for help?
|
#### Q: I am having trouble installing / running Puppeteer in my test environment. Where should I look for help?
|
||||||
|
@ -44,7 +44,7 @@
|
|||||||
"commitlint": "commitlint --from=HEAD~1",
|
"commitlint": "commitlint --from=HEAD~1",
|
||||||
"prettier": "prettier --check .",
|
"prettier": "prettier --check .",
|
||||||
"prettier-fix": "prettier --write .",
|
"prettier-fix": "prettier --write .",
|
||||||
"lint": "npm run eslint && npm run build && npm run doc && npm run prettier",
|
"lint": "npm run build && npm run eslint && npm run doc && npm run prettier",
|
||||||
"doc": "node utils/doclint/cli.js",
|
"doc": "node utils/doclint/cli.js",
|
||||||
"generate-api-docs-for-testing": "commonmark docs/api.md > docs/api.html",
|
"generate-api-docs-for-testing": "commonmark docs/api.md > docs/api.html",
|
||||||
"clean-lib": "rimraf lib",
|
"clean-lib": "rimraf lib",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"last-release-sha": "d4321e53c909c7ecf90f5f27d3a136cba176f40b",
|
|
||||||
"packages": {
|
"packages": {
|
||||||
".": {
|
".": {
|
||||||
"releaseType": "node",
|
"releaseType": "node",
|
||||||
|
@ -6,9 +6,6 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"compile": "../../node_modules/.bin/tsc"
|
"compile": "../../node_modules/.bin/tsc"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
|
||||||
"typescript": "4.2.4"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"puppeteer": "file:../../puppeteer.tgz"
|
"puppeteer": "file:../../puppeteer.tgz"
|
||||||
}
|
}
|
||||||
|
@ -6,9 +6,6 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"compile": "../../node_modules/.bin/tsc"
|
"compile": "../../node_modules/.bin/tsc"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
|
||||||
"typescript": "4.2.4"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"puppeteer": "file:../../puppeteer.tgz"
|
"puppeteer": "file:../../puppeteer.tgz"
|
||||||
}
|
}
|
||||||
|
@ -6,9 +6,6 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"compile": "../../node_modules/.bin/tsc"
|
"compile": "../../node_modules/.bin/tsc"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
|
||||||
"typescript": "4.2.4"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"puppeteer": "file:../../puppeteer.tgz"
|
"puppeteer": "file:../../puppeteer.tgz"
|
||||||
}
|
}
|
||||||
|
@ -6,9 +6,6 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"compile": "../../node_modules/.bin/tsc"
|
"compile": "../../node_modules/.bin/tsc"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
|
||||||
"typescript": "4.2.4"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"puppeteer": "file:../../puppeteer.tgz"
|
"puppeteer": "file:../../puppeteer.tgz"
|
||||||
}
|
}
|
||||||
|
@ -6,9 +6,6 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"compile": "../../node_modules/.bin/tsc"
|
"compile": "../../node_modules/.bin/tsc"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
|
||||||
"typescript": "4.2.4"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"puppeteer": "file:../../puppeteer.tgz"
|
"puppeteer": "file:../../puppeteer.tgz"
|
||||||
}
|
}
|
||||||
|
@ -6,9 +6,6 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"compile": "../../node_modules/.bin/tsc"
|
"compile": "../../node_modules/.bin/tsc"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
|
||||||
"typescript": "4.2.4"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"puppeteer": "file:../../puppeteer.tgz"
|
"puppeteer": "file:../../puppeteer.tgz"
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,7 @@ const YELLOW_COLOR = '\x1b[33m';
|
|||||||
const RESET_COLOR = '\x1b[0m';
|
const RESET_COLOR = '\x1b[0m';
|
||||||
|
|
||||||
const IS_RELEASE = Boolean(process.env.IS_RELEASE);
|
const IS_RELEASE = Boolean(process.env.IS_RELEASE);
|
||||||
|
const IS_PRE_RELEASE = Boolean(process.env.IS_PRE_RELEASE);
|
||||||
|
|
||||||
run();
|
run();
|
||||||
|
|
||||||
@ -39,7 +40,7 @@ async function run() {
|
|||||||
const messages = [];
|
const messages = [];
|
||||||
let changedFiles = false;
|
let changedFiles = false;
|
||||||
|
|
||||||
if (IS_RELEASE) {
|
if (IS_RELEASE || IS_PRE_RELEASE) {
|
||||||
const versions = await Source.readFile(
|
const versions = await Source.readFile(
|
||||||
path.join(PROJECT_DIR, 'versions.js')
|
path.join(PROJECT_DIR, 'versions.js')
|
||||||
);
|
);
|
||||||
@ -61,9 +62,15 @@ async function run() {
|
|||||||
const mdSources = [readme, api, troubleshooting, contributing];
|
const mdSources = [readme, api, troubleshooting, contributing];
|
||||||
|
|
||||||
const preprocessor = require('./preprocessor/index.js');
|
const preprocessor = require('./preprocessor/index.js');
|
||||||
messages.push(...(await preprocessor.runCommands(mdSources, VERSION)));
|
|
||||||
messages.push(
|
messages.push(
|
||||||
...(await preprocessor.ensureReleasedAPILinks([readme], VERSION))
|
...(await preprocessor.runCommands(mdSources, VERSION, IS_RELEASE))
|
||||||
|
);
|
||||||
|
messages.push(
|
||||||
|
...(await preprocessor.ensureReleasedAPILinks(
|
||||||
|
[readme],
|
||||||
|
VERSION,
|
||||||
|
IS_RELEASE
|
||||||
|
))
|
||||||
);
|
);
|
||||||
|
|
||||||
const browser = await puppeteer.launch();
|
const browser = await puppeteer.launch();
|
||||||
|
@ -16,14 +16,16 @@
|
|||||||
|
|
||||||
const Message = require('../Message.js');
|
const Message = require('../Message.js');
|
||||||
|
|
||||||
const IS_RELEASE = Boolean(process.env.IS_RELEASE);
|
module.exports.ensureReleasedAPILinks = function (
|
||||||
|
sources,
|
||||||
module.exports.ensureReleasedAPILinks = function (sources, version) {
|
version,
|
||||||
|
isReleaseVersion
|
||||||
|
) {
|
||||||
// Release version is everything that doesn't include "-".
|
// Release version is everything that doesn't include "-".
|
||||||
const apiLinkRegex =
|
const apiLinkRegex =
|
||||||
/https:\/\/github.com\/puppeteer\/puppeteer\/blob\/v[^/]*\/docs\/api.md/gi;
|
/https:\/\/github.com\/puppeteer\/puppeteer\/blob\/[^/]*\/docs\/api.md/gi;
|
||||||
const lastReleasedAPI = `https://github.com/puppeteer/puppeteer/blob/v${
|
const lastReleasedAPI = `https://github.com/puppeteer/puppeteer/blob/${
|
||||||
version.split('-')[0]
|
isReleaseVersion ? `v${version}` : 'main'
|
||||||
}/docs/api.md`;
|
}/docs/api.md`;
|
||||||
|
|
||||||
const messages = [];
|
const messages = [];
|
||||||
@ -36,10 +38,7 @@ module.exports.ensureReleasedAPILinks = function (sources, version) {
|
|||||||
return messages;
|
return messages;
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.runCommands = function (sources, version) {
|
module.exports.runCommands = function (sources, version, isReleaseVersion) {
|
||||||
// Release version is everything that doesn't include "-".
|
|
||||||
const isReleaseVersion = IS_RELEASE || !version.includes('-');
|
|
||||||
|
|
||||||
const messages = [];
|
const messages = [];
|
||||||
const commands = [];
|
const commands = [];
|
||||||
for (const source of sources) {
|
for (const source of sources) {
|
||||||
@ -72,22 +71,31 @@ module.exports.runCommands = function (sources, version) {
|
|||||||
commands.sort((a, b) => b.from - a.from);
|
commands.sort((a, b) => b.from - a.from);
|
||||||
for (const command of commands) {
|
for (const command of commands) {
|
||||||
let newText = null;
|
let newText = null;
|
||||||
if (command.name === 'version')
|
switch (command.name) {
|
||||||
newText = isReleaseVersion ? `v${version}` : 'Tip-Of-Tree';
|
case 'version':
|
||||||
else if (command.name === 'empty-if-release')
|
newText = isReleaseVersion ? `v${version}` : 'Tip-Of-Tree';
|
||||||
newText = isReleaseVersion ? '' : command.originalText;
|
break;
|
||||||
else if (command.name === 'toc')
|
case 'empty-if-release':
|
||||||
newText = generateTableOfContents(
|
newText = isReleaseVersion ? '' : command.originalText;
|
||||||
command.source.text().substring(command.to)
|
break;
|
||||||
);
|
case 'toc':
|
||||||
else if (command.name === 'versions-per-release')
|
newText = generateTableOfContents(
|
||||||
newText = generateVersionsPerRelease();
|
command.source.text().substring(command.to)
|
||||||
if (newText === null)
|
);
|
||||||
|
break;
|
||||||
|
case 'versions-per-release':
|
||||||
|
newText = generateVersionsPerRelease();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (newText === null) {
|
||||||
messages.push(Message.error(`Unknown command 'gen:${command.name}'`));
|
messages.push(Message.error(`Unknown command 'gen:${command.name}'`));
|
||||||
else if (applyCommand(command, newText)) changedSources.add(command.source);
|
} else if (applyCommand(command, newText)) {
|
||||||
|
changedSources.add(command.source);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for (const source of changedSources)
|
for (const source of changedSources) {
|
||||||
messages.push(Message.info(`GEN: updated ${source.projectPath()}`));
|
messages.push(Message.info(`GEN: updated ${source.projectPath()}`));
|
||||||
|
}
|
||||||
return messages;
|
return messages;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -20,21 +20,6 @@ const expect = require('expect');
|
|||||||
|
|
||||||
describe('doclint preprocessor specs', function () {
|
describe('doclint preprocessor specs', function () {
|
||||||
describe('ensureReleasedAPILinks', function () {
|
describe('ensureReleasedAPILinks', function () {
|
||||||
it('should work with non-release version', function () {
|
|
||||||
const source = new Source(
|
|
||||||
'doc.md',
|
|
||||||
`
|
|
||||||
[API](https://github.com/puppeteer/puppeteer/blob/v1.1.0/docs/api.md#class-page)
|
|
||||||
`
|
|
||||||
);
|
|
||||||
const messages = ensureReleasedAPILinks([source], '1.3.0-post');
|
|
||||||
expect(messages.length).toBe(1);
|
|
||||||
expect(messages[0].type).toBe('warning');
|
|
||||||
expect(messages[0].text).toContain('doc.md');
|
|
||||||
expect(source.text()).toBe(`
|
|
||||||
[API](https://github.com/puppeteer/puppeteer/blob/v1.3.0/docs/api.md#class-page)
|
|
||||||
`);
|
|
||||||
});
|
|
||||||
it('should work with release version', function () {
|
it('should work with release version', function () {
|
||||||
const source = new Source(
|
const source = new Source(
|
||||||
'doc.md',
|
'doc.md',
|
||||||
@ -42,22 +27,22 @@ describe('doclint preprocessor specs', function () {
|
|||||||
[API](https://github.com/puppeteer/puppeteer/blob/v1.1.0/docs/api.md#class-page)
|
[API](https://github.com/puppeteer/puppeteer/blob/v1.1.0/docs/api.md#class-page)
|
||||||
`
|
`
|
||||||
);
|
);
|
||||||
const messages = ensureReleasedAPILinks([source], '1.3.0');
|
const messages = ensureReleasedAPILinks([source], '1.3.0', true);
|
||||||
expect(messages.length).toBe(1);
|
expect(messages.length).toBe(1);
|
||||||
expect(messages[0].type).toBe('warning');
|
expect(messages[0].type).toBe('info');
|
||||||
expect(messages[0].text).toContain('doc.md');
|
expect(messages[0].text).toContain('doc.md');
|
||||||
expect(source.text()).toBe(`
|
expect(source.text()).toBe(`
|
||||||
[API](https://github.com/puppeteer/puppeteer/blob/v1.3.0/docs/api.md#class-page)
|
[API](https://github.com/puppeteer/puppeteer/blob/v1.3.0/docs/api.md#class-page)
|
||||||
`);
|
`);
|
||||||
});
|
});
|
||||||
it('should keep main branch links intact', function () {
|
it('should keep main branch links intact on non-release', function () {
|
||||||
const source = new Source(
|
const source = new Source(
|
||||||
'doc.md',
|
'doc.md',
|
||||||
`
|
`
|
||||||
[API](https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#class-page)
|
[API](https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#class-page)
|
||||||
`
|
`
|
||||||
);
|
);
|
||||||
const messages = ensureReleasedAPILinks([source], '1.3.0');
|
const messages = ensureReleasedAPILinks([source], '1.3.0', false);
|
||||||
expect(messages.length).toBe(0);
|
expect(messages.length).toBe(0);
|
||||||
expect(source.text()).toBe(`
|
expect(source.text()).toBe(`
|
||||||
[API](https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#class-page)
|
[API](https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#class-page)
|
||||||
@ -73,7 +58,7 @@ describe('doclint preprocessor specs', function () {
|
|||||||
<!-- gen:unknown-command -->something<!-- gen:stop -->
|
<!-- gen:unknown-command -->something<!-- gen:stop -->
|
||||||
`
|
`
|
||||||
);
|
);
|
||||||
const messages = runCommands([source], '1.1.1');
|
const messages = runCommands([source], '1.1.1', true);
|
||||||
expect(source.hasUpdatedText()).toBe(false);
|
expect(source.hasUpdatedText()).toBe(false);
|
||||||
expect(messages.length).toBe(1);
|
expect(messages.length).toBe(1);
|
||||||
expect(messages[0].type).toBe('error');
|
expect(messages[0].type).toBe('error');
|
||||||
@ -87,9 +72,9 @@ describe('doclint preprocessor specs', function () {
|
|||||||
Puppeteer <!-- gen:version -->XXX<!-- gen:stop -->
|
Puppeteer <!-- gen:version -->XXX<!-- gen:stop -->
|
||||||
`
|
`
|
||||||
);
|
);
|
||||||
const messages = runCommands([source], '1.2.0');
|
const messages = runCommands([source], '1.2.0', true);
|
||||||
expect(messages.length).toBe(1);
|
expect(messages.length).toBe(1);
|
||||||
expect(messages[0].type).toBe('warning');
|
expect(messages[0].type).toBe('info');
|
||||||
expect(messages[0].text).toContain('doc.md');
|
expect(messages[0].text).toContain('doc.md');
|
||||||
expect(source.text()).toBe(`
|
expect(source.text()).toBe(`
|
||||||
Puppeteer <!-- gen:version -->v1.2.0<!-- gen:stop -->
|
Puppeteer <!-- gen:version -->v1.2.0<!-- gen:stop -->
|
||||||
@ -102,9 +87,9 @@ describe('doclint preprocessor specs', function () {
|
|||||||
Puppeteer <!-- gen:version -->XXX<!-- gen:stop -->
|
Puppeteer <!-- gen:version -->XXX<!-- gen:stop -->
|
||||||
`
|
`
|
||||||
);
|
);
|
||||||
const messages = runCommands([source], '1.2.0-post');
|
const messages = runCommands([source], '1.2.0', false);
|
||||||
expect(messages.length).toBe(1);
|
expect(messages.length).toBe(1);
|
||||||
expect(messages[0].type).toBe('warning');
|
expect(messages[0].type).toBe('info');
|
||||||
expect(messages[0].text).toContain('doc.md');
|
expect(messages[0].text).toContain('doc.md');
|
||||||
expect(source.text()).toBe(`
|
expect(source.text()).toBe(`
|
||||||
Puppeteer <!-- gen:version -->Tip-Of-Tree<!-- gen:stop -->
|
Puppeteer <!-- gen:version -->Tip-Of-Tree<!-- gen:stop -->
|
||||||
@ -116,14 +101,14 @@ describe('doclint preprocessor specs', function () {
|
|||||||
`Puppeteer v<!-- gEn:version -->WHAT
|
`Puppeteer v<!-- gEn:version -->WHAT
|
||||||
<!-- GEN:stop -->`
|
<!-- GEN:stop -->`
|
||||||
);
|
);
|
||||||
runCommands([source], '1.1.1');
|
runCommands([source], '1.1.1', true);
|
||||||
expect(source.text()).toBe(
|
expect(source.text()).toBe(
|
||||||
`Puppeteer v<!-- gEn:version -->v1.1.1<!-- GEN:stop -->`
|
`Puppeteer v<!-- gEn:version -->v1.1.1<!-- GEN:stop -->`
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('should not tolerate missing gen:stop', function () {
|
it('should not tolerate missing gen:stop', function () {
|
||||||
const source = new Source('doc.md', `<!--GEN:version-->`);
|
const source = new Source('doc.md', `<!--GEN:version-->`);
|
||||||
const messages = runCommands([source], '1.2.0');
|
const messages = runCommands([source], '1.2.0', true);
|
||||||
expect(source.hasUpdatedText()).toBe(false);
|
expect(source.hasUpdatedText()).toBe(false);
|
||||||
expect(messages.length).toBe(1);
|
expect(messages.length).toBe(1);
|
||||||
expect(messages[0].type).toBe('error');
|
expect(messages[0].type).toBe('error');
|
||||||
@ -138,9 +123,9 @@ describe('doclint preprocessor specs', function () {
|
|||||||
<!-- gen:empty-if-release -->XXX<!-- gen:stop -->
|
<!-- gen:empty-if-release -->XXX<!-- gen:stop -->
|
||||||
`
|
`
|
||||||
);
|
);
|
||||||
const messages = runCommands([source], '1.1.1');
|
const messages = runCommands([source], '1.1.1', true);
|
||||||
expect(messages.length).toBe(1);
|
expect(messages.length).toBe(1);
|
||||||
expect(messages[0].type).toBe('warning');
|
expect(messages[0].type).toBe('info');
|
||||||
expect(messages[0].text).toContain('doc.md');
|
expect(messages[0].text).toContain('doc.md');
|
||||||
expect(source.text()).toBe(`
|
expect(source.text()).toBe(`
|
||||||
<!-- gen:empty-if-release --><!-- gen:stop -->
|
<!-- gen:empty-if-release --><!-- gen:stop -->
|
||||||
@ -153,7 +138,7 @@ describe('doclint preprocessor specs', function () {
|
|||||||
<!-- gen:empty-if-release -->XXX<!-- gen:stop -->
|
<!-- gen:empty-if-release -->XXX<!-- gen:stop -->
|
||||||
`
|
`
|
||||||
);
|
);
|
||||||
const messages = runCommands([source], '1.1.1-post');
|
const messages = runCommands([source], '1.1.1', false);
|
||||||
expect(messages.length).toBe(0);
|
expect(messages.length).toBe(0);
|
||||||
expect(source.text()).toBe(`
|
expect(source.text()).toBe(`
|
||||||
<!-- gen:empty-if-release -->XXX<!-- gen:stop -->
|
<!-- gen:empty-if-release -->XXX<!-- gen:stop -->
|
||||||
@ -169,9 +154,9 @@ describe('doclint preprocessor specs', function () {
|
|||||||
#### page.$
|
#### page.$
|
||||||
#### page.$$`
|
#### page.$$`
|
||||||
);
|
);
|
||||||
const messages = runCommands([source], '1.3.0');
|
const messages = runCommands([source], '1.3.0', true);
|
||||||
expect(messages.length).toBe(1);
|
expect(messages.length).toBe(1);
|
||||||
expect(messages[0].type).toBe('warning');
|
expect(messages[0].type).toBe('info');
|
||||||
expect(messages[0].text).toContain('doc.md');
|
expect(messages[0].text).toContain('doc.md');
|
||||||
expect(source.text()).toBe(`<!-- gen:toc -->
|
expect(source.text()).toBe(`<!-- gen:toc -->
|
||||||
- [class: page](#class-page)
|
- [class: page](#class-page)
|
||||||
@ -193,9 +178,9 @@ describe('doclint preprocessor specs', function () {
|
|||||||
\`\`\`
|
\`\`\`
|
||||||
`
|
`
|
||||||
);
|
);
|
||||||
const messages = runCommands([source], '1.3.0');
|
const messages = runCommands([source], '1.3.0', true);
|
||||||
expect(messages.length).toBe(1);
|
expect(messages.length).toBe(1);
|
||||||
expect(messages[0].type).toBe('warning');
|
expect(messages[0].type).toBe('info');
|
||||||
expect(messages[0].text).toContain('doc.md');
|
expect(messages[0].text).toContain('doc.md');
|
||||||
expect(source.text()).toBe(`<!-- gen:toc -->
|
expect(source.text()).toBe(`<!-- gen:toc -->
|
||||||
- [class: page](#class-page)
|
- [class: page](#class-page)
|
||||||
@ -214,9 +199,9 @@ describe('doclint preprocessor specs', function () {
|
|||||||
### some [link](#foobar) here
|
### some [link](#foobar) here
|
||||||
`
|
`
|
||||||
);
|
);
|
||||||
const messages = runCommands([source], '1.3.0');
|
const messages = runCommands([source], '1.3.0', true);
|
||||||
expect(messages.length).toBe(1);
|
expect(messages.length).toBe(1);
|
||||||
expect(messages[0].type).toBe('warning');
|
expect(messages[0].type).toBe('info');
|
||||||
expect(messages[0].text).toContain('doc.md');
|
expect(messages[0].text).toContain('doc.md');
|
||||||
expect(source.text()).toBe(`<!-- gen:toc -->
|
expect(source.text()).toBe(`<!-- gen:toc -->
|
||||||
- [some link here](#some-link-here)
|
- [some link here](#some-link-here)
|
||||||
@ -234,9 +219,9 @@ describe('doclint preprocessor specs', function () {
|
|||||||
<!-- gen:version -->ZZZ<!-- gen:stop -->
|
<!-- gen:version -->ZZZ<!-- gen:stop -->
|
||||||
`
|
`
|
||||||
);
|
);
|
||||||
const messages = runCommands([source], '1.1.1');
|
const messages = runCommands([source], '1.1.1', true);
|
||||||
expect(messages.length).toBe(1);
|
expect(messages.length).toBe(1);
|
||||||
expect(messages[0].type).toBe('warning');
|
expect(messages[0].type).toBe('info');
|
||||||
expect(messages[0].text).toContain('doc.md');
|
expect(messages[0].text).toContain('doc.md');
|
||||||
expect(source.text()).toBe(`
|
expect(source.text()).toBe(`
|
||||||
<!-- gen:version -->v1.1.1<!-- gen:stop -->
|
<!-- gen:version -->v1.1.1<!-- gen:stop -->
|
||||||
|
Loading…
Reference in New Issue
Block a user