kibana/docs/developer/advanced/upgrading-nodejs.asciidoc
Kibana Machine 67f50e52d1
[8.7] Upgrade Node.js to 16.19.1 (#151527) (#151746)
# Backport

This will backport the following commits from `main` to `8.7`:
- [Upgrade Node.js to 16.19.1
(#151527)](https://github.com/elastic/kibana/pull/151527)

<!--- Backport version: 8.9.7 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sqren/backport)

<!--BACKPORT
[{"author":{"name":"Jon","email":"jon@elastic.co"},"sourceCommit":{"committedDate":"2023-02-21T16:40:59Z","message":"Upgrade
Node.js to 16.19.1
(#151527)\n\nhttps://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V16.md#16.19.1","sha":"d41bcb210a89d7056e470bcb705d6e0b74394f3f","branchLabelMapping":{"^v8.8.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["Team:Operations","release_note:skip","backport:all-open","v8.8.0"],"number":151527,"url":"https://github.com/elastic/kibana/pull/151527","mergeCommit":{"message":"Upgrade
Node.js to 16.19.1
(#151527)\n\nhttps://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V16.md#16.19.1","sha":"d41bcb210a89d7056e470bcb705d6e0b74394f3f"}},"sourceBranch":"main","suggestedTargetBranches":[],"targetPullRequestStates":[{"branch":"main","label":"v8.8.0","labelRegex":"^v8.8.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/151527","number":151527,"mergeCommit":{"message":"Upgrade
Node.js to 16.19.1
(#151527)\n\nhttps://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V16.md#16.19.1","sha":"d41bcb210a89d7056e470bcb705d6e0b74394f3f"}}]}]
BACKPORT-->

Co-authored-by: Jon <jon@elastic.co>
2023-02-21 10:54:24 -07:00

82 lines
4.5 KiB
Text

[[upgrading-nodejs]]
== Upgrading Node.js
{kib} requires a specific Node.js version to run.
When running {kib} from source, you must have this version installed locally.
The required version of Node.js is listed in several different files throughout the {kib} source code.
These files must be updated when upgrading Node.js:
- {kib-repo}blob/{branch}/.ci/Dockerfile[`.ci/Dockerfile`] - The version is specified in the `NODE_VERSION` constant.
This is used to pull the relevant image from https://hub.docker.com/_/node[Docker Hub].
Note that Docker Hub can take 24+ hours to be updated with the new images after a new release of Node.js, so if you're upgrading Node.js in Kibana just after the official Node.js release, you have to check if the new images are present on Docker Hub.
If they are not, and the update is urgent, you can skip this file and update it later once Docker Hub has been updated.
- {kib-repo}blob/{branch}/.node-version[`.node-version`]
- {kib-repo}blob/{branch}/.nvmrc[`.nvmrc`]
- {kib-repo}blob/{branch}/package.json[`package.json`] - The version is specified in the `engines.node` field (if possible, also upgrade `@types/node` to match the new version, both under `devDependencies` and `resolutions`).
- {kib-repo}blob/{branch}/WORKSPACE.bazel[`WORKSPACE.bazel`] - The version is specified in the `node_version` property.
Besides this property, the list of files under `node_repositories` must be updated along with their respective SHA256 hashes.
These can be found on the https://nodejs.org[nodejs.org] website.
Example for Node.js v16.19.1: https://nodejs.org/dist/v16.19.1/SHASUMS256.txt.asc
See PR {kib-repo}pull/128123[#128123] for an example of how the Node.js version has been upgraded previously.
=== Considerations with major Node.js upgrades
When upgrading to a new major version of Node.js, the following extra steps must be performed:
- Compare the new Node.js versions list of supported platforms with the https://www.elastic.co/support/matrix#matrix_os[Kibana Support Matrix].
As an example, here's the https://github.com/nodejs/node/blob/v18.x/BUILDING.md#platform-list[Node.js 18 supported platform list].
You can change which Node.js major version to view, by changing the selected branch.
If Node.js has dropped support for platform still supported by Kibana, appropriate steps must be taken as soon as possible to deprecate support for this platform. This way support for it can be dropped before the currently used major version of Node.js https://github.com/nodejs/release#release-schedule[reaches End-of-Life].
=== Backporting
The following rules are not set in stone.
Use best judgement when backporting.
==== Node.js patch upgrades
Typically, you want to backport Node.js *patch* upgrades to all supported release branches that run the same *major* Node.js version (which currently is all of them, but this might change in the future once Node.js v18 is released and becomes LTS):
- If upgrading Node.js 16, and the current release is 8.1.x, the main PR should target `main` and be backported to `7.17` and `8.1`.
==== Node.js minor upgrades
Typically, you want to backport Node.js *minor* upgrades to the next minor {kib} release branch that runs the same *major* Node.js version:
- If upgrading Node.js 16, and the current release is 8.1.x, the main PR should target `main` and be backported to `7.17`, while leaving the `8.1` branch as-is.
=== Upgrading installed Node.js version
The following instructions expect that https://github.com/nvm-sh/nvm[nvm] is used to manage locally installed Node.js versions.
Run the following to install the new Node.js version. Replace `<version>` with the desired Node.js version:
[source,bash]
----
nvm install <version>
----
To get the same global npm modules installed with the new version of Node.js as is currently installed, use the `--reinstall-packages-from` command-line argument (optionally replace `16` with the desired source version):
[source,bash]
----
nvm install <version> --reinstall-packages-from=16
----
If needed, uninstall the old version of Node.js by running the following. Replace `<old-version>` with the full version number of the version that should be uninstalled:
[source,bash]
----
nvm uninstall <old-version>
----
Optionally, tell nvm to always use the "highest" installed Node.js 16 version. Replace `16` if a different major version is desired:
[source,bash]
----
nvm alias default 16
----
Alternatively, include the full version number at the end to specify a specific default version.