adobe / adobe/aio-cli-plugin-app

app:pack aborts when Node writes process warnings to api-mesh stderr

Aperta Adatta ai principianti
#930 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
JavaScript
Stelle
28
Fork
41
Merge medio
1g 2h
PR unite (30g)
3

Descrizione

### Describe the bug

`app:pack` treats **any** output on the `aio api-mesh get --json` child process' stderr as a fatal error:

https://github.com/adobe/aio-cli-plugin-app/blob/master/src/commands/app/pack.js#L198-L202

```js
const { stdout, stderr } = await execa('aio', ['api-mesh', 'get', '--json'], { cwd: process.cwd() })

if (stderr) {
throw new Error(stderr)
}
```

Node process warnings are written to stderr while the command still exits `0`. On Node 22 the `punycode` deprecation (`DEP0040`) is emitted on essentially every `aio` invocation, so a **successful** mesh lookup aborts packaging, with the deprecation notice reported as the error.

The thrown message doesn't contain `Unable to get mesh config.`, so it falls through the classification below and is rethrown, failing the whole command.

### Steps to reproduce

1. Node 22 (`v22.22.2` here), `@adobe/aio-cli` 11.1.2, `@adobe/aio-cli-plugin-app` 14.8.1, `@adobe/aio-cli-plugin-api-mesh` 5.7.0 installed
2. Run `aio app:pack` in any App Builder project

```
- Getting api-mesh config...
✖ Command failed with exit code 1: aio api-mesh get --json
(node:42333) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
› Error: Command failed with exit code 1: aio api-mesh get --json
```

Confirming the warning goes to stderr on an otherwise clean run:

```console
$ aio api-mesh get --json 2>/tmp/err.txt >/tmp/out.txt ; cat /tmp/err.txt
(node:25694) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
```

### Expected behaviour

Node process warnings on the child's stderr should not be interpreted as an api-mesh failure.

### Note on the stderr check

The `if (stderr) throw` is not redundant and shouldn't simply be dropped — it is how the "no mesh" case is detected. `api-mesh:get` reports that via `this.error(msg, { exit: false })`, which writes to stderr and **exits 0**, so execa resolves:

https://github.com/adobe/aio-cli-plugin-api-mesh/blob/main/src/commands/api-mesh/get.js

The fix therefore needs to keep the check but exclude Node process warnings from it.

### Secondary bug in the same block

```js
if (err?.message.includes('Error: Unable to get mesh config.')) {
```

The optional chaining stops one level short. If a thrown value has no `message` — a non-`Error` throw, or an execa error carrying output only on `stderr` — this raises `TypeError: Cannot read properties of undefined (reading 'includes')` inside the catch, masking the original failure. This is currently asserted as expected behaviour in `test/commands/app/pack.test.js`:

```js
await expect(command.createDeployYamlFile(extConfig)).rejects.toEqual(TypeError('Cannot read properties of undefined (reading \'includes\')'))
```

### Environment

| | |
|---|---|
| OS | Linux 5.15 (Ubuntu) |
| Node | v22.22.2 |
| `@adobe/aio-cli` | 11.1.2 |
| `@adobe/aio-cli-plugin-app` | 14.8.1 |
| `@adobe/aio-cli-plugin-api-mesh` | 5.7.0 |

I have a fix ready and will open a PR referencing this issue.

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Inizia in src/commands/app/pack.js, intorno alla chiamata aio api-mesh get --json, e leggi i test correlati in test/commands/app/pack.test.js. Mantieni il rilevamento del caso di stderr no-mesh gestendo al contempo gli avvisi del processo Node, e verifica che la mancanza dei messaggi di errore non mascheri più il fallimento originale. Esegui i test pack mirati e conferma che la ricerca riuscita del mesh procede su Node 22.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
javascript, node.js
Ambito
cli
Tipo di issue
Bug
Difficoltà
2/5
Tempo stimato
1-3 ore
Stato di attività
Tranquilla
Chiarezza
Specificata chiaramente
Idoneità per principianti
68/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.