Skip to content

Commit a5bccc2

Browse files
joyeecheungMylesBorins
authored andcommitted
tools: make apilinks building more robust
1. Move the apilinks.json file into out/doc so it gets cleaned when running `make docclean` 2. When the apilinks.json generated is empty, throw a specific error so it's easier to understand what's wrong 3. Write to a file passed through CLI arguments instead writing to stdout in apilinks.js so the build process is more robust in the case of a bad binary PR-URL: #25019 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent 4561e2c commit a5bccc2

4 files changed

Lines changed: 25 additions & 17 deletions

File tree

‎Makefile‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -692,16 +692,16 @@ out/doc/api/assets/%: doc/api_assets/% out/doc/api/assets
692692

693693
run-npm-ci = $(PWD)/$(NPM) ci
694694

695+
LINK_DATA = out/doc/apilinks.json
695696
gen-api = tools/doc/generate.js --node-version=$(FULLVERSION)\
696-
--apilinks=out/apilinks.json$< --output-directory=out/doc/api
697-
gen-apilink = tools/doc/apilinks.js $(wildcard lib/*.js) > $@
697+
--apilinks=$(LINK_DATA)$< --output-directory=out/doc/api
698+
gen-apilink = tools/doc/apilinks.js $(LINK_DATA)$(wildcard lib/*.js)
698699

699-
out/apilinks.json: $(wildcard lib/*.js) tools/doc/apilinks.js
700+
$(LINK_DATA): $(wildcard lib/*.js) tools/doc/apilinks.js
700701
$(call available-node, $(gen-apilink))
701702

702703
out/doc/api/%.jsonout/doc/api/%.html: doc/api/%.md tools/doc/generate.js \
703-
tools/doc/html.js tools/doc/json.js tools/doc/apilinks.js |\
704-
out/apilinks.json
704+
tools/doc/html.js tools/doc/json.js tools/doc/apilinks.js |$(LINK_DATA)
705705
$(call available-node, $(gen-api))
706706

707707
out/doc/api/all.html: $(apidocs_html) tools/doc/allhtml.js \

‎test/doctool/test-apilinks.js‎

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,31 @@
22

33
require('../common');
44
constfixtures=require('../common/fixtures');
5+
consttmpdir=require('../common/tmpdir');
56
constfs=require('fs');
67
constassert=require('assert');
78
constpath=require('path');
89
const{ execFileSync }=require('child_process');
910

1011
constscript=path.join(__dirname,'..','..','tools','doc','apilinks.js');
11-
1212
constapilinks=fixtures.path('apilinks');
13+
14+
tmpdir.refresh();
15+
1316
fs.readdirSync(apilinks).forEach((fixture)=>{
1417
if(!fixture.endsWith('.js'))return;
15-
constfile=path.join(apilinks,fixture);
16-
17-
constexpectedContent=fs.readFileSync(file+'on','utf8');
18+
constinput=path.join(apilinks,fixture);
1819

19-
constoutput=execFileSync(
20+
constexpectedContent=fs.readFileSync(`${input}on`,'utf8');
21+
constoutputPath=path.join(tmpdir.path,`${fixture}on`);
22+
execFileSync(
2023
process.execPath,
21-
[script,file],
24+
[script,outputPath,input],
2225
{encoding: 'utf-8'}
2326
);
2427

2528
constexpectedLinks=JSON.parse(expectedContent);
26-
constactualLinks=JSON.parse(output);
29+
constactualLinks=JSON.parse(fs.readFileSync(outputPath));
2730

2831
for(const[k,v]ofObject.entries(expectedLinks)){
2932
assert.ok(kinactualLinks,`link not found: ${k}`);

‎tools/doc/apilinks.js‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ const tag = execSync(`git describe --contains ${hash}`).split('\n')[0] || hash;
4747

4848
// Extract definitions from each file specified.
4949
constdefinition={};
50-
process.argv.slice(2).forEach((file)=>{
50+
constoutput=process.argv[2];
51+
constinputs=process.argv.slice(3);
52+
inputs.forEach((file)=>{
5153
constbasename=path.basename(file,'.js');
5254

5355
// Parse source.
@@ -206,4 +208,4 @@ process.argv.slice(2).forEach((file) => {
206208
}
207209
});
208210

209-
console.log(JSON.stringify(definition,null,2));
211+
fs.writeFileSync(output,JSON.stringify(definition,null,2),'utf8');

‎tools/doc/generate.js‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,12 @@ args.forEach(function(arg) {
4949
}elseif(arg.startsWith('--output-directory=')){
5050
outputDir=arg.replace(/^--output-directory=/,'');
5151
}elseif(arg.startsWith('--apilinks=')){
52-
apilinks=JSON.parse(
53-
fs.readFileSync(arg.replace(/^--apilinks=/,''),'utf8')
54-
);
52+
constlinkFile=arg.replace(/^--apilinks=/,'');
53+
constdata=fs.readFileSync(linkFile,'utf8');
54+
if(!data.trim()){
55+
thrownewError(`${linkFile} is empty`);
56+
}
57+
apilinks=JSON.parse(data);
5558
}
5659
});
5760

0 commit comments

Comments
 (0)