xcodebuild-axi 0.1.8 → 0.1.10
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/CHANGELOG.md +165 -2
- package/README.md +40 -82
- package/dist/src/action.d.ts +8 -0
- package/dist/src/action.js +37 -30
- package/dist/src/action.js.map +1 -1
- package/dist/src/archive.d.ts +35 -6
- package/dist/src/archive.js +63 -21
- package/dist/src/archive.js.map +1 -1
- package/dist/src/commands/archive.js +1 -1
- package/dist/src/commands/archive.js.map +1 -1
- package/dist/src/commands/clean.d.ts +2 -2
- package/dist/src/commands/clean.js +33 -3
- package/dist/src/commands/clean.js.map +1 -1
- package/dist/src/commands/export.d.ts +4 -4
- package/dist/src/commands/export.js +194 -11
- package/dist/src/commands/export.js.map +1 -1
- package/dist/src/commands/info.d.ts +2 -2
- package/dist/src/commands/info.js +56 -3
- package/dist/src/commands/info.js.map +1 -1
- package/dist/src/commands/packages.d.ts +2 -2
- package/dist/src/commands/packages.js +17 -6
- package/dist/src/commands/packages.js.map +1 -1
- package/dist/src/commands/result.d.ts +15 -3
- package/dist/src/commands/result.js +294 -14
- package/dist/src/commands/result.js.map +1 -1
- package/dist/src/commands/settings.d.ts +7 -2
- package/dist/src/commands/settings.js +134 -20
- package/dist/src/commands/settings.js.map +1 -1
- package/dist/src/commands/test.js +9 -13
- package/dist/src/commands/test.js.map +1 -1
- package/dist/src/commands/tests.d.ts +2 -2
- package/dist/src/commands/tests.js +19 -7
- package/dist/src/commands/tests.js.map +1 -1
- package/dist/src/errors.js +10 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/report.d.ts +22 -1
- package/dist/src/report.js +40 -0
- package/dist/src/report.js.map +1 -1
- package/dist/src/scheme.d.ts +34 -0
- package/dist/src/scheme.js +46 -0
- package/dist/src/scheme.js.map +1 -1
- package/dist/src/surface.d.ts +7 -0
- package/dist/src/surface.js +43 -166
- package/dist/src/surface.js.map +1 -1
- package/dist/src/xcresult.d.ts +156 -0
- package/dist/src/xcresult.js +107 -4
- package/dist/src/xcresult.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,20 +1,31 @@
|
|
|
1
1
|
import { execFile } from "node:child_process";
|
|
2
|
+
import { AxiError } from "../errors.js";
|
|
2
3
|
import { runMetadata } from "../xcodebuild.js";
|
|
3
4
|
import { listSimulators } from "../simctl.js";
|
|
4
5
|
import { renderFields, renderHelp, renderOutput, tildePath } from "../toon.js";
|
|
5
6
|
import { getFlag, hasFlag, rejectUnknownFlags } from "../args.js";
|
|
6
7
|
export const INFO_HELP = `usage: xcodebuild-axi info [flags]
|
|
7
8
|
Reports the toolchain this machine will build with.
|
|
8
|
-
flags[
|
|
9
|
+
flags[3]:
|
|
9
10
|
--sdks list every installed SDK
|
|
10
11
|
--platform <name> filter the SDK list, e.g. iphoneos
|
|
12
|
+
--sdk <name> everything about one SDK: its path, platform, and versions
|
|
13
|
+
note:
|
|
14
|
+
--sdks answers "which SDKs are here", --sdk answers "where is this one and
|
|
15
|
+
what is in it" -- the paths a build script needs and the build version an
|
|
16
|
+
agent is asked to report. A canonical name (iphonesimulator27.0) or a bare
|
|
17
|
+
platform name (iphonesimulator) both work.
|
|
11
18
|
examples:
|
|
12
19
|
xcodebuild-axi info
|
|
13
20
|
xcodebuild-axi info --sdks --platform iphonesimulator
|
|
21
|
+
xcodebuild-axi info --sdk iphonesimulator
|
|
14
22
|
`;
|
|
15
|
-
export const INFO_FLAGS = ["--sdks", "--platform"];
|
|
23
|
+
export const INFO_FLAGS = ["--sdks", "--platform", "--sdk"];
|
|
16
24
|
export async function infoCommand(args) {
|
|
17
|
-
rejectUnknownFlags(args, "info", INFO_FLAGS, ["--platform"]);
|
|
25
|
+
rejectUnknownFlags(args, "info", INFO_FLAGS, ["--platform", "--sdk"]);
|
|
26
|
+
const named = getFlag(args, "--sdk");
|
|
27
|
+
if (named !== undefined)
|
|
28
|
+
return reportSdk(named);
|
|
18
29
|
const [version, developerDir, sdks, simulators] = await Promise.all([
|
|
19
30
|
readVersion(),
|
|
20
31
|
readDeveloperDir(),
|
|
@@ -63,6 +74,48 @@ export async function infoCommand(args) {
|
|
|
63
74
|
renderHelp(["Run `xcodebuild-axi info --sdks` to list the installed SDKs"]),
|
|
64
75
|
]);
|
|
65
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* One SDK, in full.
|
|
79
|
+
*
|
|
80
|
+
* `xcodebuild -version -sdk <name> <infoitem>` answers one field per
|
|
81
|
+
* invocation and only if you already know the field names; the JSON form
|
|
82
|
+
* carries all of them, so this asks once and reports the lot.
|
|
83
|
+
*/
|
|
84
|
+
async function reportSdk(name) {
|
|
85
|
+
const { stdout } = await runMetadata(["-version", "-sdk", name, "-json"]);
|
|
86
|
+
const start = stdout.indexOf("[");
|
|
87
|
+
let parsed = [];
|
|
88
|
+
if (start !== -1) {
|
|
89
|
+
try {
|
|
90
|
+
parsed = JSON.parse(stdout.slice(start));
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
parsed = [];
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const sdk = parsed[0];
|
|
97
|
+
if (!sdk) {
|
|
98
|
+
// xcodebuild exits *zero* for an SDK it cannot locate, so the absence of a
|
|
99
|
+
// payload is the only signal that the name was wrong.
|
|
100
|
+
throw new AxiError(`No SDK named '${name}'`, "NOT_FOUND", [
|
|
101
|
+
"Run `xcodebuild-axi info --sdks` to list the installed SDKs",
|
|
102
|
+
]);
|
|
103
|
+
}
|
|
104
|
+
return renderOutput([
|
|
105
|
+
renderFields({
|
|
106
|
+
sdk: sdk.canonicalName ?? name,
|
|
107
|
+
...(sdk.displayName ? { name: sdk.displayName } : {}),
|
|
108
|
+
...(sdk.platform ? { platform: sdk.platform } : {}),
|
|
109
|
+
...(sdk.sdkVersion ? { sdk_version: sdk.sdkVersion } : {}),
|
|
110
|
+
...(sdk.productVersion ? { product_version: sdk.productVersion } : {}),
|
|
111
|
+
...(sdk.productBuildVersion ? { build: sdk.productBuildVersion } : {}),
|
|
112
|
+
...(sdk.sdkPath ? { path: tildePath(sdk.sdkPath) } : {}),
|
|
113
|
+
...(sdk.platformPath
|
|
114
|
+
? { platform_path: tildePath(sdk.platformPath) }
|
|
115
|
+
: {}),
|
|
116
|
+
}),
|
|
117
|
+
]);
|
|
118
|
+
}
|
|
66
119
|
async function readVersion() {
|
|
67
120
|
const { stdout } = await runMetadata(["-version"]);
|
|
68
121
|
const lines = stdout.trim().split("\n");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/commands/info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAElE,MAAM,CAAC,MAAM,SAAS,GAAG
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/commands/info.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const PACKAGES_HELP = "usage: xcodebuild-axi packages [flags]\nReports the Swift package versions this project is pinned to, read straight\nfrom Package.resolved \u2014 no build, no subprocess.\nflags[
|
|
2
|
-
export declare const PACKAGES_FLAGS: readonly ["--resolve", "--filter", "--scheme", "--offline", "--cache", "--package-cache", "--no-auto-resolve", "--skip-package-updates", "--no-package-cache", "--skip-plugin-validation", "--skip-signature-validation", "--package-auth", "--registry-url", "--scm-to-registry", "--fingerprint-policy", "--signing-entity-policy", "--scm-provider"];
|
|
1
|
+
export declare const PACKAGES_HELP = "usage: xcodebuild-axi packages [flags]\nReports the Swift package versions this project is pinned to, read straight\nfrom Package.resolved \u2014 no build, no subprocess.\nflags[18]:\n --resolve actually resolve dependencies first (network, slow)\n --filter <text> only packages whose identity contains this\n --scheme <name> with --resolve against a workspace: the scheme to resolve for\n --derived-data <path> with --resolve: derived data directory to resolve into\n --offline resolve using only the versions already in Package.resolved\n --cache <path> clone remote packages into this directory\n --package-cache <path> shared package cache directory (across projects)\n --no-auto-resolve never resolve automatically; fail if Package.resolved is stale\n --skip-package-updates use the packages already cloned, without checking for updates\n --no-package-cache ignore the shared package repository cache\n --skip-plugin-validation trust build plugins without prompting\n --skip-signature-validation do not verify package signatures\n --package-auth <kind> keychain or netrc\n --registry-url <url> default package registry\n --scm-to-registry <kind> none, identity, or swift-package-registry\n --fingerprint-policy <kind> strict or warn\n --signing-entity-policy <kind> strict or warn\n --scm-provider <kind> system or xcode\nnote:\n The resolution flags only matter alongside --resolve; reading the pins is a\n file read either way.\nexamples:\n xcodebuild-axi packages\n xcodebuild-axi packages --filter swift-composable\n xcodebuild-axi packages --resolve --offline\n";
|
|
2
|
+
export declare const PACKAGES_FLAGS: readonly ["--resolve", "--filter", "--scheme", "--derived-data", "--offline", "--cache", "--package-cache", "--no-auto-resolve", "--skip-package-updates", "--no-package-cache", "--skip-plugin-validation", "--skip-signature-validation", "--package-auth", "--registry-url", "--scm-to-registry", "--fingerprint-policy", "--signing-entity-policy", "--scm-provider"];
|
|
3
3
|
export declare function packagesCommand(args: string[]): Promise<string>;
|
|
@@ -8,10 +8,11 @@ import { getFlag, hasFlag, rejectUnknownFlags } from "../args.js";
|
|
|
8
8
|
export const PACKAGES_HELP = `usage: xcodebuild-axi packages [flags]
|
|
9
9
|
Reports the Swift package versions this project is pinned to, read straight
|
|
10
10
|
from Package.resolved — no build, no subprocess.
|
|
11
|
-
flags[
|
|
11
|
+
flags[18]:
|
|
12
12
|
--resolve actually resolve dependencies first (network, slow)
|
|
13
13
|
--filter <text> only packages whose identity contains this
|
|
14
14
|
--scheme <name> with --resolve against a workspace: the scheme to resolve for
|
|
15
|
+
--derived-data <path> with --resolve: derived data directory to resolve into
|
|
15
16
|
${PACKAGE_FLAG_HELP}
|
|
16
17
|
note:
|
|
17
18
|
The resolution flags only matter alongside --resolve; reading the pins is a
|
|
@@ -25,18 +26,27 @@ export const PACKAGES_FLAGS = [
|
|
|
25
26
|
"--resolve",
|
|
26
27
|
"--filter",
|
|
27
28
|
"--scheme",
|
|
29
|
+
"--derived-data",
|
|
28
30
|
...PACKAGE_FLAGS,
|
|
29
31
|
];
|
|
30
|
-
const VALUE_FLAGS = [
|
|
32
|
+
const VALUE_FLAGS = [
|
|
33
|
+
"--filter",
|
|
34
|
+
"--scheme",
|
|
35
|
+
"--derived-data",
|
|
36
|
+
...PACKAGE_VALUE_FLAGS,
|
|
37
|
+
];
|
|
31
38
|
export async function packagesCommand(args) {
|
|
32
39
|
rejectUnknownFlags(args, "packages", PACKAGES_FLAGS, VALUE_FLAGS);
|
|
33
40
|
const project = requireProject();
|
|
34
41
|
const blocks = [];
|
|
35
42
|
if (hasFlag(args, "--resolve")) {
|
|
36
|
-
// xcodebuild
|
|
37
|
-
//
|
|
38
|
-
//
|
|
39
|
-
|
|
43
|
+
// Two reasons xcodebuild needs a scheme named up front: it refuses
|
|
44
|
+
// `-resolvePackageDependencies -workspace` without one and says so only
|
|
45
|
+
// after loading the whole workspace, and it refuses `-derivedDataPath`
|
|
46
|
+
// without one at all. `requireScheme` picks it when there is only one, so
|
|
47
|
+
// neither refusal has to reach the caller.
|
|
48
|
+
const derivedData = getFlag(args, "--derived-data");
|
|
49
|
+
const scheme = project.kind === "workspace" || derivedData !== undefined
|
|
40
50
|
? await requireScheme(project, getFlag(args, "--scheme"), "packages --resolve")
|
|
41
51
|
: getFlag(args, "--scheme");
|
|
42
52
|
const run = await runBuild({
|
|
@@ -44,6 +54,7 @@ export async function packagesCommand(args) {
|
|
|
44
54
|
...project.flags,
|
|
45
55
|
...(scheme ? ["-scheme", scheme] : []),
|
|
46
56
|
"-resolvePackageDependencies",
|
|
57
|
+
...(derivedData ? ["-derivedDataPath", derivedData] : []),
|
|
47
58
|
...packageArgs(args),
|
|
48
59
|
],
|
|
49
60
|
label: `${project.name}-resolve`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packages.js","sourceRoot":"","sources":["../../../src/commands/packages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,QAAQ,EACR,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,UAAU,EACV,YAAY,EACZ,SAAS,GACV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAElE,MAAM,CAAC,MAAM,aAAa,GAAG
|
|
1
|
+
{"version":3,"file":"packages.js","sourceRoot":"","sources":["../../../src/commands/packages.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,19 @@
|
|
|
1
|
-
import { type BuildResults } from "../xcresult.js";
|
|
2
|
-
export declare const RESULT_HELP = "usage: xcodebuild-axi result <path.xcresult> [flags]\nRe-reads a result bundle that a previous run wrote, without rebuilding.\nflags[
|
|
3
|
-
export declare const RESULT_FLAGS: readonly ["--failures", "--warnings", "--max", "--full"];
|
|
1
|
+
import { type BuildResults, type TestNode } from "../xcresult.js";
|
|
2
|
+
export declare const RESULT_HELP = "usage: xcodebuild-axi result <path.xcresult> [flags]\nRe-reads a result bundle that a previous run wrote, without rebuilding.\nflags[12]:\n --failures failures and errors only\n --warnings include the full warning list\n --tests every test the run recorded, as the tree Xcode groups them into\n --insights Xcode's own diagnosis: what failed together, and what was slow\n --activities what one test did, step by step; needs --test\n --metrics what the performance tests measured; --test narrows it\n --log <type> the stored build, action, or console log, as timed sections\n --available what this bundle holds at all: coverage, logs, test results\n --metadata when the bundle was written, and in what format\n --test <id> the test --activities or --metrics is about\n --max <n> rows to list before summarizing the rest (default: 20)\n --full untruncated messages\nnote:\n Everything here reads the bundle a run already wrote, so none of it rebuilds\n anything. --available is the cheapest first question about a bundle from\n somewhere else: it says whether there is coverage or a log to ask for,\n instead of letting you find out by failing to read one.\nexamples:\n xcodebuild-axi result ~/Library/Caches/xcodebuild-axi/MyApps-1a2b3c4d/MyApp-iPhone-17-Pro-test.xcresult\n xcodebuild-axi result build/MyApp.xcresult --failures --full\n xcodebuild-axi result build/MyApp.xcresult --log build --max 10\n xcodebuild-axi result build/MyApp.xcresult --activities --test MyAppTests/CheckoutTests/testTotal\n";
|
|
3
|
+
export declare const RESULT_FLAGS: readonly ["--failures", "--warnings", "--tests", "--insights", "--activities", "--metrics", "--log", "--available", "--metadata", "--test", "--max", "--full"];
|
|
4
4
|
export declare function resultCommand(args: string[]): Promise<string>;
|
|
5
|
+
/**
|
|
6
|
+
* The test tree, flattened to one row per test case.
|
|
7
|
+
*
|
|
8
|
+
* Xcode nests plan -> target -> suite -> case, and printing that as a tree
|
|
9
|
+
* costs more tokens than it explains. The identifier already carries the
|
|
10
|
+
* hierarchy, so the rows carry the identifier and the verdict.
|
|
11
|
+
*/
|
|
12
|
+
export declare function flattenTests(nodes: TestNode[] | undefined): Array<{
|
|
13
|
+
test: string;
|
|
14
|
+
result: string;
|
|
15
|
+
duration: string;
|
|
16
|
+
}>;
|
|
5
17
|
/**
|
|
6
18
|
* The header a non-test bundle reports. A build bundle carries every field the
|
|
7
19
|
* test-shaped query lacks: `actionTitle` names the action xcodebuild ran,
|
|
@@ -1,29 +1,53 @@
|
|
|
1
1
|
import { AxiError } from "../errors.js";
|
|
2
2
|
import { resolve } from "node:path";
|
|
3
|
-
import { describeDevice, readBuildResults, readTestSummary, toDiagnostics, } from "../xcresult.js";
|
|
4
|
-
import { diagnosticsBlock } from "../report.js";
|
|
5
|
-
import { duration, renderFields, renderHelp, renderList, renderOutput, tildePath,
|
|
6
|
-
import { getIntFlag, hasFlag, positionals, rejectUnknownFlags, } from "../args.js";
|
|
3
|
+
import { describeDevice, readActivities, readBuildResults, readBundleMetadata, readContentAvailability, readInsights, readLog, readMetrics, readTests, readTestSummary, toDiagnostics, } from "../xcresult.js";
|
|
4
|
+
import { diagnosticsBlock, failureRows } from "../report.js";
|
|
5
|
+
import { duration, renderFields, renderHelp, renderList, renderOutput, tildePath, } from "../toon.js";
|
|
6
|
+
import { getFlag, getIntFlag, hasFlag, positionals, rejectUnknownFlags, } from "../args.js";
|
|
7
7
|
export const RESULT_HELP = `usage: xcodebuild-axi result <path.xcresult> [flags]
|
|
8
8
|
Re-reads a result bundle that a previous run wrote, without rebuilding.
|
|
9
|
-
flags[
|
|
9
|
+
flags[12]:
|
|
10
10
|
--failures failures and errors only
|
|
11
11
|
--warnings include the full warning list
|
|
12
|
+
--tests every test the run recorded, as the tree Xcode groups them into
|
|
13
|
+
--insights Xcode's own diagnosis: what failed together, and what was slow
|
|
14
|
+
--activities what one test did, step by step; needs --test
|
|
15
|
+
--metrics what the performance tests measured; --test narrows it
|
|
16
|
+
--log <type> the stored build, action, or console log, as timed sections
|
|
17
|
+
--available what this bundle holds at all: coverage, logs, test results
|
|
18
|
+
--metadata when the bundle was written, and in what format
|
|
19
|
+
--test <id> the test --activities or --metrics is about
|
|
12
20
|
--max <n> rows to list before summarizing the rest (default: 20)
|
|
13
21
|
--full untruncated messages
|
|
22
|
+
note:
|
|
23
|
+
Everything here reads the bundle a run already wrote, so none of it rebuilds
|
|
24
|
+
anything. --available is the cheapest first question about a bundle from
|
|
25
|
+
somewhere else: it says whether there is coverage or a log to ask for,
|
|
26
|
+
instead of letting you find out by failing to read one.
|
|
14
27
|
examples:
|
|
15
28
|
xcodebuild-axi result ~/Library/Caches/xcodebuild-axi/MyApps-1a2b3c4d/MyApp-iPhone-17-Pro-test.xcresult
|
|
16
29
|
xcodebuild-axi result build/MyApp.xcresult --failures --full
|
|
30
|
+
xcodebuild-axi result build/MyApp.xcresult --log build --max 10
|
|
31
|
+
xcodebuild-axi result build/MyApp.xcresult --activities --test MyAppTests/CheckoutTests/testTotal
|
|
17
32
|
`;
|
|
18
33
|
export const RESULT_FLAGS = [
|
|
19
34
|
"--failures",
|
|
20
35
|
"--warnings",
|
|
36
|
+
"--tests",
|
|
37
|
+
"--insights",
|
|
38
|
+
"--activities",
|
|
39
|
+
"--metrics",
|
|
40
|
+
"--log",
|
|
41
|
+
"--available",
|
|
42
|
+
"--metadata",
|
|
43
|
+
"--test",
|
|
21
44
|
"--max",
|
|
22
45
|
"--full",
|
|
23
46
|
];
|
|
47
|
+
const VALUE_FLAGS = ["--max", "--log", "--test"];
|
|
24
48
|
export async function resultCommand(args) {
|
|
25
|
-
rejectUnknownFlags(args, "result", RESULT_FLAGS,
|
|
26
|
-
const [rawPath] = positionals(args,
|
|
49
|
+
rejectUnknownFlags(args, "result", RESULT_FLAGS, VALUE_FLAGS);
|
|
50
|
+
const [rawPath] = positionals(args, VALUE_FLAGS);
|
|
27
51
|
if (rawPath === undefined) {
|
|
28
52
|
throw new AxiError("result needs a path to an .xcresult bundle", "VALIDATION_ERROR", [
|
|
29
53
|
"xcodebuild-axi result <path.xcresult>",
|
|
@@ -34,6 +58,9 @@ export async function resultCommand(args) {
|
|
|
34
58
|
const max = getIntFlag(args, "--max") ?? 20;
|
|
35
59
|
const full = hasFlag(args, "--full");
|
|
36
60
|
const failuresOnly = hasFlag(args, "--failures");
|
|
61
|
+
const mode = soleMode(args);
|
|
62
|
+
if (mode)
|
|
63
|
+
return readMode(mode, path, args, max);
|
|
37
64
|
const [summary, build] = await Promise.all([
|
|
38
65
|
readTestSummary(path).catch(() => undefined),
|
|
39
66
|
readBuildResults(path).catch(() => undefined),
|
|
@@ -63,13 +90,7 @@ export async function resultCommand(args) {
|
|
|
63
90
|
}));
|
|
64
91
|
const failures = summary.testFailures ?? [];
|
|
65
92
|
if (failures.length > 0) {
|
|
66
|
-
const shown =
|
|
67
|
-
test: failure.testIdentifierString ?? failure.testName ?? "unknown",
|
|
68
|
-
target: failure.targetName ?? "",
|
|
69
|
-
message: full
|
|
70
|
-
? (failure.failureText ?? "").replace(/\s+/g, " ").trim()
|
|
71
|
-
: truncate((failure.failureText ?? "").replace(/\s+/g, " ").trim(), 300).text,
|
|
72
|
-
}));
|
|
93
|
+
const shown = await failureRows(path, failures, { max, full });
|
|
73
94
|
blocks.push(renderList(failures.length > shown.length
|
|
74
95
|
? `failures (${shown.length} of ${failures.length})`
|
|
75
96
|
: "failures", shown));
|
|
@@ -109,6 +130,265 @@ export async function resultCommand(args) {
|
|
|
109
130
|
blocks.push(renderHelp(hints));
|
|
110
131
|
return renderOutput(blocks);
|
|
111
132
|
}
|
|
133
|
+
/** The one read this invocation is for, if it is not the default report. */
|
|
134
|
+
const MODES = [
|
|
135
|
+
"--tests",
|
|
136
|
+
"--insights",
|
|
137
|
+
"--activities",
|
|
138
|
+
"--metrics",
|
|
139
|
+
"--log",
|
|
140
|
+
"--available",
|
|
141
|
+
"--metadata",
|
|
142
|
+
];
|
|
143
|
+
/**
|
|
144
|
+
* These answer different questions from each other and from the default
|
|
145
|
+
* report, so two at once would print two reports and call it one answer.
|
|
146
|
+
*/
|
|
147
|
+
function soleMode(args) {
|
|
148
|
+
const asked = MODES.filter((mode) => args.includes(mode));
|
|
149
|
+
if (asked.length > 1) {
|
|
150
|
+
throw new AxiError(`${asked.join(" and ")} ask different questions — pass one`, "VALIDATION_ERROR", [`each is its own read of the bundle: ${MODES.join(", ")}`]);
|
|
151
|
+
}
|
|
152
|
+
return asked[0];
|
|
153
|
+
}
|
|
154
|
+
async function readMode(mode, path, args, max) {
|
|
155
|
+
const bundle = renderFields({ bundle: tildePath(path) });
|
|
156
|
+
switch (mode) {
|
|
157
|
+
case "--tests":
|
|
158
|
+
return reportTests(await readTests(path), max, bundle);
|
|
159
|
+
case "--insights":
|
|
160
|
+
return reportInsights(await readInsights(path), max, bundle);
|
|
161
|
+
case "--activities":
|
|
162
|
+
return reportActivities(await readActivities(path, requireTest(args, "--activities")), max, bundle);
|
|
163
|
+
case "--metrics":
|
|
164
|
+
return reportMetrics(await readMetrics(path, getFlag(args, "--test")), max, bundle);
|
|
165
|
+
case "--log":
|
|
166
|
+
return reportLog(await readLog(path, logType(args)), logType(args), max, bundle);
|
|
167
|
+
case "--available":
|
|
168
|
+
return reportAvailability(await readContentAvailability(path), bundle);
|
|
169
|
+
case "--metadata":
|
|
170
|
+
return reportMetadata(await readBundleMetadata(path), bundle);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
function requireTest(args, mode) {
|
|
174
|
+
const test = getFlag(args, "--test");
|
|
175
|
+
if (test === undefined) {
|
|
176
|
+
throw new AxiError(`${mode} is about one test`, "VALIDATION_ERROR", [
|
|
177
|
+
`xcodebuild-axi result <path.xcresult> ${mode} --test MyAppTests/CheckoutTests/testTotal`,
|
|
178
|
+
"Run `xcodebuild-axi result <path.xcresult> --tests` to see the identifiers",
|
|
179
|
+
]);
|
|
180
|
+
}
|
|
181
|
+
return test;
|
|
182
|
+
}
|
|
183
|
+
const LOG_TYPES = ["build", "action", "console"];
|
|
184
|
+
function logType(args) {
|
|
185
|
+
const type = getFlag(args, "--log") ?? "build";
|
|
186
|
+
if (!LOG_TYPES.includes(type)) {
|
|
187
|
+
throw new AxiError(`Unknown log type '${type}'`, "VALIDATION_ERROR", [
|
|
188
|
+
`valid types: ${LOG_TYPES.join(", ")}`,
|
|
189
|
+
]);
|
|
190
|
+
}
|
|
191
|
+
return type;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* The test tree, flattened to one row per test case.
|
|
195
|
+
*
|
|
196
|
+
* Xcode nests plan -> target -> suite -> case, and printing that as a tree
|
|
197
|
+
* costs more tokens than it explains. The identifier already carries the
|
|
198
|
+
* hierarchy, so the rows carry the identifier and the verdict.
|
|
199
|
+
*/
|
|
200
|
+
export function flattenTests(nodes) {
|
|
201
|
+
const rows = [];
|
|
202
|
+
const walk = (node) => {
|
|
203
|
+
if (node.nodeType === "Test Case") {
|
|
204
|
+
rows.push({
|
|
205
|
+
test: node.nodeIdentifier ?? node.name ?? "",
|
|
206
|
+
result: (node.result ?? "").toLowerCase(),
|
|
207
|
+
duration: node.duration ?? "",
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
for (const child of node.children ?? [])
|
|
211
|
+
walk(child);
|
|
212
|
+
};
|
|
213
|
+
for (const node of nodes ?? [])
|
|
214
|
+
walk(node);
|
|
215
|
+
return rows;
|
|
216
|
+
}
|
|
217
|
+
function reportTests(tree, max, bundle) {
|
|
218
|
+
const rows = flattenTests(tree.testNodes);
|
|
219
|
+
if (rows.length === 0) {
|
|
220
|
+
return renderOutput([
|
|
221
|
+
renderFields({ tests: "none — this bundle recorded no tests" }),
|
|
222
|
+
bundle,
|
|
223
|
+
]);
|
|
224
|
+
}
|
|
225
|
+
// A failing test is the reason anyone asks, so it is never the row that
|
|
226
|
+
// gets cut when the list is capped.
|
|
227
|
+
const ordered = [
|
|
228
|
+
...rows.filter((row) => row.result !== "passed"),
|
|
229
|
+
...rows.filter((row) => row.result === "passed"),
|
|
230
|
+
];
|
|
231
|
+
const shown = ordered.slice(0, max);
|
|
232
|
+
const device = tree.devices?.[0];
|
|
233
|
+
return renderOutput([
|
|
234
|
+
renderFields({
|
|
235
|
+
tests: rows.length,
|
|
236
|
+
failed: rows.filter((row) => row.result === "failed").length,
|
|
237
|
+
...(device ? { destination: describeDevice(device) } : {}),
|
|
238
|
+
}),
|
|
239
|
+
renderList(rows.length > shown.length
|
|
240
|
+
? `test_list (${shown.length} of ${rows.length})`
|
|
241
|
+
: "test_list", shown),
|
|
242
|
+
bundle,
|
|
243
|
+
renderHelp(rows.length > shown.length
|
|
244
|
+
? [`Run the same command with \`--max ${rows.length}\` for all of them`]
|
|
245
|
+
: []),
|
|
246
|
+
]);
|
|
247
|
+
}
|
|
248
|
+
function reportInsights(insights, max, bundle) {
|
|
249
|
+
const groups = [
|
|
250
|
+
["common_failures", insights.commonFailureInsights],
|
|
251
|
+
["failure_distribution", insights.failureDistributionInsights],
|
|
252
|
+
["longest_runs", insights.longestTestRunsInsights],
|
|
253
|
+
];
|
|
254
|
+
const blocks = groups.flatMap(([name, items]) => items && items.length > 0
|
|
255
|
+
? [
|
|
256
|
+
renderList(name, items.slice(0, max).map((item) => ({
|
|
257
|
+
insight: item.text ?? item.testName ?? item.category ?? "",
|
|
258
|
+
...(item.impact ? { impact: item.impact } : {}),
|
|
259
|
+
...(item.totalDuration !== undefined
|
|
260
|
+
? { duration: duration(item.totalDuration) }
|
|
261
|
+
: {}),
|
|
262
|
+
}))),
|
|
263
|
+
]
|
|
264
|
+
: []);
|
|
265
|
+
if (blocks.length === 0) {
|
|
266
|
+
// Xcode returning three empty lists is an answer: it found nothing worth
|
|
267
|
+
// saying, which is not the same as this command failing to ask.
|
|
268
|
+
return renderOutput([
|
|
269
|
+
renderFields({ insights: "none — Xcode found nothing to report" }),
|
|
270
|
+
bundle,
|
|
271
|
+
]);
|
|
272
|
+
}
|
|
273
|
+
return renderOutput([...blocks, bundle]);
|
|
274
|
+
}
|
|
275
|
+
function reportActivities(activities, max, bundle) {
|
|
276
|
+
const rows = [];
|
|
277
|
+
const walk = (node, depth) => {
|
|
278
|
+
if (node.title)
|
|
279
|
+
rows.push({ step: node.title, depth });
|
|
280
|
+
for (const child of node.childActivities ?? [])
|
|
281
|
+
walk(child, depth + 1);
|
|
282
|
+
};
|
|
283
|
+
for (const run of activities.testRuns ?? []) {
|
|
284
|
+
for (const activity of run.activities ?? [])
|
|
285
|
+
walk(activity, 0);
|
|
286
|
+
}
|
|
287
|
+
const shown = rows.slice(0, max);
|
|
288
|
+
return renderOutput([
|
|
289
|
+
renderFields({
|
|
290
|
+
test: activities.testName ?? activities.testIdentifier ?? "",
|
|
291
|
+
steps: rows.length,
|
|
292
|
+
}),
|
|
293
|
+
rows.length > 0
|
|
294
|
+
? renderList(rows.length > shown.length
|
|
295
|
+
? `activities (${shown.length} of ${rows.length})`
|
|
296
|
+
: "activities", shown)
|
|
297
|
+
: renderFields({ activities: "none recorded for this test" }),
|
|
298
|
+
bundle,
|
|
299
|
+
]);
|
|
300
|
+
}
|
|
301
|
+
function reportMetrics(metrics, max, bundle) {
|
|
302
|
+
const rows = metrics.flatMap((metric) => (metric.measurements ?? []).map((measurement) => ({
|
|
303
|
+
test: metric.testName ?? metric.testIdentifier ?? "",
|
|
304
|
+
metric: measurement.displayName ?? "",
|
|
305
|
+
value: measurement.average ?? "",
|
|
306
|
+
unit: measurement.unit ?? "",
|
|
307
|
+
baseline: measurement.baselineAverage ?? "",
|
|
308
|
+
})));
|
|
309
|
+
if (rows.length === 0) {
|
|
310
|
+
return renderOutput([
|
|
311
|
+
renderFields({
|
|
312
|
+
metrics: "none — no performance measurements in this bundle",
|
|
313
|
+
}),
|
|
314
|
+
bundle,
|
|
315
|
+
renderHelp([
|
|
316
|
+
"Performance metrics come from XCTMetric tests; a plain test run records none",
|
|
317
|
+
]),
|
|
318
|
+
]);
|
|
319
|
+
}
|
|
320
|
+
const shown = rows.slice(0, max);
|
|
321
|
+
return renderOutput([
|
|
322
|
+
renderList(rows.length > shown.length
|
|
323
|
+
? `metrics (${shown.length} of ${rows.length})`
|
|
324
|
+
: "metrics", shown),
|
|
325
|
+
bundle,
|
|
326
|
+
]);
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* The stored log, as the timed tree it is rather than as text.
|
|
330
|
+
*
|
|
331
|
+
* The transcript on disk is the same content as a flat stream; what the bundle
|
|
332
|
+
* adds is which section took how long, which is the question worth a
|
|
333
|
+
* subprocess -- the slowest step of a build, without rebuilding it.
|
|
334
|
+
*/
|
|
335
|
+
function reportLog(log, type, max, bundle) {
|
|
336
|
+
// Sorted on the seconds rather than on the formatted string: `1m16s`
|
|
337
|
+
// parses as 1, so a minute-long section would rank below a five-second one.
|
|
338
|
+
const sections = (log.subsections ?? [])
|
|
339
|
+
.map((section) => ({
|
|
340
|
+
section: section.title ?? "",
|
|
341
|
+
seconds: section.duration ?? 0,
|
|
342
|
+
result: (section.result ?? "").toLowerCase(),
|
|
343
|
+
}))
|
|
344
|
+
.sort((a, b) => b.seconds - a.seconds);
|
|
345
|
+
const shown = sections.slice(0, max).map(({ section, seconds, result }) => ({
|
|
346
|
+
section,
|
|
347
|
+
duration: duration(seconds),
|
|
348
|
+
result,
|
|
349
|
+
}));
|
|
350
|
+
return renderOutput([
|
|
351
|
+
renderFields({
|
|
352
|
+
log: type,
|
|
353
|
+
result: (log.result ?? "unknown").toLowerCase(),
|
|
354
|
+
duration: duration(log.duration ?? 0),
|
|
355
|
+
sections: sections.length,
|
|
356
|
+
}),
|
|
357
|
+
sections.length > 0
|
|
358
|
+
? renderList(sections.length > shown.length
|
|
359
|
+
? `slowest (${shown.length} of ${sections.length})`
|
|
360
|
+
: "sections", shown)
|
|
361
|
+
: renderFields({ sections: "none recorded" }),
|
|
362
|
+
bundle,
|
|
363
|
+
]);
|
|
364
|
+
}
|
|
365
|
+
function reportAvailability(available, bundle) {
|
|
366
|
+
return renderOutput([
|
|
367
|
+
renderFields({
|
|
368
|
+
test_results: available.hasTestResults === true,
|
|
369
|
+
coverage: available.hasCoverage === true,
|
|
370
|
+
diagnostics: available.hasDiagnostics === true,
|
|
371
|
+
logs: available.logs ?? [],
|
|
372
|
+
}),
|
|
373
|
+
bundle,
|
|
374
|
+
]);
|
|
375
|
+
}
|
|
376
|
+
function reportMetadata(metadata, bundle) {
|
|
377
|
+
return renderOutput([
|
|
378
|
+
renderFields({
|
|
379
|
+
created: metadata.dateCreated ?? "unknown",
|
|
380
|
+
format: `${metadata.version?.major ?? "?"}.${metadata.version?.minor ?? "?"}`,
|
|
381
|
+
...(metadata.storage?.backend
|
|
382
|
+
? { storage: metadata.storage.backend }
|
|
383
|
+
: {}),
|
|
384
|
+
...(metadata.storage?.compression
|
|
385
|
+
? { compression: metadata.storage.compression }
|
|
386
|
+
: {}),
|
|
387
|
+
external_locations: (metadata.externalLocations ?? []).length,
|
|
388
|
+
}),
|
|
389
|
+
bundle,
|
|
390
|
+
]);
|
|
391
|
+
}
|
|
112
392
|
/**
|
|
113
393
|
* The header a non-test bundle reports. A build bundle carries every field the
|
|
114
394
|
* test-shaped query lacks: `actionTitle` names the action xcodebuild ran,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result.js","sourceRoot":"","sources":["../../../src/commands/result.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"result.js","sourceRoot":"","sources":["../../../src/commands/result.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
export declare const SETTINGS_HELP = "usage: xcodebuild-axi settings [flags]\nReads resolved build settings. Asking for the keys you want turns a 40 KB dump\ninto a few lines.\nflags[
|
|
2
|
-
export declare const SETTINGS_FLAGS: readonly ["--scheme", "--key", "--configuration", "--device", "--destination", "--sdk", "--all", "--for-index", "--file", "--full"];
|
|
1
|
+
export declare const SETTINGS_HELP = "usage: xcodebuild-axi settings [flags]\nReads resolved build settings. Asking for the keys you want turns a 40 KB dump\ninto a few lines.\nflags[18]:\n --scheme <name> scheme to resolve against (required only when the project has more than one)\n --target <name> resolve a target instead of a scheme; repeatable (project only)\n --all-targets resolve every target in the project (project only)\n --key <NAME> setting to read; repeatable or comma-separated\n --configuration <name> build configuration to resolve against\n --device <name> resolve against a simulator or device by name, e.g. \"iPhone 17 Pro\"\n --destination <spec> raw xcodebuild destination specifier, passed through untouched\n --destination-timeout <secs> how long to wait for the destination device\n --sdk <name> base SDK to resolve against, e.g. iphonesimulator\n --arch <arch> architecture to resolve against; repeatable or comma-separated\n --toolchain <name> toolchain identifier or name\n --xcconfig <path> apply this file's settings as overrides before resolving\n --derived-data <path> derived data directory, which the build paths are under\n --setting KEY=VALUE override a setting before resolving; repeatable or comma-separated\n --all dump every setting (large \u2014 hundreds of keys)\n --for-index the per-source-file settings an indexer sees\n --file <path> with --for-index: the one source file to report on\n --full with --for-index --file: list the long argument arrays\nnote:\n Paths and platform names are destination-dependent. With no --device,\n --destination or --sdk, xcodebuild resolves against the default SDK, which is\n the *device* SDK -- so BUILT_PRODUCTS_DIR comes back under Debug-iphoneos\n while build and test default to a simulator. The reported platform names\n what the answer is for.\n --setting and --xcconfig answer \"what would this be if I overrode that\",\n which is the question -showBuildSettings exists for. --derived-data matters\n because every build path -- BUILT_PRODUCTS_DIR and everything under it --\n hangs off it, so the default answer describes a directory CI does not use.\n --for-index answers a different question from the rest of this command: it\n reports the compiler invocation the indexer builds per source file. The raw\n payload measured 216 KB on a 12-scheme workspace, so without --file it\n reports only which targets have index settings and how many files each has.\nexamples:\n xcodebuild-axi settings --key PRODUCT_BUNDLE_IDENTIFIER,MARKETING_VERSION\n xcodebuild-axi settings --target MyApp --key SWIFT_VERSION\n xcodebuild-axi settings --scheme MyApp --setting SWIFT_STRICT_CONCURRENCY=complete --key SWIFT_STRICT_CONCURRENCY\n xcodebuild-axi settings --scheme MyApp --key SWIFT_VERSION\n xcodebuild-axi settings --scheme MyApp --device \"iPhone 17 Pro\" --key BUILT_PRODUCTS_DIR\n xcodebuild-axi settings --scheme MyApp --for-index --file MyApp/AppFeature.swift\n";
|
|
2
|
+
export declare const SETTINGS_FLAGS: readonly ["--scheme", "--target", "--all-targets", "--key", "--configuration", "--device", "--destination", "--destination-timeout", "--sdk", "--arch", "--toolchain", "--xcconfig", "--derived-data", "--setting", "--all", "--for-index", "--file", "--full"];
|
|
3
3
|
export declare function settingsCommand(args: string[]): Promise<string>;
|
|
4
|
+
/**
|
|
5
|
+
* xcodebuild's own one-line reason, which names the flag it objected to and is
|
|
6
|
+
* more specific than anything this command could infer from the arguments.
|
|
7
|
+
*/
|
|
8
|
+
export declare function xcodebuildComplaint(stderr: string): string[];
|
|
4
9
|
/**
|
|
5
10
|
* Name the platform an answer is for. These settings are destination-dependent
|
|
6
11
|
* and the destination is easy not to think about, so the report says which one
|