@cat-indev/catops-cli 0.0.1-alpha.5
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 +397 -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 +42 -0
- package/dist/core/Context.js +153 -0
- package/dist/core/Context.js.map +1 -0
- package/dist/core/Menu.d.ts +23 -0
- package/dist/core/Menu.js +159 -0
- package/dist/core/Menu.js.map +1 -0
- package/dist/core/Notifier.d.ts +27 -0
- package/dist/core/Notifier.js +93 -0
- package/dist/core/Notifier.js.map +1 -0
- package/dist/core/classifiers.d.ts +31 -0
- package/dist/core/classifiers.js +53 -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/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 +105 -0
- package/dist/core/types.js +3 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -0
- package/dist/services/ansible.d.ts +11 -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 +20 -0
- package/dist/services/argocd.js +48 -0
- package/dist/services/argocd.js.map +1 -0
- package/dist/services/az.d.ts +33 -0
- package/dist/services/az.js +48 -0
- package/dist/services/az.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 +18 -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/index.d.ts +32 -0
- package/dist/services/index.js +81 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/kubectl.d.ts +135 -0
- package/dist/services/kubectl.js +266 -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 +146 -0
- package/dist/services/oc.js +296 -0
- package/dist/services/oc.js.map +1 -0
- package/dist/services/shell.d.ts +20 -0
- package/dist/services/shell.js +195 -0
- package/dist/services/shell.js.map +1 -0
- package/dist/services/tekton.d.ts +14 -0
- package/dist/services/tekton.js +46 -0
- package/dist/services/tekton.js.map +1 -0
- package/dist/services/terraform.d.ts +26 -0
- package/dist/services/terraform.js +63 -0
- package/dist/services/terraform.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,87 @@
|
|
|
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.ask = ask;
|
|
37
|
+
exports.confirm = confirm;
|
|
38
|
+
exports.select = select;
|
|
39
|
+
const readline = __importStar(require("readline"));
|
|
40
|
+
function createInterface() {
|
|
41
|
+
return readline.createInterface({
|
|
42
|
+
input: process.stdin,
|
|
43
|
+
output: process.stdout
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
async function ask(question, options = {}) {
|
|
47
|
+
const { defaultValue } = options;
|
|
48
|
+
const rl = createInterface();
|
|
49
|
+
const suffix = defaultValue !== undefined
|
|
50
|
+
? ` (${defaultValue}) `
|
|
51
|
+
: " ";
|
|
52
|
+
try {
|
|
53
|
+
const answer = await new Promise(resolve => {
|
|
54
|
+
rl.question(`${question}${suffix}`, resolve);
|
|
55
|
+
});
|
|
56
|
+
return answer.trim() || defaultValue;
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
rl.close();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async function confirm(question, options = {}) {
|
|
63
|
+
const { defaultValue = true } = options;
|
|
64
|
+
const hint = defaultValue ? "Y/n" : "y/N";
|
|
65
|
+
const answer = await ask(`${question} [${hint}]`);
|
|
66
|
+
if (!answer)
|
|
67
|
+
return defaultValue;
|
|
68
|
+
return ["y", "yes", "s", "si", "sí"].includes(answer.toLowerCase());
|
|
69
|
+
}
|
|
70
|
+
async function select(title, choices) {
|
|
71
|
+
const entries = Array.isArray(choices)
|
|
72
|
+
? choices.map((label, i) => [String(i), label])
|
|
73
|
+
: Object.entries(choices);
|
|
74
|
+
console.log(`\n${title}`);
|
|
75
|
+
entries.forEach(([, label], index) => {
|
|
76
|
+
console.log(` ${index + 1}) ${label}`);
|
|
77
|
+
});
|
|
78
|
+
const answer = await ask("Selecciona una opción:");
|
|
79
|
+
const index = parseInt(answer ?? "", 10) - 1;
|
|
80
|
+
const entry = entries[index];
|
|
81
|
+
if (Number.isNaN(index) || !entry) {
|
|
82
|
+
console.log("Opción inválida, intenta de nuevo.");
|
|
83
|
+
return select(title, choices);
|
|
84
|
+
}
|
|
85
|
+
return entry[0];
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/core/prompt.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,kBAsBC;AAMD,0BAYC;AAID,wBAyBC;AAlFD,mDAAqC;AAErC,SAAS,eAAe;IACpB,OAAO,QAAQ,CAAC,eAAe,CAAC;QAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACzB,CAAC,CAAC;AACP,CAAC;AAMM,KAAK,UAAU,GAAG,CAAC,QAAgB,EAAE,UAAsB,EAAE;IAEhE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAEjC,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;IAE7B,MAAM,MAAM,GAAG,YAAY,KAAK,SAAS;QACrC,CAAC,CAAC,KAAK,YAAY,IAAI;QACvB,CAAC,CAAC,GAAG,CAAC;IAEV,IAAI,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,OAAO,CAAC,EAAE;YAC/C,EAAE,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,YAAY,CAAC;IAEzC,CAAC;YAAS,CAAC;QACP,EAAE,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;AAEL,CAAC;AAMM,KAAK,UAAU,OAAO,CAAC,QAAgB,EAAE,UAA0B,EAAE;IAExE,MAAM,EAAE,YAAY,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAExC,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAE1C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,QAAQ,KAAK,IAAI,GAAG,CAAC,CAAC;IAElD,IAAI,CAAC,MAAM;QAAE,OAAO,YAAY,CAAC;IAEjC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;AAExE,CAAC;AAIM,KAAK,UAAU,MAAM,CAAC,KAAa,EAAE,OAAsB;IAE9D,MAAM,OAAO,GAAuB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QACtD,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAoB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IAE1B,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAEnD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAE7C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAE7B,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,OAAO,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAEpB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { NotificationEvent, Sender } from "./types";
|
|
2
|
+
export declare function log(): Sender;
|
|
3
|
+
export interface FileSenderOptions {
|
|
4
|
+
path: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function file({ path }: FileSenderOptions): Sender;
|
|
7
|
+
export interface HttpSenderOptions {
|
|
8
|
+
url: string;
|
|
9
|
+
method?: string;
|
|
10
|
+
headers?: Record<string, string>;
|
|
11
|
+
/** Transforma el evento antes de enviarlo. Por defecto se manda tal cual. */
|
|
12
|
+
formatBody?: (event: NotificationEvent) => Promise<unknown> | unknown;
|
|
13
|
+
}
|
|
14
|
+
export declare function http({ url, method, headers, formatBody }: HttpSenderOptions): Sender;
|
|
15
|
+
export interface WebhookSenderOptions {
|
|
16
|
+
url: string;
|
|
17
|
+
headers?: Record<string, string>;
|
|
18
|
+
/** Formatea el payload del webhook. Por defecto: { text: event.message }. */
|
|
19
|
+
format?: (event: NotificationEvent) => Promise<unknown> | unknown;
|
|
20
|
+
}
|
|
21
|
+
export declare function webhook({ url, headers, format }: WebhookSenderOptions): Sender;
|
|
22
|
+
export interface WebSocketSenderOptions {
|
|
23
|
+
url: string;
|
|
24
|
+
/** Milisegundos a esperar antes de abortar. Default: 5000 */
|
|
25
|
+
timeout?: number;
|
|
26
|
+
}
|
|
27
|
+
export declare function websocket({ url, timeout }: WebSocketSenderOptions): Sender;
|
|
@@ -0,0 +1,109 @@
|
|
|
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.log = log;
|
|
37
|
+
exports.file = file;
|
|
38
|
+
exports.http = http;
|
|
39
|
+
exports.webhook = webhook;
|
|
40
|
+
exports.websocket = websocket;
|
|
41
|
+
const fs = __importStar(require("fs/promises"));
|
|
42
|
+
const logger_1 = require("./logger");
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
// log — usa el logger interno, sin red ni disco
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
function log() {
|
|
47
|
+
return (event) => {
|
|
48
|
+
if (event.type === "error") {
|
|
49
|
+
logger_1.logger.error(`[${event.area ?? "?"}] ${event.taskId}: ${event.message}`);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
logger_1.logger.success(`${event.taskId}: ${event.message}`);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function file({ path }) {
|
|
57
|
+
return async (event) => {
|
|
58
|
+
await fs.appendFile(path, `${JSON.stringify(event)}\n`, "utf8");
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function http({ url, method = "POST", headers = {}, formatBody }) {
|
|
62
|
+
return async (event) => {
|
|
63
|
+
const body = formatBody ? await formatBody(event) : event;
|
|
64
|
+
const response = await fetch(url, {
|
|
65
|
+
method,
|
|
66
|
+
headers: {
|
|
67
|
+
"Content-Type": "application/json",
|
|
68
|
+
...headers
|
|
69
|
+
},
|
|
70
|
+
body: JSON.stringify(body)
|
|
71
|
+
});
|
|
72
|
+
if (!response.ok) {
|
|
73
|
+
throw new Error(`http sender: ${url} respondió ${response.status} ${response.statusText}`);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function webhook({ url, headers, format }) {
|
|
78
|
+
const formatBody = format ?? ((event) => ({
|
|
79
|
+
text: event.type === "error"
|
|
80
|
+
? `❌ [${event.area}] ${event.taskId}: ${event.message}`
|
|
81
|
+
: `✅ ${event.taskId}: ${event.message}`
|
|
82
|
+
}));
|
|
83
|
+
return http({ url, headers, formatBody });
|
|
84
|
+
}
|
|
85
|
+
function websocket({ url, timeout = 5000 }) {
|
|
86
|
+
return (event) => new Promise((resolve, reject) => {
|
|
87
|
+
if (typeof WebSocket === "undefined") {
|
|
88
|
+
reject(new Error("El global WebSocket no está disponible en este runtime de Node. " +
|
|
89
|
+
"Usa Node >=22, o instala 'ws' en tu proyecto y arma tu propio sender con él."));
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const socket = new WebSocket(url);
|
|
93
|
+
const timer = setTimeout(() => {
|
|
94
|
+
socket.close();
|
|
95
|
+
reject(new Error(`websocket sender: timeout conectando a ${url}`));
|
|
96
|
+
}, timeout);
|
|
97
|
+
socket.addEventListener("open", () => {
|
|
98
|
+
socket.send(JSON.stringify(event));
|
|
99
|
+
clearTimeout(timer);
|
|
100
|
+
socket.close();
|
|
101
|
+
resolve();
|
|
102
|
+
});
|
|
103
|
+
socket.addEventListener("error", () => {
|
|
104
|
+
clearTimeout(timer);
|
|
105
|
+
reject(new Error(`websocket sender: error conectando a ${url}`));
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=senders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"senders.js","sourceRoot":"","sources":["../../src/core/senders.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type { Context } from "./Context";
|
|
2
|
+
export interface ExecResult {
|
|
3
|
+
code: number | null;
|
|
4
|
+
stdout: string;
|
|
5
|
+
stderr: string;
|
|
6
|
+
dryRun?: boolean;
|
|
7
|
+
timedOut?: boolean;
|
|
8
|
+
/** Comando ejecutado, útil para clasificar errores por área de TI. */
|
|
9
|
+
command?: string;
|
|
10
|
+
args?: string[];
|
|
11
|
+
}
|
|
12
|
+
export interface ExecOptions {
|
|
13
|
+
/** Número total de intentos (1 = sin retry). Default: 1 */
|
|
14
|
+
retry?: number;
|
|
15
|
+
/** Milisegundos de espera entre reintentos. Default: 1000 */
|
|
16
|
+
retryDelay?: number;
|
|
17
|
+
/** Milisegundos antes de matar el proceso con SIGTERM. Default: 0 (sin límite) */
|
|
18
|
+
timeout?: number;
|
|
19
|
+
/** Si es true, solo loguea el comando y no lo ejecuta. Default: false */
|
|
20
|
+
dryRun?: boolean;
|
|
21
|
+
/** Si se quiere ejecutar comandos en el shell del sistema directamente. Default: false */
|
|
22
|
+
shell?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export type SuccessCallback<T = unknown> = (result: T, ctx: Context) => unknown | Promise<unknown>;
|
|
25
|
+
export type ErrorCallback = (error: unknown, ctx: Context) => unknown | Promise<unknown>;
|
|
26
|
+
export interface TaskHooks<T = unknown> {
|
|
27
|
+
onSuccess?: SuccessCallback<T>;
|
|
28
|
+
onError?: ErrorCallback;
|
|
29
|
+
}
|
|
30
|
+
export interface NotificationEvent {
|
|
31
|
+
type: "success" | "error";
|
|
32
|
+
/** Id de la tarea (taskId de ctx.run(), o el label del item de menú). */
|
|
33
|
+
taskId: string;
|
|
34
|
+
/** Área de TI a la que se enrutó el error (solo en eventos de error). */
|
|
35
|
+
area?: string;
|
|
36
|
+
error?: unknown;
|
|
37
|
+
result?: unknown;
|
|
38
|
+
message: string;
|
|
39
|
+
timestamp: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Determina a qué área de TI corresponde un error. Devuelve el nombre del
|
|
43
|
+
* área (usado luego para buscar los senders registrados en esa área vía
|
|
44
|
+
* notifier.channel(area, ...senders)), o `undefined` si esta función no
|
|
45
|
+
* sabe clasificar ese error (se prueba el siguiente classifier registrado).
|
|
46
|
+
*/
|
|
47
|
+
export type ErrorClassifier = (error: unknown, ctx: Context) => string | undefined;
|
|
48
|
+
/** Un sender recibe el evento ya armado y lo entrega por el medio que sea. */
|
|
49
|
+
export type Sender = (event: NotificationEvent) => unknown | Promise<unknown>;
|
|
50
|
+
/** Una task ejecutable de un item de menú. Recibe el Context activo. */
|
|
51
|
+
export type MenuTask = (ctx: Context) => unknown | Promise<unknown>;
|
|
52
|
+
/**
|
|
53
|
+
* Forma "larga" de un item de menú, usada cuando necesitas asociarle un
|
|
54
|
+
* selector (para poder elegirlo automáticamente vía flag), callbacks de
|
|
55
|
+
* éxito/error, o ambos, además de su acción o submenú.
|
|
56
|
+
*
|
|
57
|
+
* Ejemplo:
|
|
58
|
+
* Build: {
|
|
59
|
+
* selector: "build",
|
|
60
|
+
* action: async (ctx) => {...},
|
|
61
|
+
* onSuccess: (result, ctx) => {...},
|
|
62
|
+
* onError: (error, ctx) => {...}
|
|
63
|
+
* }
|
|
64
|
+
* Docker: { selector: "docker", menu: dockerMenu }
|
|
65
|
+
*/
|
|
66
|
+
export interface MenuOptionWithSelector {
|
|
67
|
+
/** Valor que debe matchear el flag definido en "flag-selector" del menú padre. */
|
|
68
|
+
selector?: string;
|
|
69
|
+
/** Task a ejecutar si este item es una hoja. */
|
|
70
|
+
action?: MenuTask;
|
|
71
|
+
/** Submenú a renderizar si este item lleva a otro nivel. */
|
|
72
|
+
menu?: MenuDefinition;
|
|
73
|
+
/** Se llama si `action` resuelve exitosamente. */
|
|
74
|
+
onSuccess?: SuccessCallback;
|
|
75
|
+
/** Se llama si `action` lanza un error (además de reportarse al notifier). */
|
|
76
|
+
onError?: ErrorCallback;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Valor de un item de menú. Puede ser:
|
|
80
|
+
* - una función (task directa, sin selector ni callbacks)
|
|
81
|
+
* - un MenuDefinition (submenú directo, sin selector)
|
|
82
|
+
* - un MenuOptionWithSelector (para poder asignarle selector y/o callbacks)
|
|
83
|
+
*/
|
|
84
|
+
export type MenuOptionValue = MenuTask | MenuDefinition | MenuOptionWithSelector;
|
|
85
|
+
export interface MenuDefinition {
|
|
86
|
+
title: string;
|
|
87
|
+
/**
|
|
88
|
+
* Nombre del flag (con o sin "--") que, al recibir un valor que matchee
|
|
89
|
+
* el "selector" de alguno de los items, selecciona esa opción de forma
|
|
90
|
+
* automática y no interactiva.
|
|
91
|
+
*
|
|
92
|
+
* Ejemplo: "flag-selector": "--menu-selector"
|
|
93
|
+
* Uso: catops-cli --menu-selector=build
|
|
94
|
+
*/
|
|
95
|
+
"flag-selector"?: string;
|
|
96
|
+
options: Record<string, MenuOptionValue>;
|
|
97
|
+
}
|
|
98
|
+
export interface ResolvedMenuEntry {
|
|
99
|
+
kind: "task" | "menu";
|
|
100
|
+
selector?: string;
|
|
101
|
+
run?: MenuTask;
|
|
102
|
+
menu?: MenuDefinition;
|
|
103
|
+
onSuccess?: SuccessCallback;
|
|
104
|
+
onError?: ErrorCallback;
|
|
105
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { Context } from "./core/Context";
|
|
2
|
+
export type { FlagValue } from "./core/Context";
|
|
3
|
+
export { Menu } from "./core/Menu";
|
|
4
|
+
export { logger } from "./core/logger";
|
|
5
|
+
export type { Logger } from "./core/logger";
|
|
6
|
+
export * as prompt from "./core/prompt";
|
|
7
|
+
export { services } from "./services";
|
|
8
|
+
export type { ServicesRegistry } from "./services";
|
|
9
|
+
export { Notifier } from "./core/Notifier";
|
|
10
|
+
export * as senders from "./core/senders";
|
|
11
|
+
export * as classifiers from "./core/classifiers";
|
|
12
|
+
export type { ExecOptions, ExecResult, MenuTask, MenuOptionWithSelector, MenuOptionValue, MenuDefinition, ResolvedMenuEntry, TaskHooks, SuccessCallback, ErrorCallback, NotificationEvent, ErrorClassifier, Sender } from "./core/types";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
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.classifiers = exports.senders = exports.Notifier = exports.services = exports.prompt = exports.logger = exports.Menu = exports.Context = void 0;
|
|
37
|
+
var Context_1 = require("./core/Context");
|
|
38
|
+
Object.defineProperty(exports, "Context", { enumerable: true, get: function () { return Context_1.Context; } });
|
|
39
|
+
var Menu_1 = require("./core/Menu");
|
|
40
|
+
Object.defineProperty(exports, "Menu", { enumerable: true, get: function () { return Menu_1.Menu; } });
|
|
41
|
+
var logger_1 = require("./core/logger");
|
|
42
|
+
Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return logger_1.logger; } });
|
|
43
|
+
exports.prompt = __importStar(require("./core/prompt"));
|
|
44
|
+
var services_1 = require("./services");
|
|
45
|
+
Object.defineProperty(exports, "services", { enumerable: true, get: function () { return services_1.services; } });
|
|
46
|
+
var Notifier_1 = require("./core/Notifier");
|
|
47
|
+
Object.defineProperty(exports, "Notifier", { enumerable: true, get: function () { return Notifier_1.Notifier; } });
|
|
48
|
+
exports.senders = __importStar(require("./core/senders"));
|
|
49
|
+
exports.classifiers = __importStar(require("./core/classifiers"));
|
|
50
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0CAAyC;AAAhC,kGAAA,OAAO,OAAA;AAGhB,oCAAmC;AAA1B,4FAAA,IAAI,OAAA;AAEb,wCAAuC;AAA9B,gGAAA,MAAM,OAAA;AAGf,wDAAwC;AAExC,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AAGjB,4CAA2C;AAAlC,oGAAA,QAAQ,OAAA;AACjB,0DAA0C;AAC1C,kEAAkD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ExecResult } from "../core/types";
|
|
2
|
+
export interface AnsiblePlaybookOptions {
|
|
3
|
+
inventory?: string;
|
|
4
|
+
extraVars?: Record<string, string>;
|
|
5
|
+
tags?: string;
|
|
6
|
+
}
|
|
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>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.playbook = playbook;
|
|
4
|
+
exports.adhoc = adhoc;
|
|
5
|
+
exports.vaultEncrypt = vaultEncrypt;
|
|
6
|
+
exports.vaultDecrypt = vaultDecrypt;
|
|
7
|
+
exports.galaxyInstall = galaxyInstall;
|
|
8
|
+
const shell_1 = require("./shell");
|
|
9
|
+
function playbook(playbookPath, { inventory, extraVars = {}, tags } = {}) {
|
|
10
|
+
const args = ["-i", inventory || "inventory.ini", playbookPath];
|
|
11
|
+
Object.entries(extraVars).forEach(([k, v]) => {
|
|
12
|
+
args.push("--extra-vars", `${k}=${v}`);
|
|
13
|
+
});
|
|
14
|
+
if (tags) {
|
|
15
|
+
args.push("--tags", tags);
|
|
16
|
+
}
|
|
17
|
+
return shell_1.shell.exec("ansible-playbook", ...args);
|
|
18
|
+
}
|
|
19
|
+
function adhoc(host, module, moduleArgs) {
|
|
20
|
+
const args = [host, "-m", module];
|
|
21
|
+
if (moduleArgs) {
|
|
22
|
+
args.push("-a", moduleArgs);
|
|
23
|
+
}
|
|
24
|
+
return shell_1.shell.exec("ansible", ...args);
|
|
25
|
+
}
|
|
26
|
+
function vaultEncrypt(file) {
|
|
27
|
+
return shell_1.shell.exec("ansible-vault", "encrypt", file);
|
|
28
|
+
}
|
|
29
|
+
function vaultDecrypt(file) {
|
|
30
|
+
return shell_1.shell.exec("ansible-vault", "decrypt", file);
|
|
31
|
+
}
|
|
32
|
+
function galaxyInstall(requirementsFile) {
|
|
33
|
+
return shell_1.shell.exec("ansible-galaxy", "install", "-r", requirementsFile);
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=ansible.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +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>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.zip = zip;
|
|
4
|
+
exports.unzip = unzip;
|
|
5
|
+
exports.tar = tar;
|
|
6
|
+
const shell_1 = require("./shell");
|
|
7
|
+
function zip(source, target) {
|
|
8
|
+
return shell_1.shell.exec("zip", "-r", target, source);
|
|
9
|
+
}
|
|
10
|
+
function unzip(file, target) {
|
|
11
|
+
return shell_1.shell.exec("unzip", file, "-d", target);
|
|
12
|
+
}
|
|
13
|
+
function tar(source, target) {
|
|
14
|
+
return shell_1.shell.exec("tar", "-czf", target, source);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=archive.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ExecResult } from "../core/types";
|
|
2
|
+
export interface ArgoLoginOptions {
|
|
3
|
+
server: string;
|
|
4
|
+
username: string;
|
|
5
|
+
password: string;
|
|
6
|
+
insecure?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface ArgoSyncOptions {
|
|
9
|
+
prune?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface ArgoWaitOptions {
|
|
12
|
+
timeout?: number;
|
|
13
|
+
}
|
|
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>;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.login = login;
|
|
4
|
+
exports.appSync = appSync;
|
|
5
|
+
exports.appGet = appGet;
|
|
6
|
+
exports.appWait = appWait;
|
|
7
|
+
exports.appSet = appSet;
|
|
8
|
+
exports.appList = appList;
|
|
9
|
+
exports.appRollback = appRollback;
|
|
10
|
+
const shell_1 = require("./shell");
|
|
11
|
+
function login({ server, username, password, insecure = false }) {
|
|
12
|
+
const args = ["login", server, "--username", username, "--password", password];
|
|
13
|
+
if (insecure) {
|
|
14
|
+
args.push("--insecure");
|
|
15
|
+
}
|
|
16
|
+
return shell_1.shell.exec("argocd", ...args);
|
|
17
|
+
}
|
|
18
|
+
function appSync(name, { prune = false } = {}) {
|
|
19
|
+
const args = ["app", "sync", name];
|
|
20
|
+
if (prune) {
|
|
21
|
+
args.push("--prune");
|
|
22
|
+
}
|
|
23
|
+
return shell_1.shell.exec("argocd", ...args);
|
|
24
|
+
}
|
|
25
|
+
function appGet(name) {
|
|
26
|
+
return shell_1.shell.exec("argocd", "app", "get", name);
|
|
27
|
+
}
|
|
28
|
+
function appWait(name, { timeout } = {}) {
|
|
29
|
+
const args = ["app", "wait", name];
|
|
30
|
+
if (timeout) {
|
|
31
|
+
args.push("--timeout", String(timeout));
|
|
32
|
+
}
|
|
33
|
+
return shell_1.shell.exec("argocd", ...args);
|
|
34
|
+
}
|
|
35
|
+
function appSet(name, params = {}) {
|
|
36
|
+
const args = ["app", "set", name];
|
|
37
|
+
Object.entries(params).forEach(([k, v]) => {
|
|
38
|
+
args.push("-p", `${k}=${v}`);
|
|
39
|
+
});
|
|
40
|
+
return shell_1.shell.exec("argocd", ...args);
|
|
41
|
+
}
|
|
42
|
+
function appList() {
|
|
43
|
+
return shell_1.shell.exec("argocd", "app", "list");
|
|
44
|
+
}
|
|
45
|
+
function appRollback(name, revisionId) {
|
|
46
|
+
return shell_1.shell.exec("argocd", "app", "rollback", name, revisionId);
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=argocd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"argocd.js","sourceRoot":"","sources":["../../src/services/argocd.ts"],"names":[],"mappings":";;AAkBA,sBAUC;AAED,0BAUC;AAED,wBAEC;AAED,0BAUC;AAED,wBAUC;AAED,0BAEC;AAED,kCAEC;AA5ED,mCAAgC;AAkBhC,SAAgB,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GAAG,KAAK,EAAoB;IAEpF,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IAE/E,IAAI,QAAQ,EAAE,CAAC;QACX,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,aAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC;AAEzC,CAAC;AAED,SAAgB,OAAO,CAAC,IAAY,EAAE,EAAE,KAAK,GAAG,KAAK,KAAsB,EAAE;IAEzE,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAEnC,IAAI,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,aAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC;AAEzC,CAAC;AAED,SAAgB,MAAM,CAAC,IAAY;IAC/B,OAAO,aAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACpD,CAAC;AAED,SAAgB,OAAO,CAAC,IAAY,EAAE,EAAE,OAAO,KAAsB,EAAE;IAEnE,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAEnC,IAAI,OAAO,EAAE,CAAC;QACV,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,aAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC;AAEzC,CAAC;AAED,SAAgB,MAAM,CAAC,IAAY,EAAE,SAAiC,EAAE;IAEpE,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAElC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QACtC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,OAAO,aAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC;AAEzC,CAAC;AAED,SAAgB,OAAO;IACnB,OAAO,aAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED,SAAgB,WAAW,CAAC,IAAY,EAAE,UAAkB;IACxD,OAAO,aAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { ExecResult } from "../core/types";
|
|
2
|
+
export interface AzLoginOptions {
|
|
3
|
+
username: string;
|
|
4
|
+
password: string;
|
|
5
|
+
tenant: string;
|
|
6
|
+
}
|
|
7
|
+
export interface AzAcrBuildOptions {
|
|
8
|
+
registry: string;
|
|
9
|
+
image: string;
|
|
10
|
+
file?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface AzWebappDeployOptions {
|
|
13
|
+
name: string;
|
|
14
|
+
resourceGroup: string;
|
|
15
|
+
srcPath: string;
|
|
16
|
+
}
|
|
17
|
+
export interface AzAksCredentialsOptions {
|
|
18
|
+
name: string;
|
|
19
|
+
resourceGroup: string;
|
|
20
|
+
overwriteExisting?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface AzDeploymentGroupOptions {
|
|
23
|
+
resourceGroup: string;
|
|
24
|
+
templateFile: string;
|
|
25
|
+
parameters?: Record<string, string>;
|
|
26
|
+
}
|
|
27
|
+
export declare function loginServicePrincipal({ username, password, tenant }: AzLoginOptions): Promise<ExecResult>;
|
|
28
|
+
export declare function setAccount(subscription: string): Promise<ExecResult>;
|
|
29
|
+
export declare function acrBuild({ registry, image, file }: AzAcrBuildOptions): Promise<ExecResult>;
|
|
30
|
+
export declare function acrLogin(registry: string): Promise<ExecResult>;
|
|
31
|
+
export declare function webappDeploy({ name, resourceGroup, srcPath }: AzWebappDeployOptions): Promise<ExecResult>;
|
|
32
|
+
export declare function aksGetCredentials({ name, resourceGroup, overwriteExisting }: AzAksCredentialsOptions): Promise<ExecResult>;
|
|
33
|
+
export declare function deploymentGroupCreate({ resourceGroup, templateFile, parameters }: AzDeploymentGroupOptions): Promise<ExecResult>;
|