bitfab 0.64.5 → 0.64.7

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/cloudReplay.py CHANGED
@@ -33,6 +33,8 @@ API_VERSION = "2026-03-10"
33
33
  REPLAY_COMMAND_ENV = "BITFAB_REPLAY_COMMAND"
34
34
  SDK_LANGUAGE_ENV = "BITFAB_SDK_LANGUAGE"
35
35
  CHECK_COMMAND_ENV = "BITFAB_REPLAY_CHECK"
36
+ EXECUTION_TARGET_ENV = "BITFAB_REPLAY_EXECUTION_TARGET"
37
+ HOSTED_EXECUTION_TARGET = "hosted"
36
38
  REQUEST_VERSION = 3
37
39
  OLDEST_DISPATCHED_VERSION = 2
38
40
  RESULT_LINE = "bitfab-replay-result "
@@ -169,6 +171,9 @@ fullOutput (true) match --cloud-timeout and --cloud-full-output. version and id
169
171
  optional: version names the request format (3 now, 2 still accepted), and id is the
170
172
  execution UUID, which must match an execution_id input when the workflow has one.
171
173
 
174
+ The runner's job exits with the replay's exit code, so the Actions run fails when
175
+ the replay does. Traces that errored fail it only under --fail-on-error.
176
+
172
177
  Follow a replay by the execution UUID it prints:
173
178
  --cloud-watch ID | --cloud-status ID | --cloud-cancel ID | --cloud-cleanup ID
174
179
 
@@ -1727,12 +1732,18 @@ def annotate(result):
1727
1732
  if result.get("stoppedEarly"):
1728
1733
  message = f"Replay stopped early: {result['stoppedEarly']}"
1729
1734
  elif result["exitCode"]:
1730
- message = f"Replay exited {result['exitCode']}; bitfab-replay --cloud reports it as its own exit code"
1735
+ message = f"Replay exited {result['exitCode']}, so this job exits with it too"
1731
1736
  else:
1732
1737
  return
1733
1738
  print(f"::warning title=Bitfab replay::{message}", flush=True)
1734
1739
 
1735
1740
 
1741
+ def runner_exit_code(result):
1742
+ if result.get("stoppedEarly"):
1743
+ return result["exitCode"] or 1
1744
+ return result["exitCode"]
1745
+
1746
+
1736
1747
  def summary_markdown(result):
1737
1748
  summary = result_summary(result["stdout"]) or {}
1738
1749
  counts = summary.get("counts", {})
@@ -1767,6 +1778,7 @@ def run_command(directory, args, timeout, experiment, *, summarize=True):
1767
1778
  with subprocess.Popen(
1768
1779
  args,
1769
1780
  cwd=directory,
1781
+ env={**os.environ, EXECUTION_TARGET_ENV: HOSTED_EXECUTION_TARGET},
1770
1782
  stdout=output,
1771
1783
  stderr=subprocess.PIPE,
1772
1784
  stdin=subprocess.DEVNULL,
@@ -2200,8 +2212,9 @@ def main():
2200
2212
  print_json(configure_secrets(argv[1:]))
2201
2213
  return 0
2202
2214
  if argv == ["--cloud-execute"]:
2203
- annotate(execute())
2204
- return 0
2215
+ result = execute()
2216
+ annotate(result)
2217
+ return runner_exit_code(result)
2205
2218
  if "-h" in argv or "--help" in argv:
2206
2219
  print(HELP, end="")
2207
2220
  return 0
@@ -17,7 +17,7 @@ import {
17
17
  serializeValue,
18
18
  toJsonSafe,
19
19
  toJsonSafeReport
20
- } from "./chunk-QF7FLTXB.js";
20
+ } from "./chunk-SZVZU3F6.js";
21
21
  import {
22
22
  BitfabError,
23
23
  CONTENT_OFF_KEY,
@@ -36,7 +36,7 @@ import {
36
36
  readEnv,
37
37
  recordCallerTraceMetadata,
38
38
  retireTraceMetadata
39
- } from "./chunk-LRY4Y7HE.js";
39
+ } from "./chunk-TAGNRN6F.js";
40
40
  import {
41
41
  __privateAdd,
42
42
  __privateGet,
@@ -6253,7 +6253,7 @@ var Bitfab = class {
6253
6253
  await runWithSeedContext({ traceId }, async () => target(...args));
6254
6254
  } finally {
6255
6255
  try {
6256
- const { flushTraces: flushTraces2 } = await import("./http-6TAXWGVJ.js");
6256
+ const { flushTraces: flushTraces2 } = await import("./http-YUNQFRQY.js");
6257
6257
  await flushTraces2(3e4);
6258
6258
  } finally {
6259
6259
  unrecorded = activeTraceStates.delete(traceId);
@@ -6312,7 +6312,7 @@ var Bitfab = class {
6312
6312
  `Function is wrapped with trace function key '${wrappedKey}' but replay was called with '${traceFunctionKey}'. Pass matching keys, or pass the unwrapped function to replay it under the explicit key.`
6313
6313
  );
6314
6314
  }
6315
- const { replay: doReplay } = await import("./replay-LOAD2DLO.js");
6315
+ const { replay: doReplay } = await import("./replay-PN6MNLGK.js");
6316
6316
  return doReplay(
6317
6317
  this.httpClient,
6318
6318
  this.serviceUrl,
@@ -6658,7 +6658,7 @@ async function seedFromRegistry(registry, pipeline, cases, options = {}) {
6658
6658
  sessionId: seedCase.sessionId
6659
6659
  })
6660
6660
  );
6661
- const { flushTraces: flushTraces2 } = await import("./http-6TAXWGVJ.js");
6661
+ const { flushTraces: flushTraces2 } = await import("./http-YUNQFRQY.js");
6662
6662
  await flushTraces2(3e4);
6663
6663
  return { pipeline, traceFunctionKey, traceIds };
6664
6664
  }
@@ -6703,4 +6703,4 @@ export {
6703
6703
  reseedFromRegistry,
6704
6704
  seedFromRegistry
6705
6705
  };
6706
- //# sourceMappingURL=chunk-YT45ZRGM.js.map
6706
+ //# sourceMappingURL=chunk-DIOPUOV3.js.map