Repository navigation
fix(deps): update dependency execa to v10 - #10320
metamask-ci[bot] wants to merge 1 commit into
Conversation
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
|
Warning MetaMask internal reviewing guidelines:
|
e6922dc to
01e5b27
Compare
## Explanation Renovate pull requests reach this workflow but the job skips. The gate matches `dependabot[bot]`, and Renovate pull requests are authored by `metamask-ci[bot]`, the identity of the token it runs with. Confirmed on the first batch: the workflow triggered on `renovate/execa-10.x`, `renovate/unzipper-0.x-lockfile` and `renovate/tstyche-7.x-lockfile` and skipped all three, while MetaMask#10320 sits red on `Check changelog`. So the gate also matches a `renovate/` branch prefix now. Everything else about the job already applies: Renovate leaves the same changelog gap, and `yarn dedupe` and the constraints fixer are harmless no ops when there is nothing to repair. The file name and `environment: dependabot` are both left alone on purpose, and now carry a comment saying why. The token exchange policy keys on the `environment` claim and globs on the workflow path, so renaming either one breaks the token request before the job starts. One behaviour worth noting: Renovate's default `rebaseWhen: auto` stops updating a branch once someone else pushes to it, so the repairs will not be clobbered the way Dependabot clobbers them. ## References Follows MetaMask#10317. Part of WPC-1161. ## Checklist - [ ] I've updated the test suite for new or updated code as appropriate - [x] I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate - [ ] I've communicated my changes to consumers by [updating changelogs for packages I've changed](https://github.com/MetaMask/core/tree/main/docs/processes/updating-changelogs.md) - [ ] I've introduced [breaking changes](https://github.com/MetaMask/core/tree/main/docs/processes/breaking-changes.md) in this PR and have prepared draft pull requests for clients and consumer packages to resolve them <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > The workflow can push commits to dependency-update branches using elevated token permissions, but behavior matches the existing Dependabot path with a narrower trigger. > > **Overview** > Extends the existing **repair constraints, lockfile and changelogs** workflow so it runs on **Renovate** PRs, not only Dependabot. The job gate now also matches branches whose head ref starts with `renovate/`, because Renovate PRs are opened by `metamask-ci[bot]` rather than `dependabot[bot]`. > > Repair commits are authored as **`github-actions[bot]`** instead of `metamask-ci[bot]`, so Renovate’s auto-rebase stops overwriting the fixes after an “external” commit. The workflow display name is generalized; the file path and `environment: dependabot` are unchanged so OIDC token exchange keeps working. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit bcbce01. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## Explanation By default Renovate leaves a manifest alone when the new version already satisfies the declared range, so MetaMask#10318 bumped `ts-jest` to 29.4.12 in `yarn.lock` and touched no `package.json` at all. That keeps the declared minimum at the old version and produces no changelog entry, since nothing published changed. We want a changelog entry for every dependency bump, so `rangeStrategy: bump` moves the range with the release: `^29.4.11` becomes `^29.4.12` across every workspace that declares it, the same as Dependabot does today. Out of range updates like MetaMask#10320 already behaved this way. `peerDependencies` are exempted back to `widen`. An explicit `rangeStrategy` overrides Renovate's peer handling ([`npm/range.ts`](https://github.com/renovatebot/renovate/blob/main/lib/modules/manager/npm/range.ts)), and 11 peer entries here have simple ranges that would be narrowed rather than broadened, `@babel/runtime ^7.0.0` most obviously. The other 11 are complex ranges like `^16.8.0 || ^17.0.0` and widen regardless. The cost is diff size. A single patch now rewrites the same line in every manifest that declares the dependency, and each of those packages needs an entry. MetaMask#10322 is what writes them. > [!IMPORTANT] > Depends on MetaMask#10322. Without it the repair workflow still skips Renovate pull requests, and every one of them lands red on `Check changelog`. ## References Depends on MetaMask#10322. Follows MetaMask#10317. Part of WPC-1161. ## Checklist - [ ] I've updated the test suite for new or updated code as appropriate - [x] I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate - [ ] I've communicated my changes to consumers by [updating changelogs for packages I've changed](https://github.com/MetaMask/core/tree/main/docs/processes/updating-changelogs.md) - [ ] I've introduced [breaking changes](https://github.com/MetaMask/core/tree/main/docs/processes/breaking-changes.md) in this PR and have prepared draft pull requests for clients and consumer packages to resolve them <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Tooling-only change to Renovate; it does not alter runtime code, but it will enlarge dependency PR diffs across workspaces. > > **Overview** > Renovate is configured to **raise semver ranges in `package.json`** when a newer release still satisfies the existing constraint (`rangeStrategy: bump`), matching Dependabot behavior so lockfile-only bumps no longer skip manifest updates and downstream changelog tooling can see a published change. > > A **peer-only override** sets `rangeStrategy: widen` for `peerDependencies`, undoing the global bump so wide peer ranges stay broadened instead of tightened. > > **Note:** This is meant to work with the changelog repair workflow in MetaMask#10322; without that, Renovate PRs may fail `Check changelog`. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 9ab221a. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY -->
This PR contains the following updates:
^5.0.0→^10.0.1Release Notes
sindresorhus/execa (execa)
v10.0.1Compare Source
preferLocalargument escaping edge-case on Windows (#1259)e771733v10.0.0Compare Source
Breaking
Require Node.js 22. (#1243)
04b4454The subprocess is now a normal promise, instead of a
ChildProcessinstance augmented with promise methods. All the methods and properties documented by Execa are unchanged. Node.js-specificChildProcessAPIs (such as.on(),.send(),.ref()and.unref()) must now be accessed through the newsubprocess.nodeChildProcessproperty. (#1255)ade74bfconst subprocess = execa('node', ['file.js']); - subprocess.on('spawn', onSpawn); + subprocess.nodeChildProcess.on('spawn', onSpawn);execaCommand()andexecaCommandSync(). Use the template string syntax instead, which splits on spaces. If the command is a dynamic string, split it withparseCommandString(). (#1244)3ced394stdio: [..., 'ipc']syntax. Use theipc: trueoption instead. (#1245)dcf611cinputorinputFileoption is combined with an inheritedstdin(for examplestdio: 'inherit'), the explicit input is now used, instead of being ignored. To combine multiple inputs, pass an array likestdin: ['inherit', {string: 'input'}]. (#1232)3ed0544Improvements
killDescendantsoption. This is useful when the subprocess spawns its own processes, such as when using theshelloption. (#1256)84fa0ecsubprocess.readableStream(),subprocess.writableStream()orsubprocess.transformStream(). (#1254)29d9cfcsubprocess.pipe()now exposes the destination subprocess' methods, so the piped output can be consumed directly: iterate over its output lines, convert it to a stream, or exchange IPC messages. (#1252)c31c94cstdiovalue as a{value, input: true}object. Direction-ambiguous values ('pipe','inherit', files and transforms) default to output on additional file descriptors. (#1246, #1249)487a3a49fbf5bachunkargument is now typed based on the transform's mode, instead of always beingunknown:stringfor line transforms,Uint8Arrayfor binary transforms, andunknownin object mode. (#1247)0a7b4f8Fixes
verbose,maxBuffer, etc.) when theipcoption istrue:fd3andipcno longer target the same file descriptor. (#1241)b886883v9.6.1Compare Source
VerboseOptiontype not being properly exported (#1215)7891c39v9.6.0Compare Source
d49104av9.5.3Compare Source
1ac5b91v9.5.2Compare Source
Bug fixes
v9.5.1Compare Source
Bug fixes
verbosemode on Windows (thanks @IIIMADDINIII). (#1167)v9.5.0Compare Source
Features
stdoutorstderrto a file, allow appending instead of overwriting. (#1166)v9.4.1Compare Source
Bug fixes
process.execPathwith Deno. Thanks @w3cj! (#1160)v9.4.0Compare Source
Features
Bug fixes
execaNode()and thepreferLocaloption modify thePATHenvironment variable. This release includes some minor improvements to ensure that environment variable remains small (sindresorhus/npm-run-path#20). It also handles a few related edge cases better (sindresorhus/npm-run-path#21).Documentation
v9.3.1Compare Source
Thanks @holic and @jimhigson for your contributions!
Bugs
Bugs (types)
envoption. It was currently failing for Remix or Next.js users. (by @holic) (#1141)Documentation
v9.3.0Compare Source
Features
verboseoption can now be a function to customize logging. (#1130)v9.2.0Compare Source
This release includes a new set of methods to exchange messages between the current process and a Node.js subprocess, also known as "IPC". This allows passing and returning almost any message type to/from a Node.js subprocess. Also, debugging IPC is now much easier.
Moreover, a new
gracefulCanceloption has also been added to terminate a subprocess gracefully.For a deeper dive-in, please check and share the release post!
Thanks @iiroj for your contribution, @SimonSiefke and @adymorz for reporting the bugs fixed in this release, and @karlhorky for improving the documentation!
Deprecations
'ipc'to thestdiooption has been deprecated. It will be removed in the next major release. Instead, theipc: trueoption should be used. (#1056)execaCommand()method has been deprecated. It will be removed in the next major release. If most cases, the template string syntax should be used instead.If the file and/or multiple arguments are supplied as a single string, parseCommandString(command) can split that string into an array. More info. (#1054)
Features
gracefulCanceloption andgetCancelSignal()method to terminate a subprocess gracefully.error.isGracefullyCanceledwas also added. (#1109)error.isForcefullyTerminated. It istruewhen the subprocess was terminated by theforceKillAfterDelayoption. (#1111)subprocess.sendMessage(message)and receives them withsubprocess.getOneMessage().subprocess.getEachMessage()listens to multiple messages.sendMessage(message),getOneMessage()andgetEachMessage()instead. Those are the same methods, but imported directly from the'execa'module.ipcInputoption sends an IPC message from the current process to the subprocess as it starts. This enables passing almost any input type to a Node.js subprocess. (#1068)result.ipcOutputarray contains all the IPC messages sent by the subprocess to the current process. This enables returning almost any output type from a Node.js subprocess. (#1067, #1071, #1075)verbose: 'full'option now logs every IPC message sent by the subprocess, for debugging. More info here and there. (#1063)Types
ExecaMethod,ExecaNodeMethodandExecaScriptMethod,ExecaSyncMethodandExecaScriptSyncMethodtypes. (#1066)Messagetype, for IPC. (#1059)forceKillAfterDelay: trueoption. (#1116)Bug fixes
{file}to both thestdinand thestdoutorstderroptions. (#1058)cancelSignaloption. (#1108)engines.nodefield inpackage.json. Supported Node.js version is^18.19.0or>=20.5.0. (by @iiroj) (#1101)v9.1.0Compare Source
Features (types)
TemplateExpressiontype. (#1049)v9.0.2Compare Source
Bug fixes (types)
--lib domfor TypeScript users (#1043, #1044)rejectoption (#1046)v9.0.1Compare Source
Bug fixes (types)
3bdab606cc519bfee011dv9.0.0Compare Source
This major release brings many important features including:
Please check the release post for a high-level overview! For the full list of breaking changes, features and bug fixes, please read below.
Thanks @younggglcy, @koshic, @am0o0 and @codesmith-emmy for your help!
One of the maintainers @ehmicky is looking for a remote full-time position. Specialized in Node.js back-ends and CLIs, he led Netlify Build, Plugins and Configuration for 2.5 years. Feel free to contact him on his website or on LinkedIn!
Breaking changes (not types)
Dropped support for Node.js version
<18.19.0and20.0.0 - 20.4.0. (834e372)When the
encodingoption is'buffer', the output (result.stdout,result.stderr,result.all) is now anUint8Arrayinstead of aBuffer. For more information, see this blog post. (by @younggglcy) (#586)encodingoption. (#586, #928)subprocess.pipeStdout(),subprocess.pipeStderr()andsubprocess.pipeAll()has been removed. Instead, a{file: './path'}object should be passed to thestdoutorstderroption. (#752)subprocess.pipeStdout(),subprocess.pipeStderr()andsubprocess.pipeAll()has been removed. Instead, the stream should be passed to thestdoutorstderroption. If the stream does not have a file descriptor,['pipe', stream]should be passed instead. (#752)subprocess.pipeStdout(),subprocess.pipeStderr()andsubprocess.pipeAll()methods have been renamed tosubprocess.pipe(). The command and its arguments can be passed tosubprocess.pipe()directly, without callingexeca()a second time. Thefrompiping option can specify'stdout'(the default value),'stderr'or'all'. (#757)signaloption tocancelSignal. (#880)error.killedtoerror.isTerminated. (#625)try { await execa('node', ['file.js']); } catch (error) { - if (error.killed) { + if (error.isTerminated) { // ... } }subprocess.cancel()has been removed. Please use eithersubprocess.kill()or thecancelSignaloption instead. (#711)forceKillAfterTimeoutoption toforceKillAfterDelay. Also, it is now passed toexeca()instead ofsubprocess.kill(). (#714, #723)verboseoption is now a string enum instead of a boolean.falsehas been renamed to'none'andtruehas been renamed to'short'. (#884)execPathoption has been renamed tonodePath. It is now a noop unless thenodeoption istrue. Also, it now works even if thepreferLocaloption isfalse. (#812, #815)serializationoption is now'advanced'instead of'json'. In particular, when callingsubprocess.send(object)with an object that contains functions or symbols, those were previously silently removed. Now this will throw an exception. (#905)subprocess.stdout,subprocess.stderrorsubprocess.allis manually piped, the.pipe()call must now happen as soon assubprocessis created. Otherwise, the output at the beginning of the subprocess might be missing. (#658, #747)const subprocess = execa('node', ['file.js']); - setTimeout(() => { subprocess.stdout.pipe(process.stdout); - }, 0);subprocess.kill()and to thekillSignaloption cannot be lowercase anymore. (#1025)Features
Execution
execa()), as opposed to only$. Conversely,$can now use the regular array syntax. (#933)execa(options). (#933, #965)execa(),execaNode(), theinputFileoption, thenodePathoption or theshelloption. (#630, #631, #632, #635)Text lines
linesoption. (#741, #929, #931, #948, #951, #957)Piping multiple subprocesses
subprocess.pipe()without callingexeca(). A template string can also be used. (#840, #859, #864)result.pipedFromanderror.pipedFrom. (#834)stdin/stdout/stderrby using thefromandtopiping options. (#757, #834, #903, #920)unpipeSignalpiping option. (#834, #852)Input/output
stdin,stdoutandstderroptions. For example,stdout: ['inherit', 'pipe']prints the output to the terminal while still returning it asresult.stdout. (#643, #765, #941, #954){file: './path'}object or a file URL to thestdin,stdoutorstderroption. (#610, #614, #621, #671, #1004)stdin,stdoutorstderroption. (#693, #697, #698, #699, #709, #736, #737, #739, #740, #746, #748, #755, #756, #780, #783, #867, #915, #916, #917, #919, #924, #926, #945, #969)Uint8Arrayto theinputorstdinoption. (834e372, #670, #1029)stdinoption. (#604, #944)stdin,inputandinputFileoptions. (#666)result.stdoutandresult.stderrby usingresult.stdio. (#676)stdoutandstderrwith the following options:verbose,lines,stripFinalNewline,maxBuffer,buffer. (#966, #970, #971, #972, #973, #974)Streams
ReadableStreamorWritableStreamto thestdin,stdoutorstderroption. (#615, #619, #645)Duplex, Node.jsTransformor webTransformStreamto thestdin,stdoutorstderroption. (#937, #938)subprocess.readable(),subprocess.writable()orsubprocess.duplex(). (#912, #922, #958)Verbose mode
verbose: 'short'orverbose: 'full'option. (#887, #890)verbose: 'full'option. (#884, #950, #962, #990)verboseoption. (#883, #893, #894)Debugging
result.durationMsanderror.durationMs. (#896)result.cwd. Previously onlyerror.cwdwas available. Also,result.cwdanderror.cwdare now normalized to absolute file paths. (#803)result.escapedCommandin a terminal is now safe. (#875)Errors
ExecaErrorandExecaSyncErrorclasses are now exported. (#911)error.cause. (#911)maxBufferoption by usingerror.isMaxBuffer. (#963)error.message:error.stdoutanderror.stderrare now interleaved if thealloption istrue. Additional file descriptors are now printed too. Also, the formatting has been improved. (#676, #705, #991, #992)error.messageare now escaped, so they don't result in visual bugs when printed in a terminal. (#879)errorevent is emitted onsubprocess.stdoutorsubprocess.stderr. (#814)Termination
subprocess.kill(). (#811, #836, #1023)forceKillAfterDelayandkillSignaloptions now apply to terminations due not only tosubprocess.kill()but also to thecancelSignal,timeout,maxBufferandcleanupoptions. (#714, #728)Node.js files
nodePathandnodeOptionsoptions with any method, as opposed to onlyexecaNode(), by passing thenode: trueoption. (#804, #812, #815)execaNode()or thenode: trueoption, the current Node.js version is now inherited deeply. If the subprocess spawns other subprocesses, they will all use the same Node.js version. (#812, #815, #1011)Synchronous execution
allandbuffer: falseoptions withexecaSync(), as opposed to onlyexeca(). (#953, #956)$.salias for$.sync. (#594)Inter-process communication
ipc: trueoption, as opposed to the more verbosestdio: ['pipe', 'pipe', 'pipe', 'ipc']option. (#794)Input validation
input,timeout,cwd,detached,cancelSignalandencodingoptions. (#668, #715, #803, #928, #940)execa()and the other exported methods. (#838, #873, #899)subprocess.kill()and to thekillSignaloption. (#1025)Bug fixes
undefinedvalues as options. This now uses the option's default value. (#712)inputFileoption points to a missing file. (#609)bufferoption isfalseandsubprocess.stdouterrors. (#729)'overlapped'to thestdoutorstderroption withexecaSync().Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about these updates again.
This PR has been generated by Mend Renovate CLI.