Skip to content

build, doc: use new api doc tooling #57343

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 10 commits into
base: main
Choose a base branch
from

Conversation

flakey5
Copy link
Member

@flakey5 flakey5 commented Mar 6, 2025

Switches over to using the new doc generation tooling. For more background on this, please see #52343

Currently a draft just to get feedback on the approach to this integration.

cc @nodejs/web-infra

@nodejs-github-bot
Copy link
Collaborator

Review requested:

  • @nodejs/nodejs-website
  • @nodejs/web-infra

@nodejs-github-bot nodejs-github-bot added build Issues and PRs related to build files or the CI. doc Issues and PRs related to the documentations. needs-ci PRs that need a full CI run. tools Issues and PRs related to the tools directory. windows Issues and PRs related to the Windows platform. labels Mar 6, 2025
@flakey5 flakey5 marked this pull request as draft March 6, 2025 06:24
@flakey5 flakey5 force-pushed the flakey5/20250305/api-docs-tooling branch from 77ede22 to 3423c21 Compare March 6, 2025 06:29
@flakey5 flakey5 force-pushed the flakey5/20250305/api-docs-tooling branch from 3423c21 to 451f8a7 Compare March 6, 2025 06:31
Copy link
Member

@ovflowd ovflowd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@flakey5 I guess you also need to check our GitHub Action Workflows, and also other mentions of these files within the source.

Like within the Contributor Docs, there is a file that describes how the legacy API doc tooling works, and I believe there are other references also.

@flakey5 flakey5 force-pushed the flakey5/20250305/api-docs-tooling branch 3 times, most recently from cf2609b to a3ce99d Compare March 10, 2025 22:04
@flakey5 flakey5 marked this pull request as ready for review March 10, 2025 22:05
@flakey5
Copy link
Member Author

flakey5 commented Mar 10, 2025

lint-js-and-md is failing because of the linting errors since it exits with a non-zero status code if there's anything wrong with the docs. I think we should skip the REPLACEME checks for normal ci runs.

It also looks like synopsis.md fails the introduced_in check because it's not under the top-level header, should it be enforced that introduced_in goes under the top-level header or should we change it to just check that it exists somewhere in the file (like it was doing previously)?

@flakey5
Copy link
Member Author

flakey5 commented Mar 10, 2025

Also not sure what's going on with lint-addon-docs? cc @araujogui

@ovflowd
Copy link
Member

ovflowd commented Mar 10, 2025

lint-js-and-md is failing because of the linting errors since it exits with a non-zero status code if there's anything wrong with the docs. I think we should skip the REPLACEME checks for normal ci runs.

It also looks like synopsis.md fails the introduced_in check because it's not under the top-level header, should it be enforced that introduced_in goes under the top-level header or should we change it to just check that it exists somewhere in the file (like it was doing previously)?

REPLACEME shouldn't error, imo, just give a warning. Our linter should have warn and error levels.

And yes introduced_in must be top level!

Copy link

codecov bot commented Mar 10, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 90.14%. Comparing base (a430ef5) to head (09e8384).
Report is 62 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main   #57343      +/-   ##
==========================================
- Coverage   90.22%   90.14%   -0.08%     
==========================================
  Files         635      633       -2     
  Lines      187313   187004     -309     
  Branches    36784    36676     -108     
==========================================
- Hits       168998   168576     -422     
- Misses      11080    11258     +178     
+ Partials     7235     7170      -65     

see 96 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@araujogui
Copy link
Member

lint-js-and-md is failing because of the linting errors since it exits with a non-zero status code if there's anything wrong with the docs. I think we should skip the REPLACEME checks for normal ci runs.

It also looks like synopsis.md fails the introduced_in check because it's not under the top-level header, should it be enforced that introduced_in goes under the top-level header or should we change it to just check that it exists somewhere in the file (like it was doing previously)?

Actually, the linter only returns 1 if there's an error-level issue, and I don't think that's the case here.

image

@araujogui
Copy link
Member

Also not sure what's going on with lint-addon-docs? cc @araujogui

I’m not sure either, but I’ll check it out.

@ovflowd
Copy link
Member

ovflowd commented Mar 12, 2025

@flakey5:

3:1-3:9   warning Use "the Node.js" instead of "Node.js'" prohibited-strings remark-lint
4:46-4:50 warning Use "Node.js" instead of "Node"         prohibited-strings remark-lint

On the README.md file you updated (tools/doc/README.md) after updating those can you run make format-md (?)

Copy link
Member

@ovflowd ovflowd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the result of many months of arduous work between many awesome folks, including @flakey5 @AugustinMauroy @araujogui @ovflowd @avivkeller and others.

I'm so proud of what we are achieving here and this is a huge step towards a modern tooling and a revamped API docs within Node.js

Approving, as I believe this is ready!

@ovflowd
Copy link
Member

ovflowd commented Mar 13, 2025

cc @nodejs/collaborators can we have another approval here? 🙏

Copy link
Member

@lpinca lpinca left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

RSLGTM because it is hard to review and outside of my comfort zone.

@aduh95
Copy link
Contributor

aduh95 commented May 5, 2025

@avivkeller I can see that, it's in the diff; what's not in the diff is why is it like that, how to fix it, etc.

Switches over to using the new doc generation tooling.
For more background on this, please see nodejs#52343

Signed-off-by: flakey5 <[email protected]>

Co-authored-by: Claudio W <[email protected]>
Co-authored-by: avivkeller <[email protected]>
Co-authored-by: Antoine du Hamel <[email protected]>
@flakey5 flakey5 force-pushed the flakey5/20250305/api-docs-tooling branch from 1e6e74f to 92015b5 Compare May 26, 2025 18:16
@flakey5
Copy link
Member Author

flakey5 commented May 26, 2025

Apologizes for the delay, got a bit busy

make: *** No rule to make target 'out/doc/api/index.html'. Stop..

This should be fixed now

I'd also like to get some comment on the performance, here's the command I'm using to measure it:

The old tooling intakes each source file individually, whereas api-docs-tooling intakes all of the files so to only need to bootstrap everything once. This pr does remove caching in the Makefile of the source Markdown files, so running make docclean doc-only -j && time make doc-only -j on the old tooling only generates the docs once whereas with the new tooling it's done twice.

Regardless, the performance isn't amazing and is something we're looking into

Co-authored-by: Antoine du Hamel <[email protected]>
Makefile Outdated
--ignore $(skip_apidoc_files) \
-o out/doc/api/ \
--no-lint \
-c file://$(PWD)/CHANGELOG.md \
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
-c file://$(PWD)/CHANGELOG.md \
-c $(call available-node, -p 'url.pathToFileURL("CHANGELOG.md")') \

Makefile Outdated
Comment on lines 807 to 818
$(call available-node, \
$(NPX) --prefix tools/doc api-docs-tooling generate \
-t legacy-html-all legacy-json-all api-links \
-i doc/api/*.md \
-i lib/*.js \
--ignore $(skip_apidoc_files) \
-o out/doc/api/ \
--no-lint \
-c file://$(PWD)/CHANGELOG.md \
-v $(VERSION) \
-p $(DOC_THREADS) \
) \
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if it'd be better to let Make handle the caching and the parallelism – it would also decrease the maintenance burden of maintaining slightly different commands

Suggested change
$(call available-node, \
$(NPX) --prefix tools/doc api-docs-tooling generate \
-t legacy-html-all legacy-json-all api-links \
-i doc/api/*.md \
-i lib/*.js \
--ignore $(skip_apidoc_files) \
-o out/doc/api/ \
--no-lint \
-c file://$(PWD)/CHANGELOG.md \
-v $(VERSION) \
-p $(DOC_THREADS) \
) \
$(MAKE) $(apidocs_html) $(apidocs_json)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm generally -1 on this since the new tooling is designed to support handling all the files at once, but I'm either or atp. Wdyt @ovflowd?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Im not sure what is being requested here, but in general we want to generate all files…. But we should still support users that want to generate just one file or a set of files, not sure if that’s what is being suggested here. Im also not sure parallelism is a good idea 🤔 not sure the old tooling even did that, I don’t think so, but I might be wrong.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

in general we want to generate all files…. But we should still support users that want to generate just one file or a set of files

The current setup allows for this, but the question was more for when we're generating all files, do we want to run the tooling separately for each file vs passing them all into the -i flag

flakey5 and others added 3 commits May 26, 2025 15:59
Co-authored-by: Antoine du Hamel <[email protected]>
Signed-off-by: flakey5 <[email protected]>
Signed-off-by: flakey5 <[email protected]>
@flakey5
Copy link
Member Author

flakey5 commented May 28, 2025

Hmmm -c $(call available-node, -p 'url.pathToFileURL("CHANGELOG.md")') \ is causing this to be thrown: /bin/sh: 4: Syntax error: "then" unexpected (expecting "fi")

Signed-off-by: flakey5 <[email protected]>
@aduh95
Copy link
Contributor

aduh95 commented May 28, 2025

Hmmm -c $(call available-node, -p 'url.pathToFileURL("CHANGELOG.md")') \ is causing this to be thrown: /bin/sh: 4: Syntax error: "then" unexpected (expecting "fi")

The fix would be to have the tooling take a path rather than a URL

flakey5 added a commit to nodejs/api-docs-tooling that referenced this pull request May 31, 2025
flakey5 added a commit to nodejs/api-docs-tooling that referenced this pull request May 31, 2025
flakey5 added a commit to nodejs/api-docs-tooling that referenced this pull request May 31, 2025
avivkeller pushed a commit to nodejs/api-docs-tooling that referenced this pull request Jun 1, 2025
apidocs_json = $(addprefix out/,$(apidoc_sources:.md=.json))

apiassets = $(subst api_assets,api/assets,$(addprefix out/,$(wildcard doc/api_assets/*)))
run-npm-ci = $(PWD)/$(NPM) ci
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can probably get faster download times if we only install production dependencies

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
build Issues and PRs related to build files or the CI. doc Issues and PRs related to the documentations. needs-ci PRs that need a full CI run. tools Issues and PRs related to the tools directory. windows Issues and PRs related to the Windows platform.
Projects
None yet
Development

Successfully merging this pull request may close these issues.