@knowttl/ado-axi 0.0.0-stage → 0.5.0
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 +261 -2
- package/SKILL.md +334 -0
- package/assets/ado-axi-header.png +0 -0
- package/dist/bin/ado-axi.d.ts +3 -0
- package/dist/bin/ado-axi.d.ts.map +1 -0
- package/dist/bin/ado-axi.js +192 -0
- package/dist/bin/ado-axi.js.map +1 -0
- package/dist/commands/agent.d.ts +3 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +26 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/api.d.ts +2 -0
- package/dist/commands/api.d.ts.map +1 -0
- package/dist/commands/api.js +161 -0
- package/dist/commands/api.js.map +1 -0
- package/dist/commands/classification.d.ts +2 -0
- package/dist/commands/classification.d.ts.map +1 -0
- package/dist/commands/classification.js +54 -0
- package/dist/commands/classification.js.map +1 -0
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +109 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +67 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/home.d.ts +2 -0
- package/dist/commands/home.d.ts.map +1 -0
- package/dist/commands/home.js +132 -0
- package/dist/commands/home.js.map +1 -0
- package/dist/commands/pipeline.d.ts +2 -0
- package/dist/commands/pipeline.d.ts.map +1 -0
- package/dist/commands/pipeline.js +572 -0
- package/dist/commands/pipeline.js.map +1 -0
- package/dist/commands/pipelineAdmin.d.ts +3 -0
- package/dist/commands/pipelineAdmin.d.ts.map +1 -0
- package/dist/commands/pipelineAdmin.js +152 -0
- package/dist/commands/pipelineAdmin.js.map +1 -0
- package/dist/commands/pipelineArtifact.d.ts +3 -0
- package/dist/commands/pipelineArtifact.d.ts.map +1 -0
- package/dist/commands/pipelineArtifact.js +68 -0
- package/dist/commands/pipelineArtifact.js.map +1 -0
- package/dist/commands/policy.d.ts +3 -0
- package/dist/commands/policy.d.ts.map +1 -0
- package/dist/commands/policy.js +31 -0
- package/dist/commands/policy.js.map +1 -0
- package/dist/commands/pool.d.ts +3 -0
- package/dist/commands/pool.d.ts.map +1 -0
- package/dist/commands/pool.js +19 -0
- package/dist/commands/pool.js.map +1 -0
- package/dist/commands/pr.d.ts +9 -0
- package/dist/commands/pr.d.ts.map +1 -0
- package/dist/commands/pr.js +1028 -0
- package/dist/commands/pr.js.map +1 -0
- package/dist/commands/query.d.ts +2 -0
- package/dist/commands/query.d.ts.map +1 -0
- package/dist/commands/query.js +29 -0
- package/dist/commands/query.js.map +1 -0
- package/dist/commands/queue.d.ts +3 -0
- package/dist/commands/queue.d.ts.map +1 -0
- package/dist/commands/queue.js +21 -0
- package/dist/commands/queue.js.map +1 -0
- package/dist/commands/ref.d.ts +3 -0
- package/dist/commands/ref.d.ts.map +1 -0
- package/dist/commands/ref.js +204 -0
- package/dist/commands/ref.js.map +1 -0
- package/dist/commands/release.d.ts +3 -0
- package/dist/commands/release.d.ts.map +1 -0
- package/dist/commands/release.js +91 -0
- package/dist/commands/release.js.map +1 -0
- package/dist/commands/repo.d.ts +3 -0
- package/dist/commands/repo.d.ts.map +1 -0
- package/dist/commands/repo.js +261 -0
- package/dist/commands/repo.js.map +1 -0
- package/dist/commands/repoAdmin.d.ts +3 -0
- package/dist/commands/repoAdmin.d.ts.map +1 -0
- package/dist/commands/repoAdmin.js +195 -0
- package/dist/commands/repoAdmin.js.map +1 -0
- package/dist/commands/security.d.ts +3 -0
- package/dist/commands/security.d.ts.map +1 -0
- package/dist/commands/security.js +57 -0
- package/dist/commands/security.js.map +1 -0
- package/dist/commands/serviceEndpoint.d.ts +3 -0
- package/dist/commands/serviceEndpoint.d.ts.map +1 -0
- package/dist/commands/serviceEndpoint.js +29 -0
- package/dist/commands/serviceEndpoint.js.map +1 -0
- package/dist/commands/team.d.ts +3 -0
- package/dist/commands/team.d.ts.map +1 -0
- package/dist/commands/team.js +33 -0
- package/dist/commands/team.js.map +1 -0
- package/dist/commands/test.d.ts +2 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +183 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/user.d.ts +3 -0
- package/dist/commands/user.d.ts.map +1 -0
- package/dist/commands/user.js +20 -0
- package/dist/commands/user.js.map +1 -0
- package/dist/commands/variableGroup.d.ts +3 -0
- package/dist/commands/variableGroup.d.ts.map +1 -0
- package/dist/commands/variableGroup.js +23 -0
- package/dist/commands/variableGroup.js.map +1 -0
- package/dist/commands/workItem.d.ts +12 -0
- package/dist/commands/workItem.d.ts.map +1 -0
- package/dist/commands/workItem.js +940 -0
- package/dist/commands/workItem.js.map +1 -0
- package/dist/commands/workItemAttachment.d.ts +3 -0
- package/dist/commands/workItemAttachment.d.ts.map +1 -0
- package/dist/commands/workItemAttachment.js +136 -0
- package/dist/commands/workItemAttachment.js.map +1 -0
- package/dist/help.d.ts +4 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +383 -0
- package/dist/help.js.map +1 -0
- package/dist/lib/adoUrl.d.ts +19 -0
- package/dist/lib/adoUrl.d.ts.map +1 -0
- package/dist/lib/adoUrl.js +104 -0
- package/dist/lib/adoUrl.js.map +1 -0
- package/dist/lib/args.d.ts +14 -0
- package/dist/lib/args.d.ts.map +1 -0
- package/dist/lib/args.js +94 -0
- package/dist/lib/args.js.map +1 -0
- package/dist/lib/argv.d.ts +8 -0
- package/dist/lib/argv.d.ts.map +1 -0
- package/dist/lib/argv.js +35 -0
- package/dist/lib/argv.js.map +1 -0
- package/dist/lib/audit.d.ts +21 -0
- package/dist/lib/audit.d.ts.map +1 -0
- package/dist/lib/audit.js +128 -0
- package/dist/lib/audit.js.map +1 -0
- package/dist/lib/auth.d.ts +8 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +127 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/client.d.ts +32 -0
- package/dist/lib/client.d.ts.map +1 -0
- package/dist/lib/client.js +181 -0
- package/dist/lib/client.js.map +1 -0
- package/dist/lib/config.d.ts +39 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +150 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/context.d.ts +5 -0
- package/dist/lib/context.d.ts.map +1 -0
- package/dist/lib/context.js +20 -0
- package/dist/lib/context.js.map +1 -0
- package/dist/lib/format.d.ts +17 -0
- package/dist/lib/format.d.ts.map +1 -0
- package/dist/lib/format.js +65 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/paths.d.ts +3 -0
- package/dist/lib/paths.d.ts.map +1 -0
- package/dist/lib/paths.js +13 -0
- package/dist/lib/paths.js.map +1 -0
- package/dist/lib/repositoryPath.d.ts +2 -0
- package/dist/lib/repositoryPath.d.ts.map +1 -0
- package/dist/lib/repositoryPath.js +26 -0
- package/dist/lib/repositoryPath.js.map +1 -0
- package/dist/lib/stdin.d.ts +2 -0
- package/dist/lib/stdin.d.ts.map +1 -0
- package/dist/lib/stdin.js +11 -0
- package/dist/lib/stdin.js.map +1 -0
- package/dist/lib/writes.d.ts +3 -0
- package/dist/lib/writes.d.ts.map +1 -0
- package/dist/lib/writes.js +37 -0
- package/dist/lib/writes.js.map +1 -0
- package/package.json +65 -4
|
@@ -0,0 +1,572 @@
|
|
|
1
|
+
import { AxiError } from "axi-sdk-js";
|
|
2
|
+
import { argsToArgv, assertKnownFlags, flagBool, flagList, flagNumber, flagString, parseArgs } from "../lib/args.js";
|
|
3
|
+
import { request } from "../lib/client.js";
|
|
4
|
+
import { requireProject } from "../lib/config.js";
|
|
5
|
+
import { profileFromArgs } from "../lib/context.js";
|
|
6
|
+
import { countLine, personName, pickFields, shortDate, truncate } from "../lib/format.js";
|
|
7
|
+
import { assertAuditPositionals, auditId, auditLimit, auditOutput, auditRequest, safeAudit } from "../lib/audit.js";
|
|
8
|
+
import { variableGroupCommand } from "./variableGroup.js";
|
|
9
|
+
import { agentCommand } from "./agent.js";
|
|
10
|
+
import { poolCommand } from "./pool.js";
|
|
11
|
+
import { queueCommand } from "./queue.js";
|
|
12
|
+
import { pipelineAdminCommand } from "./pipelineAdmin.js";
|
|
13
|
+
import { pipelineArtifactCommand } from "./pipelineArtifact.js";
|
|
14
|
+
import { releaseCommand } from "./release.js";
|
|
15
|
+
const LIST_FLAGS = ["limit", "name"];
|
|
16
|
+
const RUNS_FLAGS = ["pipeline", "branch", "status", "result", "requested-for", "limit"];
|
|
17
|
+
const RUN_FLAGS = ["pipeline", "branch", "variables", "parameters"];
|
|
18
|
+
const LOGS_FLAGS = ["log", "tail", "failed-only"];
|
|
19
|
+
const WATCH_FLAGS = ["interval", "timeout"];
|
|
20
|
+
const TIMELINE_FLAGS = ["limit"];
|
|
21
|
+
export async function pipelineCommand(argv) {
|
|
22
|
+
const args = parseArgs(argv);
|
|
23
|
+
const sub = args.positionals[0] ?? "list";
|
|
24
|
+
const rest = { ...args, positionals: args.positionals.slice(1) };
|
|
25
|
+
switch (sub) {
|
|
26
|
+
case "release":
|
|
27
|
+
return releaseCommand(argsToArgv(rest));
|
|
28
|
+
case "create":
|
|
29
|
+
case "update":
|
|
30
|
+
case "delete":
|
|
31
|
+
case "build":
|
|
32
|
+
case "folder":
|
|
33
|
+
return pipelineAdminCommand(argv);
|
|
34
|
+
case "variable-group":
|
|
35
|
+
return variableGroupCommand(argsToArgv(rest));
|
|
36
|
+
case "agent":
|
|
37
|
+
return agentCommand(argsToArgv(rest));
|
|
38
|
+
case "pool":
|
|
39
|
+
return poolCommand(argsToArgv(rest));
|
|
40
|
+
case "queue":
|
|
41
|
+
return queueCommand(argsToArgv(rest));
|
|
42
|
+
case "show":
|
|
43
|
+
return showDefinition(rest, false);
|
|
44
|
+
case "variable": {
|
|
45
|
+
if (rest.positionals.shift() !== "list")
|
|
46
|
+
throw new AxiError("Use pipeline variable list --pipeline <id>", "VALIDATION_ERROR");
|
|
47
|
+
return showDefinition(rest, true);
|
|
48
|
+
}
|
|
49
|
+
case "list":
|
|
50
|
+
return listPipelines(rest);
|
|
51
|
+
case "runs":
|
|
52
|
+
if (rest.positionals[0] === "artifact")
|
|
53
|
+
return pipelineArtifactCommand(argsToArgv({ ...rest, positionals: rest.positionals.slice(1) }));
|
|
54
|
+
if (rest.positionals[0] === "tag")
|
|
55
|
+
return pipelineAdminCommand(argv);
|
|
56
|
+
return listRuns(rest);
|
|
57
|
+
case "run":
|
|
58
|
+
return runPipeline(rest);
|
|
59
|
+
case "logs":
|
|
60
|
+
return buildLogs(rest);
|
|
61
|
+
case "timeline":
|
|
62
|
+
case "steps":
|
|
63
|
+
return buildTimeline(rest);
|
|
64
|
+
case "watch":
|
|
65
|
+
return watchPipeline(rest);
|
|
66
|
+
default:
|
|
67
|
+
throw new AxiError(`unknown subcommand \`pipeline ${sub}\``, "VALIDATION_ERROR", [
|
|
68
|
+
"Subcommands: list | runs | run | logs | timeline | watch",
|
|
69
|
+
"Run `ado-axi pipeline --help` for the full reference",
|
|
70
|
+
]);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
async function showDefinition(args, variablesOnly) {
|
|
74
|
+
const command = variablesOnly ? "pipeline variable list" : "pipeline show";
|
|
75
|
+
assertKnownFlags(args, ["id", "pipeline", "limit"], command);
|
|
76
|
+
const limit = auditLimit(args);
|
|
77
|
+
assertAuditPositionals(args, 1);
|
|
78
|
+
const profile = profileFromArgs(args);
|
|
79
|
+
const project = requireProject(profile, command);
|
|
80
|
+
const id = flagString(args, "pipeline");
|
|
81
|
+
const definition = await auditRequest(profile, {
|
|
82
|
+
path: `_apis/build/definitions/${id ? encodeURIComponent(id) : auditId(args)}`, project,
|
|
83
|
+
});
|
|
84
|
+
if (!variablesOnly)
|
|
85
|
+
return { pipeline: safeAudit(definition, args) };
|
|
86
|
+
const variables = Object.entries((definition.variables ?? {}));
|
|
87
|
+
return auditOutput("variables", {
|
|
88
|
+
rows: variables.slice(0, limit).map(([name, value]) => ({ name, ...value })), total: variables.length,
|
|
89
|
+
}, args, ["name", "value", "isSecret", "allowOverride"]);
|
|
90
|
+
}
|
|
91
|
+
async function listPipelines(args) {
|
|
92
|
+
assertKnownFlags(args, LIST_FLAGS, "pipeline list");
|
|
93
|
+
const profile = profileFromArgs(args);
|
|
94
|
+
const project = requireProject(profile, "pipeline list");
|
|
95
|
+
const limit = flagNumber(args, "limit") ?? 100;
|
|
96
|
+
const filter = flagString(args, "name")?.toLowerCase();
|
|
97
|
+
const result = await request(profile, {
|
|
98
|
+
path: "_apis/pipelines",
|
|
99
|
+
project,
|
|
100
|
+
query: { $top: limit },
|
|
101
|
+
});
|
|
102
|
+
let pipelines = result.value ?? [];
|
|
103
|
+
if (filter)
|
|
104
|
+
pipelines = pipelines.filter((p) => (p.name ?? "").toLowerCase().includes(filter));
|
|
105
|
+
if (pipelines.length === 0) {
|
|
106
|
+
return {
|
|
107
|
+
pipelines: `0 pipelines found in ${project}${filter ? ` matching '${filter}'` : ""}`,
|
|
108
|
+
help: ["Run `ado-axi pipeline list` without --name to see all pipelines"],
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
const rows = pipelines.map((p) => ({
|
|
112
|
+
id: p.id,
|
|
113
|
+
name: p.name ?? "",
|
|
114
|
+
folder: (p.folder ?? "").replace(/^\\$/, ""),
|
|
115
|
+
}));
|
|
116
|
+
return {
|
|
117
|
+
org: profile.org,
|
|
118
|
+
project,
|
|
119
|
+
count: countLine(rows.length, result.count, "pipelines"),
|
|
120
|
+
pipelines: pickFields(rows, flagList(args, "fields")),
|
|
121
|
+
help: [
|
|
122
|
+
"Run `ado-axi pipeline runs --pipeline <id>` to see recent runs",
|
|
123
|
+
"Run `ado-axi pipeline run --pipeline <id> --branch <branch>` to queue a run",
|
|
124
|
+
],
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
async function listRuns(args) {
|
|
128
|
+
assertKnownFlags(args, RUNS_FLAGS, "pipeline runs");
|
|
129
|
+
const profile = profileFromArgs(args);
|
|
130
|
+
const project = requireProject(profile, "pipeline runs");
|
|
131
|
+
const limit = flagNumber(args, "limit") ?? 20;
|
|
132
|
+
const query = { $top: limit, queryOrder: "queueTimeDescending" };
|
|
133
|
+
const pipeline = flagString(args, "pipeline") ?? args.positionals[0];
|
|
134
|
+
if (pipeline)
|
|
135
|
+
query.definitions = pipeline;
|
|
136
|
+
const branch = flagString(args, "branch");
|
|
137
|
+
if (branch)
|
|
138
|
+
query.branchName = branch.startsWith("refs/") ? branch : `refs/heads/${branch}`;
|
|
139
|
+
const status = flagString(args, "status");
|
|
140
|
+
if (status)
|
|
141
|
+
query.statusFilter = status;
|
|
142
|
+
const result = flagString(args, "result");
|
|
143
|
+
if (result)
|
|
144
|
+
query.resultFilter = result;
|
|
145
|
+
const response = await request(profile, {
|
|
146
|
+
path: "_apis/build/builds",
|
|
147
|
+
project,
|
|
148
|
+
query,
|
|
149
|
+
});
|
|
150
|
+
const builds = response.value ?? [];
|
|
151
|
+
if (builds.length === 0) {
|
|
152
|
+
return {
|
|
153
|
+
runs: `0 pipeline runs found in ${project}${pipeline ? ` for pipeline ${pipeline}` : ""}`,
|
|
154
|
+
help: [
|
|
155
|
+
"Run `ado-axi pipeline list` to see pipeline ids",
|
|
156
|
+
"Run `ado-axi pipeline runs --status all` to include cancelled runs",
|
|
157
|
+
],
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
const failed = builds.filter((b) => b.result === "failed").length;
|
|
161
|
+
const rows = builds.map((b) => ({
|
|
162
|
+
id: b.id,
|
|
163
|
+
pipeline: b.definition?.name ?? "",
|
|
164
|
+
number: b.buildNumber ?? "",
|
|
165
|
+
status: b.status ?? "",
|
|
166
|
+
result: b.result ?? "",
|
|
167
|
+
branch: (b.sourceBranch ?? "").replace("refs/heads/", ""),
|
|
168
|
+
by: personName(b.requestedFor),
|
|
169
|
+
queued: shortDate(b.queueTime),
|
|
170
|
+
}));
|
|
171
|
+
return {
|
|
172
|
+
org: profile.org,
|
|
173
|
+
project,
|
|
174
|
+
count: countLine(rows.length, response.count, "runs"),
|
|
175
|
+
failures: failed,
|
|
176
|
+
runs: pickFields(rows, flagList(args, "fields")),
|
|
177
|
+
help: [
|
|
178
|
+
...(failed > 0
|
|
179
|
+
? [`Run \`ado-axi pipeline timeline <run-id>\` to see which step failed`]
|
|
180
|
+
: []),
|
|
181
|
+
"Run `ado-axi pipeline logs <run-id>` to read the log of a run",
|
|
182
|
+
"Run `ado-axi pipeline run --pipeline <id> --branch <branch>` to queue a new run",
|
|
183
|
+
],
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
async function runPipeline(args) {
|
|
187
|
+
assertKnownFlags(args, RUN_FLAGS, "pipeline run");
|
|
188
|
+
const profile = profileFromArgs(args);
|
|
189
|
+
const project = requireProject(profile, "pipeline run");
|
|
190
|
+
const pipeline = flagString(args, "pipeline") ?? args.positionals[0];
|
|
191
|
+
if (!pipeline) {
|
|
192
|
+
throw new AxiError("--pipeline <id> is required", "VALIDATION_ERROR", [
|
|
193
|
+
"Usage: ado-axi pipeline run --pipeline <id> [--branch <branch>] [--variables '{\"k\":\"v\"}']",
|
|
194
|
+
"Run `ado-axi pipeline list` to find pipeline ids",
|
|
195
|
+
]);
|
|
196
|
+
}
|
|
197
|
+
const branch = flagString(args, "branch");
|
|
198
|
+
const body = {};
|
|
199
|
+
if (branch) {
|
|
200
|
+
body.resources = {
|
|
201
|
+
repositories: { self: { refName: branch.startsWith("refs/") ? branch : `refs/heads/${branch}` } },
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
const variables = parseJsonFlag(args, "variables");
|
|
205
|
+
if (variables) {
|
|
206
|
+
body.variables = Object.fromEntries(Object.entries(variables).map(([k, v]) => [k, { value: String(v), isSecret: false }]));
|
|
207
|
+
}
|
|
208
|
+
const parameters = parseJsonFlag(args, "parameters");
|
|
209
|
+
if (parameters)
|
|
210
|
+
body.templateParameters = parameters;
|
|
211
|
+
const run = await request(profile, {
|
|
212
|
+
method: "POST",
|
|
213
|
+
path: `_apis/pipelines/${encodeURIComponent(pipeline)}/runs`,
|
|
214
|
+
project,
|
|
215
|
+
body,
|
|
216
|
+
});
|
|
217
|
+
return {
|
|
218
|
+
queued: {
|
|
219
|
+
run: run.id ?? "",
|
|
220
|
+
pipeline,
|
|
221
|
+
name: run.name ?? "",
|
|
222
|
+
state: run.state ?? "",
|
|
223
|
+
branch: branch ?? "(pipeline default)",
|
|
224
|
+
url: run._links?.web?.href ?? "",
|
|
225
|
+
},
|
|
226
|
+
help: [
|
|
227
|
+
`Run \`ado-axi pipeline runs --pipeline ${pipeline}\` to check status`,
|
|
228
|
+
`Run \`ado-axi pipeline logs ${run.id ?? "<run-id>"}\` once it finishes`,
|
|
229
|
+
],
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
function parseJsonFlag(args, name) {
|
|
233
|
+
const raw = flagString(args, name);
|
|
234
|
+
if (!raw)
|
|
235
|
+
return undefined;
|
|
236
|
+
try {
|
|
237
|
+
return JSON.parse(raw);
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
throw new AxiError(`--${name} expects a JSON object`, "VALIDATION_ERROR", [
|
|
241
|
+
`Example: --${name} '{"environment":"test"}'`,
|
|
242
|
+
]);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
function requireRunId(args, command) {
|
|
246
|
+
const raw = args.positionals[0];
|
|
247
|
+
const id = Number(raw);
|
|
248
|
+
if (!raw || !Number.isInteger(id) || id < 1) {
|
|
249
|
+
throw new AxiError("a positive numeric run id is required", "VALIDATION_ERROR", [
|
|
250
|
+
`Usage: ado-axi pipeline ${command} <run-id>`,
|
|
251
|
+
"Run `ado-axi pipeline runs` to find run ids",
|
|
252
|
+
]);
|
|
253
|
+
}
|
|
254
|
+
return id;
|
|
255
|
+
}
|
|
256
|
+
function wait(milliseconds) {
|
|
257
|
+
return new Promise((resolve) => setTimeout(resolve, milliseconds));
|
|
258
|
+
}
|
|
259
|
+
function retryAfterMilliseconds(error, fallback) {
|
|
260
|
+
const text = error.suggestions.join(" ");
|
|
261
|
+
const match = text.match(/Retry after ([0-9.]+) seconds/i);
|
|
262
|
+
return match ? Math.max(fallback, Number(match[1]) * 1000) : fallback;
|
|
263
|
+
}
|
|
264
|
+
async function watchPipeline(args) {
|
|
265
|
+
assertKnownFlags(args, WATCH_FLAGS, "pipeline watch");
|
|
266
|
+
const profile = profileFromArgs(args);
|
|
267
|
+
const project = requireProject(profile, "pipeline watch");
|
|
268
|
+
const runId = requireRunId(args, "watch");
|
|
269
|
+
const intervalSeconds = flagNumber(args, "interval") ?? 10;
|
|
270
|
+
const timeoutSeconds = flagNumber(args, "timeout") ?? 1800;
|
|
271
|
+
if (intervalSeconds < 2) {
|
|
272
|
+
throw new AxiError("--interval must be at least 2 seconds", "VALIDATION_ERROR", [
|
|
273
|
+
"Use a slower polling interval to avoid Azure DevOps rate limits",
|
|
274
|
+
]);
|
|
275
|
+
}
|
|
276
|
+
if (timeoutSeconds < 1)
|
|
277
|
+
throw new AxiError("--timeout must be at least 1 second", "VALIDATION_ERROR");
|
|
278
|
+
const interval = intervalSeconds * 1000;
|
|
279
|
+
const started = Date.now();
|
|
280
|
+
const deadline = started + timeoutSeconds * 1000;
|
|
281
|
+
let polls = 0;
|
|
282
|
+
let build;
|
|
283
|
+
while (Date.now() < deadline) {
|
|
284
|
+
const controller = new AbortController();
|
|
285
|
+
const timer = setTimeout(() => controller.abort(), Math.max(0, deadline - Date.now()));
|
|
286
|
+
let delay = interval;
|
|
287
|
+
try {
|
|
288
|
+
build = await request(profile, {
|
|
289
|
+
path: `_apis/build/builds/${runId}`,
|
|
290
|
+
project,
|
|
291
|
+
signal: controller.signal,
|
|
292
|
+
});
|
|
293
|
+
polls++;
|
|
294
|
+
}
|
|
295
|
+
catch (error) {
|
|
296
|
+
if (controller.signal.aborted)
|
|
297
|
+
break;
|
|
298
|
+
if (!(error instanceof AxiError) || error.code !== "RATE_LIMITED")
|
|
299
|
+
throw error;
|
|
300
|
+
delay = retryAfterMilliseconds(error, interval);
|
|
301
|
+
}
|
|
302
|
+
finally {
|
|
303
|
+
clearTimeout(timer);
|
|
304
|
+
}
|
|
305
|
+
if ((build?.status ?? "").toLowerCase() === "completed")
|
|
306
|
+
break;
|
|
307
|
+
const remaining = deadline - Date.now();
|
|
308
|
+
if (remaining <= 0)
|
|
309
|
+
break;
|
|
310
|
+
await wait(Math.min(delay, remaining));
|
|
311
|
+
if (delay >= remaining)
|
|
312
|
+
break;
|
|
313
|
+
}
|
|
314
|
+
const elapsed = Math.max(0, Math.round((Date.now() - started) / 1000));
|
|
315
|
+
if (!build || (build.status ?? "").toLowerCase() !== "completed") {
|
|
316
|
+
process.exitCode = 1;
|
|
317
|
+
return {
|
|
318
|
+
run: {
|
|
319
|
+
id: runId,
|
|
320
|
+
outcome: "timeout",
|
|
321
|
+
status: build?.status ?? "unknown",
|
|
322
|
+
result: build?.result ?? "",
|
|
323
|
+
polls,
|
|
324
|
+
"elapsed-seconds": elapsed,
|
|
325
|
+
"timeout-seconds": timeoutSeconds,
|
|
326
|
+
},
|
|
327
|
+
help: [
|
|
328
|
+
`Run \`ado-axi pipeline runs --limit 5\` to check the run later`,
|
|
329
|
+
`Retry with a larger --timeout than ${timeoutSeconds} seconds`,
|
|
330
|
+
],
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
const result = (build.result ?? "").toLowerCase();
|
|
334
|
+
const outcome = result === "succeeded"
|
|
335
|
+
? "success"
|
|
336
|
+
: result === "partiallysucceeded"
|
|
337
|
+
? "partial-success"
|
|
338
|
+
: result === "failed"
|
|
339
|
+
? "failure"
|
|
340
|
+
: result === "canceled" || result === "cancelled"
|
|
341
|
+
? "cancellation"
|
|
342
|
+
: "unexpected";
|
|
343
|
+
if (["failure", "cancellation", "unexpected"].includes(outcome))
|
|
344
|
+
process.exitCode = 1;
|
|
345
|
+
const out = {
|
|
346
|
+
run: {
|
|
347
|
+
id: runId,
|
|
348
|
+
pipeline: build.definition?.name ?? "",
|
|
349
|
+
number: build.buildNumber ?? "",
|
|
350
|
+
outcome,
|
|
351
|
+
status: build.status ?? "",
|
|
352
|
+
result: build.result ?? "",
|
|
353
|
+
polls,
|
|
354
|
+
"elapsed-seconds": elapsed,
|
|
355
|
+
finished: shortDate(build.finishTime),
|
|
356
|
+
url: build._links?.web?.href ?? "",
|
|
357
|
+
},
|
|
358
|
+
};
|
|
359
|
+
if (outcome === "failure")
|
|
360
|
+
out.help = [
|
|
361
|
+
`Run \`ado-axi pipeline timeline ${runId}\` to find the failing step`,
|
|
362
|
+
`Run \`ado-axi pipeline logs ${runId} --failed-only\` to read its log`,
|
|
363
|
+
];
|
|
364
|
+
return out;
|
|
365
|
+
}
|
|
366
|
+
async function fetchTimeline(profile, project, buildId) {
|
|
367
|
+
const timeline = await request(profile, {
|
|
368
|
+
path: `_apis/build/builds/${buildId}/timeline`,
|
|
369
|
+
project,
|
|
370
|
+
});
|
|
371
|
+
return timeline?.records ?? [];
|
|
372
|
+
}
|
|
373
|
+
function recordPath(record, byId) {
|
|
374
|
+
const names = [];
|
|
375
|
+
let current = record.parentId ? byId.get(record.parentId) : undefined;
|
|
376
|
+
let guard = 0;
|
|
377
|
+
while (current && guard++ < 10) {
|
|
378
|
+
if (current.name)
|
|
379
|
+
names.unshift(current.name);
|
|
380
|
+
current = current.parentId ? byId.get(current.parentId) : undefined;
|
|
381
|
+
}
|
|
382
|
+
return names.join(" / ");
|
|
383
|
+
}
|
|
384
|
+
function durationSeconds(record) {
|
|
385
|
+
if (!record.startTime || !record.finishTime)
|
|
386
|
+
return "";
|
|
387
|
+
const seconds = (new Date(record.finishTime).getTime() - new Date(record.startTime).getTime()) / 1000;
|
|
388
|
+
return Number.isFinite(seconds) ? Math.max(0, Math.round(seconds)) : "";
|
|
389
|
+
}
|
|
390
|
+
function isFailure(record) {
|
|
391
|
+
const result = (record.result ?? "").toLowerCase();
|
|
392
|
+
return result === "failed" || result === "canceled" || result === "cancelled";
|
|
393
|
+
}
|
|
394
|
+
/** A failing stage or job repeats the failure of its steps — report only the innermost record. */
|
|
395
|
+
function leafFailures(records) {
|
|
396
|
+
const failing = records.filter(isFailure);
|
|
397
|
+
const parentsOfFailures = new Set(failing.map((r) => r.parentId).filter(Boolean));
|
|
398
|
+
return failing.filter((r) => !parentsOfFailures.has(r.id));
|
|
399
|
+
}
|
|
400
|
+
function firstIssue(record, limit) {
|
|
401
|
+
const issue = (record.issues ?? []).find((i) => (i.type ?? "").toLowerCase() === "error") ?? (record.issues ?? [])[0];
|
|
402
|
+
if (!issue?.message)
|
|
403
|
+
return "";
|
|
404
|
+
return truncate(issue.message.replace(/\s*\n\s*/g, " ").trim(), limit).text;
|
|
405
|
+
}
|
|
406
|
+
/** Azure DevOps reports `log.id: 0` for steps without a log (manual validation, skipped). */
|
|
407
|
+
function logId(record) {
|
|
408
|
+
const id = record.log?.id;
|
|
409
|
+
return typeof id === "number" && id > 0 ? id : undefined;
|
|
410
|
+
}
|
|
411
|
+
async function buildTimeline(args) {
|
|
412
|
+
assertKnownFlags(args, TIMELINE_FLAGS, "pipeline timeline");
|
|
413
|
+
const profile = profileFromArgs(args);
|
|
414
|
+
const project = requireProject(profile, "pipeline timeline");
|
|
415
|
+
const buildId = requireRunId(args, "timeline");
|
|
416
|
+
const full = flagBool(args, "full");
|
|
417
|
+
const limit = flagNumber(args, "limit") ?? 20;
|
|
418
|
+
const records = await fetchTimeline(profile, project, buildId);
|
|
419
|
+
if (records.length === 0) {
|
|
420
|
+
return {
|
|
421
|
+
timeline: `0 timeline records for run ${buildId} (it may still be queued)`,
|
|
422
|
+
help: [`Run \`ado-axi pipeline runs --limit 5\` to check the run's status`],
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
const byId = new Map(records.map((r) => [r.id, r]));
|
|
426
|
+
const issueLimit = full ? Number.MAX_SAFE_INTEGER : 300;
|
|
427
|
+
const stageRecords = records.filter((r) => (r.type ?? "") === "Stage");
|
|
428
|
+
const jobRecords = records.filter((r) => (r.type ?? "") === "Job");
|
|
429
|
+
const outline = (stageRecords.length > 0 ? stageRecords : jobRecords)
|
|
430
|
+
.slice()
|
|
431
|
+
.sort((a, b) => (a.order ?? 0) - (b.order ?? 0));
|
|
432
|
+
const failures = leafFailures(records).sort((a, b) => (a.startTime ?? "").localeCompare(b.startTime ?? ""));
|
|
433
|
+
const shownFailures = full ? failures : failures.slice(0, limit);
|
|
434
|
+
const errors = records.reduce((sum, r) => sum + (r.errorCount ?? 0), 0);
|
|
435
|
+
const warnings = records.reduce((sum, r) => sum + (r.warningCount ?? 0), 0);
|
|
436
|
+
const running = records.filter((r) => (r.state ?? "").toLowerCase() === "inProgress".toLowerCase()).length;
|
|
437
|
+
const out = {
|
|
438
|
+
run: {
|
|
439
|
+
id: buildId,
|
|
440
|
+
records: records.length,
|
|
441
|
+
failed: failures.length,
|
|
442
|
+
running,
|
|
443
|
+
errors,
|
|
444
|
+
warnings,
|
|
445
|
+
},
|
|
446
|
+
[stageRecords.length > 0 ? "stages" : "jobs"]: outline.map((r) => ({
|
|
447
|
+
name: r.name ?? "",
|
|
448
|
+
state: r.state ?? "",
|
|
449
|
+
result: r.result ?? "",
|
|
450
|
+
seconds: durationSeconds(r),
|
|
451
|
+
})),
|
|
452
|
+
};
|
|
453
|
+
if (shownFailures.length === 0) {
|
|
454
|
+
out.failures = `0 failed steps on run ${buildId}`;
|
|
455
|
+
}
|
|
456
|
+
else {
|
|
457
|
+
out.failures = shownFailures.map((r) => ({
|
|
458
|
+
step: r.name ?? "",
|
|
459
|
+
in: recordPath(r, byId),
|
|
460
|
+
type: r.type ?? "",
|
|
461
|
+
result: r.result ?? "",
|
|
462
|
+
log: logId(r) ?? "",
|
|
463
|
+
issue: firstIssue(r, issueLimit),
|
|
464
|
+
}));
|
|
465
|
+
}
|
|
466
|
+
if (full) {
|
|
467
|
+
out.records = records
|
|
468
|
+
.slice()
|
|
469
|
+
.sort((a, b) => (a.startTime ?? "").localeCompare(b.startTime ?? ""))
|
|
470
|
+
.map((r) => ({
|
|
471
|
+
name: r.name ?? "",
|
|
472
|
+
type: r.type ?? "",
|
|
473
|
+
state: r.state ?? "",
|
|
474
|
+
result: r.result ?? "",
|
|
475
|
+
log: logId(r) ?? "",
|
|
476
|
+
seconds: durationSeconds(r),
|
|
477
|
+
}));
|
|
478
|
+
}
|
|
479
|
+
const help = [];
|
|
480
|
+
const firstLog = shownFailures.map(logId).find((id) => id !== undefined);
|
|
481
|
+
if (firstLog !== undefined) {
|
|
482
|
+
help.push(`Run \`ado-axi pipeline logs ${buildId} --log ${firstLog} --tail 200\` for the failing step's log`);
|
|
483
|
+
}
|
|
484
|
+
if (failures.length > shownFailures.length) {
|
|
485
|
+
help.push(`Showing ${shownFailures.length} of ${failures.length} failed steps — pass --limit ${failures.length} or --full`);
|
|
486
|
+
}
|
|
487
|
+
if (!full && failures.length > 0) {
|
|
488
|
+
help.push(`Run \`ado-axi pipeline logs ${buildId} --failed-only\` to read the first failing step directly`);
|
|
489
|
+
}
|
|
490
|
+
if (help.length > 0)
|
|
491
|
+
out.help = help;
|
|
492
|
+
return out;
|
|
493
|
+
}
|
|
494
|
+
async function buildLogs(args) {
|
|
495
|
+
assertKnownFlags(args, LOGS_FLAGS, "pipeline logs");
|
|
496
|
+
const profile = profileFromArgs(args);
|
|
497
|
+
const project = requireProject(profile, "pipeline logs");
|
|
498
|
+
const buildId = requireRunId(args, "logs");
|
|
499
|
+
const failedOnly = flagBool(args, "failed-only");
|
|
500
|
+
const logs = await request(profile, { path: `_apis/build/builds/${buildId}/logs`, project });
|
|
501
|
+
const entries = logs.value ?? [];
|
|
502
|
+
if (entries.length === 0) {
|
|
503
|
+
return { logs: `0 logs available for run ${buildId} (it may still be queued)` };
|
|
504
|
+
}
|
|
505
|
+
const requested = flagNumber(args, "log");
|
|
506
|
+
let failingStep;
|
|
507
|
+
let otherFailures = [];
|
|
508
|
+
let failedLogId;
|
|
509
|
+
if (failedOnly && requested === undefined) {
|
|
510
|
+
const failures = leafFailures(await fetchTimeline(profile, project, buildId))
|
|
511
|
+
.filter((r) => logId(r) !== undefined)
|
|
512
|
+
.sort((a, b) => (a.startTime ?? "").localeCompare(b.startTime ?? ""));
|
|
513
|
+
failingStep = failures[0];
|
|
514
|
+
otherFailures = failures.slice(1);
|
|
515
|
+
if (!failingStep) {
|
|
516
|
+
return {
|
|
517
|
+
logs: `0 failed steps with logs on run ${buildId}`,
|
|
518
|
+
help: [
|
|
519
|
+
`Run \`ado-axi pipeline timeline ${buildId}\` for the step outline`,
|
|
520
|
+
`Run \`ado-axi pipeline logs ${buildId}\` for the tail of the last log`,
|
|
521
|
+
],
|
|
522
|
+
};
|
|
523
|
+
}
|
|
524
|
+
failedLogId = logId(failingStep);
|
|
525
|
+
}
|
|
526
|
+
const targetId = failedLogId ?? requested;
|
|
527
|
+
const target = targetId !== undefined ? entries.find((e) => e.id === targetId) : entries[entries.length - 1];
|
|
528
|
+
if (!target) {
|
|
529
|
+
throw new AxiError(`log ${targetId} does not exist on run ${buildId}`, "NOT_FOUND", [
|
|
530
|
+
`Available log ids: ${entries.map((e) => e.id).join(", ")}`,
|
|
531
|
+
]);
|
|
532
|
+
}
|
|
533
|
+
const content = await request(profile, {
|
|
534
|
+
path: `_apis/build/builds/${buildId}/logs/${target.id}`,
|
|
535
|
+
project,
|
|
536
|
+
accept: "text/plain",
|
|
537
|
+
raw: true,
|
|
538
|
+
});
|
|
539
|
+
const tail = flagNumber(args, "tail") ?? 120;
|
|
540
|
+
const lines = content.split("\n");
|
|
541
|
+
const full = flagBool(args, "full");
|
|
542
|
+
const selected = full ? lines : lines.slice(-tail);
|
|
543
|
+
const text = truncate(selected.join("\n"), full ? Number.MAX_SAFE_INTEGER : 8000);
|
|
544
|
+
const out = {
|
|
545
|
+
log: {
|
|
546
|
+
run: buildId,
|
|
547
|
+
id: target.id,
|
|
548
|
+
of: entries.length,
|
|
549
|
+
step: failingStep?.name ?? "",
|
|
550
|
+
result: failingStep?.result ?? "",
|
|
551
|
+
lines: lines.length,
|
|
552
|
+
showing: full ? "all" : `last ${Math.min(tail, lines.length)}`,
|
|
553
|
+
},
|
|
554
|
+
content: text.text,
|
|
555
|
+
};
|
|
556
|
+
const help = [];
|
|
557
|
+
if (otherFailures.length > 0) {
|
|
558
|
+
help.push(`${otherFailures.length} more failed step(s): ${otherFailures
|
|
559
|
+
.map((r) => `${r.name ?? ""} (--log ${logId(r)})`)
|
|
560
|
+
.join(", ")}`);
|
|
561
|
+
}
|
|
562
|
+
if (!full && lines.length > selected.length) {
|
|
563
|
+
help.push(`Run \`ado-axi pipeline logs ${buildId} --log ${target.id} --full\` for the whole log`);
|
|
564
|
+
}
|
|
565
|
+
if (entries.length > 1) {
|
|
566
|
+
help.push(`Run \`ado-axi pipeline timeline ${buildId}\` to map steps to the other ${entries.length - 1} log ids`);
|
|
567
|
+
}
|
|
568
|
+
if (help.length > 0)
|
|
569
|
+
out.help = help;
|
|
570
|
+
return out;
|
|
571
|
+
}
|
|
572
|
+
//# sourceMappingURL=pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/commands/pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipelineAdmin.d.ts","sourceRoot":"","sources":["../../src/commands/pipelineAdmin.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmD,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAiCpG,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAmH/E"}
|