Skip to content

Commit

Permalink
tools: make doctool work if no internet available
Browse files Browse the repository at this point in the history
Allow doctool to fallback to use local files if not building a release
build.

PR-URL: #30214
Fixes: #29918
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: Gus Caplan <me@gus.host>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
  • Loading branch information
richardlau authored and targos committed Dec 1, 2019
1 parent 5342f53 commit ebaa738
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 4 deletions.
File renamed without changes.
33 changes: 29 additions & 4 deletions tools/doc/versions.js
@@ -1,21 +1,33 @@
'use strict';

const { readFileSync } = require('fs');
const path = require('path');
const srcRoot = path.join(__dirname, '..', '..');

let _versions;

const isRelease = () => {
const re = /#define NODE_VERSION_IS_RELEASE 0/;
const file = path.join(srcRoot, 'src', 'node_version.h');
return !re.test(readFileSync(file, { encoding: 'utf8' }));
};

const getUrl = (url) => {
return new Promise((resolve, reject) => {
const https = require('https');
const request = https.get(url, (response) => {
const request = https.get(url, { timeout: 5000 }, (response) => {
if (response.statusCode !== 200) {
reject(new Error(
`Failed to get ${url}, status code ${response.statusCode}`));
}
response.setEncoding('utf8');
let body = '';
response.on('aborted', () => reject());
response.on('data', (data) => body += data);
response.on('end', () => resolve(body));
});
request.on('error', (err) => reject(err));
request.on('timeout', () => request.abort());
});
};

Expand All @@ -27,10 +39,23 @@ module.exports = {

// The CHANGELOG.md on release branches may not reference newer semver
// majors of Node.js so fetch and parse the version from the master branch.
const githubContentUrl = 'https://raw.githubusercontent.com/nodejs/node/';
const changelog = await getUrl(`${githubContentUrl}/master/CHANGELOG.md`);
const url =
'https://raw.githubusercontent.com/nodejs/node/master/CHANGELOG.md';
let changelog;
try {
changelog = await getUrl(url);
} catch (e) {
// Fail if this is a release build, otherwise fallback to local files.
if (isRelease()) {
throw e;
} else {
const file = path.join(srcRoot, 'CHANGELOG.md');
console.warn(`Unable to retrieve ${url}. Falling back to ${file}.`);
changelog = readFileSync(file, { encoding: 'utf8' });
}
}
const ltsRE = /Long Term Support/i;
const versionRE = /\* \[Node\.js ([0-9.]+)\][^-—]+[-—]\s*(.*)\n/g;
const versionRE = /\* \[Node\.js ([0-9.]+)\][^-—]+[-—]\s*(.*)\r?\n/g;
_versions = [];
let match;
while ((match = versionRE.exec(changelog)) != null) {
Expand Down

0 comments on commit ebaa738

Please sign in to comment.