@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.
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|