@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.
Files changed (169) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +261 -2
  3. package/SKILL.md +334 -0
  4. package/assets/ado-axi-header.png +0 -0
  5. package/dist/bin/ado-axi.d.ts +3 -0
  6. package/dist/bin/ado-axi.d.ts.map +1 -0
  7. package/dist/bin/ado-axi.js +192 -0
  8. package/dist/bin/ado-axi.js.map +1 -0
  9. package/dist/commands/agent.d.ts +3 -0
  10. package/dist/commands/agent.d.ts.map +1 -0
  11. package/dist/commands/agent.js +26 -0
  12. package/dist/commands/agent.js.map +1 -0
  13. package/dist/commands/api.d.ts +2 -0
  14. package/dist/commands/api.d.ts.map +1 -0
  15. package/dist/commands/api.js +161 -0
  16. package/dist/commands/api.js.map +1 -0
  17. package/dist/commands/classification.d.ts +2 -0
  18. package/dist/commands/classification.d.ts.map +1 -0
  19. package/dist/commands/classification.js +54 -0
  20. package/dist/commands/classification.js.map +1 -0
  21. package/dist/commands/config.d.ts +2 -0
  22. package/dist/commands/config.d.ts.map +1 -0
  23. package/dist/commands/config.js +109 -0
  24. package/dist/commands/config.js.map +1 -0
  25. package/dist/commands/doctor.d.ts +2 -0
  26. package/dist/commands/doctor.d.ts.map +1 -0
  27. package/dist/commands/doctor.js +67 -0
  28. package/dist/commands/doctor.js.map +1 -0
  29. package/dist/commands/home.d.ts +2 -0
  30. package/dist/commands/home.d.ts.map +1 -0
  31. package/dist/commands/home.js +132 -0
  32. package/dist/commands/home.js.map +1 -0
  33. package/dist/commands/pipeline.d.ts +2 -0
  34. package/dist/commands/pipeline.d.ts.map +1 -0
  35. package/dist/commands/pipeline.js +572 -0
  36. package/dist/commands/pipeline.js.map +1 -0
  37. package/dist/commands/pipelineAdmin.d.ts +3 -0
  38. package/dist/commands/pipelineAdmin.d.ts.map +1 -0
  39. package/dist/commands/pipelineAdmin.js +152 -0
  40. package/dist/commands/pipelineAdmin.js.map +1 -0
  41. package/dist/commands/pipelineArtifact.d.ts +3 -0
  42. package/dist/commands/pipelineArtifact.d.ts.map +1 -0
  43. package/dist/commands/pipelineArtifact.js +68 -0
  44. package/dist/commands/pipelineArtifact.js.map +1 -0
  45. package/dist/commands/policy.d.ts +3 -0
  46. package/dist/commands/policy.d.ts.map +1 -0
  47. package/dist/commands/policy.js +31 -0
  48. package/dist/commands/policy.js.map +1 -0
  49. package/dist/commands/pool.d.ts +3 -0
  50. package/dist/commands/pool.d.ts.map +1 -0
  51. package/dist/commands/pool.js +19 -0
  52. package/dist/commands/pool.js.map +1 -0
  53. package/dist/commands/pr.d.ts +9 -0
  54. package/dist/commands/pr.d.ts.map +1 -0
  55. package/dist/commands/pr.js +1028 -0
  56. package/dist/commands/pr.js.map +1 -0
  57. package/dist/commands/query.d.ts +2 -0
  58. package/dist/commands/query.d.ts.map +1 -0
  59. package/dist/commands/query.js +29 -0
  60. package/dist/commands/query.js.map +1 -0
  61. package/dist/commands/queue.d.ts +3 -0
  62. package/dist/commands/queue.d.ts.map +1 -0
  63. package/dist/commands/queue.js +21 -0
  64. package/dist/commands/queue.js.map +1 -0
  65. package/dist/commands/ref.d.ts +3 -0
  66. package/dist/commands/ref.d.ts.map +1 -0
  67. package/dist/commands/ref.js +204 -0
  68. package/dist/commands/ref.js.map +1 -0
  69. package/dist/commands/release.d.ts +3 -0
  70. package/dist/commands/release.d.ts.map +1 -0
  71. package/dist/commands/release.js +91 -0
  72. package/dist/commands/release.js.map +1 -0
  73. package/dist/commands/repo.d.ts +3 -0
  74. package/dist/commands/repo.d.ts.map +1 -0
  75. package/dist/commands/repo.js +261 -0
  76. package/dist/commands/repo.js.map +1 -0
  77. package/dist/commands/repoAdmin.d.ts +3 -0
  78. package/dist/commands/repoAdmin.d.ts.map +1 -0
  79. package/dist/commands/repoAdmin.js +195 -0
  80. package/dist/commands/repoAdmin.js.map +1 -0
  81. package/dist/commands/security.d.ts +3 -0
  82. package/dist/commands/security.d.ts.map +1 -0
  83. package/dist/commands/security.js +57 -0
  84. package/dist/commands/security.js.map +1 -0
  85. package/dist/commands/serviceEndpoint.d.ts +3 -0
  86. package/dist/commands/serviceEndpoint.d.ts.map +1 -0
  87. package/dist/commands/serviceEndpoint.js +29 -0
  88. package/dist/commands/serviceEndpoint.js.map +1 -0
  89. package/dist/commands/team.d.ts +3 -0
  90. package/dist/commands/team.d.ts.map +1 -0
  91. package/dist/commands/team.js +33 -0
  92. package/dist/commands/team.js.map +1 -0
  93. package/dist/commands/test.d.ts +2 -0
  94. package/dist/commands/test.d.ts.map +1 -0
  95. package/dist/commands/test.js +183 -0
  96. package/dist/commands/test.js.map +1 -0
  97. package/dist/commands/user.d.ts +3 -0
  98. package/dist/commands/user.d.ts.map +1 -0
  99. package/dist/commands/user.js +20 -0
  100. package/dist/commands/user.js.map +1 -0
  101. package/dist/commands/variableGroup.d.ts +3 -0
  102. package/dist/commands/variableGroup.d.ts.map +1 -0
  103. package/dist/commands/variableGroup.js +23 -0
  104. package/dist/commands/variableGroup.js.map +1 -0
  105. package/dist/commands/workItem.d.ts +12 -0
  106. package/dist/commands/workItem.d.ts.map +1 -0
  107. package/dist/commands/workItem.js +940 -0
  108. package/dist/commands/workItem.js.map +1 -0
  109. package/dist/commands/workItemAttachment.d.ts +3 -0
  110. package/dist/commands/workItemAttachment.d.ts.map +1 -0
  111. package/dist/commands/workItemAttachment.js +136 -0
  112. package/dist/commands/workItemAttachment.js.map +1 -0
  113. package/dist/help.d.ts +4 -0
  114. package/dist/help.d.ts.map +1 -0
  115. package/dist/help.js +383 -0
  116. package/dist/help.js.map +1 -0
  117. package/dist/lib/adoUrl.d.ts +19 -0
  118. package/dist/lib/adoUrl.d.ts.map +1 -0
  119. package/dist/lib/adoUrl.js +104 -0
  120. package/dist/lib/adoUrl.js.map +1 -0
  121. package/dist/lib/args.d.ts +14 -0
  122. package/dist/lib/args.d.ts.map +1 -0
  123. package/dist/lib/args.js +94 -0
  124. package/dist/lib/args.js.map +1 -0
  125. package/dist/lib/argv.d.ts +8 -0
  126. package/dist/lib/argv.d.ts.map +1 -0
  127. package/dist/lib/argv.js +35 -0
  128. package/dist/lib/argv.js.map +1 -0
  129. package/dist/lib/audit.d.ts +21 -0
  130. package/dist/lib/audit.d.ts.map +1 -0
  131. package/dist/lib/audit.js +128 -0
  132. package/dist/lib/audit.js.map +1 -0
  133. package/dist/lib/auth.d.ts +8 -0
  134. package/dist/lib/auth.d.ts.map +1 -0
  135. package/dist/lib/auth.js +127 -0
  136. package/dist/lib/auth.js.map +1 -0
  137. package/dist/lib/client.d.ts +32 -0
  138. package/dist/lib/client.d.ts.map +1 -0
  139. package/dist/lib/client.js +181 -0
  140. package/dist/lib/client.js.map +1 -0
  141. package/dist/lib/config.d.ts +39 -0
  142. package/dist/lib/config.d.ts.map +1 -0
  143. package/dist/lib/config.js +150 -0
  144. package/dist/lib/config.js.map +1 -0
  145. package/dist/lib/context.d.ts +5 -0
  146. package/dist/lib/context.d.ts.map +1 -0
  147. package/dist/lib/context.js +20 -0
  148. package/dist/lib/context.js.map +1 -0
  149. package/dist/lib/format.d.ts +17 -0
  150. package/dist/lib/format.d.ts.map +1 -0
  151. package/dist/lib/format.js +65 -0
  152. package/dist/lib/format.js.map +1 -0
  153. package/dist/lib/paths.d.ts +3 -0
  154. package/dist/lib/paths.d.ts.map +1 -0
  155. package/dist/lib/paths.js +13 -0
  156. package/dist/lib/paths.js.map +1 -0
  157. package/dist/lib/repositoryPath.d.ts +2 -0
  158. package/dist/lib/repositoryPath.d.ts.map +1 -0
  159. package/dist/lib/repositoryPath.js +26 -0
  160. package/dist/lib/repositoryPath.js.map +1 -0
  161. package/dist/lib/stdin.d.ts +2 -0
  162. package/dist/lib/stdin.d.ts.map +1 -0
  163. package/dist/lib/stdin.js +11 -0
  164. package/dist/lib/stdin.js.map +1 -0
  165. package/dist/lib/writes.d.ts +3 -0
  166. package/dist/lib/writes.d.ts.map +1 -0
  167. package/dist/lib/writes.js +37 -0
  168. package/dist/lib/writes.js.map +1 -0
  169. 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,3 @@
1
+ import { type AuditRecord } from "../lib/audit.js";
2
+ export declare function pipelineAdminCommand(argv: string[]): Promise<AuditRecord>;
3
+ //# sourceMappingURL=pipelineAdmin.d.ts.map
@@ -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"}