@cat-indev/catops-cli 0.0.1-alpha.7 → 0.0.1-alpha.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +76 -40
  2. package/dist/core/Menu.js +4 -3
  3. package/dist/core/Menu.js.map +1 -1
  4. package/dist/core/Notifier.js +7 -7
  5. package/dist/core/Notifier.js.map +1 -1
  6. package/dist/core/classifiers.d.ts +2 -1
  7. package/dist/core/classifiers.js +3 -2
  8. package/dist/core/classifiers.js.map +1 -1
  9. package/dist/core/messages.d.ts +3 -2
  10. package/dist/core/messages.js +4 -3
  11. package/dist/core/messages.js.map +1 -1
  12. package/dist/services/ansible.d.ts +7 -6
  13. package/dist/services/ansible.js +10 -10
  14. package/dist/services/ansible.js.map +1 -1
  15. package/dist/services/archive.d.ts +4 -4
  16. package/dist/services/archive.js +6 -6
  17. package/dist/services/archive.js.map +1 -1
  18. package/dist/services/argocd.d.ts +11 -8
  19. package/dist/services/argocd.js +14 -14
  20. package/dist/services/argocd.js.map +1 -1
  21. package/dist/services/az.d.ts +13 -8
  22. package/dist/services/az.js +17 -14
  23. package/dist/services/az.js.map +1 -1
  24. package/dist/services/docker.d.ts +10 -7
  25. package/dist/services/docker.js +12 -12
  26. package/dist/services/docker.js.map +1 -1
  27. package/dist/services/git.d.ts +9 -9
  28. package/dist/services/git.js +16 -16
  29. package/dist/services/git.js.map +1 -1
  30. package/dist/services/helm.d.ts +4 -4
  31. package/dist/services/helm.js +6 -6
  32. package/dist/services/helm.js.map +1 -1
  33. package/dist/services/kubectl.d.ts +4 -2
  34. package/dist/services/kubectl.js +13 -8
  35. package/dist/services/kubectl.js.map +1 -1
  36. package/dist/services/npm.d.ts +5 -5
  37. package/dist/services/npm.js +8 -8
  38. package/dist/services/npm.js.map +1 -1
  39. package/dist/services/oc.d.ts +12 -2
  40. package/dist/services/oc.js +22 -9
  41. package/dist/services/oc.js.map +1 -1
  42. package/dist/services/shell.d.ts +8 -0
  43. package/dist/services/shell.js +11 -0
  44. package/dist/services/shell.js.map +1 -1
  45. package/dist/services/tekton.d.ts +8 -6
  46. package/dist/services/tekton.js +10 -10
  47. package/dist/services/tekton.js.map +1 -1
  48. package/dist/services/terraform.d.ts +13 -8
  49. package/dist/services/terraform.js +14 -14
  50. package/dist/services/terraform.js.map +1 -1
  51. package/package.json +1 -1
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # devops-cli
1
+ # catops-cli
2
2
 
3
3
  Framework para pipelines DevOps, escrito en **TypeScript** (100% usable desde JavaScript puro), empaquetado como librería npm instalable en cualquier proyecto.
4
4
 
@@ -16,53 +16,53 @@ Trae:
16
16
  **Opción A — publicado en tu registro npm (público o privado tipo Verdaccio/Artifactory/GitHub Packages):**
17
17
 
18
18
  ```bash
19
- npm install devops-cli
20
- # o si lo publicas con scope propio, p.ej. @miorg/devops-cli
21
- npm install @miorg/devops-cli
19
+ npm install catops-cli
20
+ # o si lo publicas con scope propio, p.ej. @miorg/catops-cli
21
+ npm install @miorg/catops-cli
22
22
  ```
23
23
 
24
24
  **Opción B — sin publicar, directo desde este proyecto (útil mientras lo maduras):**
25
25
 
26
26
  ```bash
27
- # Dentro del repo de devops-cli
28
- npm pack # genera devops-cli-<version>.tgz
27
+ # Dentro del repo de catops-cli
28
+ npm pack # genera catops-cli-<version>.tgz
29
29
 
30
30
  # Dentro del proyecto que lo va a consumir
31
- npm install /ruta/a/devops-cli-<version>.tgz
31
+ npm install /ruta/a/catops-cli-<version>.tgz
32
32
  ```
33
33
 
34
34
  **Opción C — enlazado local con `npm link` (para desarrollar la librería y el proyecto que la consume al mismo tiempo):**
35
35
 
36
36
  ```bash
37
- # Dentro del repo de devops-cli
37
+ # Dentro del repo de catops-cli
38
38
  npm link
39
39
 
40
40
  # Dentro del proyecto consumidor
41
- npm link devops-cli
41
+ npm link catops-cli
42
42
  ```
43
43
 
44
44
  **Opción D — como dependencia de Git (monorepo o repo privado, sin registro npm):**
45
45
 
46
46
  ```bash
47
- npm install git+https://github.com/tu-org/devops-cli.git
47
+ npm install git+https://github.com/tu-org/catops-cli.git
48
48
  ```
49
49
 
50
50
  Cualquiera de las 4 deja disponibles dos cosas en el proyecto consumidor:
51
51
 
52
52
  1. La librería, tanto desde TS como desde JS puro:
53
53
  ```typescript
54
- import { Context, Menu, services, type MenuDefinition } from "devops-cli";
54
+ import { Context, Menu, services, type MenuDefinition } from "catops-cli";
55
55
  ```
56
56
  ```javascript
57
- const { Context, Menu, services } = require("devops-cli");
57
+ const { Context, Menu, services } = require("catops-cli");
58
58
  ```
59
- 2. El binario: `npx devops-cli` (o `devops-cli` si lo instalaste global con `-g`).
59
+ 2. El binario: `npx catops-cli` (o `catops-cli` si lo instalaste global con `-g`).
60
60
 
61
61
  ## Publicar una nueva versión
62
62
 
63
63
  ```bash
64
64
  npm version patch # o minor / major
65
- npm publish # agrega --access public si usas un scope (@miorg/devops-cli)
65
+ npm publish # agrega --access public si usas un scope (@miorg/catops-cli)
66
66
  ```
67
67
 
68
68
  `prepublishOnly` corre el build y los tests automáticamente antes de publicar.
@@ -90,18 +90,18 @@ src/
90
90
  index.ts -> registra todos los servicios anteriores (ServicesRegistry)
91
91
  index.ts -> entry point público: Context, Menu, Notifier, senders, classifiers, messages, services, tipos
92
92
  bin/
93
- devops-cli.ts -> CLI ejecutable (busca devops.pipeline.js en el proyecto consumidor)
93
+ catops-cli.ts -> CLI ejecutable (busca devops.pipeline.js en el proyecto consumidor)
94
94
  examples/
95
95
  pipeline-example.js -> pipeline + menú + notificaciones de ejemplo, corre contra dist/
96
96
  test/
97
97
  context.test.js, shell.test.js, services.test.js, menu-selector.test.js,
98
98
  notifier.test.js, senders.test.js, hooks-integration.test.js,
99
- kubectl.test.js, oc.test.js, deployment-group.test.js
99
+ kubectl.test.js, oc.test.js, deployment-group.test.js, exec-options-passthrough.test.js
100
100
  ```
101
101
 
102
102
  ## Uso rápido: menú con `devops.pipeline.js` + el bin
103
103
 
104
- Crea un `devops.pipeline.js` (o `devops.config.js` / `.devops-cli.js`) en la raíz de tu proyecto:
104
+ Crea un `devops.pipeline.js` (o `devops.config.js` / `.catops-cli.js`) en la raíz de tu proyecto:
105
105
 
106
106
  ```javascript
107
107
  // devops.pipeline.js
@@ -119,16 +119,16 @@ module.exports = (ctx) => ({
119
119
  ```
120
120
 
121
121
  ```bash
122
- npx devops-cli --debug --env=prod
122
+ npx catops-cli --debug --env=prod
123
123
  ```
124
124
 
125
- `devops-cli` detecta el archivo, arma el `Context` a partir de los flags/params de `argv`, y renderiza el menú.
125
+ `catops-cli` detecta el archivo, arma el `Context` a partir de los flags/params de `argv`, y renderiza el menú.
126
126
 
127
127
  ## Uso directo en tu propio script (p. ej. con `tsx`)
128
128
 
129
129
  ```typescript
130
130
  // src/index.ts
131
- import { Context, Menu, type MenuDefinition } from "devops-cli";
131
+ import { Context, Menu, type MenuDefinition } from "catops-cli";
132
132
 
133
133
  const ctx = Context.parseArgv();
134
134
 
@@ -155,7 +155,7 @@ npm run dev -- --menu-selector=build # con npm hace falta el "--" para reenv
155
155
  ## Uso como librería sin menú (pipeline lineal)
156
156
 
157
157
  ```javascript
158
- const { Context } = require("devops-cli"); // o require("./dist") dentro de este repo
158
+ const { Context } = require("catops-cli"); // o require("./dist") dentro de este repo
159
159
 
160
160
  const ctx = Context.parseArgv(); // llena flags/params desde argv
161
161
 
@@ -210,13 +210,13 @@ Menu.render(mainMenu, ctx);
210
210
 
211
211
  ```bash
212
212
  # encadena ambos niveles en un solo comando, sin ningún prompt interactivo:
213
- devops-cli --menu-selector=docker --docker-action=build
213
+ catops-cli --menu-selector=docker --docker-action=build
214
214
 
215
215
  # un solo nivel:
216
- devops-cli --menu-selector=deploy
216
+ catops-cli --menu-selector=deploy
217
217
 
218
218
  # sin flags -> menú interactivo normal
219
- devops-cli
219
+ catops-cli
220
220
  ```
221
221
 
222
222
  Si el valor del flag no matchea ningún `selector` del nivel actual, cae de vuelta al menú interactivo (con un warning), en vez de fallar en seco. Cada submenú revisa su **propio** `flag-selector` de forma independiente, así que podés automatizar tantos niveles como quieras encadenando flags.
@@ -247,7 +247,7 @@ await ctx.run(
247
247
 
248
248
  En ambos casos, además de tus callbacks, el resultado se reporta automáticamente al `ctx.notifier` (ver más abajo) — no hay que llamarlo a mano.
249
249
 
250
- ## retry / timeout / dryRun en shell.exec
250
+ ## retry / timeout / dryRun en shell.exec y en TODOS los servicios
251
251
 
252
252
  `shell.exec(command, ...args)` sigue aceptando exactamente los mismos argumentos de siempre. Si el último argumento es un objeto plano, se interpreta como opciones **solo para esa llamada**:
253
253
 
@@ -262,17 +262,43 @@ await ctx.services.shell.exec("curl", "https://flaky-api.internal", {
262
262
  });
263
263
  ```
264
264
 
265
- Defaults globales para todo el proceso:
265
+ **Todos los comandos de todos los servicios** (`docker`, `git`, `kubectl`, `helm`, `npm`, `archive`, `terraform`, `ansible`, `argocd`, `tekton`, `oc`, `az`) aceptan este mismo control, sin que cambie nada de lo que ya usabas:
266
+
267
+ - Si la función ya recibía un **objeto de opciones** (la mayoría), agregale la clave `exec`:
268
+ ```javascript
269
+ await ctx.services.terraform.apply({ autoApprove: true, exec: { retry: 3 } });
270
+ await ctx.services.argocd.appSync("mi-app", { prune: true, exec: { retry: 3 } });
271
+ ```
272
+ - Si la función recibe **argumentos posicionales** (strings sueltos), `exec` va como el **último argumento**:
273
+ ```javascript
274
+ await ctx.services.docker.push("registry/app:v1", { retry: 3 });
275
+ await ctx.services.git.push({ retry: 3 });
276
+ await ctx.services.helm.uninstall("mi-app", { retry: 3 });
277
+ ```
278
+ - `kubectl` y `oc` combinan `exec` en el **mismo objeto** que ya usás para `kubeconfig`/`namespace`:
279
+ ```javascript
280
+ // 10 reintentos en un login inestable de OpenShift
281
+ await ctx.services.oc.login({
282
+ server: "https://api.cluster:6443",
283
+ token: process.env.OC_TOKEN,
284
+ namespace: "prod",
285
+ exec: { retry: 10, retryDelay: 2000 }
286
+ });
287
+
288
+ await ctx.services.kubectl.apply("deploy.yaml", { namespace: "prod", exec: { retry: 5, timeout: 30000 } });
289
+ ```
290
+
291
+ Defaults globales para todo el proceso (afecta a todos los comandos que no pasen su propio `exec`/opciones puntuales):
266
292
 
267
293
  ```javascript
268
294
  ctx.services.shell.configure({ retry: 3, timeout: 30000 });
269
295
  ```
270
296
 
271
- `Context.parseArgv()` ya conecta flags de línea de comandos automáticamente:
297
+ `Context.parseArgv()` ya conecta flags de línea de comandos automáticamente a esos defaults globales:
272
298
 
273
299
  ```bash
274
- npx devops-cli --dry-run # activa dryRun global
275
- npx devops-cli --retry=3 --timeout=15000
300
+ npx catops-cli --dry-run # activa dryRun global
301
+ npx catops-cli --retry=3 --timeout=15000
276
302
  ```
277
303
 
278
304
  ## Servicios de infraestructura incluidos
@@ -290,15 +316,15 @@ await ctx.services.tekton.pipelineStart("build-pipeline", { params: { image: "ap
290
316
  await ctx.services.az.acrBuild({ registry: "miregistro", image: "app:v1" });
291
317
  ```
292
318
 
293
- ## kubectl / oc: kubeconfig, namespace y espera cíclica del rollout
319
+ ## kubectl / oc: kubeconfig, namespace, retry/timeout, y espera cíclica del rollout
294
320
 
295
- `kubectl` y `oc` aceptan `{ kubeconfig, namespace }` como último argumento en **todos** sus comandos (retrocompatible, sigue funcionando sin ese argumento):
321
+ `kubectl` y `oc` aceptan `{ kubeconfig, namespace, exec }` como último argumento en **todos** sus comandos (retrocompatible, sigue funcionando sin ese argumento — ver la sección anterior para el detalle de `exec`):
296
322
 
297
323
  ```javascript
298
324
  await ctx.services.kubectl.apply("deploy.yaml", { kubeconfig: "/etc/kube/prod.yaml", namespace: "prod" });
299
- await ctx.services.kubectl.get("pods", "-o", "wide", { namespace: "staging" });
325
+ await ctx.services.kubectl.get("pods", "-o", "wide", { namespace: "staging", exec: { retry: 3 } });
300
326
 
301
- await ctx.services.oc.login({ server: "https://api.cluster:6443", token, namespace: "prod" });
327
+ await ctx.services.oc.login({ server: "https://api.cluster:6443", token, namespace: "prod", exec: { retry: 10 } });
302
328
  await ctx.services.oc.apply("deploy.yaml", { namespace: "prod" });
303
329
  ```
304
330
 
@@ -374,11 +400,11 @@ ctx.services.azdo.endGroup();
374
400
  `ctx.notifier` tiene tres responsabilidades independientes:
375
401
 
376
402
  1. **`classify()`** — decide a qué **área de TI** pertenece un error (para elegir a qué canal mandarlo).
377
- 2. **`describeError()`** — decide el **mensaje** a reportar (reemplaza el stderr crudo por algo humano).
403
+ 2. **`describeError()`** — decide el **mensaje** a reportar (reemplaza el stderr/stdout crudo por algo humano).
378
404
  3. **`channel()`** / **`onSuccess()`** — a qué **senders** se manda cada área.
379
405
 
380
406
  ```javascript
381
- const { classifiers, messages, senders } = require("devops-cli");
407
+ const { classifiers, messages, senders } = require("catops-cli");
382
408
 
383
409
  // 1. ¿A qué área de TI pertenece este error?
384
410
  ctx.notifier.classify(classifiers.byCommand({
@@ -400,7 +426,7 @@ ctx.notifier.classify(classifiers.byPattern([
400
426
  [/no space left|ENOSPC/i, "infra"]
401
427
  ]));
402
428
 
403
- // 2. ¿qué mensaje se reporta? (opcional — sin esto, se usa el stderr crudo)
429
+ // 2. ¿qué mensaje se reporta? (opcional — sin esto, se usa el stderr/stdout crudo)
404
430
  ctx.notifier.describeError(messages.byRule([
405
431
  {
406
432
  command: "docker", args: "push", pattern: /500 Internal Server Error/,
@@ -419,7 +445,7 @@ ctx.notifier.describeError(messages.byRule([
419
445
  // 3. ¿a dónde se manda cada área?
420
446
  ctx.notifier.channel("kubernetes", senders.webhook({ url: process.env.TEAMS_WEBHOOK }));
421
447
  ctx.notifier.channel("security", senders.http({ url: "https://security.miempresa.com/incidents" }));
422
- ctx.notifier.channel("*", senders.file({ path: "./devops-cli-errors.log" })); // TODO error, sin importar el área
448
+ ctx.notifier.channel("*", senders.file({ path: "./catops-cli-errors.log" })); // TODO error, sin importar el área
423
449
 
424
450
  // (opcional) éxito, sin clasificación de área
425
451
  ctx.notifier.onSuccess(senders.log());
@@ -432,16 +458,25 @@ A partir de aquí, cualquier `ctx.run(...)` o item de menú con `action` reporta
432
458
  | Fábrica | Uso |
433
459
  |---|---|
434
460
  | `classifiers.byCommand({ docker: "containers", ... })` | Mapea el comando que falló (adjunto automáticamente por `shell.exec`) a un área |
435
- | `classifiers.byPattern([[regex, area], ...])` | Matchea contra el `stderr`/mensaje del error |
461
+ | `classifiers.byPattern([[regex, area], ...])` | Matchea contra el `stderr`/`stdout`/mensaje del error |
436
462
 
437
463
  ### Formateadores de mensaje (`messages`)
438
464
 
439
465
  | Fábrica | Uso |
440
466
  |---|---|
441
- | `messages.byPattern([[regex, mensaje], ...])` | Mismo mensaje sin importar el comando — solo mira el texto del error |
467
+ | `messages.byPattern([[regex, mensaje], ...])` | Mismo mensaje sin importar el comando — solo mira el texto del error (`stderr`, o `stdout` si `stderr` viene vacío) |
442
468
  | `messages.byCommand({ docker: "mensaje fijo" })` | Mensaje fijo por comando, sin importar el detalle del error |
443
469
  | `messages.byRule([{ command?, args?, pattern?, message }, ...])` | **La opción avanzada**: combina comando + sub-comando (`args`, distingue `docker push` de `docker build`) + patrón de texto, todo en modo AND. `message` puede ser un string fijo o una función `(error, ctx) => string`. Resuelve el caso de "el mismo 500 puede venir de docker, kubectl o terraform, y cada uno necesita su propio mensaje". |
444
470
 
471
+ > **Errores que salen por `stdout` en vez de `stderr`:** algunos comandos (p. ej. `oc login`, o errores HTTP del API server) imprimen el mensaje en `stdout` y aun así salen con exit code ≠ 0. Como `shell.exec` rechaza con el `ExecResult` completo (que conserva `stdout` y `stderr`), todos los formateadores/clasificadores de `messages`/`classifiers` prueban primero `stderr` y, si viene vacío, caen a `stdout`. No hace falta configuración extra — el mismo `describeError`/`classify` que usás hoy funciona aunque el texto vaya por stdout:
472
+
473
+ ```javascript
474
+ ctx.notifier.describeError(messages.byPattern([
475
+ [/500 Internal Server Error/, "Se ha reportado a infraestructura: falta de espacio en el registry"],
476
+ [/unauthorized|403/i, "Credenciales inválidas contra el registry, revisa el secret"]
477
+ ]));
478
+ ```
479
+
445
480
  Si ningún classifier/formatter matchea, se usa el área `"unclassified"` y el mensaje crudo del error, respectivamente — nada se rompe si no configurás nada de esto.
446
481
 
447
482
  ### Senders incluidos
@@ -472,11 +507,12 @@ npm test
472
507
  - `notifier.test.js` — classify/channel/onSuccess/describeError/byRule
473
508
  - `senders.test.js` — file/http/webhook/log contra servidores reales en localhost
474
509
  - `kubectl.test.js`, `oc.test.js` — kubeconfig/namespace, waitForDeployment (éxito, timeout, Failed, maxRestarts)
510
+ - `exec-options-passthrough.test.js` — retry/timeout/dryRun (`exec`) llegando a todos los servicios, incluyendo un retry real que se recupera tras 2 fallos
475
511
  - `deployment-group.test.js` — waitForDeploymentGroup (éxito total, fallo parcial, label sin matches, oc con `dc`)
476
512
 
477
513
  ## Siguientes pasos posibles
478
514
 
479
- - Publicar en un registro privado (Verdaccio/Artifactory/GitHub Packages) para instalarlo con scope, p.ej. `@miorg/devops-cli`.
515
+ - Publicar en un registro privado (Verdaccio/Artifactory/GitHub Packages) para instalarlo con scope, p.ej. `@miorg/catops-cli`.
480
516
  - Agregar más plugins (`ansible-lint`, `trivy`, `sonar-scanner`) con el mismo patrón que `terraform.ts`/`docker.ts`.
481
517
  - CI propio (GitHub Actions/Azure Pipelines) que corra `npm test` en cada PR antes de `npm publish`.
482
518
  - `--catch=throw` (o similar) para que un item de menú fallido mate el proceso completo en vez de solo loguear y seguir — útil corriendo vía `--menu-selector` dentro de un step de Azure Pipelines.
package/dist/core/Menu.js CHANGED
@@ -72,9 +72,10 @@ function normalizeFlagName(flagSelector) {
72
72
  return flagSelector.replace(/^--?/, "");
73
73
  }
74
74
  function errorMessage(error) {
75
- return error instanceof Error
76
- ? error.message
77
- : error?.stderr ?? String(error);
75
+ if (error instanceof Error)
76
+ return error.message;
77
+ const execError = error;
78
+ return execError?.stderr ?? execError?.stdout ?? String(error);
78
79
  }
79
80
  class Menu {
80
81
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../src/core/Menu.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../src/core/Menu.ts"],"names":[],"mappings":"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"}
@@ -7,13 +7,13 @@ function toMessage(error) {
7
7
  return error.message;
8
8
  }
9
9
  const maybeExecError = error;
10
- if (maybeExecError?.stderr) {
11
- return maybeExecError.stderr.trim().split("\n").pop() || maybeExecError.stderr;
12
- }
13
- if (maybeExecError?.message) {
14
- return maybeExecError.message;
15
- }
16
- return String(error);
10
+ const lastLine = (text) => {
11
+ return text ? text.trim().split("\n").pop() || text : undefined;
12
+ };
13
+ return lastLine(maybeExecError?.stderr)
14
+ || lastLine(maybeExecError?.stdout)
15
+ || maybeExecError?.message
16
+ || String(error);
17
17
  }
18
18
  class Notifier {
19
19
  constructor() {
@@ -1 +1 @@
1
- {"version":3,"file":"Notifier.js","sourceRoot":"","sources":["../../src/core/Notifier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Notifier.js","sourceRoot":"","sources":["../../src/core/Notifier.ts"],"names":[],"mappings":"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"}
@@ -19,7 +19,8 @@ import type { ErrorClassifier } from "./types";
19
19
  export declare function byCommand(map: Record<string, string>): ErrorClassifier;
20
20
  /**
21
21
  * Clasificador de fábrica: prueba una lista de [regex, área] contra el
22
- * stderr/mensaje del error y devuelve el área del primer patrón que matchee.
22
+ * stderr (o stdout si stderr viene vacío) /mensaje del error y devuelve el
23
+ * área del primer patrón que matchee.
23
24
  *
24
25
  * Ejemplo:
25
26
  * notifier.classify(classifiers.byPattern([
@@ -29,7 +29,8 @@ function byCommand(map) {
29
29
  }
30
30
  /**
31
31
  * Clasificador de fábrica: prueba una lista de [regex, área] contra el
32
- * stderr/mensaje del error y devuelve el área del primer patrón que matchee.
32
+ * stderr (o stdout si stderr viene vacío) /mensaje del error y devuelve el
33
+ * área del primer patrón que matchee.
33
34
  *
34
35
  * Ejemplo:
35
36
  * notifier.classify(classifiers.byPattern([
@@ -41,7 +42,7 @@ function byCommand(map) {
41
42
  function byPattern(rules) {
42
43
  return (error) => {
43
44
  const execError = error;
44
- const text = execError?.stderr || execError?.message || String(error);
45
+ const text = execError?.stderr || execError?.stdout || execError?.message || String(error);
45
46
  for (const [pattern, area] of rules) {
46
47
  if (pattern.test(text)) {
47
48
  return area;
@@ -1 +1 @@
1
- {"version":3,"file":"classifiers.js","sourceRoot":"","sources":["../../src/core/classifiers.ts"],"names":[],"mappings":";;AAyBA,8BAYC;AAaD,8BAiBC;AA3DD;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,SAAS,CAAC,GAA2B;IAEjD,OAAO,CAAC,KAAc,EAAE,EAAE;QAEtB,MAAM,OAAO,GAAI,KAAuB,EAAE,OAAO,CAAC;QAElD,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAE/B,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC;IAExB,CAAC,CAAC;AAEN,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,SAAS,CAAC,KAA8B;IAEpD,OAAO,CAAC,KAAc,EAAE,EAAE;QAEtB,MAAM,SAAS,GAAG,KAAsB,CAAC;QACzC,MAAM,IAAI,GAAG,SAAS,EAAE,MAAM,IAAI,SAAS,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;QAEtE,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;YAClC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QAED,OAAO,SAAS,CAAC;IAErB,CAAC,CAAC;AAEN,CAAC"}
1
+ {"version":3,"file":"classifiers.js","sourceRoot":"","sources":["../../src/core/classifiers.ts"],"names":[],"mappings":";;AA0BA,8BAYC;AAcD,8BAiBC;AA5DD;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,SAAS,CAAC,GAA2B;IAEjD,OAAO,CAAC,KAAc,EAAE,EAAE;QAEtB,MAAM,OAAO,GAAI,KAAuB,EAAE,OAAO,CAAC;QAElD,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAE/B,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC;IAExB,CAAC,CAAC;AAEN,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,SAAS,CAAC,KAA8B;IAEpD,OAAO,CAAC,KAAc,EAAE,EAAE;QAEtB,MAAM,SAAS,GAAG,KAAsB,CAAC;QACzC,MAAM,IAAI,GAAG,SAAS,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,IAAI,SAAS,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;QAE3F,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;YAClC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QAED,OAAO,SAAS,CAAC;IAErB,CAAC,CAAC;AAEN,CAAC"}
@@ -2,8 +2,9 @@ import type { Context } from "./Context";
2
2
  import type { ErrorMessageFormatter } from "./types";
3
3
  /**
4
4
  * Formateador de fábrica: prueba una lista de [regex, mensaje] contra el
5
- * stderr/mensaje del error y devuelve el mensaje personalizado del primer
6
- * patrón que matchee, en vez del stderr crudo.
5
+ * stderr (o stdout si stderr viene vacío, p. ej. errores de `oc` que se
6
+ * imprimen en stdout) /mensaje del error y devuelve el mensaje personalizado
7
+ * del primer patrón que matchee, en vez del stderr crudo.
7
8
  *
8
9
  * Ojo: esto NO distingue por comando — un mismo patrón (ej. "500 Internal
9
10
  * Server Error") aplica igual venga de `docker`, `kubectl` o `terraform`.
@@ -5,12 +5,13 @@ exports.byCommand = byCommand;
5
5
  exports.byRule = byRule;
6
6
  function textOf(error) {
7
7
  const execError = error;
8
- return execError?.stderr || execError?.message || String(error);
8
+ return execError?.stderr || execError?.stdout || execError?.message || String(error);
9
9
  }
10
10
  /**
11
11
  * Formateador de fábrica: prueba una lista de [regex, mensaje] contra el
12
- * stderr/mensaje del error y devuelve el mensaje personalizado del primer
13
- * patrón que matchee, en vez del stderr crudo.
12
+ * stderr (o stdout si stderr viene vacío, p. ej. errores de `oc` que se
13
+ * imprimen en stdout) /mensaje del error y devuelve el mensaje personalizado
14
+ * del primer patrón que matchee, en vez del stderr crudo.
14
15
  *
15
16
  * Ojo: esto NO distingue por comando — un mismo patrón (ej. "500 Internal
16
17
  * Server Error") aplica igual venga de `docker`, `kubectl` o `terraform`.
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/core/messages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/core/messages.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,12 @@
1
- import type { ExecResult } from "../core/types";
1
+ import type { ExecOptions, ExecResult } from "../core/types";
2
2
  export interface AnsiblePlaybookOptions {
3
3
  inventory?: string;
4
4
  extraVars?: Record<string, string>;
5
5
  tags?: string;
6
+ exec?: ExecOptions;
6
7
  }
7
- export declare function playbook(playbookPath: string, { inventory, extraVars, tags }?: AnsiblePlaybookOptions): Promise<ExecResult>;
8
- export declare function adhoc(host: string, module: string, moduleArgs?: string): Promise<ExecResult>;
9
- export declare function vaultEncrypt(file: string): Promise<ExecResult>;
10
- export declare function vaultDecrypt(file: string): Promise<ExecResult>;
11
- export declare function galaxyInstall(requirementsFile: string): Promise<ExecResult>;
8
+ export declare function playbook(playbookPath: string, { inventory, extraVars, tags, exec }?: AnsiblePlaybookOptions): Promise<ExecResult>;
9
+ export declare function adhoc(host: string, module: string, moduleArgs?: string, exec?: ExecOptions): Promise<ExecResult>;
10
+ export declare function vaultEncrypt(file: string, exec?: ExecOptions): Promise<ExecResult>;
11
+ export declare function vaultDecrypt(file: string, exec?: ExecOptions): Promise<ExecResult>;
12
+ export declare function galaxyInstall(requirementsFile: string, exec?: ExecOptions): Promise<ExecResult>;
@@ -6,7 +6,7 @@ exports.vaultEncrypt = vaultEncrypt;
6
6
  exports.vaultDecrypt = vaultDecrypt;
7
7
  exports.galaxyInstall = galaxyInstall;
8
8
  const shell_1 = require("./shell");
9
- function playbook(playbookPath, { inventory, extraVars = {}, tags } = {}) {
9
+ function playbook(playbookPath, { inventory, extraVars = {}, tags, exec } = {}) {
10
10
  const args = ["-i", inventory || "inventory.ini", playbookPath];
11
11
  Object.entries(extraVars).forEach(([k, v]) => {
12
12
  args.push("--extra-vars", `${k}=${v}`);
@@ -14,22 +14,22 @@ function playbook(playbookPath, { inventory, extraVars = {}, tags } = {}) {
14
14
  if (tags) {
15
15
  args.push("--tags", tags);
16
16
  }
17
- return shell_1.shell.exec("ansible-playbook", ...args);
17
+ return shell_1.shell.exec("ansible-playbook", ...(0, shell_1.withExecOptions)(args, exec));
18
18
  }
19
- function adhoc(host, module, moduleArgs) {
19
+ function adhoc(host, module, moduleArgs, exec) {
20
20
  const args = [host, "-m", module];
21
21
  if (moduleArgs) {
22
22
  args.push("-a", moduleArgs);
23
23
  }
24
- return shell_1.shell.exec("ansible", ...args);
24
+ return shell_1.shell.exec("ansible", ...(0, shell_1.withExecOptions)(args, exec));
25
25
  }
26
- function vaultEncrypt(file) {
27
- return shell_1.shell.exec("ansible-vault", "encrypt", file);
26
+ function vaultEncrypt(file, exec) {
27
+ return shell_1.shell.exec("ansible-vault", ...(0, shell_1.withExecOptions)(["encrypt", file], exec));
28
28
  }
29
- function vaultDecrypt(file) {
30
- return shell_1.shell.exec("ansible-vault", "decrypt", file);
29
+ function vaultDecrypt(file, exec) {
30
+ return shell_1.shell.exec("ansible-vault", ...(0, shell_1.withExecOptions)(["decrypt", file], exec));
31
31
  }
32
- function galaxyInstall(requirementsFile) {
33
- return shell_1.shell.exec("ansible-galaxy", "install", "-r", requirementsFile);
32
+ function galaxyInstall(requirementsFile, exec) {
33
+ return shell_1.shell.exec("ansible-galaxy", ...(0, shell_1.withExecOptions)(["install", "-r", requirementsFile], exec));
34
34
  }
35
35
  //# sourceMappingURL=ansible.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ansible.js","sourceRoot":"","sources":["../../src/services/ansible.ts"],"names":[],"mappings":";;AASA,4BAcC;AAED,sBAUC;AAED,oCAEC;AAED,oCAEC;AAED,sCAEC;AA/CD,mCAAgC;AAShC,SAAgB,QAAQ,CAAC,YAAoB,EAAE,EAAE,SAAS,EAAE,SAAS,GAAG,EAAE,EAAE,IAAI,KAA6B,EAAE;IAE3G,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,SAAS,IAAI,eAAe,EAAE,YAAY,CAAC,CAAC;IAEhE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QACzC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,IAAI,IAAI,EAAE,CAAC;QACP,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,aAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,CAAC;AAEnD,CAAC;AAED,SAAgB,KAAK,CAAC,IAAY,EAAE,MAAc,EAAE,UAAmB;IAEnE,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAElC,IAAI,UAAU,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,aAAK,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;AAE1C,CAAC;AAED,SAAgB,YAAY,CAAC,IAAY;IACrC,OAAO,aAAK,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AACxD,CAAC;AAED,SAAgB,YAAY,CAAC,IAAY;IACrC,OAAO,aAAK,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AACxD,CAAC;AAED,SAAgB,aAAa,CAAC,gBAAwB;IAClD,OAAO,aAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;AAC3E,CAAC"}
1
+ {"version":3,"file":"ansible.js","sourceRoot":"","sources":["../../src/services/ansible.ts"],"names":[],"mappings":";;AAUA,4BAcC;AAED,sBAUC;AAED,oCAEC;AAED,oCAEC;AAED,sCAEC;AAhDD,mCAAiD;AAUjD,SAAgB,QAAQ,CAAC,YAAoB,EAAE,EAAE,SAAS,EAAE,SAAS,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,KAA6B,EAAE;IAEjH,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,SAAS,IAAI,eAAe,EAAE,YAAY,CAAC,CAAC;IAEhE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QACzC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,IAAI,IAAI,EAAE,CAAC;QACP,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,aAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,IAAA,uBAAe,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAE1E,CAAC;AAED,SAAgB,KAAK,CAAC,IAAY,EAAE,MAAc,EAAE,UAAmB,EAAE,IAAkB;IAEvF,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAElC,IAAI,UAAU,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,aAAK,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAA,uBAAe,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAEjE,CAAC;AAED,SAAgB,YAAY,CAAC,IAAY,EAAE,IAAkB;IACzD,OAAO,aAAK,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,SAAgB,YAAY,CAAC,IAAY,EAAE,IAAkB;IACzD,OAAO,aAAK,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,SAAgB,aAAa,CAAC,gBAAwB,EAAE,IAAkB;IACtE,OAAO,aAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,SAAS,EAAE,IAAI,EAAE,gBAAgB,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACvG,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { ExecResult } from "../core/types";
2
- export declare function zip(source: string, target: string): Promise<ExecResult>;
3
- export declare function unzip(file: string, target: string): Promise<ExecResult>;
4
- export declare function tar(source: string, target: string): Promise<ExecResult>;
1
+ import type { ExecOptions, ExecResult } from "../core/types";
2
+ export declare function zip(source: string, target: string, exec?: ExecOptions): Promise<ExecResult>;
3
+ export declare function unzip(file: string, target: string, exec?: ExecOptions): Promise<ExecResult>;
4
+ export declare function tar(source: string, target: string, exec?: ExecOptions): Promise<ExecResult>;
@@ -4,13 +4,13 @@ exports.zip = zip;
4
4
  exports.unzip = unzip;
5
5
  exports.tar = tar;
6
6
  const shell_1 = require("./shell");
7
- function zip(source, target) {
8
- return shell_1.shell.exec("zip", "-r", target, source);
7
+ function zip(source, target, exec) {
8
+ return shell_1.shell.exec("zip", ...(0, shell_1.withExecOptions)(["-r", target, source], exec));
9
9
  }
10
- function unzip(file, target) {
11
- return shell_1.shell.exec("unzip", file, "-d", target);
10
+ function unzip(file, target, exec) {
11
+ return shell_1.shell.exec("unzip", ...(0, shell_1.withExecOptions)([file, "-d", target], exec));
12
12
  }
13
- function tar(source, target) {
14
- return shell_1.shell.exec("tar", "-czf", target, source);
13
+ function tar(source, target, exec) {
14
+ return shell_1.shell.exec("tar", ...(0, shell_1.withExecOptions)(["-czf", target, source], exec));
15
15
  }
16
16
  //# sourceMappingURL=archive.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/services/archive.ts"],"names":[],"mappings":";;AAGA,kBAEC;AAED,sBAEC;AAED,kBAEC;AAbD,mCAAgC;AAGhC,SAAgB,GAAG,CAAC,MAAc,EAAE,MAAc;IAC9C,OAAO,aAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACnD,CAAC;AAED,SAAgB,KAAK,CAAC,IAAY,EAAE,MAAc;IAC9C,OAAO,aAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AACnD,CAAC;AAED,SAAgB,GAAG,CAAC,MAAc,EAAE,MAAc;IAC9C,OAAO,aAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/services/archive.ts"],"names":[],"mappings":";;AAGA,kBAEC;AAED,sBAEC;AAED,kBAEC;AAbD,mCAAiD;AAGjD,SAAgB,GAAG,CAAC,MAAc,EAAE,MAAc,EAAE,IAAkB;IAClE,OAAO,aAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,SAAgB,KAAK,CAAC,IAAY,EAAE,MAAc,EAAE,IAAkB;IAClE,OAAO,aAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,SAAgB,GAAG,CAAC,MAAc,EAAE,MAAc,EAAE,IAAkB;IAClE,OAAO,aAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACjF,CAAC"}
@@ -1,20 +1,23 @@
1
- import type { ExecResult } from "../core/types";
1
+ import type { ExecOptions, ExecResult } from "../core/types";
2
2
  export interface ArgoLoginOptions {
3
3
  server: string;
4
4
  username: string;
5
5
  password: string;
6
6
  insecure?: boolean;
7
+ exec?: ExecOptions;
7
8
  }
8
9
  export interface ArgoSyncOptions {
9
10
  prune?: boolean;
11
+ exec?: ExecOptions;
10
12
  }
11
13
  export interface ArgoWaitOptions {
12
14
  timeout?: number;
15
+ exec?: ExecOptions;
13
16
  }
14
- export declare function login({ server, username, password, insecure }: ArgoLoginOptions): Promise<ExecResult>;
15
- export declare function appSync(name: string, { prune }?: ArgoSyncOptions): Promise<ExecResult>;
16
- export declare function appGet(name: string): Promise<ExecResult>;
17
- export declare function appWait(name: string, { timeout }?: ArgoWaitOptions): Promise<ExecResult>;
18
- export declare function appSet(name: string, params?: Record<string, string>): Promise<ExecResult>;
19
- export declare function appList(): Promise<ExecResult>;
20
- export declare function appRollback(name: string, revisionId: string): Promise<ExecResult>;
17
+ export declare function login({ server, username, password, insecure, exec }: ArgoLoginOptions): Promise<ExecResult>;
18
+ export declare function appSync(name: string, { prune, exec }?: ArgoSyncOptions): Promise<ExecResult>;
19
+ export declare function appGet(name: string, exec?: ExecOptions): Promise<ExecResult>;
20
+ export declare function appWait(name: string, { timeout, exec }?: ArgoWaitOptions): Promise<ExecResult>;
21
+ export declare function appSet(name: string, params?: Record<string, string>, exec?: ExecOptions): Promise<ExecResult>;
22
+ export declare function appList(exec?: ExecOptions): Promise<ExecResult>;
23
+ export declare function appRollback(name: string, revisionId: string, exec?: ExecOptions): Promise<ExecResult>;