-
Notifications
You must be signed in to change notification settings - Fork 29.6k
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
v12.17.0 release proposal #33197
v12.17.0 release proposal #33197
Conversation
The test starts child processes. A recent change is suspected of causing flaky crashes on one of the alpine buildbots but we can't know for sure because the test hides the child's stderr. Refs: #31547 (comment) PR-URL: #31612 Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net>
PR-URL: #31569 Reviewed-By: Denys Otrishko <shishugi@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Richard Lau <riclau@uk.ibm.com> Reviewed-By: Rich Trott <rtrott@gmail.com>
PR-URL: #29547 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
To indicate which lines are test lines and which from Node.js core, it's good to rely on `util.inspect()` while inspecting errors. The stack was accessed directly instead in multiple cases and logging that does not provide as much information as using `util.inspect()`. PR-URL: #31425 Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Anto Aravinth <anto.aravinth.cse@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Yihong Wang <yh.wang@ibm.com>
Previously, the test could fail on slow machines because the child process was still in the process of starting up after one second, and not yet idle. To resolve this: - Wait for a message from the child process indicating that it had started. - Wait some time after that, but make it platform-dependent to account for timing differences. - Remove the timer in the child process. PR-URL: #31645 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Richard Lau <riclau@uk.ibm.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Rich Trott <rtrott@gmail.com>
a555be2 re-assigned `async_.data` to indicate success or failure of the constructor. As the `HandleWrap` implementation uses that field to access the `HandleWrap` instance from the libuv handle, this introduced two issues: - It implicitly assumed that casting `MessagePort*` → `void*` → `HandleWrap*` would be valid. - It made the `HandleWrap::OnClose()` function fail with a `nullptr` dereference if the constructor did fail. In particular, the second issue made test/parallel/test-worker-cleanexit-with-moduleload.js` crash at least once in CI. Since re-assigning `async_.data` isn’t actually necessary here (only a leftover from earlier versions of that commit), fix this by using a local variable instead, and add a `CHECK` that provides better error messages for this type of issue in the future. Refs: #31605 PR-URL: #31696 Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com> Reviewed-By: David Carlier <devnexen@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
Two scenarios should be tested: 1. The completion is triggered and the result is printed before the next invocation. 2. The completion is triggered multiple times right after each other without waiting for the result. In that case only the last result should be printed. The first scenario did not need a timeout while the latter did not need a timeout for the second invocation. PR-URL: #31708 Fixes: #31094 Reviewed-By: Denys Otrishko <shishugi@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit adds a check to test-crypto-dh-statless to avoid an error if the curve secp224k1 is not present. This could occur if node was configured with shared-openssl. The use case for this was building on RHEL 8.1 which only has the following curves: $ openssl ecparam -list_curves secp224r1 : NIST/SECG curve over a 224 bit prime field secp256k1 : SECG curve over a 256 bit prime field secp384r1 : NIST/SECG curve over a 384 bit prime field secp521r1 : NIST/SECG curve over a 521 bit prime field prime256v1: X9.62/SECG curve over a 256 bit prime field PR-URL: #31715 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Tobias Nießen <tniessen@tnie.de> Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit adds a missing comma for consistency with the surrounding lines. PR-URL: #31959 Reviewed-By: Jiawen Geng <technicalcute@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Richard Lau <riclau@uk.ibm.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Сковорода Никита Андреевич <chalkerx@gmail.com>
Digging in to the delta between V8's source map library, and chromium's the most significant difference that jumped out at me was that we were failing to sort generated columns. Since negative offsets are not restricted in the spec, this can lead to bugs. fixes: #31286 PR-URL: #31927 Fixes: #31286 Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com>
PR-URL: #31922 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: David Carlier <devnexen@gmail.com>
Change suggested by bnoordhuis. Improve handing of internal field counting by using enums. Helps protect against future possible breakage if field indexes are ever changed or added to. Signed-off-by: James M Snell <jasnell@gmail.com> PR-URL: #31960 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Allow using the handle more directly for I/O in other parts of the codebase. Originally landed in the QUIC repo Original review metadata: ``` PR-URL: nodejs/quic#165 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com> ``` Signed-off-by: James M Snell <jasnell@gmail.com> PR-URL: #31871 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
isLegalPort was used multiple places in the same way -- to validate the port and throw if necessary. Moved into internal/validators. PR-URL: #31851 Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Introduce the SocketAddress utility class. The QUIC implementation makes extensive use of this for handling of socket addresses. It was separated out to make it generically reusable throughout core Signed-off-by: James M Snell <jasnell@gmail.com> PR-URL: #32070 Reviewed-By: David Carlier <devnexen@gmail.com> Reviewed-By: Richard Lau <riclau@uk.ibm.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Denys Otrishko <shishugi@gmail.com>
This commit adds a WASI option allowing the __wasi_proc_exit() function to return an exit code instead of forcefully terminating the process. PR-URL: #32101 Fixes: #32093 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Tobias Nießen <tniessen@tnie.de>
Although these `using`s can derived from other header files, it will be better to be self-contained. PR-URL: #32117 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: David Carlier <devnexen@gmail.com> Reviewed-By: Richard Lau <riclau@uk.ibm.com> Reviewed-By: Anna Henningsen <anna@addaleax.net>
Convert hard assertion into a throw with a useful error message in src/module_wrap.cc. PR-URL: #31899 Reviewed-By: Anna Henningsen <anna@addaleax.net>
Per our style guide, avoid personal pronouns (I, you, we, etc.) in reference documentation. PR-URL: #32142 Reviewed-By: Tobias Nießen <tniessen@tnie.de> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Per our style guide, avoid personal pronouns (I, you, we, etc.) in reference documentation. PR-URL: #32142 Reviewed-By: Tobias Nießen <tniessen@tnie.de> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Per our style guide, avoid personal pronouns (I, you, we, etc.) in reference documentation. PR-URL: #32142 Reviewed-By: Tobias Nießen <tniessen@tnie.de> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
/cc @nodejs/platform-aix There's an issue with CI, can you please take a look? https://ci.nodejs.org/job/node-test-commit-aix/30702/nodes=aix71-ppc64/console
|
Running AIX CI on v12.x to check if that works: https://ci.nodejs.org/job/node-test-commit-aix/30710/ |
@nodejs/releasers what do you suggest here? This seems to introduce a bug on AIX but I have no idea what could be the cause... |
@targos I can’t do it tonight because it’s a bit late for that, but would it be worth for somebody to take an AIX CI machine and bisect on that to see where it’s coming from? I don’t know what other path forward there is |
I can take a look in the morning. |
@richardlau thanks! should I still start to bisect? Edit: started. Bisecting: 174 revisions left to test after this (roughly 8 steps) $ git bisect good $ git bisect good $ git bisect good $ git bisect good $ git bisect good $ git bisect good $ git bisect good $ git bisect good |
👋 Thanks for starting the bisect. FWIW I've also started bisecting (using Edit: Unfortunately it looks like I can't reproduce the failure on the system I've been testing on. |
@richardlau I'm really puzzled now. My bisect session points to the release commit! |
@targos I’m assuming the test is failing always? Or is it failing in a flaky way? |
This is looking like some sort of infrastructure issue where the AIX CI machine doesn't appear to be able to download https://raw.githubusercontent.com/ URLs. e.g.
(Note this build passed)
The cc @nodejs/platform-aix |
It failed 3 times in a row before I started bisecting. |
OK, then can I build and promote the release? |
I'd be okay with it but I can't remember if the release build attempts to build the docs (in which case it's likely to fail if the release AIX machine has the same issue as the two test ones). |
AIX build succeeded |
@nodejs/platform-aix We do need to address the issue in #33197 (comment) but given all the bisect AIX CI's passed I'm okay with going ahead with the v12.17.0 release today. |
Notable changes: * ECMAScript Modules - `--experimental-modules` flag removal * AsyncLocalStorage API (experimental) * REPL previews * REPL reverse-i-search * REPL substring-based search * Error monitoring * Monitoring `error` events * Monitoring uncaught exceptions * File system APIs * New function: `fs.readv` * Optional parameters in `fs.read` * Console `groupIndentation` option * `maxStringLength` option for `util.inspect()` * Stable N-API release 6 * Stable diagnostic reports * Increase of the default server headers timeout * New `--trace-sigint` CLI flag * Various crypto APIs now support Diffie-Hellman secrets * Added support for the `dns.ALL` flag in `dns.lookup()` * Added a new experimental API to interact with Source Map V3 data * Added support for passing a `transferList` along with `workerData` to the `Worker` constructor PR-URL: #33197
2020-05-26, Version 12.17.0 'Erbium' (LTS), @targos
Notable Changes
ECMAScript Modules -
--experimental-modules
flag removalAs of Node.js 12.17.0, the
--experimental-modules
flag is no longer necessaryto use ECMAScript modules (ESM). However, the ESM implementation in Node.js
remains experimental. As per our stability index: “The feature is not subject
to Semantic Versioning rules. Non-backward compatible changes or removal may
occur in any future release.” Users should be cautious when using the feature
in production environments.
Unlike Node.js 14, using ESM will still emit a runtime experimental warning,
either when a module is used a the application's entrypoint or the first time
dynamic
import()
is called.Please keep in mind that the implementation of ESM in Node.js differs from the
developer experience you might be familiar with. Most transpilation workflows
support features such as named exports from CommonJS module imports, optional
file extensions or JSON modules that the Node.js ESM implementation does not
support. It is highly likely that modules from transpiled environments will
require a certain degree of refactoring to work in Node.js. It is worth
mentioning that many of our design decisions were made with two primary goals.
Spec compliance and Web Compatibility. It is our belief that the current
implementation offers a future proof model to authoring ESM modules that paves
the path to Universal JavaScript. Please read more in our documentation.
The ESM implementation in Node.js is still experimental but we do believe that
we are getting very close to being able to call ESM in Node.js “stable”.
Removing the flag is a huge step in that direction.
We expect to remove the warning Node.js 12 later this year, possibly in late
October, when Node.js 14 will become LTS.
AsyncLocalStorage API (experimental)
The
AsyncLocalStorage
class has been introduced in the Async Hooks module.This API allows keeping a context across asynchronous operations. For instance,
if a sequence id is stored within an instance of
AsyncLocalStorage
for eachHTTP request entering in a server, it will be possible to retrieve this id
without having access the current HTTP request:
In this example, the
logWithId
function will always know what the currentrequest id is, even when there are multiple requests in parallel.
What can this API be used for
Use cases of this API include:
Note: This API is still experimental and some methods might change in future releases of Node.js
Contributed by Vladimir de Turckheim - #26540.
REPL previews
If further input is predicable, a suggestion is inserted as preview.
The REPL now supports previews similar to the Chrome DevTools console. An input
suggestion is inserted as preview in case further input is predicable. The
suggestion may be accepted by either pressing
<TAB>
or<RIGHT>
at the end ofthe input.
On top of that, output is previewed when entering variable names or function
calls that have no side effect.
Check the preview in action
and try it out on your own. Just access the REPL on your terminal by starting
the Node.js executable without any further command.
Contributed by Ruben Bridgewater - #30907, #30811.
REPL reverse-i-search
The REPL supports bi-directional reverse-i-search similar to
ZSH. It is triggered with
<ctrl> + R
to search backwards and
<ctrl> + S
to search forwards.Entries are accepted as soon as any button is pressed that doesn't correspond
with the reverse search. Cancelling is possible by pressing
escape
or<ctrl> + C
.Changing the direction immediately searches for the next entry in the expected
direction from the current position on.
Reverse-i-search in action.
Contributed by Ruben Bridgewater - #31006.
REPL substring-based search
It is now possible to access former history entries very fast by writing the
first characters of the formerly entered code you are looking for. Then push
<UP>
or<DOWN>
to go through the history entries that start with thosecharacters.
It works similar to the Fish Shell substring-based
history search.
Contributed by Ruben Bridgewater - #31112.
Error monitoring
Monitoring
error
eventsIt is now possible to monitor
'error'
events on anEventEmitter
withoutconsuming the emitted error by installing a listener using the symbol
EventEmitter.errorMonitor
:Contributed by Gerhard Stoebich - #30932.
Monitoring uncaught exceptions
It is now possible to monitor
'uncaughtException'
events without overridingthe default behavior that exits the process by installing an
'uncaughtExceptionMonitor'
listener:Contributed by Gerhard Stoebich - #31257.
File system APIs
New function:
fs.readv
This new function (along with its sync and promisified versions) takes an array
of
ArrayBufferView
elements and will write the data it reads sequentially tothe buffers.
Contributed by Sk Sajidul Kadir - #32356.
Optional parameters in
fs.read
A new overload is available for
fs.read
(along with its sync and promisifiedversions), which allows to optionally pass any of the
offset
,length
andposition
parameters.Contributed by Lucas Holmquist - #31402.
Console
groupIndentation
optionThe Console constructor (
require('console').Console
) now supports different group indentations.This is useful in case you want different grouping width than 2 spaces.
Contributed by rickyes - #32964.
maxStringLength
option forutil.inspect()
It is now possible to limit the length of strings while inspecting objects.
This is possible by passing through the
maxStringLength
option similar to:Contributed by rosaxny - #32392.
Stable N-API release 6
The following N-API features are now stable as part of the N-API 6 release:
napi_set_instance_data
napi_get_instance_data
napi_key_collection_mode
napi_key_filter
napi_key_conversion
napi_create_bigint_int64
napi_create_bigint_uint64
napi_create_bigint_words
napi_get_value_bigint_int64
napi_get_value_bigint_uint64
napi_get_value_bigint_words
napi_get_all_property_names
Stable diagnostic reports
The Diagnostic Report
feature is now stable and supports a new
--report-compact
flag to write thereports in a compact, single-line JSON format, more easily consumable by log
processing systems than the default multi-line format designed for human
consumption.
Increase of the default server headers timeout
The default value of
server.headersTimeout
forhttp
andhttps
servers wasincreased from
40000
to60000
(60 seconds). This to accomodate for systemslike AWS ELB that have a timeout of 60 seconds.
Contributed by Tim Costa - #30071.
Other changes
--trace-sigint
CLI flag that will print the current executionstack on SIGINT (legendecas) #29207.
dns.ALL
flag, that can be passed todns.lookup()
withdns.V4MAPPED
to return resolved IPv6 addresses as well as IPv4 mapped IPv6 addresses (murgatroid99) #32183.
transferList
along withworkerData
to theWorker
constructor (Juan José Arboleda) #32278.