@limrun/api 0.31.3 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/rbe-bep.js CHANGED
@@ -13,20 +13,56 @@
13
13
  * `--remote_download_outputs=minimal` to skip the (unneeded) local download by
14
14
  * default; overriding it (e.g. `--remote_download_outputs=toplevel` on the command
15
15
  * line) to materialize the .ipa locally does not affect this parser.
16
+ *
17
+ * A fully-cached rebuild (0 actions executed) still emits the bytestream URI and
18
+ * reproduces the same digest, so the auto-install watcher can rely on this parser
19
+ * after a no-op or revert (e.g. `git stash`) rebuild. Verified empirically.
16
20
  */
17
21
  Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.RbeBepError = void 0;
23
+ exports.inspectBuildCompletion = inspectBuildCompletion;
18
24
  exports.parseTopLevelIpaDigest = parseTopLevelIpaDigest;
25
+ class RbeBepError extends Error {
26
+ constructor(kind, message) {
27
+ super(message);
28
+ this.name = 'RbeBepError';
29
+ this.kind = kind;
30
+ }
31
+ /**
32
+ * True when re-reading the same (completed) BEP cannot help — the build was
33
+ * produced with flags the instance cache can't use (local download or a
34
+ * non-SHA256 digest). The watcher logs these once instead of retrying.
35
+ */
36
+ get terminal() {
37
+ return this.kind === 'local-only' || this.kind === 'non-sha256';
38
+ }
39
+ }
40
+ exports.RbeBepError = RbeBepError;
19
41
  /** A SHA-256 digest is exactly 64 lowercase hex chars; the instance CAS is keyed by it. */
20
42
  const SHA256_HEX = /^[0-9a-f]{64}$/;
21
- /** Extracts (hash, size) from a `bytestream://…/blobs/<hash>/<size>` URI. */
43
+ /**
44
+ * Extracts (digestFunction, hash, size) from a Bazel/REAPI bytestream blob URI:
45
+ * `bytestream://…/blobs/[<digest_function>/]<hash>/<size>`. The digest-function
46
+ * segment is OMITTED for functions inferable from hash length (SHA-256 among
47
+ * them) and PRESENT otherwise — notably BLAKE3, whose 256-bit output is also 64
48
+ * hex chars and so cannot be told apart from SHA-256 by length. Capturing the
49
+ * function lets the caller reject a non-SHA256 build (e.g. Bazel 9's BLAKE3
50
+ * default) with the right guidance instead of misreading the URI.
51
+ */
22
52
  function parseBytestreamDigest(uri) {
23
- // Tolerate an optional instance-name segment before /blobs/ by anchoring on
24
- // the /blobs/<hash>/<size> tail rather than a fixed segment count. The hash is
25
- // left length-agnostic here (validated as SHA-256 by the caller).
26
- const m = uri.match(/\/blobs\/([0-9a-f]+)\/(\d+)(?:$|\/)/);
27
- if (!m || m[1] === undefined || m[2] === undefined)
53
+ // Anchor on the /blobs/[func/]<hash>/<size> tail (tolerating an instance-name
54
+ // prefix). The optional function group only matches a real function segment:
55
+ // for the SHA-256 form (`/blobs/<hash>/<size>`) it backtracks to absent, and
56
+ // for `/blobs/blake3/<hash>/<size>` the non-hex 'l'/'k' force it to be captured
57
+ // as the function rather than the hash.
58
+ const m = uri.match(/\/blobs\/(?:([a-z0-9_]+)\/)?([0-9a-fA-F]+)\/(\d+)(?:$|\/)/);
59
+ if (!m || m[2] === undefined || m[3] === undefined)
28
60
  return null;
29
- return { hash: m[1], sizeBytes: Number(m[2]) };
61
+ return {
62
+ ...(m[1] !== undefined ? { digestFunction: m[1] } : {}),
63
+ hash: m[2].toLowerCase(),
64
+ sizeBytes: Number(m[3]),
65
+ };
30
66
  }
31
67
  /**
32
68
  * Canonicalizes a Bazel target label to the `//pkg:name` form BEP records.
@@ -45,14 +81,8 @@ function canonicalizeLabel(label) {
45
81
  const name = pkg.split('/').pop() ?? '';
46
82
  return name ? `${pkg}:${name}` : pkg;
47
83
  }
48
- /**
49
- * Finds the `.ipa` produced for `label` in a BEP stream and returns its CAS
50
- * digest. Throws a descriptive Error when the target/.ipa is absent, its output
51
- * was materialized locally (a `file://` URI) instead of left in CAS, or it was
52
- * built with a non-SHA256 digest the instance cache cannot resolve.
53
- */
54
- function parseTopLevelIpaDigest(bepJson, label) {
55
- const canonical = canonicalizeLabel(label);
84
+ /** Parses the BEP stream into events, ignoring partial/garbled lines. */
85
+ function parseEvents(bepJson) {
56
86
  const events = [];
57
87
  for (const line of bepJson.split('\n')) {
58
88
  const trimmed = line.trim();
@@ -65,28 +95,64 @@ function parseTopLevelIpaDigest(bepJson, label) {
65
95
  // Ignore partial/garbled lines (BEP is flushed incrementally).
66
96
  }
67
97
  }
68
- // The successful TargetComplete for the requested label (matched against the
69
- // canonical //pkg:name form Bazel records, so `//App` matches `//App:App`).
70
- const completed = events.find((e) => e.id?.targetCompleted?.label === canonical && e.completed?.success)
71
- ?.completed;
72
- if (!completed) {
73
- throw new Error(`No successful build of ${label} found in the build event log. ` +
74
- `Build it first with --config=limrun (e.g. \`bazelisk --digest_function=sha256 build --config=limrun ${label}\`).`);
98
+ return events;
99
+ }
100
+ /**
101
+ * Inspects a BEP stream for build completion. The watcher reads the BEP on every
102
+ * change but only acts once `complete` is true (the stream is fully flushed) and
103
+ * `success` is true (the build did not fail). `invocationId` lets the watcher act
104
+ * once per build even when consecutive builds reproduce the same .ipa digest
105
+ * (e.g. a `git stash` revert that rebuilds to an earlier digest).
106
+ */
107
+ function inspectBuildCompletion(bepJson) {
108
+ let complete = false;
109
+ let sawFinished = false;
110
+ let success = false;
111
+ let invocationId;
112
+ for (const e of parseEvents(bepJson)) {
113
+ if (e.started?.uuid)
114
+ invocationId = e.started.uuid;
115
+ if (e.id?.buildFinished !== undefined || e.finished !== undefined) {
116
+ sawFinished = true;
117
+ // proto3 JSON omits zero-valued scalars, so a SUCCESS exit code serializes
118
+ // as `{name:"SUCCESS"}` with `code` omitted — checking `code === 0` would be
119
+ // a dead branch. Trust overallSuccess (present=true on success, omitted on
120
+ // failure) and fall back to the exit code's symbolic name.
121
+ success = e.finished?.overallSuccess === true || e.finished?.exitCode?.name === 'SUCCESS';
122
+ }
123
+ if (e.lastMessage === true)
124
+ complete = true;
125
+ }
126
+ return {
127
+ complete,
128
+ success: sawFinished && success,
129
+ ...(invocationId !== undefined ? { invocationId } : {}),
130
+ };
131
+ }
132
+ /** Indexes namedSetOfFiles events by id for transitive fileset resolution. */
133
+ function indexNamedSets(events) {
134
+ const namedSets = new Map();
135
+ for (const e of events) {
136
+ const id = e.id?.namedSet?.id;
137
+ if (id && e.namedSetOfFiles)
138
+ namedSets.set(id, e.namedSetOfFiles);
75
139
  }
140
+ return namedSets;
141
+ }
142
+ /**
143
+ * Resolves the top-level `.ipa` CAS digest for one successful target's
144
+ * `completed` event, walking its default output group's filesets transitively.
145
+ * Throws a typed RbeBepError when no .ipa is present, it was materialized
146
+ * locally (`file://`), or it carries a non-SHA256 (e.g. BLAKE3) digest.
147
+ */
148
+ function resolveIpaDigest(label, completed, namedSets) {
76
149
  // Default output group -> the fileSet (namedSetOfFiles) ids holding its outputs.
77
150
  const rootFileSetIds = (completed.outputGroup ?? [])
78
151
  .filter((og) => og.name === 'default' || !og.name)
79
152
  .flatMap((og) => (og.fileSets ?? []).map((fs) => fs.id))
80
153
  .filter((id) => !!id);
81
154
  if (rootFileSetIds.length === 0) {
82
- throw new Error(`Build of ${label} reported no default output files.`);
83
- }
84
- // Index namedSetOfFiles by id and walk transitively (sets can nest).
85
- const namedSets = new Map();
86
- for (const e of events) {
87
- const id = e.id?.namedSet?.id;
88
- if (id && e.namedSetOfFiles)
89
- namedSets.set(id, e.namedSetOfFiles);
155
+ throw new RbeBepError('no-output', `Build of ${label} reported no default output files.`);
90
156
  }
91
157
  const seen = new Set();
92
158
  const queue = [...rootFileSetIds];
@@ -106,14 +172,20 @@ function parseTopLevelIpaDigest(bepJson, label) {
106
172
  continue;
107
173
  const digest = f.uri ? parseBytestreamDigest(f.uri) : null;
108
174
  if (digest) {
109
- // The instance cache is keyed by SHA-256. A non-64-hex digest means the
110
- // build used a different digest function (Bazel 9 defaults to BLAKE3),
111
- // which the server CAS cannot resolve — surface that clearly here rather
112
- // than letting it fail later as a cryptic cache miss.
113
- if (!SHA256_HEX.test(digest.hash)) {
114
- throw new Error(`Built ${f.name} with a non-SHA256 digest (got ${digest.hash.length} hex chars, expected 64; ` +
115
- `likely BLAKE3 on Bazel 9). The instance cache is keyed by SHA-256 — rebuild with ` +
116
- `--digest_function=sha256, e.g. \`bazelisk --digest_function=sha256 build --config=limrun ${label}\`.`);
175
+ // The instance cache is keyed by SHA-256. Reject any other digest
176
+ // function — Bazel 9 defaults to BLAKE3, whose URI carries an explicit
177
+ // `blake3` function segment (and whose 64-hex hash is indistinguishable
178
+ // from SHA-256 by length, so the hash form alone can't catch it). Surface
179
+ // it here with the fix rather than letting it fail later as a cryptic
180
+ // server cache miss.
181
+ const isSha256 = digest.digestFunction === undefined ?
182
+ SHA256_HEX.test(digest.hash)
183
+ : digest.digestFunction === 'sha256';
184
+ if (!isSha256) {
185
+ const got = digest.digestFunction ?? `${digest.hash.length} hex chars`;
186
+ throw new RbeBepError('non-sha256', `Built ${f.name} with a non-SHA256 digest (${got}; Bazel 9 defaults to BLAKE3). The instance ` +
187
+ `cache is keyed by SHA-256 — rebuild with --digest_function=sha256, e.g. ` +
188
+ `\`bazelisk --digest_function=sha256 build --config=limrun ${label}\`.`);
117
189
  }
118
190
  return { hash: digest.hash, sizeBytes: digest.sizeBytes, ipaName: f.name };
119
191
  }
@@ -125,10 +197,29 @@ function parseTopLevelIpaDigest(bepJson, label) {
125
197
  }
126
198
  }
127
199
  if (localOnlyIpa) {
128
- throw new Error(`Found ${label}'s .ipa (${localOnlyIpa}) but it has no remote (bytestream) digest — it was ` +
200
+ throw new RbeBepError('local-only', `Found ${label}'s .ipa (${localOnlyIpa}) but it has no remote (bytestream) digest — it was ` +
129
201
  `built locally, not remotely executed. Ensure you built with --config=limrun so the .ipa is ` +
130
202
  `produced in the instance's cache.`);
131
203
  }
132
- throw new Error(`No .ipa output found for ${label} in the build event log.`);
204
+ throw new RbeBepError('no-ipa', `No .ipa output found for ${label} in the build event log.`);
205
+ }
206
+ /**
207
+ * Finds the `.ipa` produced for `label` in a BEP stream and returns its CAS
208
+ * digest. Throws a typed RbeBepError when the target/.ipa is absent, its output
209
+ * was materialized locally (a `file://` URI) instead of left in CAS, or it was
210
+ * built with a non-SHA256 digest the instance cache cannot resolve.
211
+ */
212
+ function parseTopLevelIpaDigest(bepJson, label) {
213
+ const canonical = canonicalizeLabel(label);
214
+ const events = parseEvents(bepJson);
215
+ // The successful TargetComplete for the requested label (matched against the
216
+ // canonical //pkg:name form Bazel records, so `//App` matches `//App:App`).
217
+ const completed = events.find((e) => e.id?.targetCompleted?.label === canonical && e.completed?.success)
218
+ ?.completed;
219
+ if (!completed) {
220
+ throw new RbeBepError('no-build', `No successful build of ${label} found in the build event log. ` +
221
+ `Build it first with --config=limrun (e.g. \`bazelisk --digest_function=sha256 build --config=limrun ${label}\`).`);
222
+ }
223
+ return resolveIpaDigest(label, completed, indexNamedSets(events));
133
224
  }
134
225
  //# sourceMappingURL=rbe-bep.js.map
package/rbe-bep.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"rbe-bep.js","sourceRoot":"","sources":["src/rbe-bep.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rbe-bep.js","sourceRoot":"","sources":["src/rbe-bep.ts"],"names":[],"mappings":"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"}
package/rbe-bep.mjs CHANGED
@@ -12,18 +12,51 @@
12
12
  * `--remote_download_outputs=minimal` to skip the (unneeded) local download by
13
13
  * default; overriding it (e.g. `--remote_download_outputs=toplevel` on the command
14
14
  * line) to materialize the .ipa locally does not affect this parser.
15
+ *
16
+ * A fully-cached rebuild (0 actions executed) still emits the bytestream URI and
17
+ * reproduces the same digest, so the auto-install watcher can rely on this parser
18
+ * after a no-op or revert (e.g. `git stash`) rebuild. Verified empirically.
15
19
  */
20
+ export class RbeBepError extends Error {
21
+ constructor(kind, message) {
22
+ super(message);
23
+ this.name = 'RbeBepError';
24
+ this.kind = kind;
25
+ }
26
+ /**
27
+ * True when re-reading the same (completed) BEP cannot help — the build was
28
+ * produced with flags the instance cache can't use (local download or a
29
+ * non-SHA256 digest). The watcher logs these once instead of retrying.
30
+ */
31
+ get terminal() {
32
+ return this.kind === 'local-only' || this.kind === 'non-sha256';
33
+ }
34
+ }
16
35
  /** A SHA-256 digest is exactly 64 lowercase hex chars; the instance CAS is keyed by it. */
17
36
  const SHA256_HEX = /^[0-9a-f]{64}$/;
18
- /** Extracts (hash, size) from a `bytestream://…/blobs/<hash>/<size>` URI. */
37
+ /**
38
+ * Extracts (digestFunction, hash, size) from a Bazel/REAPI bytestream blob URI:
39
+ * `bytestream://…/blobs/[<digest_function>/]<hash>/<size>`. The digest-function
40
+ * segment is OMITTED for functions inferable from hash length (SHA-256 among
41
+ * them) and PRESENT otherwise — notably BLAKE3, whose 256-bit output is also 64
42
+ * hex chars and so cannot be told apart from SHA-256 by length. Capturing the
43
+ * function lets the caller reject a non-SHA256 build (e.g. Bazel 9's BLAKE3
44
+ * default) with the right guidance instead of misreading the URI.
45
+ */
19
46
  function parseBytestreamDigest(uri) {
20
- // Tolerate an optional instance-name segment before /blobs/ by anchoring on
21
- // the /blobs/<hash>/<size> tail rather than a fixed segment count. The hash is
22
- // left length-agnostic here (validated as SHA-256 by the caller).
23
- const m = uri.match(/\/blobs\/([0-9a-f]+)\/(\d+)(?:$|\/)/);
24
- if (!m || m[1] === undefined || m[2] === undefined)
47
+ // Anchor on the /blobs/[func/]<hash>/<size> tail (tolerating an instance-name
48
+ // prefix). The optional function group only matches a real function segment:
49
+ // for the SHA-256 form (`/blobs/<hash>/<size>`) it backtracks to absent, and
50
+ // for `/blobs/blake3/<hash>/<size>` the non-hex 'l'/'k' force it to be captured
51
+ // as the function rather than the hash.
52
+ const m = uri.match(/\/blobs\/(?:([a-z0-9_]+)\/)?([0-9a-fA-F]+)\/(\d+)(?:$|\/)/);
53
+ if (!m || m[2] === undefined || m[3] === undefined)
25
54
  return null;
26
- return { hash: m[1], sizeBytes: Number(m[2]) };
55
+ return {
56
+ ...(m[1] !== undefined ? { digestFunction: m[1] } : {}),
57
+ hash: m[2].toLowerCase(),
58
+ sizeBytes: Number(m[3]),
59
+ };
27
60
  }
28
61
  /**
29
62
  * Canonicalizes a Bazel target label to the `//pkg:name` form BEP records.
@@ -42,14 +75,8 @@ function canonicalizeLabel(label) {
42
75
  const name = pkg.split('/').pop() ?? '';
43
76
  return name ? `${pkg}:${name}` : pkg;
44
77
  }
45
- /**
46
- * Finds the `.ipa` produced for `label` in a BEP stream and returns its CAS
47
- * digest. Throws a descriptive Error when the target/.ipa is absent, its output
48
- * was materialized locally (a `file://` URI) instead of left in CAS, or it was
49
- * built with a non-SHA256 digest the instance cache cannot resolve.
50
- */
51
- export function parseTopLevelIpaDigest(bepJson, label) {
52
- const canonical = canonicalizeLabel(label);
78
+ /** Parses the BEP stream into events, ignoring partial/garbled lines. */
79
+ function parseEvents(bepJson) {
53
80
  const events = [];
54
81
  for (const line of bepJson.split('\n')) {
55
82
  const trimmed = line.trim();
@@ -62,28 +89,64 @@ export function parseTopLevelIpaDigest(bepJson, label) {
62
89
  // Ignore partial/garbled lines (BEP is flushed incrementally).
63
90
  }
64
91
  }
65
- // The successful TargetComplete for the requested label (matched against the
66
- // canonical //pkg:name form Bazel records, so `//App` matches `//App:App`).
67
- const completed = events.find((e) => e.id?.targetCompleted?.label === canonical && e.completed?.success)
68
- ?.completed;
69
- if (!completed) {
70
- throw new Error(`No successful build of ${label} found in the build event log. ` +
71
- `Build it first with --config=limrun (e.g. \`bazelisk --digest_function=sha256 build --config=limrun ${label}\`).`);
92
+ return events;
93
+ }
94
+ /**
95
+ * Inspects a BEP stream for build completion. The watcher reads the BEP on every
96
+ * change but only acts once `complete` is true (the stream is fully flushed) and
97
+ * `success` is true (the build did not fail). `invocationId` lets the watcher act
98
+ * once per build even when consecutive builds reproduce the same .ipa digest
99
+ * (e.g. a `git stash` revert that rebuilds to an earlier digest).
100
+ */
101
+ export function inspectBuildCompletion(bepJson) {
102
+ let complete = false;
103
+ let sawFinished = false;
104
+ let success = false;
105
+ let invocationId;
106
+ for (const e of parseEvents(bepJson)) {
107
+ if (e.started?.uuid)
108
+ invocationId = e.started.uuid;
109
+ if (e.id?.buildFinished !== undefined || e.finished !== undefined) {
110
+ sawFinished = true;
111
+ // proto3 JSON omits zero-valued scalars, so a SUCCESS exit code serializes
112
+ // as `{name:"SUCCESS"}` with `code` omitted — checking `code === 0` would be
113
+ // a dead branch. Trust overallSuccess (present=true on success, omitted on
114
+ // failure) and fall back to the exit code's symbolic name.
115
+ success = e.finished?.overallSuccess === true || e.finished?.exitCode?.name === 'SUCCESS';
116
+ }
117
+ if (e.lastMessage === true)
118
+ complete = true;
119
+ }
120
+ return {
121
+ complete,
122
+ success: sawFinished && success,
123
+ ...(invocationId !== undefined ? { invocationId } : {}),
124
+ };
125
+ }
126
+ /** Indexes namedSetOfFiles events by id for transitive fileset resolution. */
127
+ function indexNamedSets(events) {
128
+ const namedSets = new Map();
129
+ for (const e of events) {
130
+ const id = e.id?.namedSet?.id;
131
+ if (id && e.namedSetOfFiles)
132
+ namedSets.set(id, e.namedSetOfFiles);
72
133
  }
134
+ return namedSets;
135
+ }
136
+ /**
137
+ * Resolves the top-level `.ipa` CAS digest for one successful target's
138
+ * `completed` event, walking its default output group's filesets transitively.
139
+ * Throws a typed RbeBepError when no .ipa is present, it was materialized
140
+ * locally (`file://`), or it carries a non-SHA256 (e.g. BLAKE3) digest.
141
+ */
142
+ function resolveIpaDigest(label, completed, namedSets) {
73
143
  // Default output group -> the fileSet (namedSetOfFiles) ids holding its outputs.
74
144
  const rootFileSetIds = (completed.outputGroup ?? [])
75
145
  .filter((og) => og.name === 'default' || !og.name)
76
146
  .flatMap((og) => (og.fileSets ?? []).map((fs) => fs.id))
77
147
  .filter((id) => !!id);
78
148
  if (rootFileSetIds.length === 0) {
79
- throw new Error(`Build of ${label} reported no default output files.`);
80
- }
81
- // Index namedSetOfFiles by id and walk transitively (sets can nest).
82
- const namedSets = new Map();
83
- for (const e of events) {
84
- const id = e.id?.namedSet?.id;
85
- if (id && e.namedSetOfFiles)
86
- namedSets.set(id, e.namedSetOfFiles);
149
+ throw new RbeBepError('no-output', `Build of ${label} reported no default output files.`);
87
150
  }
88
151
  const seen = new Set();
89
152
  const queue = [...rootFileSetIds];
@@ -103,14 +166,20 @@ export function parseTopLevelIpaDigest(bepJson, label) {
103
166
  continue;
104
167
  const digest = f.uri ? parseBytestreamDigest(f.uri) : null;
105
168
  if (digest) {
106
- // The instance cache is keyed by SHA-256. A non-64-hex digest means the
107
- // build used a different digest function (Bazel 9 defaults to BLAKE3),
108
- // which the server CAS cannot resolve — surface that clearly here rather
109
- // than letting it fail later as a cryptic cache miss.
110
- if (!SHA256_HEX.test(digest.hash)) {
111
- throw new Error(`Built ${f.name} with a non-SHA256 digest (got ${digest.hash.length} hex chars, expected 64; ` +
112
- `likely BLAKE3 on Bazel 9). The instance cache is keyed by SHA-256 — rebuild with ` +
113
- `--digest_function=sha256, e.g. \`bazelisk --digest_function=sha256 build --config=limrun ${label}\`.`);
169
+ // The instance cache is keyed by SHA-256. Reject any other digest
170
+ // function — Bazel 9 defaults to BLAKE3, whose URI carries an explicit
171
+ // `blake3` function segment (and whose 64-hex hash is indistinguishable
172
+ // from SHA-256 by length, so the hash form alone can't catch it). Surface
173
+ // it here with the fix rather than letting it fail later as a cryptic
174
+ // server cache miss.
175
+ const isSha256 = digest.digestFunction === undefined ?
176
+ SHA256_HEX.test(digest.hash)
177
+ : digest.digestFunction === 'sha256';
178
+ if (!isSha256) {
179
+ const got = digest.digestFunction ?? `${digest.hash.length} hex chars`;
180
+ throw new RbeBepError('non-sha256', `Built ${f.name} with a non-SHA256 digest (${got}; Bazel 9 defaults to BLAKE3). The instance ` +
181
+ `cache is keyed by SHA-256 — rebuild with --digest_function=sha256, e.g. ` +
182
+ `\`bazelisk --digest_function=sha256 build --config=limrun ${label}\`.`);
114
183
  }
115
184
  return { hash: digest.hash, sizeBytes: digest.sizeBytes, ipaName: f.name };
116
185
  }
@@ -122,10 +191,29 @@ export function parseTopLevelIpaDigest(bepJson, label) {
122
191
  }
123
192
  }
124
193
  if (localOnlyIpa) {
125
- throw new Error(`Found ${label}'s .ipa (${localOnlyIpa}) but it has no remote (bytestream) digest — it was ` +
194
+ throw new RbeBepError('local-only', `Found ${label}'s .ipa (${localOnlyIpa}) but it has no remote (bytestream) digest — it was ` +
126
195
  `built locally, not remotely executed. Ensure you built with --config=limrun so the .ipa is ` +
127
196
  `produced in the instance's cache.`);
128
197
  }
129
- throw new Error(`No .ipa output found for ${label} in the build event log.`);
198
+ throw new RbeBepError('no-ipa', `No .ipa output found for ${label} in the build event log.`);
199
+ }
200
+ /**
201
+ * Finds the `.ipa` produced for `label` in a BEP stream and returns its CAS
202
+ * digest. Throws a typed RbeBepError when the target/.ipa is absent, its output
203
+ * was materialized locally (a `file://` URI) instead of left in CAS, or it was
204
+ * built with a non-SHA256 digest the instance cache cannot resolve.
205
+ */
206
+ export function parseTopLevelIpaDigest(bepJson, label) {
207
+ const canonical = canonicalizeLabel(label);
208
+ const events = parseEvents(bepJson);
209
+ // The successful TargetComplete for the requested label (matched against the
210
+ // canonical //pkg:name form Bazel records, so `//App` matches `//App:App`).
211
+ const completed = events.find((e) => e.id?.targetCompleted?.label === canonical && e.completed?.success)
212
+ ?.completed;
213
+ if (!completed) {
214
+ throw new RbeBepError('no-build', `No successful build of ${label} found in the build event log. ` +
215
+ `Build it first with --config=limrun (e.g. \`bazelisk --digest_function=sha256 build --config=limrun ${label}\`).`);
216
+ }
217
+ return resolveIpaDigest(label, completed, indexNamedSets(events));
130
218
  }
131
219
  //# sourceMappingURL=rbe-bep.mjs.map
package/rbe-bep.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"rbe-bep.mjs","sourceRoot":"","sources":["src/rbe-bep.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rbe-bep.mjs","sourceRoot":"","sources":["src/rbe-bep.ts"],"names":[],"mappings":"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"}
@@ -156,6 +156,7 @@ export declare namespace AndroidInstanceCreateParams {
156
156
  namespace Sandbox {
157
157
  interface PlaywrightAndroid {
158
158
  enabled?: boolean;
159
+ version?: '1.56.1-lim.1' | '1.60.0-lim.1';
159
160
  }
160
161
  }
161
162
  }
@@ -1 +1 @@
1
- {"version":3,"file":"android-instances.d.mts","sourceRoot":"","sources":["../src/resources/android-instances.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"android-instances.d.mts","sourceRoot":"","sources":["../src/resources/android-instances.ts"],"names":[],"mappings":"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"}
@@ -156,6 +156,7 @@ export declare namespace AndroidInstanceCreateParams {
156
156
  namespace Sandbox {
157
157
  interface PlaywrightAndroid {
158
158
  enabled?: boolean;
159
+ version?: '1.56.1-lim.1' | '1.60.0-lim.1';
159
160
  }
160
161
  }
161
162
  }
@@ -1 +1 @@
1
- {"version":3,"file":"android-instances.d.ts","sourceRoot":"","sources":["../src/resources/android-instances.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"android-instances.d.ts","sourceRoot":"","sources":["../src/resources/android-instances.ts"],"names":[],"mappings":"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"}
@@ -178,9 +178,9 @@ export type XcodeClient = {
178
178
  xcodebuild: (settings?: XcodeProjectConfig, options?: XcodeBuildOptions) => ExecChildProcess;
179
179
  /**
180
180
  * Attach a simulator to this xcode instance.
181
- * After attaching, the latest xcodebuild build (if any) is installed on the
182
- * simulator. RBE builds are not auto-installed on attach — install them
183
- * explicitly with `installRbeBuildFromBep` while a simulator is attached.
181
+ * After attaching, the latest installable build is installed on the simulator:
182
+ * the latest xcodebuild build or the latest RBE build (whichever is newer),
183
+ * unless that build's exact digest is already on the simulator.
184
184
  */
185
185
  attachSimulator: (simulator: IosInstance | {
186
186
  apiUrl: string;
@@ -178,9 +178,9 @@ export type XcodeClient = {
178
178
  xcodebuild: (settings?: XcodeProjectConfig, options?: XcodeBuildOptions) => ExecChildProcess;
179
179
  /**
180
180
  * Attach a simulator to this xcode instance.
181
- * After attaching, the latest xcodebuild build (if any) is installed on the
182
- * simulator. RBE builds are not auto-installed on attach — install them
183
- * explicitly with `installRbeBuildFromBep` while a simulator is attached.
181
+ * After attaching, the latest installable build is installed on the simulator:
182
+ * the latest xcodebuild build or the latest RBE build (whichever is newer),
183
+ * unless that build's exact digest is already on the simulator.
184
184
  */
185
185
  attachSimulator: (simulator: IosInstance | {
186
186
  apiUrl: string;
package/src/client.ts CHANGED
@@ -739,11 +739,19 @@ export class Limrun {
739
739
  return () => controller.abort();
740
740
  }
741
741
 
742
- private buildBody({ options: { body, headers: rawHeaders } }: { options: FinalRequestOptions }): {
742
+ private buildBody({ options }: { options: FinalRequestOptions }): {
743
743
  bodyHeaders: HeadersLike;
744
744
  body: BodyInit | undefined;
745
745
  } {
746
+ const { body, headers: rawHeaders } = options;
746
747
  if (!body) {
748
+ // A resource method always passes a `body` key when its operation defines a
749
+ // request body, even if the caller omitted an optional body param. Keep the
750
+ // content-type for those, and only elide it for operations with no body at
751
+ // all (e.g. GET/DELETE).
752
+ if (body == null && 'body' in options) {
753
+ return this.#encoder({ body, headers: buildHeaders([rawHeaders]) });
754
+ }
747
755
  return { bodyHeaders: undefined, body: undefined };
748
756
  }
749
757
  const headers = buildHeaders([rawHeaders]);