@limrun/api 0.30.0 → 0.31.1
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 +26 -1
- package/index.d.mts +2 -1
- package/index.d.mts.map +1 -1
- package/index.d.ts +2 -1
- package/index.d.ts.map +1 -1
- package/index.js +7 -1
- package/index.js.map +1 -1
- package/index.mjs +2 -0
- package/index.mjs.map +1 -1
- package/package.json +11 -1
- package/rbe-bep.d.mts +27 -0
- package/rbe-bep.d.mts.map +1 -0
- package/rbe-bep.d.ts +27 -0
- package/rbe-bep.d.ts.map +1 -0
- package/rbe-bep.js +130 -0
- package/rbe-bep.js.map +1 -0
- package/rbe-bep.mjs +127 -0
- package/rbe-bep.mjs.map +1 -0
- package/resources/index.d.mts +1 -1
- package/resources/index.d.mts.map +1 -1
- package/resources/index.d.ts +1 -1
- package/resources/index.d.ts.map +1 -1
- package/resources/index.js +3 -1
- package/resources/index.js.map +1 -1
- package/resources/index.mjs +1 -1
- package/resources/index.mjs.map +1 -1
- package/resources/xcode-instances-helpers.d.mts +110 -1
- package/resources/xcode-instances-helpers.d.mts.map +1 -1
- package/resources/xcode-instances-helpers.d.ts +110 -1
- package/resources/xcode-instances-helpers.d.ts.map +1 -1
- package/resources/xcode-instances-helpers.js +153 -18
- package/resources/xcode-instances-helpers.js.map +1 -1
- package/resources/xcode-instances-helpers.mjs +150 -17
- package/resources/xcode-instances-helpers.mjs.map +1 -1
- package/src/index.ts +9 -0
- package/src/rbe-bep.ts +155 -0
- package/src/resources/index.ts +3 -0
- package/src/resources/xcode-instances-helpers.ts +284 -19
- package/src/tunnel.ts +62 -3
- package/src/version.ts +1 -1
- package/tunnel.d.mts.map +1 -1
- package/tunnel.d.ts.map +1 -1
- package/tunnel.js +59 -2
- package/tunnel.js.map +1 -1
- package/tunnel.mjs +59 -2
- package/tunnel.mjs.map +1 -1
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
|
@@ -2,12 +2,17 @@ import os from 'os';
|
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import crypto from 'crypto';
|
|
4
4
|
import { XcodeInstances as GeneratedXcodeInstances } from "./xcode-instances.mjs";
|
|
5
|
+
import { parseTopLevelIpaDigest } from "../rbe-bep.mjs";
|
|
5
6
|
import { exec } from "../exec-client.mjs";
|
|
6
7
|
import { syncFolder as syncFolderImpl, } from "../folder-sync.mjs";
|
|
7
8
|
import { createIgnoreFn } from "../folder-sync-ignore.mjs";
|
|
8
9
|
import { nodeProxyTransport } from "../internal/proxy-transport.mjs";
|
|
9
10
|
import { directInstanceHttpError } from "../internal/direct-instance-errors.mjs";
|
|
11
|
+
import { LimrunError } from "../core/error.mjs";
|
|
10
12
|
import { validateBuildSettings } from "../build-settings.mjs";
|
|
13
|
+
import { startTcpTunnel } from "../tunnel.mjs";
|
|
14
|
+
/** Default local TCP port the RBE tunnel listens on. */
|
|
15
|
+
export const DEFAULT_RBE_TUNNEL_PORT = 8980;
|
|
11
16
|
function createLogger(logLevel) {
|
|
12
17
|
const shouldLog = (level) => {
|
|
13
18
|
const levels = ['none', 'error', 'warn', 'info', 'debug'];
|
|
@@ -53,6 +58,54 @@ async function fetchSandboxInfo(apiUrl, token) {
|
|
|
53
58
|
homeDir: normalizeWorkspaceRelativePath(body.homeDir),
|
|
54
59
|
};
|
|
55
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Derives the websocket URL of limbuild's /rbe/tunnel endpoint from the
|
|
63
|
+
* instance apiUrl, mirroring deriveReverseTunnelUrl in ios-client.ts.
|
|
64
|
+
*/
|
|
65
|
+
export function deriveRbeTunnelUrl(apiUrl) {
|
|
66
|
+
const url = new URL(apiUrl);
|
|
67
|
+
if (url.protocol === 'https:') {
|
|
68
|
+
url.protocol = 'wss:';
|
|
69
|
+
}
|
|
70
|
+
else if (url.protocol === 'http:') {
|
|
71
|
+
url.protocol = 'ws:';
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
throw new Error(`Unsupported apiUrl protocol for rbe tunnel: ${url.protocol}`);
|
|
75
|
+
}
|
|
76
|
+
url.pathname = `${url.pathname.replace(/\/+$/, '')}/rbe/tunnel`;
|
|
77
|
+
url.search = '';
|
|
78
|
+
url.hash = '';
|
|
79
|
+
// The tunnel layer (startMultiplexedTcpTunnel) appends mode=multiplexed to
|
|
80
|
+
// the URL itself, so we don't set it here.
|
|
81
|
+
return url.toString();
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Raised when an `/rbe` request returns 404. limbuild's `/rbe` routes only
|
|
85
|
+
* exist on builds with remote-execution support, so a 404 there means RBE is
|
|
86
|
+
* unavailable on this instance (an older limbuild, or the wrong environment) —
|
|
87
|
+
* NOT that the instance is missing. Kept distinct from NotFoundError so the CLI
|
|
88
|
+
* does not mistake it for a vanished instance and spin up replacements.
|
|
89
|
+
*/
|
|
90
|
+
export class RbeUnsupportedError extends LimrunError {
|
|
91
|
+
constructor(operation) {
|
|
92
|
+
super(`Remote build execution is not available on this Xcode instance (${operation} returned 404). ` +
|
|
93
|
+
'Its limbuild may predate RBE support, or you may be targeting the wrong environment ' +
|
|
94
|
+
'(for example production instead of staging).');
|
|
95
|
+
this.name = 'RbeUnsupportedError';
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Reads an `/rbe` JSON response, mapping a 404 to RbeUnsupportedError (a route
|
|
100
|
+
* 404 means RBE is not supported here, never a missing instance).
|
|
101
|
+
*/
|
|
102
|
+
async function readRbeResponse(res, operation) {
|
|
103
|
+
if (res.status === 404) {
|
|
104
|
+
await res.text().catch(() => undefined);
|
|
105
|
+
throw new RbeUnsupportedError(operation);
|
|
106
|
+
}
|
|
107
|
+
return readJsonResponse(res, operation);
|
|
108
|
+
}
|
|
56
109
|
async function readJsonResponse(res, operation) {
|
|
57
110
|
const text = await res.text();
|
|
58
111
|
if (!res.ok) {
|
|
@@ -85,6 +138,71 @@ export class XcodeInstances extends GeneratedXcodeInstances {
|
|
|
85
138
|
sandboxInfoPromise ?? (sandboxInfoPromise = fetchSandboxInfo(apiUrl, token));
|
|
86
139
|
return sandboxInfoPromise;
|
|
87
140
|
};
|
|
141
|
+
// Shared local closures. The methods below live in an object literal over
|
|
142
|
+
// these closures (not `this`), so anything reused across methods is defined
|
|
143
|
+
// here once and called from each method.
|
|
144
|
+
const postRbeInstall = async (ipaDigest, target) => {
|
|
145
|
+
const res = await nodeProxyTransport.fetch(`${apiUrl}/rbe/install`, {
|
|
146
|
+
method: 'POST',
|
|
147
|
+
headers: {
|
|
148
|
+
'Content-Type': 'application/json',
|
|
149
|
+
Authorization: `Bearer ${token}`,
|
|
150
|
+
},
|
|
151
|
+
body: JSON.stringify({ ipaDigest, ...(target ? { target } : {}) }),
|
|
152
|
+
});
|
|
153
|
+
return readRbeResponse(res, 'POST /rbe/install');
|
|
154
|
+
};
|
|
155
|
+
const installFromBep = async (bep, target) => {
|
|
156
|
+
const digest = parseTopLevelIpaDigest(bep, target); // throws BLAKE3 / no-ipa errors
|
|
157
|
+
const result = await postRbeInstall({ hash: digest.hash, sizeBytes: digest.sizeBytes }, target);
|
|
158
|
+
return { ...result, ipaName: digest.ipaName };
|
|
159
|
+
};
|
|
160
|
+
const attachSimulatorImpl = async (simulator) => {
|
|
161
|
+
let simApiUrl;
|
|
162
|
+
let simToken;
|
|
163
|
+
if ('status' in simulator) {
|
|
164
|
+
if (!simulator.status.apiUrl) {
|
|
165
|
+
throw new Error('Simulator instance not ready: apiUrl is not available');
|
|
166
|
+
}
|
|
167
|
+
simApiUrl = simulator.status.apiUrl;
|
|
168
|
+
simToken = simulator.status.token;
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
simApiUrl = simulator.apiUrl;
|
|
172
|
+
simToken = simulator.token;
|
|
173
|
+
}
|
|
174
|
+
const res = await nodeProxyTransport.fetch(`${apiUrl}/simulator`, {
|
|
175
|
+
method: 'POST',
|
|
176
|
+
headers: {
|
|
177
|
+
'Content-Type': 'application/json',
|
|
178
|
+
Authorization: `Bearer ${token}`,
|
|
179
|
+
},
|
|
180
|
+
body: JSON.stringify({ apiUrl: simApiUrl, token: simToken }),
|
|
181
|
+
});
|
|
182
|
+
return readJsonResponse(res, 'POST /simulator');
|
|
183
|
+
};
|
|
184
|
+
const deleteSimulatorImpl = async (iosInstanceId) => {
|
|
185
|
+
try {
|
|
186
|
+
await client.iosInstances.delete(iosInstanceId);
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
const attachNewSimulatorImpl = async () => {
|
|
194
|
+
const simulator = await client.iosInstances.create({ wait: true });
|
|
195
|
+
// The sim exists from here; if attach fails, delete it so we never leak an
|
|
196
|
+
// orphan the caller can't reap.
|
|
197
|
+
try {
|
|
198
|
+
await attachSimulatorImpl(simulator);
|
|
199
|
+
}
|
|
200
|
+
catch (err) {
|
|
201
|
+
await deleteSimulatorImpl(simulator.metadata.id);
|
|
202
|
+
throw err;
|
|
203
|
+
}
|
|
204
|
+
return { iosInstanceId: simulator.metadata.id, simulator };
|
|
205
|
+
};
|
|
88
206
|
return {
|
|
89
207
|
async sync(localCodePath, opts) {
|
|
90
208
|
const resolvedPath = path.resolve(localCodePath);
|
|
@@ -188,29 +306,44 @@ export class XcodeInstances extends GeneratedXcodeInstances {
|
|
|
188
306
|
});
|
|
189
307
|
return readJsonResponse(res, 'GET /simulator');
|
|
190
308
|
},
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
throw new Error('Simulator instance not ready: apiUrl is not available');
|
|
197
|
-
}
|
|
198
|
-
simApiUrl = simulator.status.apiUrl;
|
|
199
|
-
simToken = simulator.status.token;
|
|
200
|
-
}
|
|
201
|
-
else {
|
|
202
|
-
simApiUrl = simulator.apiUrl;
|
|
203
|
-
simToken = simulator.token;
|
|
204
|
-
}
|
|
205
|
-
const res = await nodeProxyTransport.fetch(`${apiUrl}/simulator`, {
|
|
309
|
+
attachSimulator: attachSimulatorImpl,
|
|
310
|
+
attachNewSimulator: attachNewSimulatorImpl,
|
|
311
|
+
deleteSimulator: deleteSimulatorImpl,
|
|
312
|
+
async startRbe(opts) {
|
|
313
|
+
const res = await nodeProxyTransport.fetch(`${apiUrl}/rbe`, {
|
|
206
314
|
method: 'POST',
|
|
207
315
|
headers: {
|
|
208
316
|
'Content-Type': 'application/json',
|
|
209
317
|
Authorization: `Bearer ${token}`,
|
|
210
318
|
},
|
|
211
|
-
body: JSON.stringify(
|
|
319
|
+
body: JSON.stringify(opts ?? {}),
|
|
320
|
+
});
|
|
321
|
+
return readRbeResponse(res, 'POST /rbe');
|
|
322
|
+
},
|
|
323
|
+
async getRbe() {
|
|
324
|
+
const res = await nodeProxyTransport.fetch(`${apiUrl}/rbe`, {
|
|
325
|
+
method: 'GET',
|
|
326
|
+
headers: {
|
|
327
|
+
Authorization: `Bearer ${token}`,
|
|
328
|
+
},
|
|
329
|
+
});
|
|
330
|
+
return readRbeResponse(res, 'GET /rbe');
|
|
331
|
+
},
|
|
332
|
+
async stopRbe() {
|
|
333
|
+
const res = await nodeProxyTransport.fetch(`${apiUrl}/rbe`, {
|
|
334
|
+
method: 'DELETE',
|
|
335
|
+
headers: {
|
|
336
|
+
Authorization: `Bearer ${token}`,
|
|
337
|
+
},
|
|
338
|
+
});
|
|
339
|
+
return readRbeResponse(res, 'DELETE /rbe');
|
|
340
|
+
},
|
|
341
|
+
installRbeBuildFromBep: (opts) => installFromBep(opts.bep, opts.target),
|
|
342
|
+
async startRbeTunnel(opts) {
|
|
343
|
+
return startTcpTunnel(deriveRbeTunnelUrl(apiUrl), token, opts?.host ?? '127.0.0.1', opts?.port ?? DEFAULT_RBE_TUNNEL_PORT, {
|
|
344
|
+
mode: 'multiplexed',
|
|
345
|
+
logLevel: opts?.logLevel ?? params.logLevel ?? 'info',
|
|
212
346
|
});
|
|
213
|
-
return readJsonResponse(res, 'POST /simulator');
|
|
214
347
|
},
|
|
215
348
|
};
|
|
216
349
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xcode-instances-helpers.mjs","sourceRoot":"","sources":["../src/resources/xcode-instances-helpers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"xcode-instances-helpers.mjs","sourceRoot":"","sources":["../src/resources/xcode-instances-helpers.ts"],"names":[],"mappings":"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"}
|
package/src/index.ts
CHANGED
|
@@ -10,6 +10,7 @@ export * from './instance-client';
|
|
|
10
10
|
export * as Ios from './ios-client';
|
|
11
11
|
export { startHttpProxy, type HttpProxy, type StartHttpProxyOptions } from './http-proxy';
|
|
12
12
|
export { buildSettingKeyPattern, parseBuildSettingEntries, validateBuildSettings } from './build-settings';
|
|
13
|
+
export { parseTopLevelIpaDigest, type BepIpaDigest } from './rbe-bep';
|
|
13
14
|
export {
|
|
14
15
|
exec,
|
|
15
16
|
type ExecRequest,
|
|
@@ -20,6 +21,14 @@ export {
|
|
|
20
21
|
export {
|
|
21
22
|
type XcodeCreateClientParams,
|
|
22
23
|
type XcodeClient,
|
|
24
|
+
type RbeStatus,
|
|
25
|
+
type RbeStartOptions,
|
|
26
|
+
type RbeTunnelOptions,
|
|
27
|
+
type RbeInstallResult,
|
|
28
|
+
type Tunnel,
|
|
29
|
+
RbeUnsupportedError,
|
|
30
|
+
deriveRbeTunnelUrl,
|
|
31
|
+
DEFAULT_RBE_TUNNEL_PORT,
|
|
23
32
|
type XcodeProjectConfig,
|
|
24
33
|
type XcodeBuildOptions,
|
|
25
34
|
type ReactNativeBuildConfig,
|
package/src/rbe-bep.ts
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses Bazel's Build Event Protocol (BEP, the `--build_event_json_file`
|
|
3
|
+
* newline-delimited JSON) to find a built target's top-level `.ipa` and its
|
|
4
|
+
* content-addressed (CAS) digest.
|
|
5
|
+
*
|
|
6
|
+
* Under `--config=limrun` the generated bazelrc sets `--remote_download_outputs=
|
|
7
|
+
* minimal`, so outputs are NOT downloaded to the client; their BEP `file`
|
|
8
|
+
* entries instead carry a `bytestream://<host>[/<instance>]/blobs/<hash>/<size>`
|
|
9
|
+
* URI. `lim xcode rbe install` reads that digest and hands it to the instance,
|
|
10
|
+
* which fetches the blob from its own RBE cache and installs it — no round-trip.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
export type BepIpaDigest = {
|
|
14
|
+
/** Lowercase hex SHA-256 of the .ipa blob. */
|
|
15
|
+
hash: string;
|
|
16
|
+
/** Size of the .ipa blob in bytes. */
|
|
17
|
+
sizeBytes: number;
|
|
18
|
+
/** The .ipa file name as Bazel reported it (e.g. "App/App.ipa"). */
|
|
19
|
+
ipaName: string;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
type BepEvent = {
|
|
23
|
+
id?: {
|
|
24
|
+
targetCompleted?: { label?: string };
|
|
25
|
+
namedSet?: { id?: string };
|
|
26
|
+
};
|
|
27
|
+
completed?: {
|
|
28
|
+
success?: boolean;
|
|
29
|
+
outputGroup?: Array<{ name?: string; fileSets?: Array<{ id?: string }> }>;
|
|
30
|
+
};
|
|
31
|
+
namedSetOfFiles?: {
|
|
32
|
+
files?: Array<{ name?: string; uri?: string }>;
|
|
33
|
+
fileSets?: Array<{ id?: string }>;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/** A SHA-256 digest is exactly 64 lowercase hex chars; the instance CAS is keyed by it. */
|
|
38
|
+
const SHA256_HEX = /^[0-9a-f]{64}$/;
|
|
39
|
+
|
|
40
|
+
/** Extracts (hash, size) from a `bytestream://…/blobs/<hash>/<size>` URI. */
|
|
41
|
+
function parseBytestreamDigest(uri: string): { hash: string; sizeBytes: number } | null {
|
|
42
|
+
// Tolerate an optional instance-name segment before /blobs/ by anchoring on
|
|
43
|
+
// the /blobs/<hash>/<size> tail rather than a fixed segment count. The hash is
|
|
44
|
+
// left length-agnostic here (validated as SHA-256 by the caller).
|
|
45
|
+
const m = uri.match(/\/blobs\/([0-9a-f]+)\/(\d+)(?:$|\/)/);
|
|
46
|
+
if (!m || m[1] === undefined || m[2] === undefined) return null;
|
|
47
|
+
return { hash: m[1], sizeBytes: Number(m[2]) };
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Canonicalizes a Bazel target label to the `//pkg:name` form BEP records.
|
|
52
|
+
* Bazel expands the `//pkg` shorthand to `//pkg:<basename(pkg)>` in its
|
|
53
|
+
* targetCompleted events, so `install //App` must match BEP's `//App:App`.
|
|
54
|
+
*/
|
|
55
|
+
function canonicalizeLabel(label: string): string {
|
|
56
|
+
if (label.includes(':')) return label;
|
|
57
|
+
// Strip trailing slashes with a linear scan rather than a regex: `/\/+$/`
|
|
58
|
+
// backtracks quadratically on a label of many trailing slashes (CodeQL ReDoS).
|
|
59
|
+
let end = label.length;
|
|
60
|
+
while (end > 0 && label[end - 1] === '/') end--;
|
|
61
|
+
const pkg = label.slice(0, end);
|
|
62
|
+
const name = pkg.split('/').pop() ?? '';
|
|
63
|
+
return name ? `${pkg}:${name}` : pkg;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Finds the `.ipa` produced for `label` in a BEP stream and returns its CAS
|
|
68
|
+
* digest. Throws a descriptive Error when the target/.ipa is absent, its output
|
|
69
|
+
* was materialized locally (a `file://` URI) instead of left in CAS, or it was
|
|
70
|
+
* built with a non-SHA256 digest the instance cache cannot resolve.
|
|
71
|
+
*/
|
|
72
|
+
export function parseTopLevelIpaDigest(bepJson: string, label: string): BepIpaDigest {
|
|
73
|
+
const canonical = canonicalizeLabel(label);
|
|
74
|
+
const events: BepEvent[] = [];
|
|
75
|
+
for (const line of bepJson.split('\n')) {
|
|
76
|
+
const trimmed = line.trim();
|
|
77
|
+
if (!trimmed) continue;
|
|
78
|
+
try {
|
|
79
|
+
events.push(JSON.parse(trimmed) as BepEvent);
|
|
80
|
+
} catch {
|
|
81
|
+
// Ignore partial/garbled lines (BEP is flushed incrementally).
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// The successful TargetComplete for the requested label (matched against the
|
|
86
|
+
// canonical //pkg:name form Bazel records, so `//App` matches `//App:App`).
|
|
87
|
+
const completed = events.find((e) => e.id?.targetCompleted?.label === canonical && e.completed?.success)
|
|
88
|
+
?.completed;
|
|
89
|
+
if (!completed) {
|
|
90
|
+
throw new Error(
|
|
91
|
+
`No successful build of ${label} found in the build event log. ` +
|
|
92
|
+
`Build it first with --config=limrun (e.g. \`bazelisk --digest_function=sha256 build --config=limrun ${label}\`).`,
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Default output group -> the fileSet (namedSetOfFiles) ids holding its outputs.
|
|
97
|
+
const rootFileSetIds = (completed.outputGroup ?? [])
|
|
98
|
+
.filter((og) => og.name === 'default' || !og.name)
|
|
99
|
+
.flatMap((og) => (og.fileSets ?? []).map((fs) => fs.id))
|
|
100
|
+
.filter((id): id is string => !!id);
|
|
101
|
+
if (rootFileSetIds.length === 0) {
|
|
102
|
+
throw new Error(`Build of ${label} reported no default output files.`);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Index namedSetOfFiles by id and walk transitively (sets can nest).
|
|
106
|
+
const namedSets = new Map<string, NonNullable<BepEvent['namedSetOfFiles']>>();
|
|
107
|
+
for (const e of events) {
|
|
108
|
+
const id = e.id?.namedSet?.id;
|
|
109
|
+
if (id && e.namedSetOfFiles) namedSets.set(id, e.namedSetOfFiles);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const seen = new Set<string>();
|
|
113
|
+
const queue = [...rootFileSetIds];
|
|
114
|
+
// Set to the name of an .ipa that was seen but had no bytestream digest (its
|
|
115
|
+
// output was downloaded locally) — distinguishes that case from "no .ipa at all".
|
|
116
|
+
let localOnlyIpa: string | undefined;
|
|
117
|
+
while (queue.length > 0) {
|
|
118
|
+
const id = queue.shift()!;
|
|
119
|
+
if (seen.has(id)) continue;
|
|
120
|
+
seen.add(id);
|
|
121
|
+
const set = namedSets.get(id);
|
|
122
|
+
if (!set) continue;
|
|
123
|
+
for (const f of set.files ?? []) {
|
|
124
|
+
if (!f.name || !f.name.endsWith('.ipa')) continue;
|
|
125
|
+
const digest = f.uri ? parseBytestreamDigest(f.uri) : null;
|
|
126
|
+
if (digest) {
|
|
127
|
+
// The instance cache is keyed by SHA-256. A non-64-hex digest means the
|
|
128
|
+
// build used a different digest function (Bazel 9 defaults to BLAKE3),
|
|
129
|
+
// which the server CAS cannot resolve — surface that clearly here rather
|
|
130
|
+
// than letting it fail later as a cryptic cache miss.
|
|
131
|
+
if (!SHA256_HEX.test(digest.hash)) {
|
|
132
|
+
throw new Error(
|
|
133
|
+
`Built ${f.name} with a non-SHA256 digest (got ${digest.hash.length} hex chars, expected 64; ` +
|
|
134
|
+
`likely BLAKE3 on Bazel 9). The instance cache is keyed by SHA-256 — rebuild with ` +
|
|
135
|
+
`--digest_function=sha256, e.g. \`bazelisk --digest_function=sha256 build --config=limrun ${label}\`.`,
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
return { hash: digest.hash, sizeBytes: digest.sizeBytes, ipaName: f.name };
|
|
139
|
+
}
|
|
140
|
+
localOnlyIpa = f.name;
|
|
141
|
+
}
|
|
142
|
+
for (const nested of set.fileSets ?? []) {
|
|
143
|
+
if (nested.id) queue.push(nested.id);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (localOnlyIpa) {
|
|
148
|
+
throw new Error(
|
|
149
|
+
`Found ${label}'s .ipa (${localOnlyIpa}) but it has no remote (bytestream) digest — its ` +
|
|
150
|
+
`output was downloaded locally. Ensure you built with --config=limrun (which keeps outputs ` +
|
|
151
|
+
`in the instance cache via --remote_download_outputs=minimal).`,
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
throw new Error(`No .ipa output found for ${label} in the build event log.`);
|
|
155
|
+
}
|
package/src/resources/index.ts
CHANGED
|
@@ -32,6 +32,8 @@ export {
|
|
|
32
32
|
export { Assets, AssetGetOrUploadParams, AssetGetOrUploadResponse } from './assets-helpers';
|
|
33
33
|
export {
|
|
34
34
|
XcodeInstances,
|
|
35
|
+
RbeUnsupportedError,
|
|
36
|
+
DEFAULT_RBE_TUNNEL_PORT,
|
|
35
37
|
type XcodeCreateClientParams,
|
|
36
38
|
type XcodeClient,
|
|
37
39
|
type XcodeProjectConfig,
|
|
@@ -43,4 +45,5 @@ export {
|
|
|
43
45
|
type SimulatorAttachment,
|
|
44
46
|
type SimulatorDeviceInfo,
|
|
45
47
|
type SimulatorInstallState,
|
|
48
|
+
type RbeInstallResult,
|
|
46
49
|
} from './xcode-instances-helpers';
|