@cat-indev/catops-cli 0.0.1-alpha.10
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.
- package/LICENSE +21 -0
- package/README.md +1254 -0
- package/dist/bin/devops-cli.d.ts +2 -0
- package/dist/bin/devops-cli.js +132 -0
- package/dist/bin/devops-cli.js.map +1 -0
- package/dist/core/Context.d.ts +56 -0
- package/dist/core/Context.js +197 -0
- package/dist/core/Context.js.map +1 -0
- package/dist/core/Menu.d.ts +23 -0
- package/dist/core/Menu.js +160 -0
- package/dist/core/Menu.js.map +1 -0
- package/dist/core/Notifier.d.ts +42 -0
- package/dist/core/Notifier.js +128 -0
- package/dist/core/Notifier.js.map +1 -0
- package/dist/core/classifiers.d.ts +45 -0
- package/dist/core/classifiers.js +90 -0
- package/dist/core/classifiers.js.map +1 -0
- package/dist/core/logger.d.ts +8 -0
- package/dist/core/logger.js +37 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/messages.d.ts +102 -0
- package/dist/core/messages.js +163 -0
- package/dist/core/messages.js.map +1 -0
- package/dist/core/prompt.d.ts +10 -0
- package/dist/core/prompt.js +87 -0
- package/dist/core/prompt.js.map +1 -0
- package/dist/core/senders.d.ts +27 -0
- package/dist/core/senders.js +109 -0
- package/dist/core/senders.js.map +1 -0
- package/dist/core/types.d.ts +135 -0
- package/dist/core/types.js +33 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.js +66 -0
- package/dist/index.js.map +1 -0
- package/dist/services/ansible.d.ts +12 -0
- package/dist/services/ansible.js +35 -0
- package/dist/services/ansible.js.map +1 -0
- package/dist/services/archive.d.ts +4 -0
- package/dist/services/archive.js +16 -0
- package/dist/services/archive.js.map +1 -0
- package/dist/services/argocd.d.ts +23 -0
- package/dist/services/argocd.js +48 -0
- package/dist/services/argocd.js.map +1 -0
- package/dist/services/az.d.ts +38 -0
- package/dist/services/az.js +51 -0
- package/dist/services/az.js.map +1 -0
- package/dist/services/azdo-api.d.ts +213 -0
- package/dist/services/azdo-api.js +247 -0
- package/dist/services/azdo-api.js.map +1 -0
- package/dist/services/azdo.d.ts +13 -0
- package/dist/services/azdo.js +57 -0
- package/dist/services/azdo.js.map +1 -0
- package/dist/services/docker.d.ts +21 -0
- package/dist/services/docker.js +36 -0
- package/dist/services/docker.js.map +1 -0
- package/dist/services/git.d.ts +9 -0
- package/dist/services/git.js +36 -0
- package/dist/services/git.js.map +1 -0
- package/dist/services/helm.d.ts +4 -0
- package/dist/services/helm.js +24 -0
- package/dist/services/helm.js.map +1 -0
- package/dist/services/http-types.d.ts +57 -0
- package/dist/services/http-types.js +3 -0
- package/dist/services/http-types.js.map +1 -0
- package/dist/services/http.d.ts +64 -0
- package/dist/services/http.js +288 -0
- package/dist/services/http.js.map +1 -0
- package/dist/services/index.d.ts +37 -0
- package/dist/services/index.js +88 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/kubectl.d.ts +137 -0
- package/dist/services/kubectl.js +271 -0
- package/dist/services/kubectl.js.map +1 -0
- package/dist/services/npm.d.ts +5 -0
- package/dist/services/npm.js +20 -0
- package/dist/services/npm.js.map +1 -0
- package/dist/services/oc.d.ts +156 -0
- package/dist/services/oc.js +309 -0
- package/dist/services/oc.js.map +1 -0
- package/dist/services/pipeline.d.ts +116 -0
- package/dist/services/pipeline.js +474 -0
- package/dist/services/pipeline.js.map +1 -0
- package/dist/services/shell.d.ts +28 -0
- package/dist/services/shell.js +206 -0
- package/dist/services/shell.js.map +1 -0
- package/dist/services/tekton.d.ts +16 -0
- package/dist/services/tekton.js +46 -0
- package/dist/services/tekton.js.map +1 -0
- package/dist/services/terraform.d.ts +31 -0
- package/dist/services/terraform.js +63 -0
- package/dist/services/terraform.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { shell } from "./shell";
|
|
2
|
+
import * as docker from "./docker";
|
|
3
|
+
import * as git from "./git";
|
|
4
|
+
import * as kubectl from "./kubectl";
|
|
5
|
+
import * as helm from "./helm";
|
|
6
|
+
import * as npm from "./npm";
|
|
7
|
+
import * as archive from "./archive";
|
|
8
|
+
import * as terraform from "./terraform";
|
|
9
|
+
import * as ansible from "./ansible";
|
|
10
|
+
import * as argocd from "./argocd";
|
|
11
|
+
import * as tekton from "./tekton";
|
|
12
|
+
import * as oc from "./oc";
|
|
13
|
+
import * as az from "./az";
|
|
14
|
+
import * as azdo from "./azdo";
|
|
15
|
+
import * as http from "./http";
|
|
16
|
+
import { PipelineRegistry } from "./pipeline";
|
|
17
|
+
export declare const services: {
|
|
18
|
+
shell: import("./shell").Shell;
|
|
19
|
+
docker: typeof docker;
|
|
20
|
+
git: typeof git;
|
|
21
|
+
kubectl: typeof kubectl;
|
|
22
|
+
helm: typeof helm;
|
|
23
|
+
npm: typeof npm;
|
|
24
|
+
archive: typeof archive;
|
|
25
|
+
terraform: typeof terraform;
|
|
26
|
+
ansible: typeof ansible;
|
|
27
|
+
argocd: typeof argocd;
|
|
28
|
+
tekton: typeof tekton;
|
|
29
|
+
oc: typeof oc;
|
|
30
|
+
az: typeof az;
|
|
31
|
+
azdo: typeof azdo;
|
|
32
|
+
http: typeof http;
|
|
33
|
+
pipeline: PipelineRegistry;
|
|
34
|
+
};
|
|
35
|
+
export type ServicesRegistry = typeof services;
|
|
36
|
+
export { shell, docker, git, kubectl, helm, npm, archive, terraform, ansible, argocd, tekton, oc, az, azdo, http };
|
|
37
|
+
export { PipelineRegistry } from "./pipeline";
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.PipelineRegistry = exports.http = exports.azdo = exports.az = exports.oc = exports.tekton = exports.argocd = exports.ansible = exports.terraform = exports.archive = exports.npm = exports.helm = exports.kubectl = exports.git = exports.docker = exports.shell = exports.services = void 0;
|
|
37
|
+
const shell_1 = require("./shell");
|
|
38
|
+
Object.defineProperty(exports, "shell", { enumerable: true, get: function () { return shell_1.shell; } });
|
|
39
|
+
const docker = __importStar(require("./docker"));
|
|
40
|
+
exports.docker = docker;
|
|
41
|
+
const git = __importStar(require("./git"));
|
|
42
|
+
exports.git = git;
|
|
43
|
+
const kubectl = __importStar(require("./kubectl"));
|
|
44
|
+
exports.kubectl = kubectl;
|
|
45
|
+
const helm = __importStar(require("./helm"));
|
|
46
|
+
exports.helm = helm;
|
|
47
|
+
const npm = __importStar(require("./npm"));
|
|
48
|
+
exports.npm = npm;
|
|
49
|
+
const archive = __importStar(require("./archive"));
|
|
50
|
+
exports.archive = archive;
|
|
51
|
+
const terraform = __importStar(require("./terraform"));
|
|
52
|
+
exports.terraform = terraform;
|
|
53
|
+
const ansible = __importStar(require("./ansible"));
|
|
54
|
+
exports.ansible = ansible;
|
|
55
|
+
const argocd = __importStar(require("./argocd"));
|
|
56
|
+
exports.argocd = argocd;
|
|
57
|
+
const tekton = __importStar(require("./tekton"));
|
|
58
|
+
exports.tekton = tekton;
|
|
59
|
+
const oc = __importStar(require("./oc"));
|
|
60
|
+
exports.oc = oc;
|
|
61
|
+
const az = __importStar(require("./az"));
|
|
62
|
+
exports.az = az;
|
|
63
|
+
const azdo = __importStar(require("./azdo"));
|
|
64
|
+
exports.azdo = azdo;
|
|
65
|
+
const http = __importStar(require("./http"));
|
|
66
|
+
exports.http = http;
|
|
67
|
+
const pipeline_1 = require("./pipeline");
|
|
68
|
+
exports.services = {
|
|
69
|
+
shell: shell_1.shell,
|
|
70
|
+
docker,
|
|
71
|
+
git,
|
|
72
|
+
kubectl,
|
|
73
|
+
helm,
|
|
74
|
+
npm,
|
|
75
|
+
archive,
|
|
76
|
+
terraform,
|
|
77
|
+
ansible,
|
|
78
|
+
argocd,
|
|
79
|
+
tekton,
|
|
80
|
+
oc,
|
|
81
|
+
az,
|
|
82
|
+
azdo,
|
|
83
|
+
http,
|
|
84
|
+
pipeline: new pipeline_1.PipelineRegistry()
|
|
85
|
+
};
|
|
86
|
+
var pipeline_2 = require("./pipeline");
|
|
87
|
+
Object.defineProperty(exports, "PipelineRegistry", { enumerable: true, get: function () { return pipeline_2.PipelineRegistry; } });
|
|
88
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAgC;AAuC5B,sFAvCK,aAAK,OAuCL;AAtCT,iDAAmC;AAuC/B,wBAAM;AAtCV,2CAA6B;AAuCzB,kBAAG;AAtCP,mDAAqC;AAuCjC,0BAAO;AAtCX,6CAA+B;AAuC3B,oBAAI;AAtCR,2CAA6B;AAuCzB,kBAAG;AAtCP,mDAAqC;AAuCjC,0BAAO;AAtCX,uDAAyC;AAuCrC,8BAAS;AAtCb,mDAAqC;AAuCjC,0BAAO;AAtCX,iDAAmC;AAuC/B,wBAAM;AAtCV,iDAAmC;AAuC/B,wBAAM;AAtCV,yCAA2B;AAuCvB,gBAAE;AAtCN,yCAA2B;AAuCvB,gBAAE;AAtCN,6CAA+B;AAuC3B,oBAAI;AAtCR,6CAA+B;AAuC3B,oBAAI;AAtCR,yCAA8C;AAEjC,QAAA,QAAQ,GAAG;IACpB,KAAK,EAAL,aAAK;IACL,MAAM;IACN,GAAG;IACH,OAAO;IACP,IAAI;IACJ,GAAG;IACH,OAAO;IACP,SAAS;IACT,OAAO;IACP,MAAM;IACN,MAAM;IACN,EAAE;IACF,EAAE;IACF,IAAI;IACJ,IAAI;IACJ,QAAQ,EAAE,IAAI,2BAAgB,EAAE;CACnC,CAAC;AAsBF,uCAA8C;AAArC,4GAAA,gBAAgB,OAAA"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import type { ExecOptions, ExecResult } from "../core/types";
|
|
2
|
+
export interface KubectlOptions {
|
|
3
|
+
/** Ruta al archivo kubeconfig. Se pasa como --kubeconfig <path>. */
|
|
4
|
+
kubeconfig?: string;
|
|
5
|
+
/** Namespace destino. Se pasa como -n <namespace>. */
|
|
6
|
+
namespace?: string;
|
|
7
|
+
/** retry/timeout/dryRun para esta llamada puntual (ver shell.exec). */
|
|
8
|
+
exec?: ExecOptions;
|
|
9
|
+
}
|
|
10
|
+
export declare function apply(file: string, options?: KubectlOptions): Promise<ExecResult>;
|
|
11
|
+
export declare function del(file: string, options?: KubectlOptions): Promise<ExecResult>;
|
|
12
|
+
/**
|
|
13
|
+
* Igual que antes (`kubectl.get("pods", "-o", "wide")`), pero ahora también
|
|
14
|
+
* acepta KubectlOptions como último argumento:
|
|
15
|
+
* kubectl.get("pods", "-o", "wide", { namespace: "prod", exec: { retry: 3 } })
|
|
16
|
+
*/
|
|
17
|
+
export declare function get(...rawArgs: Array<string | KubectlOptions>): Promise<ExecResult>;
|
|
18
|
+
export declare function logs(pod: string, options?: KubectlOptions): Promise<ExecResult>;
|
|
19
|
+
export declare function rolloutStatus(deployment: string, options?: KubectlOptions): Promise<ExecResult>;
|
|
20
|
+
export declare function setImage(resource: string, image: string, options?: KubectlOptions): Promise<ExecResult>;
|
|
21
|
+
export { del as delete };
|
|
22
|
+
export type DeploymentRolloutStatus = "success" | "failed" | "timeout";
|
|
23
|
+
export interface DeploymentWatchResult {
|
|
24
|
+
status: DeploymentRolloutStatus;
|
|
25
|
+
deployment: string;
|
|
26
|
+
elapsedMs: number;
|
|
27
|
+
restarts: number;
|
|
28
|
+
message: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Se lanza cuando `waitForDeployment` no llega a un rollout exitoso, ya sea
|
|
32
|
+
* por timeout global, por quedarse en estado Failed sin recuperarse, o por
|
|
33
|
+
* superar el máximo de reinicios permitido. Lleva `command: "kubectl"` para
|
|
34
|
+
* que `classifiers.byCommand({ kubectl: "kubernetes" })` lo clasifique
|
|
35
|
+
* automáticamente si usas el sistema de notificaciones.
|
|
36
|
+
*/
|
|
37
|
+
export declare class DeploymentRolloutError extends Error {
|
|
38
|
+
readonly command = "kubectl";
|
|
39
|
+
readonly status: DeploymentRolloutStatus;
|
|
40
|
+
readonly deployment: string;
|
|
41
|
+
readonly elapsedMs: number;
|
|
42
|
+
readonly restarts: number;
|
|
43
|
+
constructor(message: string, info: Omit<DeploymentWatchResult, "message">);
|
|
44
|
+
}
|
|
45
|
+
export interface WaitForDeploymentOptions extends KubectlOptions {
|
|
46
|
+
/** Nombre del deployment, sin el prefijo "deployment/". */
|
|
47
|
+
deployment: string;
|
|
48
|
+
/** Milisegundos totales antes de abortar y reportar error. Default: 300000 (5 min). */
|
|
49
|
+
timeout?: number;
|
|
50
|
+
/** Milisegundos entre cada chequeo. Default: 5000. */
|
|
51
|
+
pollInterval?: number;
|
|
52
|
+
/**
|
|
53
|
+
* Si el deployment entra en estado Failed, milisegundos a esperar para
|
|
54
|
+
* ver si se recupera solo antes de darlo por fallido. Default: igual a
|
|
55
|
+
* `pollInterval` * 6 (30s con los defaults).
|
|
56
|
+
*/
|
|
57
|
+
failedGracePeriod?: number;
|
|
58
|
+
/**
|
|
59
|
+
* Máximo de reinicios (sumados entre todos los pods/containers del
|
|
60
|
+
* deployment) tolerados antes de abortar inmediatamente, sin esperar
|
|
61
|
+
* el `failedGracePeriod` ni el `timeout`. Si no se pasa, no se valida.
|
|
62
|
+
*/
|
|
63
|
+
maxRestarts?: number;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Valida cíclicamente el estado de un Deployment hasta que:
|
|
67
|
+
* - llega a estado exitoso (replicas listas/actualizadas == replicas deseadas) -> resuelve,
|
|
68
|
+
* - supera `maxRestarts` reinicios acumulados -> lanza DeploymentRolloutError,
|
|
69
|
+
* - se queda en estado Failed más de `failedGracePeriod` sin recuperarse -> lanza DeploymentRolloutError,
|
|
70
|
+
* - o se cumple `timeout` sin éxito -> lanza DeploymentRolloutError.
|
|
71
|
+
*
|
|
72
|
+
* En cualquier caso de error, el polling se detiene ("se mata el proceso")
|
|
73
|
+
* y el error se re-lanza, listo para que `ctx.run(...)` lo capture y lo
|
|
74
|
+
* reporte vía `ctx.notifier` si lo tienes configurado.
|
|
75
|
+
*/
|
|
76
|
+
export declare function waitForDeployment(options: WaitForDeploymentOptions): Promise<DeploymentWatchResult>;
|
|
77
|
+
export type DeploymentGroupStatus = "success" | "failed" | "timeout";
|
|
78
|
+
export interface DeploymentGroupFailure {
|
|
79
|
+
deployment: string;
|
|
80
|
+
status: DeploymentRolloutStatus;
|
|
81
|
+
message: string;
|
|
82
|
+
}
|
|
83
|
+
export interface DeploymentGroupWatchResult {
|
|
84
|
+
status: "success";
|
|
85
|
+
label: string;
|
|
86
|
+
elapsedMs: number;
|
|
87
|
+
deployments: DeploymentWatchResult[];
|
|
88
|
+
message: string;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Se lanza cuando `waitForDeploymentGroup` no logra que TODAS las instancias
|
|
92
|
+
* del grupo lleguen a estado exitoso. Lleva `command: "kubectl"` para que
|
|
93
|
+
* `classifiers.byCommand({ kubectl: "kubernetes" })` lo clasifique solo.
|
|
94
|
+
*/
|
|
95
|
+
export declare class DeploymentGroupRolloutError extends Error {
|
|
96
|
+
readonly command = "kubectl";
|
|
97
|
+
readonly label: string;
|
|
98
|
+
readonly elapsedMs: number;
|
|
99
|
+
readonly succeeded: string[];
|
|
100
|
+
readonly failed: DeploymentGroupFailure[];
|
|
101
|
+
constructor(message: string, info: {
|
|
102
|
+
label: string;
|
|
103
|
+
elapsedMs: number;
|
|
104
|
+
succeeded: string[];
|
|
105
|
+
failed: DeploymentGroupFailure[];
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
export interface WaitForDeploymentGroupOptions extends KubectlOptions {
|
|
109
|
+
/**
|
|
110
|
+
* Label que agrupa todas las instancias del despliegue. Puede ser el
|
|
111
|
+
* selector ya armado ("deployment-group=repository-14") o un objeto
|
|
112
|
+
* ({ "deployment-group": "repository-14" }).
|
|
113
|
+
*/
|
|
114
|
+
label: string | Record<string, string>;
|
|
115
|
+
/** Milisegundos totales antes de abortar el grupo entero. Default: 300000 (5 min). */
|
|
116
|
+
timeout?: number;
|
|
117
|
+
/** Milisegundos entre cada chequeo, por instancia. Default: 5000. */
|
|
118
|
+
pollInterval?: number;
|
|
119
|
+
/** Igual que en waitForDeployment, aplicado a cada instancia del grupo. */
|
|
120
|
+
failedGracePeriod?: number;
|
|
121
|
+
/** Igual que en waitForDeployment, aplicado a cada instancia del grupo. */
|
|
122
|
+
maxRestarts?: number;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Descubre todos los Deployments que compartan el `label` dado (p. ej.
|
|
126
|
+
* todas las instancias GitOps de un mismo repo, marcadas con
|
|
127
|
+
* `deployment-group: repository-14`) y espera a que TODAS lleguen a estado
|
|
128
|
+
* exitoso, corriendo `waitForDeployment` por cada una en paralelo con el
|
|
129
|
+
* mismo `timeout` global.
|
|
130
|
+
*
|
|
131
|
+
* Si alguna instancia falla (timeout individual, Failed sin recuperarse, o
|
|
132
|
+
* maxRestarts superado), se espera a que terminen las demás y se lanza
|
|
133
|
+
* `DeploymentGroupRolloutError` con el detalle de cuáles fallaron y cuáles sí
|
|
134
|
+
* llegaron a estado exitoso — listo para que `ctx.run(...)` lo capture y lo
|
|
135
|
+
* reporte vía `ctx.notifier`.
|
|
136
|
+
*/
|
|
137
|
+
export declare function waitForDeploymentGroup(options: WaitForDeploymentGroupOptions): Promise<DeploymentGroupWatchResult>;
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeploymentGroupRolloutError = exports.DeploymentRolloutError = void 0;
|
|
4
|
+
exports.apply = apply;
|
|
5
|
+
exports.del = del;
|
|
6
|
+
exports.delete = del;
|
|
7
|
+
exports.get = get;
|
|
8
|
+
exports.logs = logs;
|
|
9
|
+
exports.rolloutStatus = rolloutStatus;
|
|
10
|
+
exports.setImage = setImage;
|
|
11
|
+
exports.waitForDeployment = waitForDeployment;
|
|
12
|
+
exports.waitForDeploymentGroup = waitForDeploymentGroup;
|
|
13
|
+
const shell_1 = require("./shell");
|
|
14
|
+
function isKubectlOptions(value) {
|
|
15
|
+
return Boolean(value)
|
|
16
|
+
&& typeof value === "object"
|
|
17
|
+
&& !Array.isArray(value)
|
|
18
|
+
&& ("kubeconfig" in value || "namespace" in value || "exec" in value || Object.keys(value).length === 0);
|
|
19
|
+
}
|
|
20
|
+
function withGlobalFlags(args, options = {}) {
|
|
21
|
+
const result = [...args];
|
|
22
|
+
if (options.kubeconfig) {
|
|
23
|
+
result.push("--kubeconfig", options.kubeconfig);
|
|
24
|
+
}
|
|
25
|
+
if (options.namespace) {
|
|
26
|
+
result.push("-n", options.namespace);
|
|
27
|
+
}
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
30
|
+
/** Arma los args finales para shell.exec: flags (--kubeconfig/-n) + el objeto exec al final, si se pasó. */
|
|
31
|
+
function toExecArgs(args, options = {}) {
|
|
32
|
+
const withFlags = withGlobalFlags(args, options);
|
|
33
|
+
return options.exec ? [...withFlags, options.exec] : withFlags;
|
|
34
|
+
}
|
|
35
|
+
function apply(file, options = {}) {
|
|
36
|
+
return shell_1.shell.exec("kubectl", ...toExecArgs(["apply", "-f", file], options));
|
|
37
|
+
}
|
|
38
|
+
function del(file, options = {}) {
|
|
39
|
+
return shell_1.shell.exec("kubectl", ...toExecArgs(["delete", "-f", file], options));
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Igual que antes (`kubectl.get("pods", "-o", "wide")`), pero ahora también
|
|
43
|
+
* acepta KubectlOptions como último argumento:
|
|
44
|
+
* kubectl.get("pods", "-o", "wide", { namespace: "prod", exec: { retry: 3 } })
|
|
45
|
+
*/
|
|
46
|
+
function get(...rawArgs) {
|
|
47
|
+
let args = rawArgs;
|
|
48
|
+
let options = {};
|
|
49
|
+
const last = rawArgs[rawArgs.length - 1];
|
|
50
|
+
if (rawArgs.length && isKubectlOptions(last)) {
|
|
51
|
+
options = last;
|
|
52
|
+
args = rawArgs.slice(0, -1);
|
|
53
|
+
}
|
|
54
|
+
return shell_1.shell.exec("kubectl", "get", ...toExecArgs(args, options));
|
|
55
|
+
}
|
|
56
|
+
function logs(pod, options = {}) {
|
|
57
|
+
return shell_1.shell.exec("kubectl", ...toExecArgs(["logs", pod], options));
|
|
58
|
+
}
|
|
59
|
+
function rolloutStatus(deployment, options = {}) {
|
|
60
|
+
return shell_1.shell.exec("kubectl", ...toExecArgs(["rollout", "status", deployment], options));
|
|
61
|
+
}
|
|
62
|
+
function setImage(resource, image, options = {}) {
|
|
63
|
+
return shell_1.shell.exec("kubectl", ...toExecArgs(["set", "image", resource, image], options));
|
|
64
|
+
}
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
// waitForDeployment — validación cíclica del rollout de un Deployment
|
|
67
|
+
// ---------------------------------------------------------------------------
|
|
68
|
+
function sleep(ms) {
|
|
69
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Se lanza cuando `waitForDeployment` no llega a un rollout exitoso, ya sea
|
|
73
|
+
* por timeout global, por quedarse en estado Failed sin recuperarse, o por
|
|
74
|
+
* superar el máximo de reinicios permitido. Lleva `command: "kubectl"` para
|
|
75
|
+
* que `classifiers.byCommand({ kubectl: "kubernetes" })` lo clasifique
|
|
76
|
+
* automáticamente si usas el sistema de notificaciones.
|
|
77
|
+
*/
|
|
78
|
+
class DeploymentRolloutError extends Error {
|
|
79
|
+
constructor(message, info) {
|
|
80
|
+
super(message);
|
|
81
|
+
this.command = "kubectl";
|
|
82
|
+
this.name = "DeploymentRolloutError";
|
|
83
|
+
this.status = info.status;
|
|
84
|
+
this.deployment = info.deployment;
|
|
85
|
+
this.elapsedMs = info.elapsedMs;
|
|
86
|
+
this.restarts = info.restarts;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
exports.DeploymentRolloutError = DeploymentRolloutError;
|
|
90
|
+
async function readDeploymentJSON(name, options) {
|
|
91
|
+
const result = await get(`deployment/${name}`, "-o", "json", options);
|
|
92
|
+
return JSON.parse(result.stdout);
|
|
93
|
+
}
|
|
94
|
+
async function countPodRestarts(matchLabels, options) {
|
|
95
|
+
if (!matchLabels || !Object.keys(matchLabels).length) {
|
|
96
|
+
return 0;
|
|
97
|
+
}
|
|
98
|
+
const selector = Object.entries(matchLabels)
|
|
99
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
100
|
+
.join(",");
|
|
101
|
+
const result = await get("pods", "-l", selector, "-o", "json", options);
|
|
102
|
+
const parsed = JSON.parse(result.stdout);
|
|
103
|
+
return (parsed.items ?? []).reduce((total, pod) => {
|
|
104
|
+
const podRestarts = (pod.status?.containerStatuses ?? [])
|
|
105
|
+
.reduce((sum, container) => sum + (container.restartCount ?? 0), 0);
|
|
106
|
+
return total + podRestarts;
|
|
107
|
+
}, 0);
|
|
108
|
+
}
|
|
109
|
+
function isProgressingFailed(conditions) {
|
|
110
|
+
const progressing = conditions.find(c => c.type === "Progressing");
|
|
111
|
+
if (progressing?.status === "False")
|
|
112
|
+
return true;
|
|
113
|
+
return conditions.some(c => c.type === "ReplicaFailure" && c.status === "True");
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Valida cíclicamente el estado de un Deployment hasta que:
|
|
117
|
+
* - llega a estado exitoso (replicas listas/actualizadas == replicas deseadas) -> resuelve,
|
|
118
|
+
* - supera `maxRestarts` reinicios acumulados -> lanza DeploymentRolloutError,
|
|
119
|
+
* - se queda en estado Failed más de `failedGracePeriod` sin recuperarse -> lanza DeploymentRolloutError,
|
|
120
|
+
* - o se cumple `timeout` sin éxito -> lanza DeploymentRolloutError.
|
|
121
|
+
*
|
|
122
|
+
* En cualquier caso de error, el polling se detiene ("se mata el proceso")
|
|
123
|
+
* y el error se re-lanza, listo para que `ctx.run(...)` lo capture y lo
|
|
124
|
+
* reporte vía `ctx.notifier` si lo tienes configurado.
|
|
125
|
+
*/
|
|
126
|
+
async function waitForDeployment(options) {
|
|
127
|
+
const { deployment, timeout = 300000, pollInterval = 5000, failedGracePeriod = pollInterval * 6, maxRestarts, ...kubectlOptions } = options;
|
|
128
|
+
const startedAt = Date.now();
|
|
129
|
+
let failedSince = null;
|
|
130
|
+
while (true) {
|
|
131
|
+
const elapsedMs = Date.now() - startedAt;
|
|
132
|
+
if (elapsedMs >= timeout) {
|
|
133
|
+
const message = `Timeout esperando el rollout de "${deployment}" (${timeout}ms)`;
|
|
134
|
+
throw new DeploymentRolloutError(message, { status: "timeout", deployment, elapsedMs, restarts: -1 });
|
|
135
|
+
}
|
|
136
|
+
let json;
|
|
137
|
+
try {
|
|
138
|
+
json = await readDeploymentJSON(deployment, kubectlOptions);
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
// El recurso puede no existir todavía (justo después de un apply); reintenta.
|
|
142
|
+
await sleep(pollInterval);
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
const desired = json.spec?.replicas ?? 1;
|
|
146
|
+
const ready = json.status?.readyReplicas ?? 0;
|
|
147
|
+
const updated = json.status?.updatedReplicas ?? 0;
|
|
148
|
+
const conditions = json.status?.conditions ?? [];
|
|
149
|
+
const failed = isProgressingFailed(conditions);
|
|
150
|
+
const success = !failed && ready >= desired && updated >= desired;
|
|
151
|
+
let restarts = 0;
|
|
152
|
+
if (maxRestarts !== undefined) {
|
|
153
|
+
restarts = await countPodRestarts(json.spec?.selector?.matchLabels, kubectlOptions);
|
|
154
|
+
if (restarts > maxRestarts) {
|
|
155
|
+
const message = `Deployment "${deployment}" superó el máximo de reinicios permitido (${restarts} > ${maxRestarts})`;
|
|
156
|
+
throw new DeploymentRolloutError(message, { status: "failed", deployment, elapsedMs, restarts });
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
if (success) {
|
|
160
|
+
const message = `Deployment "${deployment}" alcanzó el estado esperado (${ready}/${desired} listas)`;
|
|
161
|
+
return { status: "success", deployment, elapsedMs, restarts, message };
|
|
162
|
+
}
|
|
163
|
+
if (failed) {
|
|
164
|
+
if (failedSince === null) {
|
|
165
|
+
failedSince = Date.now();
|
|
166
|
+
}
|
|
167
|
+
else if (Date.now() - failedSince >= failedGracePeriod) {
|
|
168
|
+
const message = `Deployment "${deployment}" quedó en estado Failed y no se recuperó en ${failedGracePeriod}ms`;
|
|
169
|
+
throw new DeploymentRolloutError(message, { status: "failed", deployment, elapsedMs, restarts });
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
failedSince = null;
|
|
174
|
+
}
|
|
175
|
+
await sleep(pollInterval);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Se lanza cuando `waitForDeploymentGroup` no logra que TODAS las instancias
|
|
180
|
+
* del grupo lleguen a estado exitoso. Lleva `command: "kubectl"` para que
|
|
181
|
+
* `classifiers.byCommand({ kubectl: "kubernetes" })` lo clasifique solo.
|
|
182
|
+
*/
|
|
183
|
+
class DeploymentGroupRolloutError extends Error {
|
|
184
|
+
constructor(message, info) {
|
|
185
|
+
super(message);
|
|
186
|
+
this.command = "kubectl";
|
|
187
|
+
this.name = "DeploymentGroupRolloutError";
|
|
188
|
+
this.label = info.label;
|
|
189
|
+
this.elapsedMs = info.elapsedMs;
|
|
190
|
+
this.succeeded = info.succeeded;
|
|
191
|
+
this.failed = info.failed;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
exports.DeploymentGroupRolloutError = DeploymentGroupRolloutError;
|
|
195
|
+
function toSelectorString(label) {
|
|
196
|
+
if (typeof label === "string")
|
|
197
|
+
return label;
|
|
198
|
+
return Object.entries(label)
|
|
199
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
200
|
+
.join(",");
|
|
201
|
+
}
|
|
202
|
+
async function listDeploymentNames(selector, options) {
|
|
203
|
+
const result = await get("deployments", "-l", selector, "-o", "json", options);
|
|
204
|
+
const parsed = JSON.parse(result.stdout);
|
|
205
|
+
return (parsed.items ?? [])
|
|
206
|
+
.map(item => item.metadata?.name)
|
|
207
|
+
.filter((name) => Boolean(name));
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Descubre todos los Deployments que compartan el `label` dado (p. ej.
|
|
211
|
+
* todas las instancias GitOps de un mismo repo, marcadas con
|
|
212
|
+
* `deployment-group: repository-14`) y espera a que TODAS lleguen a estado
|
|
213
|
+
* exitoso, corriendo `waitForDeployment` por cada una en paralelo con el
|
|
214
|
+
* mismo `timeout` global.
|
|
215
|
+
*
|
|
216
|
+
* Si alguna instancia falla (timeout individual, Failed sin recuperarse, o
|
|
217
|
+
* maxRestarts superado), se espera a que terminen las demás y se lanza
|
|
218
|
+
* `DeploymentGroupRolloutError` con el detalle de cuáles fallaron y cuáles sí
|
|
219
|
+
* llegaron a estado exitoso — listo para que `ctx.run(...)` lo capture y lo
|
|
220
|
+
* reporte vía `ctx.notifier`.
|
|
221
|
+
*/
|
|
222
|
+
async function waitForDeploymentGroup(options) {
|
|
223
|
+
const { label, timeout = 300000, pollInterval = 5000, failedGracePeriod = pollInterval * 6, maxRestarts, ...kubectlOptions } = options;
|
|
224
|
+
const selector = toSelectorString(label);
|
|
225
|
+
const startedAt = Date.now();
|
|
226
|
+
const names = await listDeploymentNames(selector, kubectlOptions);
|
|
227
|
+
if (!names.length) {
|
|
228
|
+
const message = `No se encontraron deployments con el label "${selector}"`;
|
|
229
|
+
throw new DeploymentGroupRolloutError(message, {
|
|
230
|
+
label: selector,
|
|
231
|
+
elapsedMs: Date.now() - startedAt,
|
|
232
|
+
succeeded: [],
|
|
233
|
+
failed: []
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
const remainingMs = () => Math.max(0, timeout - (Date.now() - startedAt));
|
|
237
|
+
const settled = await Promise.allSettled(names.map(deployment => waitForDeployment({
|
|
238
|
+
deployment,
|
|
239
|
+
timeout: remainingMs(),
|
|
240
|
+
pollInterval,
|
|
241
|
+
failedGracePeriod,
|
|
242
|
+
maxRestarts,
|
|
243
|
+
...kubectlOptions
|
|
244
|
+
})));
|
|
245
|
+
const succeeded = [];
|
|
246
|
+
const failed = [];
|
|
247
|
+
const deployments = [];
|
|
248
|
+
settled.forEach((outcome, index) => {
|
|
249
|
+
const name = names[index];
|
|
250
|
+
if (outcome.status === "fulfilled") {
|
|
251
|
+
succeeded.push(name);
|
|
252
|
+
deployments.push(outcome.value);
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
const reason = outcome.reason;
|
|
256
|
+
failed.push({
|
|
257
|
+
deployment: name,
|
|
258
|
+
status: reason?.status ?? "failed",
|
|
259
|
+
message: reason?.message ?? String(outcome.reason)
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
const elapsedMs = Date.now() - startedAt;
|
|
263
|
+
if (failed.length) {
|
|
264
|
+
const summary = failed.map(f => `${f.deployment} (${f.status})`).join(", ");
|
|
265
|
+
const message = `${failed.length}/${names.length} deployments del grupo "${selector}" no llegaron a estado exitoso: ${summary}`;
|
|
266
|
+
throw new DeploymentGroupRolloutError(message, { label: selector, elapsedMs, succeeded, failed });
|
|
267
|
+
}
|
|
268
|
+
const message = `Los ${names.length} deployments del grupo "${selector}" alcanzaron el estado esperado`;
|
|
269
|
+
return { status: "success", label: selector, elapsedMs, deployments, message };
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=kubectl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kubectl.js","sourceRoot":"","sources":["../../src/services/kubectl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ExecOptions, ExecResult } from "../core/types";
|
|
2
|
+
export declare function install(exec?: ExecOptions): Promise<ExecResult>;
|
|
3
|
+
export declare function ci(exec?: ExecOptions): Promise<ExecResult>;
|
|
4
|
+
export declare function run(script: string, exec?: ExecOptions): Promise<ExecResult>;
|
|
5
|
+
export declare function publish(exec?: ExecOptions): Promise<ExecResult>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.install = install;
|
|
4
|
+
exports.ci = ci;
|
|
5
|
+
exports.run = run;
|
|
6
|
+
exports.publish = publish;
|
|
7
|
+
const shell_1 = require("./shell");
|
|
8
|
+
function install(exec) {
|
|
9
|
+
return shell_1.shell.exec("npm", ...(0, shell_1.withExecOptions)(["install"], exec));
|
|
10
|
+
}
|
|
11
|
+
function ci(exec) {
|
|
12
|
+
return shell_1.shell.exec("npm", ...(0, shell_1.withExecOptions)(["ci"], exec));
|
|
13
|
+
}
|
|
14
|
+
function run(script, exec) {
|
|
15
|
+
return shell_1.shell.exec("npm", ...(0, shell_1.withExecOptions)(["run", script], exec));
|
|
16
|
+
}
|
|
17
|
+
function publish(exec) {
|
|
18
|
+
return shell_1.shell.exec("npm", ...(0, shell_1.withExecOptions)(["publish"], exec));
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=npm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm.js","sourceRoot":"","sources":["../../src/services/npm.ts"],"names":[],"mappings":";;AAGA,0BAEC;AAED,gBAEC;AAED,kBAEC;AAED,0BAEC;AAjBD,mCAAiD;AAGjD,SAAgB,OAAO,CAAC,IAAkB;IACtC,OAAO,aAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,SAAgB,EAAE,CAAC,IAAkB;IACjC,OAAO,aAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,SAAgB,GAAG,CAAC,MAAc,EAAE,IAAkB;IAClD,OAAO,aAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAgB,OAAO,CAAC,IAAkB;IACtC,OAAO,aAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACpE,CAAC"}
|