Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,7 @@ updates:
semver-minor-days: 5
semver-patch-days: 5
exclude:
- '@doc-kit/*'
- '@node-core/*'
- '@node-core/doc-kit'
commit-message:
prefix: tools
open-pull-requests-limit: 10
Expand Down
5 changes: 0 additions & 5 deletions .github/workflows/build-tarball.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@ env:
PYTHON_VERSION: '3.14'
FLAKY_TESTS: keep_retrying
CLANG_VERSION: '19'
NODE_VERSION: lts/*

permissions:
contents: read
Expand All @@ -85,10 +84,6 @@ jobs:
with:
python-version: ${{ env.PYTHON_VERSION }}
allow-prereleases: true
- name: Use Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: ${{ env.NODE_VERSION }}
- name: Make tarball
run: |
export DISTTYPE=nightly
Expand Down
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ release.
</tr>
<tr>
<td valign="top">
<b><a href="doc/changelogs/CHANGELOG_V26.md#26.11.0">26.11.0</a></b><br/>
<b><a href="doc/changelogs/CHANGELOG_V26.md#26.11.1">26.11.1</a></b><br/>
<a href="doc/changelogs/CHANGELOG_V26.md#26.11.0">26.11.0</a><br/>
<a href="doc/changelogs/CHANGELOG_V26.md#26.10.0">26.10.0</a><br/>
<a href="doc/changelogs/CHANGELOG_V26.md#26.9.0">26.9.0</a><br/>
<a href="doc/changelogs/CHANGELOG_V26.md#26.8.2">26.8.2</a><br/>
Expand Down
34 changes: 18 additions & 16 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -402,12 +402,7 @@ ifeq ($(OSTYPE),os400)
DOCBUILDSTAMP_PREREQS := $(DOCBUILDSTAMP_PREREQS) out/$(BUILDTYPE)/node.exp
endif

DOC_KIT ?= tools/doc/node_modules/@doc-kit/cli/bin/cli.mjs
ifeq ($(V),1)
DOC_KIT_LOG_LEVEL ?= debug
else
DOC_KIT_LOG_LEVEL ?= info
endif
DOC_KIT ?= tools/doc/node_modules/@node-core/doc-kit/bin/cli.mjs

node_use_openssl_and_icu = $(call available-node,"-p" \
"process.versions.openssl != undefined && process.versions.icu != undefined")
Expand Down Expand Up @@ -876,7 +871,7 @@ VERSION=v$(RAWVER)

.PHONY: doc-only
.NOTPARALLEL: doc-only
doc-only: $(apidoc_dirs) $(apidocs_html) $(apidocs_json) out/doc/api/all.json out/doc/llms.txt out/doc/apilinks.json ## Builds the docs with the local or the global Node.js binary.
doc-only: $(apidoc_dirs) $(apidocs_html) $(apidocs_json) out/doc/api/all.html out/doc/api/all.json out/doc/llms.txt out/doc/apilinks.json ## Builds the docs with the local or the global Node.js binary.

.PHONY: doc
doc: $(NODE_EXE) doc-only ## Build Node.js, and then build the documentation with the new binary.
Expand Down Expand Up @@ -913,10 +908,15 @@ $(apidocs_html) $(apidocs_json) out/doc/api/all.html out/doc/api/all.json &: $(a
else \
$(call available-node, \
$(DOC_KIT) generate \
--log-level $(DOC_KIT_LOG_LEVEL) \
--config-file tools/doc/web.doc-kit.config.mjs \
-t legacy-html-all \
-t legacy-json-all \
-i doc/api/*.md \
--ignore $(skip_apidoc_files) \
-o out/doc/api \
-c ./CHANGELOG.md \
-v $(VERSION) \
$(if $(JOBS),-p $(JOBS)) \
--index doc/api/index.md \
--type-map doc/type-map.json \
) \
fi
endif
Expand All @@ -927,11 +927,13 @@ out/doc/llms.txt: $(apidoc_sources) tools/doc/node_modules | out/doc
else \
$(call available-node, \
$(DOC_KIT) generate \
--log-level $(DOC_KIT_LOG_LEVEL) \
--config-file tools/doc/web.doc-kit.config.mjs \
-t llms-txt \
-i doc/api/*.md \
--ignore $(skip_apidoc_files) \
-o $(@D) \
-c ./CHANGELOG.md \
-v $(VERSION) \
--type-map doc/type-map.json \
) \
fi

Expand All @@ -941,10 +943,12 @@ out/doc/apilinks.json: $(wildcard lib/*.js) tools/doc/node_modules | out/doc
else \
$(call available-node, \
$(DOC_KIT) generate \
--log-level $(DOC_KIT_LOG_LEVEL) \
--config-file tools/doc/api-links.doc-kit.config.mjs \
-t api-links \
-i lib/*.js \
-o $(@D) \
-c ./CHANGELOG.md \
-v $(VERSION) \
--type-map doc/type-map.json \
) \
fi

Expand All @@ -958,7 +962,6 @@ node.1: doc/api/cli.md tools/doc/node_modules
else \
$(call available-node, \
$(DOC_KIT) generate \
--log-level $(DOC_KIT_LOG_LEVEL) \
-v $(VERSION) \
--config-file tools/doc/man-page.doc-kit.config.mjs \
-o doc \
Expand Down Expand Up @@ -1526,7 +1529,6 @@ tools/.manpagelintstamp: doc/node.1 doc/api/cli.md tools/doc/node_modules
$(RM) -r tools/doc/.manpagecheck && \
$(call available-node, \
$(DOC_KIT) generate \
--log-level $(DOC_KIT_LOG_LEVEL) \
-v $(VERSION) \
--config-file tools/doc/man-page.doc-kit.config.mjs \
) \
Expand Down
11 changes: 11 additions & 0 deletions doc/changelogs/CHANGELOG_V26.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
</tr>
<tr>
<td>
<a href="#26.11.1">26.11.1</a><br/>
<a href="#26.11.0">26.11.0</a><br/>
<a href="#26.10.0">26.10.0</a><br/>
<a href="#26.9.0">26.9.0</a><br/>
Expand Down Expand Up @@ -56,6 +57,16 @@
* [io.js](CHANGELOG_IOJS.md)
* [Archive](CHANGELOG_ARCHIVE.md)

<a id="26.11.1"></a>

## 2026-10-07, Version 26.11.1 (Current), @aduh95

### Commits

* \[[`2dc4638e85`](https://github.com/nodejs/node/commit/2dc4638e85)] - _**Revert**_ "**build**: toggle doc-kit verbosity based on V" (Antoine du Hamel)
* \[[`3febbc54ec`](https://github.com/nodejs/node/commit/3febbc54ec)] - _**Revert**_ "**build, doc**: move to redesign" (Antoine du Hamel)
* \[[`173250e2e7`](https://github.com/nodejs/node/commit/173250e2e7)] - _**Revert**_ "**tools**: bump the doc group in /tools/doc with 4 updates" (Antoine du Hamel)

<a id="26.11.0"></a>

## 2026-10-07, Version 26.11.0 (Current), @aduh95
Expand Down
16 changes: 8 additions & 8 deletions doc/node.1
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
.\"
.\" This file was generated automatically by Node.js's doc-kit tool.
.\" This file was generated automatically by the @node-core/doc-kit tool.
.\" Please do not edit this file manually. Make any updates to cli.md
.\" and regenerate the file afterward.
.\"
.\" To regenerate this file, run `make node.1`.
.\" To regenerate this file, run `make doc/node.1`.
.\"
.\"======================================================================
.Dd $Mdocdate$
Expand Down Expand Up @@ -236,7 +236,7 @@ Error: connect ERR_ACCESS_DENIED Access to this API has been restricted. Use --a
.It Fl -allow-openssl-store
When using the Permission Model, the process will not be able to use
OpenSSL STORE loaders by default, for example to load a private key from a
\fB{URL}\fR passed to \fBcrypto.createPrivateKey()\fR. Attempts to do so will throw
\fB<URL>\fR passed to \fBcrypto.createPrivateKey()\fR. Attempts to do so will throw
an \fBERR_ACCESS_DENIED\fR unless the user explicitly passes the
\fB--allow-openssl-store\fR flag. This permission can be dropped at runtime via
\fBpermission.drop()\fR.
Expand Down Expand Up @@ -408,11 +408,11 @@ creation behavior.
The following options are currently supported:
.Bl -bullet
.It
\fBbuilder\fR \fB{string}\fR Required. Provides the name to the script that is executed
before building the snapshot, as if \fB--build-snapshot\fR had been passed
\fBbuilder\fR \fB<string>\fR Required. Provides the name to the script that is executed
before building the snapshot, as if \fB--build-snapshot\fR had been passed
with \fBbuilder\fR as the main script name.
.It
\fBwithoutCodeCache\fR \fB{boolean}\fR Optional. Including the code cache reduces the
\fBwithoutCodeCache\fR \fB<boolean>\fR Optional. Including the code cache reduces the
time spent on compiling functions included in the snapshot at the expense
of a bigger snapshot size and potentially breaking portability of the
snapshot.
Expand Down Expand Up @@ -1201,7 +1201,7 @@ Legacy alias for \fB--no-require-module\fR.
Disable the experimental \fBnode:sqlite\fR module.
.
.It Fl -no-experimental-websocket
Disable exposition of \fB{WebSocket}\fR on the global scope.
Disable exposition of \fB<WebSocket>\fR on the global scope.
.
.It Fl -no-experimental-webstorage
Disable \fBWeb Storage\fR support.
Expand Down Expand Up @@ -1939,7 +1939,7 @@ Print node's version.
.It Fl -vfs-load Ns = Ns Ar source
.Bl -bullet
.It
\fBsource\fR \fB{string}\fR A directory or an archive file to mount and run.
\fBsource\fR \fB<string>\fR A directory or an archive file to mount and run.
.El
Requires \fB--experimental-vfs\fR. May be given at most once.
Mounts \fBsource\fR as a virtual file system (\fBnode:vfs\fR), and runs the entry
Expand Down
2 changes: 1 addition & 1 deletion src/node_version.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
#define NODE_VERSION_IS_LTS 0
#define NODE_VERSION_LTS_CODENAME ""

#define NODE_VERSION_IS_RELEASE 0
#define NODE_VERSION_IS_RELEASE 1

#ifndef NODE_STRINGIFY
#define NODE_STRINGIFY(n) NODE_STRINGIFY_HELPER(n)
Expand Down
74 changes: 74 additions & 0 deletions test/doctool/test-make-doc.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import * as common from '../common/index.mjs';

import assert from 'assert';
import fs from 'fs';
import path from 'path';

if (common.isWindows) {
common.skip('`make doc` does not run on Windows');
}

// This tests that `make doc` generates the documentation properly.
// Note that for this test to pass, `make doc` must be run first.

const apiURL = new URL('../../out/doc/api/', import.meta.url);
const mdURL = new URL('../../doc/api/', import.meta.url);
const allMD = fs.readdirSync(mdURL);
const allDocs = fs.readdirSync(apiURL);
assert.ok(allDocs.includes('index.html'));

const actualDocs = allDocs.filter(
(name) => {
const extension = path.extname(name);
return extension === '.html' || extension === '.json';
},
);

for (const name of actualDocs) {
if (name.startsWith('all.') || name === 'apilinks.json') continue;

assert.ok(
allMD.includes(name.replace(/\.\w+$/, '.md')),
`Unexpected output: out/doc/api/${name}, remove and rerun.`,
);
}

const toc = fs.readFileSync(new URL('./index.html', apiURL), 'utf8');
const re = /href=("([^/]+\.html)"|([^/]+\.html))/;
const globalRe = new RegExp(re, 'g');
const links = toc.match(globalRe);
assert.notStrictEqual(links, null);

// Filter out duplicate links, leave just filenames, add expected JSON files.
const linkedHtmls = [...new Set(links)].map((link) => link.match(re)[1])
.concat(['index.html']);
const expectedJsons = linkedHtmls
.map((name) => name.replace('.html', '.json'));
const expectedDocs = linkedHtmls.concat(expectedJsons);
const renamedDocs = ['policy.json', 'policy.html'];
const skipedDocs = ['dtls.json', 'dtls.html', 'quic.json', 'quic.html'];

// Test that all the relative links in the TOC match to the actual documents.
for (const expectedDoc of expectedDocs) {
if (skipedDocs.includes(expectedDoc)) continue;
assert.ok(actualDocs.includes(expectedDoc), `${expectedDoc} does not exist`);
}

// Test that all the actual documents match to the relative links in the TOC
// and that they are not empty files.
for (const actualDoc of actualDocs) {
// When renaming the documentation, the old url is lost
// Unless the old file is still available pointing to the correct location
// 301 redirects are not yet automated. So keeping the old URL is a
// reasonable workaround.
if (renamedDocs.includes(actualDoc) || skipedDocs.includes(actualDoc) ||
actualDoc === 'apilinks.json') continue;
assert.ok(
expectedDocs.includes(actualDoc), `${actualDoc} does not match TOC`);

assert.notStrictEqual(
fs.statSync(new URL(`./${actualDoc}`, apiURL)).size,
0,
`${actualDoc} is empty`,
);
}
17 changes: 0 additions & 17 deletions tools/doc/api-links.doc-kit.config.mjs

This file was deleted.

Loading
Loading