@knowttl/ado-axi 0.0.0-stage → 0.4.8

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 @@
1
+ {"version":3,"file":"team.d.ts","sourceRoot":"","sources":["../../src/commands/team.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAIlH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAwBtE"}
@@ -0,0 +1,33 @@
1
+ import { AxiError } from "axi-sdk-js";
2
+ import { assertKnownFlags, flagString, parseArgs } from "../lib/args.js";
3
+ import { assertAuditPositionals, auditLimit, auditOutput, auditRequest } from "../lib/audit.js";
4
+ import { requireProject } from "../lib/config.js";
5
+ import { profileFromArgs } from "../lib/context.js";
6
+ export async function teamCommand(argv) {
7
+ const args = parseArgs(argv);
8
+ const sub = args.positionals.shift() ?? "list";
9
+ const members = sub === "list-member" || (sub === "member" && args.positionals.shift() === "list");
10
+ if (sub !== "list" && !members)
11
+ throw new AxiError("Use team list or team member list --team <id>", "VALIDATION_ERROR");
12
+ assertKnownFlags(args, members ? ["team", "limit"] : ["limit"], members ? "team member list" : "team list");
13
+ const limit = auditLimit(args);
14
+ assertAuditPositionals(args, 0);
15
+ const profile = profileFromArgs(args);
16
+ const project = requireProject(profile, "team");
17
+ const team = flagString(args, "team");
18
+ if (members && !team)
19
+ throw new AxiError("--team is required", "VALIDATION_ERROR");
20
+ const path = `_apis/projects/${encodeURIComponent(project)}/teams${members ? `/${encodeURIComponent(team)}/members` : ""}`;
21
+ // Core team APIs use offset pagination rather than continuation tokens.
22
+ const rows = [];
23
+ let total = 0;
24
+ let page;
25
+ do {
26
+ const response = await auditRequest(profile, { path, query: { $top: 100, $skip: total } });
27
+ page = response.value;
28
+ rows.push(...page.slice(0, Math.max(0, limit - rows.length)));
29
+ total += page.length;
30
+ } while (page.length === 100);
31
+ return auditOutput(members ? "members" : "teams", { rows, total }, args, members ? ["identity", "isTeamAdmin"] : ["id", "name", "description"]);
32
+ }
33
+ //# sourceMappingURL=team.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team.js","sourceRoot":"","sources":["../../src/commands/team.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAoB,MAAM,iBAAiB,CAAC;AAClH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAc;IAC9C,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,MAAM,CAAC;IAC/C,MAAM,OAAO,GAAG,GAAG,KAAK,aAAa,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,MAAM,CAAC,CAAC;IACnG,IAAI,GAAG,KAAK,MAAM,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,QAAQ,CAAC,+CAA+C,EAAE,kBAAkB,CAAC,CAAC;IACxH,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC5G,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,sBAAsB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,IAAI,OAAO,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;IACnF,MAAM,IAAI,GAAG,kBAAkB,kBAAkB,CAAC,OAAO,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,IAAI,kBAAkB,CAAC,IAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC5H,wEAAwE;IACxE,MAAM,IAAI,GAAkB,EAAE,CAAC;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,IAAmB,CAAC;IACxB,GAAG,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,YAAY,CAA2B,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACrH,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC9D,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC,QAAQ,IAAI,CAAC,MAAM,KAAK,GAAG,EAAE;IAC9B,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;AAClJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function testCommand(argv: string[]): Promise<Record<string, unknown>>;
2
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AA+BA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAkBlF"}
@@ -0,0 +1,183 @@
1
+ import { AxiError } from "axi-sdk-js";
2
+ import { 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, pickFields, truncate } from "../lib/format.js";
7
+ const RESULTS_FLAGS = ["run", "outcome", "limit"];
8
+ const RUNS_PAGE_SIZE = 100;
9
+ export async function testCommand(argv) {
10
+ const args = parseArgs(argv);
11
+ const first = args.positionals[0] ?? "results";
12
+ const sub = /^\d+$/.test(first) ? "results" : first;
13
+ const rest = sub === first ? { ...args, positionals: args.positionals.slice(1) } : args;
14
+ switch (sub) {
15
+ case "results":
16
+ case "failures":
17
+ return testResults(rest);
18
+ default:
19
+ throw new AxiError(`unknown subcommand \`test ${sub}\``, "VALIDATION_ERROR", [
20
+ "Subcommands: results",
21
+ "Usage: ado-axi test results <run-id> (the pipeline run id, not the test run id)",
22
+ "Run `ado-axi test --help` for the full reference",
23
+ ]);
24
+ }
25
+ }
26
+ function requireBuildId(args) {
27
+ const raw = args.positionals[0];
28
+ const id = Number(raw);
29
+ if (!raw || !Number.isInteger(id) || id < 1) {
30
+ throw new AxiError("a positive numeric pipeline run id is required", "VALIDATION_ERROR", [
31
+ "Usage: ado-axi test results <run-id> [--outcome failed|all] [--limit 20]",
32
+ "Run `ado-axi pipeline runs --result failed` to find run ids",
33
+ "Pass --run <test-run-id> to read a single test run instead",
34
+ ]);
35
+ }
36
+ return id;
37
+ }
38
+ function failedCount(run) {
39
+ return Number(run.unanalyzedTests ?? 0);
40
+ }
41
+ function runRow(run) {
42
+ return {
43
+ id: run.id,
44
+ name: run.name ?? "",
45
+ total: Number(run.totalTests ?? 0),
46
+ passed: Number(run.passedTests ?? 0),
47
+ failed: failedCount(run),
48
+ state: run.state ?? "",
49
+ };
50
+ }
51
+ async function fetchResults(profile, project, testRunId, outcome, limit) {
52
+ const query = { $top: limit };
53
+ if (outcome !== "all")
54
+ query.outcomes = outcome;
55
+ const response = await request(profile, {
56
+ path: `_apis/test/Runs/${testRunId}/results`,
57
+ project,
58
+ query,
59
+ });
60
+ return response.value ?? [];
61
+ }
62
+ function normalizeOutcome(args) {
63
+ const raw = (flagString(args, "outcome") ?? "failed").toLowerCase();
64
+ const known = {
65
+ failed: "Failed",
66
+ passed: "Passed",
67
+ aborted: "Aborted",
68
+ "not-executed": "NotExecuted",
69
+ all: "all",
70
+ };
71
+ const outcome = known[raw];
72
+ if (!outcome) {
73
+ throw new AxiError(`--outcome must be one of ${Object.keys(known).join(", ")}`, "VALIDATION_ERROR", [
74
+ "Example: ado-axi test results 98231 --outcome failed",
75
+ ]);
76
+ }
77
+ return outcome;
78
+ }
79
+ async function testResults(args) {
80
+ assertKnownFlags(args, RESULTS_FLAGS, "test results");
81
+ const profile = profileFromArgs(args);
82
+ const project = requireProject(profile, "test results");
83
+ const full = flagBool(args, "full");
84
+ const limit = flagNumber(args, "limit") ?? 20;
85
+ if (!Number.isInteger(limit) || limit < 1) {
86
+ throw new AxiError("--limit must be a positive integer", "VALIDATION_ERROR");
87
+ }
88
+ const outcome = normalizeOutcome(args);
89
+ const singleRun = flagNumber(args, "run");
90
+ let runs;
91
+ let buildId;
92
+ if (singleRun !== undefined) {
93
+ runs = [await request(profile, { path: `_apis/test/runs/${singleRun}`, project })];
94
+ }
95
+ else {
96
+ buildId = requireBuildId(args);
97
+ runs = [];
98
+ while (true) {
99
+ const response = await request(profile, {
100
+ path: "_apis/test/runs",
101
+ project,
102
+ query: {
103
+ buildUri: `vstfs:///Build/Build/${buildId}`,
104
+ includeRunDetails: true,
105
+ $top: RUNS_PAGE_SIZE,
106
+ $skip: runs.length,
107
+ },
108
+ });
109
+ const page = response.value ?? [];
110
+ runs.push(...page);
111
+ if (page.length < RUNS_PAGE_SIZE)
112
+ break;
113
+ }
114
+ }
115
+ const scope = buildId !== undefined ? `run ${buildId}` : `test run ${singleRun}`;
116
+ if (runs.length === 0) {
117
+ return {
118
+ tests: `0 test runs published for ${scope} in ${project}`,
119
+ help: [
120
+ `Run \`ado-axi pipeline timeline ${buildId ?? "<run-id>"}\` to see whether the run reached its test step`,
121
+ `Run \`ado-axi pipeline logs ${buildId ?? "<run-id>"} --failed-only\` when no results were published`,
122
+ ],
123
+ };
124
+ }
125
+ const total = runs.reduce((sum, r) => sum + Number(r.totalTests ?? 0), 0);
126
+ const passed = runs.reduce((sum, r) => sum + Number(r.passedTests ?? 0), 0);
127
+ const failed = runs.reduce((sum, r) => sum + failedCount(r), 0);
128
+ const notRun = runs.reduce((sum, r) => sum + Number(r.notApplicableTests ?? 0) + Number(r.incompleteTests ?? 0), 0);
129
+ const out = {
130
+ tests: {
131
+ ...(buildId !== undefined ? { run: buildId } : {}),
132
+ "test-runs": runs.length,
133
+ total,
134
+ passed,
135
+ failed,
136
+ "not-run": notRun,
137
+ },
138
+ runs: pickFields(runs.map(runRow), flagList(args, "fields")),
139
+ };
140
+ let matchingTotal = outcome === "all" ? total : outcome === "Passed" ? passed : failed;
141
+ if (outcome === "Aborted" || outcome === "NotExecuted") {
142
+ matchingTotal = 0;
143
+ for (const run of runs) {
144
+ const statistics = await request(profile, { path: `_apis/test/runs/${run.id}/Statistics`, project });
145
+ matchingTotal += (statistics.runStatistics ?? [])
146
+ .filter((statistic) => statistic.outcome === outcome)
147
+ .reduce((sum, statistic) => sum + Number(statistic.count ?? 0), 0);
148
+ }
149
+ }
150
+ const interesting = outcome === "Failed" ? runs.filter((r) => failedCount(r) > 0) : runs;
151
+ const results = [];
152
+ for (const run of interesting) {
153
+ if (results.length >= limit)
154
+ break;
155
+ results.push(...(await fetchResults(profile, project, run.id, outcome, limit - results.length)));
156
+ }
157
+ const label = outcome === "all" ? "results" : `${(flagString(args, "outcome") ?? "failed").toLowerCase()} tests`;
158
+ if (results.length === 0) {
159
+ out.failures = `0 ${label} in ${scope} (${passed}/${total} passed)`;
160
+ return out;
161
+ }
162
+ const shown = results.slice(0, limit);
163
+ const messageLimit = full ? Number.MAX_SAFE_INTEGER : 300;
164
+ out.failures = shown.map((r) => ({
165
+ test: r.testCaseTitle ?? r.automatedTestName ?? "",
166
+ outcome: r.outcome ?? "",
167
+ run: Number(r.testRun?.id ?? 0) || "",
168
+ error: truncate((r.errorMessage ?? "").replace(/\s+/g, " ").trim(), messageLimit).text,
169
+ }));
170
+ out.count = countLine(shown.length, matchingTotal, label);
171
+ const help = [];
172
+ if (!full) {
173
+ help.push(buildId !== undefined
174
+ ? `Run \`ado-axi test results ${buildId} --full\` for complete error messages`
175
+ : `Run \`ado-axi test results --run ${singleRun} --full\` for complete error messages`);
176
+ }
177
+ if (buildId !== undefined) {
178
+ help.push(`Run \`ado-axi pipeline logs ${buildId} --failed-only\` for the failing step's log`);
179
+ }
180
+ out.help = help;
181
+ return out;
182
+ }
183
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type AuditRecord } from "../lib/audit.js";
2
+ export declare function userCommand(argv: string[]): Promise<AuditRecord>;
3
+ //# sourceMappingURL=user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/commands/user.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgG,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGjJ,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAYtE"}
@@ -0,0 +1,20 @@
1
+ import { AxiError } from "axi-sdk-js";
2
+ import { assertKnownFlags, parseArgs } from "../lib/args.js";
3
+ import { assertAuditPositionals, auditId, auditLimit, auditList, auditOutput, auditRequest, safeAudit } from "../lib/audit.js";
4
+ import { profileFromArgs } from "../lib/context.js";
5
+ export async function userCommand(argv) {
6
+ const args = parseArgs(argv);
7
+ const sub = args.positionals.shift() ?? "list";
8
+ if (!["list", "show"].includes(sub))
9
+ throw new AxiError("Use user list|show", "VALIDATION_ERROR");
10
+ assertKnownFlags(args, sub === "show" ? ["id", "limit"] : ["limit"], `user ${sub}`);
11
+ const limit = auditLimit(args);
12
+ assertAuditPositionals(args, sub === "show" ? 1 : 0);
13
+ const profile = profileFromArgs(args);
14
+ const path = "_apis/userentitlements";
15
+ const options = { host: "vsaex", apiVersion: "7.1-preview.3" };
16
+ if (sub === "show")
17
+ return { user: safeAudit(await auditRequest(profile, { ...options, path: `${path}/${auditId(args)}` }), args) };
18
+ return auditOutput("users", await auditList(profile, { ...options, path }, limit, "members"), args, ["id", "user", "accessLevel", "lastAccessedDate"]);
19
+ }
20
+ //# sourceMappingURL=user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/commands/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAoB,MAAM,iBAAiB,CAAC;AACjJ,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAc;IAC9C,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,MAAM,CAAC;IAC/C,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;IAClG,gBAAgB,CAAC,IAAI,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,EAAE,CAAC,CAAC;IACpF,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,sBAAsB,CAAC,IAAI,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,wBAAwB,CAAC;IACtC,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,OAAgB,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;IACxE,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,YAAY,CAAC,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IACpI,OAAO,WAAW,CAAC,OAAO,EAAE,MAAM,SAAS,CAAC,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC,CAAC;AACzJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type AuditRecord } from "../lib/audit.js";
2
+ export declare function variableGroupCommand(argv: string[]): Promise<AuditRecord>;
3
+ //# sourceMappingURL=variableGroup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variableGroup.d.ts","sourceRoot":"","sources":["../../src/commands/variableGroup.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgG,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAIjJ,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAc/E"}
@@ -0,0 +1,23 @@
1
+ import { AxiError } from "axi-sdk-js";
2
+ import { assertKnownFlags, parseArgs } from "../lib/args.js";
3
+ import { assertAuditPositionals, auditId, auditLimit, auditList, auditOutput, auditRequest, safeAudit } from "../lib/audit.js";
4
+ import { requireProject } from "../lib/config.js";
5
+ import { profileFromArgs } from "../lib/context.js";
6
+ export async function variableGroupCommand(argv) {
7
+ const args = parseArgs(argv);
8
+ const sub = args.positionals.shift() ?? "list";
9
+ if (!["list", "show"].includes(sub))
10
+ throw new AxiError("Use variable-group list|show", "VALIDATION_ERROR");
11
+ assertKnownFlags(args, sub === "show" ? ["id", "limit"] : ["limit"], `variable-group ${sub}`);
12
+ const limit = auditLimit(args);
13
+ assertAuditPositionals(args, sub === "show" ? 1 : 0);
14
+ const profile = profileFromArgs(args);
15
+ const project = requireProject(profile, `variable-group ${sub}`);
16
+ const path = "_apis/distributedtask/variablegroups";
17
+ if (sub === "show")
18
+ return { "variable-group": safeAudit(await auditRequest(profile, {
19
+ path: `${path}/${auditId(args)}`, project,
20
+ }), args) };
21
+ return auditOutput("variable-groups", await auditList(profile, { path, project }, limit), args, ["id", "name", "type"]);
22
+ }
23
+ //# sourceMappingURL=variableGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variableGroup.js","sourceRoot":"","sources":["../../src/commands/variableGroup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAoB,MAAM,iBAAiB,CAAC;AACjJ,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAc;IACvD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,MAAM,CAAC;IAC/C,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,QAAQ,CAAC,8BAA8B,EAAE,kBAAkB,CAAC,CAAC;IAC5G,gBAAgB,CAAC,IAAI,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,EAAE,CAAC,CAAC;IAC9F,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,sBAAsB,CAAC,IAAI,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,EAAE,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,sCAAsC,CAAC;IACpD,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,EAAE,gBAAgB,EAAE,SAAS,CAAC,MAAM,YAAY,CAAC,OAAO,EAAE;gBACnF,IAAI,EAAE,GAAG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO;aAC1C,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IACZ,OAAO,WAAW,CAAC,iBAAiB,EAAE,MAAM,SAAS,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAC1H,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { parseArgs } from "../lib/args.js";
2
+ import { requestList } from "../lib/client.js";
3
+ export declare function workItemCommand(argv: string[]): Promise<Record<string, unknown>>;
4
+ export declare function listWorkItems(args: ReturnType<typeof parseArgs>, savedQuery?: string): Promise<Record<string, unknown>>;
5
+ export declare function parseTags(value: unknown): string[];
6
+ export declare function mergeTags(current: string[], add: string[], remove: string[]): {
7
+ tags: string[];
8
+ added: string[];
9
+ removed: string[];
10
+ };
11
+ export { requestList };
12
+ //# sourceMappingURL=workItem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workItem.d.ts","sourceRoot":"","sources":["../../src/commands/workItem.ts"],"names":[],"mappings":"AACA,OAAO,EAAgE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACzG,OAAO,EAAW,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAuExD,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA+BtF;AAkED,wBAAsB,aAAa,CACjC,IAAI,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,EAClC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAgElC;AAkOD,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAKlD;AAED,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EAAE,EACjB,GAAG,EAAE,MAAM,EAAE,EACb,MAAM,EAAE,MAAM,EAAE,GACf;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAaxD;AA6KD,OAAO,EAAE,WAAW,EAAE,CAAC"}