-
Notifications
You must be signed in to change notification settings - Fork 29.8k
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
watch: preserve output when gracefully restarted #54323
watch: preserve output when gracefully restarted #54323
Conversation
I tried investigating https://github.com/nodejs/node/blob/main/test/sequential/test-watch-mode.mjs to add a test case, but not sure how to proceed, help would be appreciated, thanks! Might need to add an option to the node/test/sequential/test-watch-mode.mjs Lines 118 to 120 in 56ff307
Is this condition needed to avoid flaky tests? The condition could look something like: if (
shouldIncludeGracefulRestartLog ||
(!data.startsWith('Waiting for graceful termination') && !data.startsWith('Gracefully restarted'))
) {
stdout.push(data);
} The test might look something like: it('should preserve output when --watch-preserve-output flag is passed and process is gracefully restarting', async () => {
const file = createTmpFile("console.log('running'); setTimeout(() => {}, 600);");
const args = ['--watch-preserve-output', file];
const { stderr, stdout, } = await runWriteSucceed({ file, watchedFile: file, args, shouldIncludeGracefulRestartLog: true });
assert.strictEqual(stderr, '');
assert.deepStrictEqual(stdout, [
'running',
`Completed running ${inspect(file)}`,
`Restarting ${inspect(file)}`,
`Waiting for graceful termination of ${inspect(file)}`,
`Gracefully restarted ${inspect(file)}`,
'running',
`Completed running ${inspect(file)}`,
]);
}); But I don't know how to "simulate" a slow (500ms) graceful exit, this is not working: |
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #54323 +/- ##
==========================================
- Coverage 87.09% 87.09% -0.01%
==========================================
Files 647 647
Lines 181843 181843
Branches 34894 34887 -7
==========================================
- Hits 158383 158371 -12
- Misses 16766 16771 +5
- Partials 6694 6701 +7 |
do you have a minimal repro example to demonstrate that the log will be cleared? I was not able to reproduce it. |
I don't have a minimal repro, but I found out this bug while developing in a monorepo with lot of dependencies, fortunately the application is open source (not on GitHub yet), you can try to reproduce, with the following commands: # Clone the repo (and go to the correct branch)
git clone ssh://[email protected]:1234/theoludwig/wikipedia-game-solver.git
git checkout develop-next
# Go to the project root
cd wikipedia-game-solver
# Configure environment variables
cp .env.example .env
cp apps/website/.env.example apps/website/.env
cp apps/api/.env.example apps/api/.env
# Install dependencies
pnpm install --frozen-lockfile
# Start the api
cd apps/api
node --run dev Then you can try to modify this file: import router from "@adonisjs/core/services/router"
router.get("/", async () => {
return {
hello: "world",
}
}) Doing so, log "Gracefully restarted './src/bin/server.ts'", and clear the console, even with The bug basically occurs when the Node.js app takes more than 500ms to exit. As you can see in the diff, the function in Node.js look like this: function reportGracefulTermination() {
// Log if process takes more than 500ms to stop.
let reported = false;
clearTimeout(graceTimer);
graceTimer = setTimeout(() => {
reported = true;
process.stdout.write(`${blue}Waiting for graceful termination...${white}\n`);
}, 500).unref();
return () => {
clearTimeout(graceTimer);
if (reported) {
// PROBLEMATIC line:
process.stdout.write(`${clear}${green}Gracefully restarted ${kCommandStr}${white}\n`);
}
};
} For the test, it would be nice to create a minimal repro, but as said:
|
cc @MoLow |
Ok, thanks for providing more information. Now I have a small repro here: import http from "node:http";
const host = "localhost";
const port = 8000;
const server = http.createServer();
server.listen(port, host, () => {
console.log(`Server is running on http://${host}:${port}`);
setTimeout(() => {
process.kill(process.pid);
console.log("killing the process");
}, 1000);
});
process.on("SIGTERM", () => {
console.log("Received SIGTERM, shutting down gracefully...");
setTimeout(() => {
process.exit(0);
}, 10000);
}); When you see |
Thank you for taking the time to make a small reproduction example, I tried, and indeed the bug shows in this small example. Might use this small repro to make a test. |
I am on vacation without a computer until mid-september, I will give a look when I am back if no one else does before me |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Implementation LGTM, please add a test similar to the one added in #45717
@MoLow Thank you for coming back to this PR. When I opened this PR, I already tried to add a test in Could you please explain a little bit more, the reasoning behind this condition: The code being edited by this PR is not already covered by tests on I still tried again, and I've done that: it('should preserve output when --watch-preserve-output flag is passed and process is gracefully restarting', async () => {
const file = createTmpFile(`
import http from "node:http";
const host = "0.0.0.0";
const port = 8_000;
const server = http.createServer();
server.listen(port, host, () => {
console.log(\`Server is running on http://\${host}:\${port}\`);
setTimeout(() => {
process.kill(process.pid);
console.log("killing the process");
}, 1_000);
});
process.on("SIGTERM", () => {
console.log("Received SIGTERM, shutting down gracefully...");
setTimeout(() => {
process.exit(0);
}, 5_000);
});
`);
const args = ['--watch-preserve-output', file];
const { stderr, stdout, } = await runWriteSucceed({ file, watchedFile: file, args, shouldIncludeGracefulRestartLog: true });
assert.strictEqual(stderr, '');
assert.deepStrictEqual(stdout, [
'running',
`Completed running ${inspect(file)}`,
`Restarting ${inspect(file)}`,
`Waiting for graceful termination of ${inspect(file)}`,
`Gracefully restarted ${inspect(file)}`,
'running',
`Completed running ${inspect(file)}`,
]);
});
}); I've basically took the minimal reproduction example from @jakecastelli, and tried making a test with it. But executing |
These are unrelated test failures, right? |
Yes, looks unrelated, I have kicked started a rerun |
Landed in 89a2f56 |
PR-URL: #54323 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Moshe Atlow <[email protected]>
PR-URL: #54323 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Moshe Atlow <[email protected]>
PR-URL: nodejs#54323 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Moshe Atlow <[email protected]>
PR-URL: #54323 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Moshe Atlow <[email protected]>
PR-URL: #54323 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Moshe Atlow <[email protected]>
This MR contains the following updates: | Package | Update | Change | |---|---|---| | [node](https://nodejs.org) ([source](https://github.com/nodejs/node)) | patch | `20.18.0` -> `20.18.1` | MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot). **Proposed changes to behavior should be submitted there as MRs.** --- ### Release Notes <details> <summary>nodejs/node (node)</summary> ### [`v20.18.1`](https://github.com/nodejs/node/releases/tag/v20.18.1): 2024-11-20, Version 20.18.1 'Iron' (LTS), @​marco-ippolito [Compare Source](nodejs/node@v20.18.0...v20.18.1) ##### Notable Changes - \[[`7a8992b2d6`](nodejs/node@7a8992b2d6)] - **doc**: add abmusse to collaborators (Abdirahim Musse) [#​55086](nodejs/node#55086) ##### Commits - \[[`085c3441fe`](nodejs/node@085c3441fe)] - **assert**: show the diff when deep comparing data with a custom message (Giovanni) [#​54759](nodejs/node#54759) - \[[`01f0b0e7b4`](nodejs/node@01f0b0e7b4)] - **benchmark**: adjust config for deepEqual object (Rafael Gonzaga) [#​55254](nodejs/node#55254) - \[[`a45537269b`](nodejs/node@a45537269b)] - **benchmark**: rewrite detect-esm-syntax benchmark (Joyee Cheung) [#​55238](nodejs/node#55238) - \[[`1a0d8ef64f`](nodejs/node@1a0d8ef64f)] - **benchmark**: add no-warnings to process.has bench (Rafael Gonzaga) [#​55159](nodejs/node#55159) - \[[`2be5d611ce`](nodejs/node@2be5d611ce)] - **benchmark**: create benchmark for typescript (Marco Ippolito) [#​54904](nodejs/node#54904) - \[[`a2aa4fa477`](nodejs/node@a2aa4fa477)] - **benchmark**: include ascii to fs/readfile (Rafael Gonzaga) [#​54988](nodejs/node#54988) - \[[`09849105fe`](nodejs/node@09849105fe)] - **benchmark**: add dotenv benchmark (Aviv Keller) [#​54278](nodejs/node#54278) - \[[`6b3c24dbad`](nodejs/node@6b3c24dbad)] - **buffer**: fix out of range for toString (Jason Zhang) [#​54553](nodejs/node#54553) - \[[`f25a5b6dc4`](nodejs/node@f25a5b6dc4)] - **build**: use rclone instead of aws CLI (Michaël Zasso) [#​55617](nodejs/node#55617) - \[[`0bbeb605de`](nodejs/node@0bbeb605de)] - **build**: fix notify-on-review-wanted action (Rafael Gonzaga) [#​55304](nodejs/node#55304) - \[[`5b35836732`](nodejs/node@5b35836732)] - **build**: include `.nycrc` in coverage workflows (Wuli Zuo) [#​55210](nodejs/node#55210) - \[[`f38d1e90e0`](nodejs/node@f38d1e90e0)] - **build**: notify via slack when review-wanted (Rafael Gonzaga) [#​55102](nodejs/node#55102) - \[[`0b985ec4bb`](nodejs/node@0b985ec4bb)] - **build**: remove -v flag to reduce noise (iwuliz) [#​55025](nodejs/node#55025) - \[[`09f75b27a1`](nodejs/node@09f75b27a1)] - **build**: display free disk space after build in the test-macOS workflow (iwuliz) [#​55025](nodejs/node#55025) - \[[`f25760c4a2`](nodejs/node@f25760c4a2)] - **build**: add the option to generate compile_commands.json in vcbuild.bat (Segev Finer) [#​52279](nodejs/node#52279) - \[[`746e78c4f3`](nodejs/node@746e78c4f3)] - ***Revert*** "**build**: upgrade clang-format to v18" (Chengzhong Wu) [#​54994](nodejs/node#54994) - \[[`67834ee646`](nodejs/node@67834ee646)] - **build**: print `Running XYZ linter...` for py and yml (Aviv Keller) [#​54386](nodejs/node#54386) - \[[`ae34e276a2`](nodejs/node@ae34e276a2)] - **build**: pin doc workflow to Node.js 20 (Richard Lau) [#​55755](nodejs/node#55755) - \[[`d0e871a706`](nodejs/node@d0e871a706)] - **build,win**: add winget config to set up env (Hüseyin Açacak) [#​54729](nodejs/node#54729) - \[[`93ac799b6b`](nodejs/node@93ac799b6b)] - **cli**: fix spacing for port range error (Aviv Keller) [#​54495](nodejs/node#54495) - \[[`3ba2e7bf97`](nodejs/node@3ba2e7bf97)] - ***Revert*** "**console**: colorize console error and warn" (Aviv Keller) [#​54677](nodejs/node#54677) - \[[`2f678ea53b`](nodejs/node@2f678ea53b)] - **crypto**: ensure invalid SubtleCrypto JWK data import results in DataError (Filip Skokan) [#​55041](nodejs/node#55041) - \[[`5d28d98542`](nodejs/node@5d28d98542)] - **deps**: update undici to 6.20.0 (Node.js GitHub Bot) [#​55329](nodejs/node#55329) - \[[`0c7f2fc421`](nodejs/node@0c7f2fc421)] - **deps**: update archs files for openssl-3.0.15+quic1 (Node.js GitHub Bot) [#​55184](nodejs/node#55184) - \[[`da15e7edf5`](nodejs/node@da15e7edf5)] - **deps**: upgrade openssl sources to quictls/openssl-3.0.15+quic1 (Node.js GitHub Bot) [#​55184](nodejs/node#55184) - \[[`381f1f9d08`](nodejs/node@381f1f9d08)] - **deps**: update archs files for openssl-3.0.14+quic1 (Node.js GitHub Bot) [#​54336](nodejs/node#54336) - \[[`48d643f78a`](nodejs/node@48d643f78a)] - **deps**: upgrade openssl sources to quictls/openssl-3.0.14+quic1 (Node.js GitHub Bot) [#​54336](nodejs/node#54336) - \[[`7b1796803b`](nodejs/node@7b1796803b)] - **deps**: update timezone to 2024b (Node.js GitHub Bot) [#​55056](nodejs/node#55056) - \[[`8f1956c588`](nodejs/node@8f1956c588)] - **deps**: update acorn-walk to 8.3.4 (Node.js GitHub Bot) [#​54950](nodejs/node#54950) - \[[`20501a7350`](nodejs/node@20501a7350)] - **deps**: update corepack to 0.29.4 (Node.js GitHub Bot) [#​54845](nodejs/node#54845) - \[[`0f81eafecc`](nodejs/node@0f81eafecc)] - **doc**: fix Markdown linter (Antoine du Hamel) [#​55344](nodejs/node#55344) - \[[`df713f0a98`](nodejs/node@df713f0a98)] - ***Revert*** "**doc**: update test context.assert" (Antoine du Hamel) [#​55344](nodejs/node#55344) - \[[`fd6fc61d2c`](nodejs/node@fd6fc61d2c)] - **doc**: add pmarchini to collaborators (Pietro Marchini) [#​55331](nodejs/node#55331) - \[[`b963db9ee2`](nodejs/node@b963db9ee2)] - **doc**: fix `events.once()` example using `AbortSignal` (Ivo Janssen) [#​55144](nodejs/node#55144) - \[[`50b13bfb12`](nodejs/node@50b13bfb12)] - **doc**: add onboarding details for ambassador program (Marco Ippolito) [#​55284](nodejs/node#55284) - \[[`27564b7811`](nodejs/node@27564b7811)] - **doc**: fix initial default value of autoSelectFamily (Ihor Rohovets) [#​55245](nodejs/node#55245) - \[[`9e7be23aa5`](nodejs/node@9e7be23aa5)] - **doc**: tweak onboarding instructions (Michael Dawson) [#​55212](nodejs/node#55212) - \[[`f412a029c3`](nodejs/node@f412a029c3)] - **doc**: update test context.assert (Pietro Marchini) [#​55186](nodejs/node#55186) - \[[`2f7828debb`](nodejs/node@2f7828debb)] - **doc**: fix unordered error anchors (Antoine du Hamel) [#​55242](nodejs/node#55242) - \[[`d08e4c235b`](nodejs/node@d08e4c235b)] - **doc**: mention addons to experimental permission (Rafael Gonzaga) [#​55166](nodejs/node#55166) - \[[`d65c2458dc`](nodejs/node@d65c2458dc)] - **doc**: use correct dash in stability status (Antoine du Hamel) [#​55200](nodejs/node#55200) - \[[`d9839c16cf`](nodejs/node@d9839c16cf)] - **doc**: fix link in `test/README.md` (Livia Medeiros) [#​55165](nodejs/node#55165) - \[[`1ad659afa4`](nodejs/node@1ad659afa4)] - **doc**: add esm examples to node:net (Alfredo González) [#​55134](nodejs/node#55134) - \[[`81ad69d50f`](nodejs/node@81ad69d50f)] - **doc**: move the YAML changes element (sendoru) [#​55112](nodejs/node#55112) - \[[`7a51a161be`](nodejs/node@7a51a161be)] - **doc**: fix the require resolve algorithm in `modules.md` (chirsz) [#​55117](nodejs/node#55117) - \[[`80edcdf899`](nodejs/node@80edcdf899)] - **doc**: update style guide (Aviv Keller) [#​53223](nodejs/node#53223) - \[[`388c754dd2`](nodejs/node@388c754dd2)] - **doc**: add missing `:` to `run()`'s `globPatterns` (Aviv Keller) [#​55135](nodejs/node#55135) - \[[`94302b6a76`](nodejs/node@94302b6a76)] - **doc**: add abmusse to collaborators (Abdirahim Musse) [#​55086](nodejs/node#55086) - \[[`27ff2da964`](nodejs/node@27ff2da964)] - **doc**: add note about `--expose-internals` (Aviv Keller) [#​52861](nodejs/node#52861) - \[[`df6dc753b7`](nodejs/node@df6dc753b7)] - **doc**: remove `parseREPLKeyword` from REPL documentation (Aviv Keller) [#​54749](nodejs/node#54749) - \[[`4baa5c4d10`](nodejs/node@4baa5c4d10)] - **doc**: change backporting guide with updated info (Aviv Keller) [#​53746](nodejs/node#53746) - \[[`9947fc112f`](nodejs/node@9947fc112f)] - **doc**: add missing definitions to `internal-api.md` (Aviv Keller) [#​53303](nodejs/node#53303) - \[[`a4586f0e94`](nodejs/node@a4586f0e94)] - **doc**: update documentation for externalizing deps (Michael Dawson) [#​54792](nodejs/node#54792) - \[[`70504f8522`](nodejs/node@70504f8522)] - **doc**: update `require(ESM)` history and stability status (Antoine du Hamel) [#​55199](nodejs/node#55199) - \[[`9d0041ac40`](nodejs/node@9d0041ac40)] - **doc**: add release key for aduh95 (Antoine du Hamel) [#​55349](nodejs/node#55349) - \[[`0c1666a52a`](nodejs/node@0c1666a52a)] - **events**: allow null/undefined eventInitDict (Matthew Aitken) [#​54643](nodejs/node#54643) - \[[`453df77f99`](nodejs/node@453df77f99)] - **events**: return `currentTarget` when dispatching (Matthew Aitken) [#​54642](nodejs/node#54642) - \[[`0decaab9db`](nodejs/node@0decaab9db)] - **fs**: acknowledge `signal` option in `filehandle.createReadStream()` (Livia Medeiros) [#​55148](nodejs/node#55148) - \[[`00a2fc7166`](nodejs/node@00a2fc7166)] - **lib**: move `Symbol[Async]Dispose` polyfills to `internal/util` (Antoine du Hamel) [#​54853](nodejs/node#54853) - \[[`8e6b606ac4`](nodejs/node@8e6b606ac4)] - **lib**: remove lib/internal/idna.js (Yagiz Nizipli) [#​55050](nodejs/node#55050) - \[[`c96e5cb664`](nodejs/node@c96e5cb664)] - **lib**: the REPL should survive deletion of Array.prototype methods (Jordan Harband) [#​31457](nodejs/node#31457) - \[[`748ed2e559`](nodejs/node@748ed2e559)] - **meta**: move one or more collaborators to emeritus (Node.js GitHub Bot) [#​55300](nodejs/node#55300) - \[[`8b8d35f015`](nodejs/node@8b8d35f015)] - **meta**: bump mozilla-actions/sccache-action from 0.0.5 to 0.0.6 (dependabot\[bot]) [#​55225](nodejs/node#55225) - \[[`d3441ff0c8`](nodejs/node@d3441ff0c8)] - **meta**: bump actions/checkout from 4.1.7 to 4.2.0 (dependabot\[bot]) [#​55224](nodejs/node#55224) - \[[`1c20908558`](nodejs/node@1c20908558)] - **meta**: bump actions/setup-node from 4.0.3 to 4.0.4 (dependabot\[bot]) [#​55223](nodejs/node#55223) - \[[`8a529abd69`](nodejs/node@8a529abd69)] - **meta**: bump peter-evans/create-pull-request from 7.0.1 to 7.0.5 (dependabot\[bot]) [#​55219](nodejs/node#55219) - \[[`9053d210ab`](nodejs/node@9053d210ab)] - **meta**: add mailmap entry for abmusse (Abdirahim Musse) [#​55182](nodejs/node#55182) - \[[`db2496c125`](nodejs/node@db2496c125)] - **meta**: add more information about nightly releases (Aviv Keller) [#​55084](nodejs/node#55084) - \[[`d2ce003b2f`](nodejs/node@d2ce003b2f)] - **meta**: add `linux` to OS labels in collaborator guide (Aviv Keller) [#​54986](nodejs/node#54986) - \[[`37b0bea247`](nodejs/node@37b0bea247)] - **meta**: remove never-used workflow trigger (Aviv Keller) [#​54983](nodejs/node#54983) - \[[`ae27e2dcd7`](nodejs/node@ae27e2dcd7)] - **meta**: add links to alternative issue trackers (Aviv Keller) [#​54401](nodejs/node#54401) - \[[`6e5d524b0f`](nodejs/node@6e5d524b0f)] - **module**: remove duplicated import (Aviv Keller) [#​54942](nodejs/node#54942) - \[[`3a682cca03`](nodejs/node@3a682cca03)] - **path**: remove repetitive conditional operator in `posix.resolve` (Wiyeong Seo) [#​54835](nodejs/node#54835) - \[[`ac1cb8dfdb`](nodejs/node@ac1cb8dfdb)] - **perf_hooks**: add missing type argument to getEntriesByName (Luke Taher) [#​54767](nodejs/node#54767) - \[[`85b3edc83b`](nodejs/node@85b3edc83b)] - **repl**: catch `\v` and `\r` in new-line detection (Aviv Keller) [#​54512](nodejs/node#54512) - \[[`df1f04999e`](nodejs/node@df1f04999e)] - **src**: decode native error messages as UTF-8 (Joyee Cheung) [#​55024](nodejs/node#55024) - \[[`86d718177a`](nodejs/node@86d718177a)] - **src**: update clang-tidy and focus on modernization (Yagiz Nizipli) [#​53757](nodejs/node#53757) - \[[`7d01b6a9c5`](nodejs/node@7d01b6a9c5)] - **src**: cleanup per env handles directly without a list (Chengzhong Wu) [#​54993](nodejs/node#54993) - \[[`a730cdb622`](nodejs/node@a730cdb622)] - **src**: remove duplicate code setting AF_INET (He Yang) [#​54939](nodejs/node#54939) - \[[`f10d9ad283`](nodejs/node@f10d9ad283)] - **stream**: treat null asyncIterator as undefined (Jason Zhang) [#​55119](nodejs/node#55119) - \[[`6027084245`](nodejs/node@6027084245)] - **test**: make `test-loaders-workers-spawned` less flaky (Antoine du Hamel) [#​55172](nodejs/node#55172) - \[[`66a87d19bd`](nodejs/node@66a87d19bd)] - **test**: update multiple assert tests to use node:test (James M Snell) [#​54585](nodejs/node#54585) - \[[`5105188c47`](nodejs/node@5105188c47)] - **test**: update wpt test for encoding (devstone) [#​55151](nodejs/node#55151) - \[[`81bcec0b82`](nodejs/node@81bcec0b82)] - **test**: deflake test/pummel/test-timers.js (jakecastelli) [#​55098](nodejs/node#55098) - \[[`82c402265a`](nodejs/node@82c402265a)] - **test**: deflake test-http-remove-header-stays-removed (Luigi Pinca) [#​55004](nodejs/node#55004) - \[[`78021701ed`](nodejs/node@78021701ed)] - **test**: fix test-tls-junk-closes-server (Michael Dawson) [#​55089](nodejs/node#55089) - \[[`c908b8a2d8`](nodejs/node@c908b8a2d8)] - **test**: fix more tests that fail when path contains a space (Antoine du Hamel) [#​55088](nodejs/node#55088) - \[[`afc1628e73`](nodejs/node@afc1628e73)] - **test**: fix `assertSnapshot` when path contains a quote (Antoine du Hamel) [#​55087](nodejs/node#55087) - \[[`7c88739b83`](nodejs/node@7c88739b83)] - **test**: fix some tests when path contains `%` (Antoine du Hamel) [#​55082](nodejs/node#55082) - \[[`eb4d468671`](nodejs/node@eb4d468671)] - ***Revert*** "**test**: mark test-fs-watch-non-recursive flaky on Windows" (Luigi Pinca) [#​55079](nodejs/node#55079) - \[[`bc7b5249d4`](nodejs/node@bc7b5249d4)] - **test**: make `test-runner-assert` more robust (Aviv Keller) [#​55036](nodejs/node#55036) - \[[`6c2a1386f7`](nodejs/node@6c2a1386f7)] - **test**: update tls test to support OpenSSL32 (Michael Dawson) [#​55030](nodejs/node#55030) - \[[`96406610fa`](nodejs/node@96406610fa)] - **test**: fix `test-vm-context-dont-contextify` when path contains a space (Antoine du Hamel) [#​55026](nodejs/node#55026) - \[[`39a80eed4f`](nodejs/node@39a80eed4f)] - **test**: adjust tls-set-ciphers for OpenSSL32 (Michael Dawson) [#​55016](nodejs/node#55016) - \[[`bd8fd4fceb`](nodejs/node@bd8fd4fceb)] - **test**: add `util.stripVTControlCharacters` test (RedYetiDev) [#​54865](nodejs/node#54865) - \[[`333b5a02d0`](nodejs/node@333b5a02d0)] - **test**: improve coverage for timer promises schedular (Aviv Keller) [#​53370](nodejs/node#53370) - \[[`f48992f433`](nodejs/node@f48992f433)] - **test**: remove unused common utilities (RedYetiDev) [#​54825](nodejs/node#54825) - \[[`93a098c56d`](nodejs/node@93a098c56d)] - **test**: deflake test-http-header-overflow (Luigi Pinca) [#​54978](nodejs/node#54978) - \[[`f849cf677d`](nodejs/node@f849cf677d)] - **test**: fix `soucre` to `source` (Aviv Keller) [#​55038](nodejs/node#55038) - \[[`1a007ea814`](nodejs/node@1a007ea814)] - **test**: add asserts to validate test assumptions (Michael Dawson) [#​54997](nodejs/node#54997) - \[[`6f53c096f8`](nodejs/node@6f53c096f8)] - **test**: move test-http-max-sockets to parallel (Luigi Pinca) [#​54977](nodejs/node#54977) - \[[`aba9dc775e`](nodejs/node@aba9dc775e)] - **test**: remove test-http-max-sockets flaky designation (Luigi Pinca) [#​54976](nodejs/node#54976) - \[[`ee5624bffe`](nodejs/node@ee5624bffe)] - **test**: adjust key sizes to support OpenSSL32 (Michael Dawson) [#​54972](nodejs/node#54972) - \[[`5c11a61140`](nodejs/node@5c11a61140)] - **test**: update test to support OpenSSL32 (Michael Dawson) [#​54968](nodejs/node#54968) - \[[`62f21470e4`](nodejs/node@62f21470e4)] - **test**: update DOM events web platform tests (Matthew Aitken) [#​54642](nodejs/node#54642) - \[[`426851705c`](nodejs/node@426851705c)] - **test_runner**: assert entry is a valid object (Edigleysson Silva (Edy)) [#​55231](nodejs/node#55231) - \[[`b1cad519d7`](nodejs/node@b1cad519d7)] - **test_runner**: use `test:` symbol on second print of parent test (RedYetiDev) [#​54956](nodejs/node#54956) - \[[`63c8f3d436`](nodejs/node@63c8f3d436)] - **test_runner**: replace ansi clear with ansi reset (Pietro Marchini) [#​55013](nodejs/node#55013) - \[[`0b3fb344f7`](nodejs/node@0b3fb344f7)] - **tools**: add `polyfilled` option to `prefer-primordials` rule (Antoine du Hamel) [#​55318](nodejs/node#55318) - \[[`8981309bd9`](nodejs/node@8981309bd9)] - **tools**: make `choco install` script more readable (Aviv Keller) [#​54002](nodejs/node#54002) - \[[`7310abeae1`](nodejs/node@7310abeae1)] - **tools**: bump Rollup from 4.18.1 to 4.22.4 for `lint-md` (dependabot\[bot]) [#​55093](nodejs/node#55093) - \[[`083311e8af`](nodejs/node@083311e8af)] - **tools**: remove redudant code from eslint require rule (Aviv Keller) [#​54892](nodejs/node#54892) - \[[`ae4b2aece1`](nodejs/node@ae4b2aece1)] - **tools**: update error message for ICU in license-builder (Aviv Keller) [#​54742](nodejs/node#54742) - \[[`3ebd31684d`](nodejs/node@3ebd31684d)] - **tools**: update github_reporter to 1.7.1 (Node.js GitHub Bot) [#​54951](nodejs/node#54951) - \[[`397be8a10e`](nodejs/node@397be8a10e)] - **tty**: fix links for terminal colors (Aviv Keller) [#​54596](nodejs/node#54596) - \[[`a3c2ef9e98`](nodejs/node@a3c2ef9e98)] - **util**: update ansi regex (Aviv Keller) [#​54865](nodejs/node#54865) - \[[`efdccc88a2`](nodejs/node@efdccc88a2)] - **watch**: preserve output when gracefully restarted (Théo LUDWIG) [#​54323](nodejs/node#54323) - \[[`226836c5ac`](nodejs/node@226836c5ac)] - **worker**: throw InvalidStateError in postMessage after close (devstone) [#​55206](nodejs/node#55206) - \[[`f39ff4d14b`](nodejs/node@f39ff4d14b)] - **worker**: handle `--input-type` more consistently (Antoine du Hamel) [#​54979](nodejs/node#54979) - \[[`30383ffb9a`](nodejs/node@30383ffb9a)] - **zlib**: throw brotli initialization error from c++ (Yagiz Nizipli) [#​54698](nodejs/node#54698) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this MR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box --- This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40NDAuNyIsInVwZGF0ZWRJblZlciI6IjM3LjQ0MC43IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
PR-URL: nodejs#54323 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Moshe Atlow <[email protected]>
#45717 added
--watch-preserve-output
:However, when the process is "gracefully restarting" (if the process takes more than 500ms to stop), it is still clearing the console which is unexpected with
--watch-preserve-output
.This PR fixes this bug.