@lesscap/baton-cli 0.2.6 → 0.2.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/dist/baton.mjs +40 -7
- package/package.json +1 -1
package/dist/baton.mjs
CHANGED
|
@@ -768,10 +768,17 @@ var common = {
|
|
|
768
768
|
},
|
|
769
769
|
json: { type: "boolean", description: "output JSON" }
|
|
770
770
|
};
|
|
771
|
+
var resolveAuth = (env, fileToken) => {
|
|
772
|
+
const envBearer = env.BATON_TOKEN ?? env.BATON_WORKER_TOKEN;
|
|
773
|
+
if (envBearer) return { bearer: envBearer };
|
|
774
|
+
if (env.BATON_USER && env.BATON_PASS) return "cookie";
|
|
775
|
+
return fileToken ? { bearer: fileToken } : void 0;
|
|
776
|
+
};
|
|
771
777
|
var clientFor = (args) => {
|
|
772
|
-
const
|
|
773
|
-
const
|
|
774
|
-
|
|
778
|
+
const baseUrl = resolveBaseUrl(args.url);
|
|
779
|
+
const fileToken = loadProjectConfigOrNull(projectConfigPath())?.worker?.apiToken;
|
|
780
|
+
const auth = resolveAuth(process.env, fileToken);
|
|
781
|
+
return createClient(baseUrl, auth && auth !== "cookie" ? auth : void 0);
|
|
775
782
|
};
|
|
776
783
|
var resolveProjectId = (args) => {
|
|
777
784
|
if (args.project !== void 0 && args.project !== "") return Number(args.project);
|
|
@@ -2645,11 +2652,35 @@ var runWorkerDaemon = async (cfg, client, signal) => {
|
|
|
2645
2652
|
const worktreeDir = defaultWorktreeDir();
|
|
2646
2653
|
const children = /* @__PURE__ */ new Map();
|
|
2647
2654
|
const log = (m) => console.log(`[worker #${cfg.workerId} ${cfg.name}] ${m}`);
|
|
2648
|
-
const
|
|
2649
|
-
|
|
2655
|
+
const HEARTBEAT_MS = 3e4;
|
|
2656
|
+
const HEARTBEAT_TIMEOUT_MS = 15e3;
|
|
2657
|
+
const MAX_HEARTBEAT_FAILURES = 5;
|
|
2658
|
+
let heartbeatFailures = 0;
|
|
2659
|
+
let fatal = false;
|
|
2660
|
+
let stop = () => {
|
|
2661
|
+
};
|
|
2662
|
+
const ping = async () => {
|
|
2663
|
+
try {
|
|
2664
|
+
await Promise.race([
|
|
2665
|
+
client.workers.heartbeat(cfg.machineId),
|
|
2666
|
+
new Promise(
|
|
2667
|
+
(_, reject) => setTimeout(() => reject(new Error("heartbeat timeout")), HEARTBEAT_TIMEOUT_MS)
|
|
2668
|
+
)
|
|
2669
|
+
]);
|
|
2670
|
+
heartbeatFailures = 0;
|
|
2671
|
+
} catch (e) {
|
|
2672
|
+
heartbeatFailures += 1;
|
|
2673
|
+
log(`heartbeat failed (${heartbeatFailures}/${MAX_HEARTBEAT_FAILURES}): ${String(e)}`);
|
|
2674
|
+
if (heartbeatFailures >= MAX_HEARTBEAT_FAILURES) {
|
|
2675
|
+
const downSec = MAX_HEARTBEAT_FAILURES * HEARTBEAT_MS / 1e3;
|
|
2676
|
+
log(`heartbeat down ~${downSec}s \u2014 exiting so the supervisor restarts a clean worker`);
|
|
2677
|
+
fatal = true;
|
|
2678
|
+
stop();
|
|
2679
|
+
}
|
|
2680
|
+
}
|
|
2650
2681
|
};
|
|
2651
|
-
ping();
|
|
2652
|
-
const hb = setInterval(ping,
|
|
2682
|
+
void ping();
|
|
2683
|
+
const hb = setInterval(() => void ping(), HEARTBEAT_MS);
|
|
2653
2684
|
const killChild = (child) => {
|
|
2654
2685
|
if (child.pid === void 0) return;
|
|
2655
2686
|
try {
|
|
@@ -2769,12 +2800,14 @@ var runWorkerDaemon = async (cfg, client, signal) => {
|
|
|
2769
2800
|
es.onerror = () => log("command stream error (eventsource will retry)");
|
|
2770
2801
|
log(`listening for commands (server ${cfg.server}, repo ${repo})`);
|
|
2771
2802
|
await new Promise((resolve2) => {
|
|
2803
|
+
stop = resolve2;
|
|
2772
2804
|
if (signal.aborted) return resolve2();
|
|
2773
2805
|
signal.addEventListener("abort", () => resolve2(), { once: true });
|
|
2774
2806
|
});
|
|
2775
2807
|
es.close();
|
|
2776
2808
|
clearInterval(hb);
|
|
2777
2809
|
for (const { child } of children.values()) killChild(child);
|
|
2810
|
+
if (fatal) process.exit(1);
|
|
2778
2811
|
};
|
|
2779
2812
|
|
|
2780
2813
|
// src/worker/machine-id.ts
|