fix: process documentation during publishing (#8433)

This commit is contained in:
jrandolf 2022-05-30 21:50:34 +02:00 committed by GitHub
parent 54efc2c949
commit d111d19f78
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 107 additions and 168 deletions

View File

@ -1,4 +1,3 @@
releaseType: node
handleGHRelease: true
primaryBranch: main
manifest: true

View File

@ -3,10 +3,36 @@ name: Publish
on:
push:
tags:
- '*'
- v*
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:
needs: pre-publish
runs-on: ubuntu-latest
permissions:
contents: read
@ -17,6 +43,8 @@ jobs:
run: npm install
- name: Build puppeteer
run: npm run build
- name: Generate release documentation
run: IS_RELEASE=1 npm run doc
- name: Publish puppeteer
env:
NPM_TOKEN: ${{secrets.NPM_TOKEN_PUPPETEER}}
@ -36,33 +64,3 @@ jobs:
npm config set registry 'https://wombat-dressing-room.appspot.com/'
npm config set '//wombat-dressing-room.appspot.com/:_authToken' '${NPM_TOKEN}'
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

View File

@ -1,4 +1,4 @@
#!/bin/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

View File

@ -14,3 +14,4 @@ CHANGELOG.md
test/assets/
/.local-chromium/
/.local-firefox/
test-ts-types

View File

@ -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',
},
};

View File

@ -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 consists of the following phases:
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 [GitHubs “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.
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.

View File

@ -8,7 +8,7 @@
<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.
@ -39,7 +39,7 @@ npm i 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
@ -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.
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_:
@ -88,7 +88,7 @@ Execute script on the command line
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.
@ -115,7 +115,7 @@ Execute script on the command line
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
@ -150,7 +150,7 @@ Execute script on the command line
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] -->
@ -160,7 +160,7 @@ See [`Page.evaluate()`](https://github.com/puppeteer/puppeteer/blob/v14.1.1/docs
**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
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' });
```
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.
@ -188,7 +188,7 @@ Puppeteer creates its own browser user profile which it **cleans up on every run
## 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/)
- [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.
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.
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:
- 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).
#### Q: I am having trouble installing / running Puppeteer in my test environment. Where should I look for help?

View File

@ -44,7 +44,7 @@
"commitlint": "commitlint --from=HEAD~1",
"prettier": "prettier --check .",
"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",
"generate-api-docs-for-testing": "commonmark docs/api.md > docs/api.html",
"clean-lib": "rimraf lib",

View File

@ -1,5 +1,4 @@
{
"last-release-sha": "d4321e53c909c7ecf90f5f27d3a136cba176f40b",
"packages": {
".": {
"releaseType": "node",

View File

@ -6,9 +6,6 @@
"scripts": {
"compile": "../../node_modules/.bin/tsc"
},
"devDependencies": {
"typescript": "4.2.4"
},
"dependencies": {
"puppeteer": "file:../../puppeteer.tgz"
}

View File

@ -6,9 +6,6 @@
"scripts": {
"compile": "../../node_modules/.bin/tsc"
},
"devDependencies": {
"typescript": "4.2.4"
},
"dependencies": {
"puppeteer": "file:../../puppeteer.tgz"
}

View File

@ -6,9 +6,6 @@
"scripts": {
"compile": "../../node_modules/.bin/tsc"
},
"devDependencies": {
"typescript": "4.2.4"
},
"dependencies": {
"puppeteer": "file:../../puppeteer.tgz"
}

View File

@ -6,9 +6,6 @@
"scripts": {
"compile": "../../node_modules/.bin/tsc"
},
"devDependencies": {
"typescript": "4.2.4"
},
"dependencies": {
"puppeteer": "file:../../puppeteer.tgz"
}

View File

@ -6,9 +6,6 @@
"scripts": {
"compile": "../../node_modules/.bin/tsc"
},
"devDependencies": {
"typescript": "4.2.4"
},
"dependencies": {
"puppeteer": "file:../../puppeteer.tgz"
}

View File

@ -6,9 +6,6 @@
"scripts": {
"compile": "../../node_modules/.bin/tsc"
},
"devDependencies": {
"typescript": "4.2.4"
},
"dependencies": {
"puppeteer": "file:../../puppeteer.tgz"
}

View File

@ -29,6 +29,7 @@ const YELLOW_COLOR = '\x1b[33m';
const RESET_COLOR = '\x1b[0m';
const IS_RELEASE = Boolean(process.env.IS_RELEASE);
const IS_PRE_RELEASE = Boolean(process.env.IS_PRE_RELEASE);
run();
@ -39,7 +40,7 @@ async function run() {
const messages = [];
let changedFiles = false;
if (IS_RELEASE) {
if (IS_RELEASE || IS_PRE_RELEASE) {
const versions = await Source.readFile(
path.join(PROJECT_DIR, 'versions.js')
);
@ -61,9 +62,15 @@ async function run() {
const mdSources = [readme, api, troubleshooting, contributing];
const preprocessor = require('./preprocessor/index.js');
messages.push(...(await preprocessor.runCommands(mdSources, VERSION)));
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();

View File

@ -16,14 +16,16 @@
const Message = require('../Message.js');
const IS_RELEASE = Boolean(process.env.IS_RELEASE);
module.exports.ensureReleasedAPILinks = function (sources, version) {
module.exports.ensureReleasedAPILinks = function (
sources,
version,
isReleaseVersion
) {
// Release version is everything that doesn't include "-".
const apiLinkRegex =
/https:\/\/github.com\/puppeteer\/puppeteer\/blob\/v[^/]*\/docs\/api.md/gi;
const lastReleasedAPI = `https://github.com/puppeteer/puppeteer/blob/v${
version.split('-')[0]
/https:\/\/github.com\/puppeteer\/puppeteer\/blob\/[^/]*\/docs\/api.md/gi;
const lastReleasedAPI = `https://github.com/puppeteer/puppeteer/blob/${
isReleaseVersion ? `v${version}` : 'main'
}/docs/api.md`;
const messages = [];
@ -36,10 +38,7 @@ module.exports.ensureReleasedAPILinks = function (sources, version) {
return messages;
};
module.exports.runCommands = function (sources, version) {
// Release version is everything that doesn't include "-".
const isReleaseVersion = IS_RELEASE || !version.includes('-');
module.exports.runCommands = function (sources, version, isReleaseVersion) {
const messages = [];
const commands = [];
for (const source of sources) {
@ -72,22 +71,31 @@ module.exports.runCommands = function (sources, version) {
commands.sort((a, b) => b.from - a.from);
for (const command of commands) {
let newText = null;
if (command.name === 'version')
switch (command.name) {
case 'version':
newText = isReleaseVersion ? `v${version}` : 'Tip-Of-Tree';
else if (command.name === 'empty-if-release')
break;
case 'empty-if-release':
newText = isReleaseVersion ? '' : command.originalText;
else if (command.name === 'toc')
break;
case 'toc':
newText = generateTableOfContents(
command.source.text().substring(command.to)
);
else if (command.name === 'versions-per-release')
break;
case 'versions-per-release':
newText = generateVersionsPerRelease();
if (newText === null)
messages.push(Message.error(`Unknown command 'gen:${command.name}'`));
else if (applyCommand(command, newText)) changedSources.add(command.source);
break;
}
for (const source of changedSources)
if (newText === null) {
messages.push(Message.error(`Unknown command 'gen:${command.name}'`));
} else if (applyCommand(command, newText)) {
changedSources.add(command.source);
}
}
for (const source of changedSources) {
messages.push(Message.info(`GEN: updated ${source.projectPath()}`));
}
return messages;
};

View File

@ -20,21 +20,6 @@ const expect = require('expect');
describe('doclint preprocessor specs', 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 () {
const source = new Source(
'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)
`
);
const messages = ensureReleasedAPILinks([source], '1.3.0');
const messages = ensureReleasedAPILinks([source], '1.3.0', true);
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(source.text()).toBe(`
[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(
'doc.md',
`
[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(source.text()).toBe(`
[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 -->
`
);
const messages = runCommands([source], '1.1.1');
const messages = runCommands([source], '1.1.1', true);
expect(source.hasUpdatedText()).toBe(false);
expect(messages.length).toBe(1);
expect(messages[0].type).toBe('error');
@ -87,9 +72,9 @@ describe('doclint preprocessor specs', function () {
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[0].type).toBe('warning');
expect(messages[0].type).toBe('info');
expect(messages[0].text).toContain('doc.md');
expect(source.text()).toBe(`
Puppeteer <!-- gen:version -->v1.2.0<!-- gen:stop -->
@ -102,9 +87,9 @@ describe('doclint preprocessor specs', function () {
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[0].type).toBe('warning');
expect(messages[0].type).toBe('info');
expect(messages[0].text).toContain('doc.md');
expect(source.text()).toBe(`
Puppeteer <!-- gen:version -->Tip-Of-Tree<!-- gen:stop -->
@ -116,14 +101,14 @@ describe('doclint preprocessor specs', function () {
`Puppeteer v<!-- gEn:version -->WHAT
<!-- GEN:stop -->`
);
runCommands([source], '1.1.1');
runCommands([source], '1.1.1', true);
expect(source.text()).toBe(
`Puppeteer v<!-- gEn:version -->v1.1.1<!-- GEN:stop -->`
);
});
it('should not tolerate missing gen:stop', function () {
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(messages.length).toBe(1);
expect(messages[0].type).toBe('error');
@ -138,9 +123,9 @@ describe('doclint preprocessor specs', function () {
<!-- 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[0].type).toBe('warning');
expect(messages[0].type).toBe('info');
expect(messages[0].text).toContain('doc.md');
expect(source.text()).toBe(`
<!-- gen:empty-if-release --><!-- gen:stop -->
@ -153,7 +138,7 @@ describe('doclint preprocessor specs', function () {
<!-- 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(source.text()).toBe(`
<!-- gen:empty-if-release -->XXX<!-- gen:stop -->
@ -169,9 +154,9 @@ describe('doclint preprocessor specs', function () {
#### page.$
#### page.$$`
);
const messages = runCommands([source], '1.3.0');
const messages = runCommands([source], '1.3.0', true);
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(source.text()).toBe(`<!-- gen:toc -->
- [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[0].type).toBe('warning');
expect(messages[0].type).toBe('info');
expect(messages[0].text).toContain('doc.md');
expect(source.text()).toBe(`<!-- gen:toc -->
- [class: page](#class-page)
@ -214,9 +199,9 @@ describe('doclint preprocessor specs', function () {
### 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[0].type).toBe('warning');
expect(messages[0].type).toBe('info');
expect(messages[0].text).toContain('doc.md');
expect(source.text()).toBe(`<!-- gen:toc -->
- [some link here](#some-link-here)
@ -234,9 +219,9 @@ describe('doclint preprocessor specs', function () {
<!-- 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[0].type).toBe('warning');
expect(messages[0].type).toBe('info');
expect(messages[0].text).toContain('doc.md');
expect(source.text()).toBe(`
<!-- gen:version -->v1.1.1<!-- gen:stop -->