@the-librarian/cli 1.17.0 → 1.17.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/dist/server/autoupdate.d.ts +31 -19
- package/dist/server/autoupdate.d.ts.map +1 -1
- package/dist/server/autoupdate.js +111 -159
- package/dist/server/autoupdate.js.map +1 -1
- package/dist/server/update-lock.d.ts +30 -0
- package/dist/server/update-lock.d.ts.map +1 -0
- package/dist/server/update-lock.js +120 -0
- package/dist/server/update-lock.js.map +1 -0
- package/dist/server/update.d.ts.map +1 -1
- package/dist/server/update.js +21 -0
- package/dist/server/update.js.map +1 -1
- package/package.json +1 -1
|
@@ -39,10 +39,12 @@ export interface EnableOptions extends AutoUpdateOptions {
|
|
|
39
39
|
}
|
|
40
40
|
export interface RunOptions extends AutoUpdateOptions {
|
|
41
41
|
/**
|
|
42
|
-
* Sink for the wrapper's one-line log entries
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
42
|
+
* Sink for the wrapper's one-line log entries. Defaults to SILENT (spec 074
|
|
43
|
+
* SC8): the runtime prints the wrapper's returned output to stdout, and
|
|
44
|
+
* systemd/cron send stdout and stderr to the same journal/mail — so a stderr
|
|
45
|
+
* default wrote every outcome twice. Tests inject a recorder. Every wrapper
|
|
46
|
+
* outcome (skip / update / failure) emits exactly one line here — and the
|
|
47
|
+
* wrapper never throws, so the timer's unit always exits 0.
|
|
46
48
|
*/
|
|
47
49
|
log?: ((line: string) => void) | undefined;
|
|
48
50
|
/** Health-wait bound for the inner `server update` (small in tests). */
|
|
@@ -52,17 +54,22 @@ export interface RunOptions extends AutoUpdateOptions {
|
|
|
52
54
|
/** Injected current time for the due-check (tests). Default `new Date()`. */
|
|
53
55
|
now?: Date | undefined;
|
|
54
56
|
}
|
|
55
|
-
/** Inputs to the pure service generator (
|
|
57
|
+
/** Inputs to the pure service generator (a path, a username, a dir — NEVER a secret). */
|
|
56
58
|
export interface ServiceUnitInput {
|
|
57
59
|
/** Absolute path to the `librarian` binary the oneshot runs with `server autoupdate --run`. */
|
|
58
60
|
librarianPath: string;
|
|
61
|
+
/** The host user the oneshot runs as — the ENABLING user, who owns the deploy (spec 074). */
|
|
62
|
+
user: string;
|
|
63
|
+
/** The deploy dir baked into ExecStart as `--dir`, resolved at enable time (spec 074). */
|
|
64
|
+
deployDir: string;
|
|
59
65
|
}
|
|
60
66
|
/**
|
|
61
67
|
* Generate the oneshot service unit text. PURE + unit-tested. Contains NO secret —
|
|
62
68
|
* it runs `librarian server autoupdate --run`, which reads the settings from the
|
|
63
69
|
* running container itself (via `docker exec`), so nothing sensitive is written
|
|
64
|
-
* into this world-readable unit file
|
|
65
|
-
*
|
|
70
|
+
* into this world-readable unit file (a username and a directory path are not
|
|
71
|
+
* secrets). `Type=oneshot` because the wrapper runs to completion each fire (it
|
|
72
|
+
* is the timer's job to schedule, not the service's).
|
|
66
73
|
*/
|
|
67
74
|
export declare function generateServiceUnit(input: ServiceUnitInput): string;
|
|
68
75
|
/**
|
|
@@ -77,11 +84,13 @@ export declare function generateTimerUnit(): string;
|
|
|
77
84
|
/**
|
|
78
85
|
* The crontab line for the cron fallback (systemd absent). Fires the wrapper at
|
|
79
86
|
* minute 17 of every hour (off the top-of-hour to spread load), tagged with
|
|
80
|
-
* {@link CRON_MARKER} so it can be found/replaced/removed idempotently.
|
|
81
|
-
*
|
|
82
|
-
*
|
|
87
|
+
* {@link CRON_MARKER} so it can be found/replaced/removed idempotently. Cron
|
|
88
|
+
* already fires as the enabling user (their crontab), but the deploy dir is
|
|
89
|
+
* baked explicitly anyway (spec 074 SC2) so a custom `--dir` passed to `enable`
|
|
90
|
+
* is honoured here too. NO secret — same reasoning as the systemd unit (the
|
|
91
|
+
* wrapper reads settings from the container at run time).
|
|
83
92
|
*/
|
|
84
|
-
export declare function cronLine(librarianPath: string): string;
|
|
93
|
+
export declare function cronLine(librarianPath: string, deployDir: string): string;
|
|
85
94
|
/** The one-line macOS-deferred notice (boot persistence + autoupdate are Linux-only for now). */
|
|
86
95
|
export declare const MACOS_NOTICE: string;
|
|
87
96
|
/** The configured auto-update state read from the running server. */
|
|
@@ -122,9 +131,17 @@ export declare function stampRunInServer(): Promise<boolean>;
|
|
|
122
131
|
* server. On Linux with systemd: write the oneshot service + the .timer to
|
|
123
132
|
* `/etc/systemd/system`, `daemon-reload`, then `enable --now` the TIMER (the
|
|
124
133
|
* service is oneshot — only the timer is enabled). Idempotent: re-running rewrites
|
|
125
|
-
* the SAME unit paths and re-enables, never duplicating
|
|
126
|
-
*
|
|
127
|
-
*
|
|
134
|
+
* the SAME unit paths and re-enables, never duplicating — which is also the
|
|
135
|
+
* MIGRATION for units installed before spec 074 (they ran as root against root's
|
|
136
|
+
* home and failed every fire). Where systemd is absent: install an hourly cron
|
|
137
|
+
* line (idempotent via {@link CRON_MARKER}). On macOS: print the deferred notice
|
|
138
|
+
* and skip cleanly.
|
|
139
|
+
*
|
|
140
|
+
* SPEC 074: the fire context is resolved and VALIDATED here, at enable time —
|
|
141
|
+
* the unit runs as the enabling user against the deploy dir resolved from THEIR
|
|
142
|
+
* context (or an explicit `--dir`). No deploy-state at that dir is a hard
|
|
143
|
+
* teaching refusal: installing anyway would reproduce the silent hourly failure
|
|
144
|
+
* this spec exists to kill.
|
|
128
145
|
*
|
|
129
146
|
* The settings write (enabled=true + cadence) is best-effort: a down server is a
|
|
130
147
|
* non-fatal hint (the timer is installed; the operator toggles from the dashboard
|
|
@@ -156,11 +173,6 @@ export declare function uninstallAutoUpdate(options?: AutoUpdateOptions): Promis
|
|
|
156
173
|
* still reports the host-side timer state and exits 0.
|
|
157
174
|
*/
|
|
158
175
|
export declare function autoUpdateStatus(options?: AutoUpdateOptions): Promise<AutoUpdateResult>;
|
|
159
|
-
/** The fixed lock path: `~/.librarian/server/.autoupdate.lock` (no root needed). */
|
|
160
|
-
export declare function autoUpdateLockPath(options: {
|
|
161
|
-
home?: string | undefined;
|
|
162
|
-
dir?: string | undefined;
|
|
163
|
-
}): string;
|
|
164
176
|
/**
|
|
165
177
|
* The wrapper the timer/cron fires (spec §3 SC4/SC7). Reads the auto-update
|
|
166
178
|
* settings from the RUNNING server, applies the due-check, and conditionally runs
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autoupdate.d.ts","sourceRoot":"","sources":["../../src/server/autoupdate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"autoupdate.d.ts","sourceRoot":"","sources":["../../src/server/autoupdate.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,14 +35,16 @@
|
|
|
35
35
|
// Everything privileged routes through the injectable `docker.ts` runner (the
|
|
36
36
|
// same seam boot.ts uses), so tests assert the exact systemctl/crontab/docker
|
|
37
37
|
// argv without a real systemd, cron, or docker.
|
|
38
|
-
import {
|
|
39
|
-
import { tmpdir } from "node:os";
|
|
38
|
+
import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
39
|
+
import { tmpdir, userInfo } from "node:os";
|
|
40
40
|
import path from "node:path";
|
|
41
41
|
import { librarianDir } from "../paths.js";
|
|
42
|
+
import { readDeployState } from "./deploy-state.js";
|
|
42
43
|
import { run, which } from "./docker.js";
|
|
43
44
|
import { redactSecrets } from "./redact.js";
|
|
44
45
|
import { serverStatus } from "./status.js";
|
|
45
46
|
import { CONTAINER_NAME } from "./up.js";
|
|
47
|
+
import { UpdateInProgressError } from "./update-lock.js";
|
|
46
48
|
import { runUpdate, UpdateError } from "./update.js";
|
|
47
49
|
// Cadence constants are defined LOCALLY here, NOT imported from `@librarian/core`, so
|
|
48
50
|
// the public `@the-librarian/cli` stays lightweight — `core` pulls in node-llama-cpp /
|
|
@@ -93,14 +95,15 @@ export class AutoUpdateError extends Error {
|
|
|
93
95
|
* Generate the oneshot service unit text. PURE + unit-tested. Contains NO secret —
|
|
94
96
|
* it runs `librarian server autoupdate --run`, which reads the settings from the
|
|
95
97
|
* running container itself (via `docker exec`), so nothing sensitive is written
|
|
96
|
-
* into this world-readable unit file
|
|
97
|
-
*
|
|
98
|
+
* into this world-readable unit file (a username and a directory path are not
|
|
99
|
+
* secrets). `Type=oneshot` because the wrapper runs to completion each fire (it
|
|
100
|
+
* is the timer's job to schedule, not the service's).
|
|
98
101
|
*/
|
|
99
102
|
export function generateServiceUnit(input) {
|
|
100
|
-
const { librarianPath } = input;
|
|
101
|
-
//
|
|
102
|
-
// (see `
|
|
103
|
-
//
|
|
103
|
+
const { librarianPath, user, deployDir } = input;
|
|
104
|
+
// Every interpolated token is validated whitespace/metacharacter-free before it
|
|
105
|
+
// reaches here (see `assertSafeSchedulerToken` in `enableAutoUpdate`), so bare
|
|
106
|
+
// (unquoted) tokens are safe — systemd splits ExecStart on whitespace.
|
|
104
107
|
return [
|
|
105
108
|
"[Unit]",
|
|
106
109
|
"Description=The Librarian — auto-update check (host-scheduled)",
|
|
@@ -109,19 +112,23 @@ export function generateServiceUnit(input) {
|
|
|
109
112
|
"",
|
|
110
113
|
"[Service]",
|
|
111
114
|
"Type=oneshot",
|
|
112
|
-
//
|
|
113
|
-
//
|
|
114
|
-
//
|
|
115
|
-
//
|
|
116
|
-
//
|
|
117
|
-
//
|
|
118
|
-
|
|
115
|
+
// NOT root (spec 074): a system unit defaults to root, whose home holds no
|
|
116
|
+
// deploy-state — every fire failed with "No deploy-state found" while
|
|
117
|
+
// `autoupdate status` looked healthy. The ENABLING user is the one context
|
|
118
|
+
// where everything resolves: their `~/.librarian/server` is the deploy dir,
|
|
119
|
+
// they own the git clone (root git would refuse the dubious-ownership
|
|
120
|
+
// check), and they have docker access by construction (they ran `server up`).
|
|
121
|
+
`User=${user}`,
|
|
122
|
+
// NoNewPrivileges: forbid this oneshot from gaining ANY new privileges via
|
|
123
|
+
// setuid/setgid/capabilities on the binaries it execs (docker/git) — an
|
|
124
|
+
// auto-executing unit should grant no more than it needs.
|
|
119
125
|
"NoNewPrivileges=true",
|
|
120
126
|
// The wrapper reads the auto-update settings from the running container and,
|
|
121
|
-
// if due, performs `server update`.
|
|
122
|
-
//
|
|
123
|
-
//
|
|
124
|
-
`
|
|
127
|
+
// if due, performs `server update`. The deploy dir is pinned explicitly so
|
|
128
|
+
// the fire never depends on whose home the unit happens to resolve. It
|
|
129
|
+
// carries NO secret on this argv: the settings + the container's credentials
|
|
130
|
+
// live in the container, reached via `docker exec` at run time.
|
|
131
|
+
`ExecStart=${librarianPath} server autoupdate --run --dir ${deployDir}`,
|
|
125
132
|
"",
|
|
126
133
|
].join("\n");
|
|
127
134
|
}
|
|
@@ -155,12 +162,14 @@ export function generateTimerUnit() {
|
|
|
155
162
|
/**
|
|
156
163
|
* The crontab line for the cron fallback (systemd absent). Fires the wrapper at
|
|
157
164
|
* minute 17 of every hour (off the top-of-hour to spread load), tagged with
|
|
158
|
-
* {@link CRON_MARKER} so it can be found/replaced/removed idempotently.
|
|
159
|
-
*
|
|
160
|
-
*
|
|
165
|
+
* {@link CRON_MARKER} so it can be found/replaced/removed idempotently. Cron
|
|
166
|
+
* already fires as the enabling user (their crontab), but the deploy dir is
|
|
167
|
+
* baked explicitly anyway (spec 074 SC2) so a custom `--dir` passed to `enable`
|
|
168
|
+
* is honoured here too. NO secret — same reasoning as the systemd unit (the
|
|
169
|
+
* wrapper reads settings from the container at run time).
|
|
161
170
|
*/
|
|
162
|
-
export function cronLine(librarianPath) {
|
|
163
|
-
return `17 * * * * ${librarianPath} server autoupdate --run ${CRON_MARKER}`;
|
|
171
|
+
export function cronLine(librarianPath, deployDir) {
|
|
172
|
+
return `17 * * * * ${librarianPath} server autoupdate --run --dir ${deployDir} ${CRON_MARKER}`;
|
|
164
173
|
}
|
|
165
174
|
// --- librarian-path resolution -------------------------------------------
|
|
166
175
|
/**
|
|
@@ -174,23 +183,22 @@ async function resolveLibrarianPath() {
|
|
|
174
183
|
return resolved && resolved.trim().length > 0 ? resolved.trim() : DEFAULT_LIBRARIAN_PATH;
|
|
175
184
|
}
|
|
176
185
|
/**
|
|
177
|
-
* Reject a
|
|
178
|
-
* `ExecStart` / a cron line (FIX I1
|
|
179
|
-
*
|
|
186
|
+
* Reject a token that isn't safe to interpolate UNQUOTED into a systemd
|
|
187
|
+
* `ExecStart` / a cron line / a unit directive (FIX I1, extended by spec 074 to
|
|
188
|
+
* the deploy dir and the username). systemd splits `ExecStart` on whitespace and
|
|
189
|
+
* cron passes the line to `/bin/sh`, so a value containing a space (e.g. an npm
|
|
180
190
|
* prefix under `/home/jane doe/`) or a shell metacharacter would silently break
|
|
181
|
-
* the timer — or worse, inject
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
*
|
|
191
|
+
* the timer — or worse, inject (a newline in a value could even smuggle a unit
|
|
192
|
+
* directive). Rather than wrap quoting rules around two different grammars, we
|
|
193
|
+
* REJECT at `enable` with a teaching error: the value must contain none of these
|
|
194
|
+
* characters. `remedy` tells the operator how to get a clean value.
|
|
185
195
|
*/
|
|
186
|
-
function
|
|
196
|
+
function assertSafeSchedulerToken(value, label, remedy) {
|
|
187
197
|
// Whitespace OR any shell/systemd-significant metacharacter is rejected.
|
|
188
|
-
if (/\s/.test(
|
|
189
|
-
throw new AutoUpdateError(`The resolved
|
|
198
|
+
if (/\s/.test(value) || /["'`$\\;&|<>(){}*?!#~]/.test(value)) {
|
|
199
|
+
throw new AutoUpdateError(`The resolved ${label} is not safe to schedule unquoted:\n ${value}\n\n` +
|
|
190
200
|
"It contains whitespace or a shell/systemd metacharacter, which would break the " +
|
|
191
|
-
|
|
192
|
-
"path with no spaces or special characters (e.g. `/usr/local/bin/librarian`) and " +
|
|
193
|
-
"re-run `librarian server autoupdate enable`.");
|
|
201
|
+
`systemd timer's ExecStart (or the cron line). ${remedy}`);
|
|
194
202
|
}
|
|
195
203
|
}
|
|
196
204
|
// --- platform helpers ----------------------------------------------------
|
|
@@ -334,9 +342,17 @@ function failIfNonZero(cmd, args, result) {
|
|
|
334
342
|
* server. On Linux with systemd: write the oneshot service + the .timer to
|
|
335
343
|
* `/etc/systemd/system`, `daemon-reload`, then `enable --now` the TIMER (the
|
|
336
344
|
* service is oneshot — only the timer is enabled). Idempotent: re-running rewrites
|
|
337
|
-
* the SAME unit paths and re-enables, never duplicating
|
|
338
|
-
*
|
|
339
|
-
*
|
|
345
|
+
* the SAME unit paths and re-enables, never duplicating — which is also the
|
|
346
|
+
* MIGRATION for units installed before spec 074 (they ran as root against root's
|
|
347
|
+
* home and failed every fire). Where systemd is absent: install an hourly cron
|
|
348
|
+
* line (idempotent via {@link CRON_MARKER}). On macOS: print the deferred notice
|
|
349
|
+
* and skip cleanly.
|
|
350
|
+
*
|
|
351
|
+
* SPEC 074: the fire context is resolved and VALIDATED here, at enable time —
|
|
352
|
+
* the unit runs as the enabling user against the deploy dir resolved from THEIR
|
|
353
|
+
* context (or an explicit `--dir`). No deploy-state at that dir is a hard
|
|
354
|
+
* teaching refusal: installing anyway would reproduce the silent hourly failure
|
|
355
|
+
* this spec exists to kill.
|
|
340
356
|
*
|
|
341
357
|
* The settings write (enabled=true + cadence) is best-effort: a down server is a
|
|
342
358
|
* non-fatal hint (the timer is installed; the operator toggles from the dashboard
|
|
@@ -351,22 +367,44 @@ export async function enableAutoUpdate(options = {}) {
|
|
|
351
367
|
// error, not a half-installed timer). Default daily.
|
|
352
368
|
const cadence = resolveCadence(options.cadence);
|
|
353
369
|
const librarianPath = await resolveLibrarianPath();
|
|
354
|
-
// Reject
|
|
355
|
-
// BEFORE touching the host (a bad
|
|
356
|
-
|
|
370
|
+
// Reject any value that isn't safe to interpolate UNQUOTED into the unit/cron
|
|
371
|
+
// line BEFORE touching the host (a bad value is a teaching error, not a broken
|
|
372
|
+
// timer): the binary path, the deploy dir, and the username all ride unquoted.
|
|
373
|
+
assertSafeSchedulerToken(librarianPath, "`librarian` path", "Install or symlink `librarian` to a path with no spaces or special characters " +
|
|
374
|
+
"(e.g. `/usr/local/bin/librarian`) and re-run `librarian server autoupdate enable`.");
|
|
375
|
+
const deployDir = options.dir ?? path.join(librarianDir(options.home), "server");
|
|
376
|
+
assertSafeSchedulerToken(deployDir, "deploy dir", "Move the deploy dir to a path with no spaces or special characters and re-run " +
|
|
377
|
+
"`librarian server autoupdate enable --dir <path>`.");
|
|
378
|
+
const user = userInfo().username;
|
|
379
|
+
assertSafeSchedulerToken(user, "username", "Run `librarian server autoupdate enable` as a user whose name has no special characters.");
|
|
380
|
+
// SPEC 074 SC3 — the hard gate. A timer installed against a dir with no
|
|
381
|
+
// deploy-state fails silently on every fire (fail-soft by design, root-only
|
|
382
|
+
// journal); refuse NOW, loudly, while a human is watching.
|
|
383
|
+
if (!readDeployState(deployDir)) {
|
|
384
|
+
const sudoUser = process.env.SUDO_USER;
|
|
385
|
+
throw new AutoUpdateError(`No deploy-state found at ${deployDir} — the auto-update timer must run as the user ` +
|
|
386
|
+
"who ran `librarian server up` (it reads that user's deploy dir and git clone, with " +
|
|
387
|
+
"their docker access).\n" +
|
|
388
|
+
"Re-run `librarian server autoupdate enable` as that user" +
|
|
389
|
+
(sudoUser
|
|
390
|
+
? ` — you appear to be under sudo, so likely as \`${sudoUser}\` without the leading sudo ` +
|
|
391
|
+
"(the command sudos where it needs to)"
|
|
392
|
+
: "") +
|
|
393
|
+
" — or pass `--dir <path>` to point at the deploy dir.");
|
|
394
|
+
}
|
|
357
395
|
const lines = [];
|
|
358
396
|
if (await hasSystemd()) {
|
|
359
|
-
await installUnit(AUTOUPDATE_SERVICE_NAME, servicePath(), generateServiceUnit({ librarianPath }));
|
|
397
|
+
await installUnit(AUTOUPDATE_SERVICE_NAME, servicePath(), generateServiceUnit({ librarianPath, user, deployDir }));
|
|
360
398
|
await installUnit(AUTOUPDATE_TIMER_NAME, timerPath(), generateTimerUnit());
|
|
361
399
|
// daemon-reload BEFORE enable --now so systemd sees the (possibly rewritten)
|
|
362
400
|
// units. Only the TIMER is enabled (the service is oneshot, fired by the timer).
|
|
363
401
|
await sudoSystemctl(["daemon-reload"]);
|
|
364
402
|
await sudoSystemctl(["enable", "--now", AUTOUPDATE_TIMER_NAME]);
|
|
365
|
-
lines.push(`Auto-update timer installed — ${AUTOUPDATE_TIMER_NAME} fires hourly and runs the due-check.`, ` Units: ${servicePath()} + ${timerPath()} (no secret in either file).`);
|
|
403
|
+
lines.push(`Auto-update timer installed — ${AUTOUPDATE_TIMER_NAME} fires hourly and runs the due-check.`, ` Runs as \`${user}\` against ${deployDir} (the deploy this user owns).`, ` Units: ${servicePath()} + ${timerPath()} (no secret in either file).`);
|
|
366
404
|
}
|
|
367
405
|
else {
|
|
368
|
-
await installCron(librarianPath);
|
|
369
|
-
lines.push("Auto-update cron entry installed — runs the due-check hourly (systemd not found).", ` Tagged \`${CRON_MARKER}\` in your crontab (remove with \`librarian server autoupdate uninstall\`).`);
|
|
406
|
+
await installCron(librarianPath, deployDir);
|
|
407
|
+
lines.push("Auto-update cron entry installed — runs the due-check hourly (systemd not found).", ` Runs as \`${user}\` against ${deployDir} (the deploy this user owns).`, ` Tagged \`${CRON_MARKER}\` in your crontab (remove with \`librarian server autoupdate uninstall\`).`);
|
|
370
408
|
}
|
|
371
409
|
// Write the enabled + cadence settings into the running server so the dashboard
|
|
372
410
|
// reflects them. Best-effort — a down server is a hint, not a failure.
|
|
@@ -491,14 +529,14 @@ async function readCrontab() {
|
|
|
491
529
|
return result.stdout.split("\n").filter((l) => l.length > 0);
|
|
492
530
|
}
|
|
493
531
|
/** Install (or refresh) our hourly cron line idempotently — strip any prior marker line first. */
|
|
494
|
-
async function installCron(librarianPath) {
|
|
532
|
+
async function installCron(librarianPath, deployDir) {
|
|
495
533
|
if ((await which("crontab")) === null) {
|
|
496
534
|
throw new AutoUpdateError("Neither systemd nor crontab was found, so there's no host scheduler to install the " +
|
|
497
535
|
"auto-update timer into. Install systemd or cron, or schedule " +
|
|
498
536
|
"`librarian server autoupdate --run` to run hourly yourself.");
|
|
499
537
|
}
|
|
500
538
|
const kept = (await readCrontab()).filter((l) => !l.includes(CRON_MARKER));
|
|
501
|
-
const next = [...kept, cronLine(librarianPath)].join("\n") + "\n";
|
|
539
|
+
const next = [...kept, cronLine(librarianPath, deployDir)].join("\n") + "\n";
|
|
502
540
|
await writeCrontab(next);
|
|
503
541
|
}
|
|
504
542
|
/** Remove our tagged cron line (idempotent — a crontab without it is left as-is). */
|
|
@@ -588,98 +626,6 @@ async function isTimerInstalled() {
|
|
|
588
626
|
return false;
|
|
589
627
|
return (await readCrontab()).some((l) => l.includes(CRON_MARKER));
|
|
590
628
|
}
|
|
591
|
-
// --- the exclusive host lock (serialize concurrent updates, FIX C1) ------
|
|
592
|
-
/**
|
|
593
|
-
* After this many milliseconds an unrefreshed lockfile is treated as STALE and
|
|
594
|
-
* reclaimed — a crashed/killed update (the holder never released its lock) must
|
|
595
|
-
* not wedge auto-update forever. `server update` rebuilds + recreates, so a wide
|
|
596
|
-
* margin (1h) is safe: a real in-flight update is far shorter, and a lock older
|
|
597
|
-
* than this is from a dead process, not a slow one.
|
|
598
|
-
*/
|
|
599
|
-
const LOCK_STALE_MS = 60 * 60 * 1000;
|
|
600
|
-
/** The fixed lock path: `~/.librarian/server/.autoupdate.lock` (no root needed). */
|
|
601
|
-
export function autoUpdateLockPath(options) {
|
|
602
|
-
const dir = options.dir ?? path.join(librarianDir(options.home), "server");
|
|
603
|
-
return path.join(dir, ".autoupdate.lock");
|
|
604
|
-
}
|
|
605
|
-
/**
|
|
606
|
-
* Acquire an EXCLUSIVE host lock so two timer fires (or a fire overlapping a
|
|
607
|
-
* manual `librarian server update`) can never both `docker stop`/`rm`/`run` the
|
|
608
|
-
* same container — a window with NO running container would take the server down
|
|
609
|
-
* (spec SC7). Implemented as an `O_CREAT|O_EXCL` lockfile (atomic on POSIX, no
|
|
610
|
-
* root, no external `flock`): the create succeeds for exactly one caller.
|
|
611
|
-
*
|
|
612
|
-
* Returns the held lock on success, or `null` when another update already holds
|
|
613
|
-
* it (the caller then SKIPS without stamping). A STALE lock (older than
|
|
614
|
-
* {@link LOCK_STALE_MS} — a crashed holder) is reclaimed once, then retried.
|
|
615
|
-
*
|
|
616
|
-
* FAIL-SOFT: any lock-subsystem error (a read-only FS, a permissions problem)
|
|
617
|
-
* throws here and is caught by `runAutoUpdate`'s outer guard, which logs + skips
|
|
618
|
-
* — a lock problem must never crash the timer or leave the server mid-recreate.
|
|
619
|
-
*/
|
|
620
|
-
function acquireUpdateLock(lockPath) {
|
|
621
|
-
// Best-effort: ensure the directory exists (the deploy dir normally does).
|
|
622
|
-
mkdirSync(path.dirname(lockPath), { recursive: true });
|
|
623
|
-
const tryCreate = () => {
|
|
624
|
-
let fd;
|
|
625
|
-
try {
|
|
626
|
-
// O_CREAT|O_EXCL|O_WRONLY → fails with EEXIST if the lockfile already exists.
|
|
627
|
-
fd = openSync(lockPath, "wx");
|
|
628
|
-
}
|
|
629
|
-
catch (error) {
|
|
630
|
-
if (error.code === "EEXIST")
|
|
631
|
-
return null;
|
|
632
|
-
throw error; // a real FS error → fail-soft up in runAutoUpdate
|
|
633
|
-
}
|
|
634
|
-
// Record our pid + acquisition time (debuggable; carries NO secret).
|
|
635
|
-
try {
|
|
636
|
-
writeSync(fd, `${process.pid} ${Date.now()}\n`);
|
|
637
|
-
}
|
|
638
|
-
finally {
|
|
639
|
-
closeSync(fd);
|
|
640
|
-
}
|
|
641
|
-
let released = false;
|
|
642
|
-
return {
|
|
643
|
-
release() {
|
|
644
|
-
if (released)
|
|
645
|
-
return;
|
|
646
|
-
released = true;
|
|
647
|
-
try {
|
|
648
|
-
unlinkSync(lockPath);
|
|
649
|
-
}
|
|
650
|
-
catch {
|
|
651
|
-
// Already gone (e.g. reclaimed as stale elsewhere) — nothing to do.
|
|
652
|
-
}
|
|
653
|
-
},
|
|
654
|
-
};
|
|
655
|
-
};
|
|
656
|
-
const held = tryCreate();
|
|
657
|
-
if (held)
|
|
658
|
-
return held;
|
|
659
|
-
// The lock exists. If it's STALE (a crashed holder), reclaim it ONCE and retry.
|
|
660
|
-
if (isLockStale(lockPath)) {
|
|
661
|
-
try {
|
|
662
|
-
unlinkSync(lockPath);
|
|
663
|
-
}
|
|
664
|
-
catch {
|
|
665
|
-
// Someone else reclaimed it first — fall through to a single retry anyway.
|
|
666
|
-
}
|
|
667
|
-
return tryCreate(); // null again ⇒ a live holder won the race → skip
|
|
668
|
-
}
|
|
669
|
-
return null; // a live update is in progress → skip
|
|
670
|
-
}
|
|
671
|
-
/** True iff the lockfile is older than {@link LOCK_STALE_MS} (a crashed holder). */
|
|
672
|
-
function isLockStale(lockPath) {
|
|
673
|
-
try {
|
|
674
|
-
// Prefer the timestamp written into the file; fall back to mtime.
|
|
675
|
-
const written = Number.parseInt(readFileSync(lockPath, "utf8").trim().split(/\s+/)[1] ?? "", 10);
|
|
676
|
-
const acquiredAt = Number.isFinite(written) ? written : statSync(lockPath).mtimeMs;
|
|
677
|
-
return Date.now() - acquiredAt >= LOCK_STALE_MS;
|
|
678
|
-
}
|
|
679
|
-
catch {
|
|
680
|
-
return false; // can't read it → don't reclaim (conservative: skip, don't steal)
|
|
681
|
-
}
|
|
682
|
-
}
|
|
683
629
|
// --- the `--run` wrapper (what the timer calls) --------------------------
|
|
684
630
|
/**
|
|
685
631
|
* The wrapper the timer/cron fires (spec §3 SC4/SC7). Reads the auto-update
|
|
@@ -700,7 +646,10 @@ function isLockStale(lockPath) {
|
|
|
700
646
|
* (never-run → due).
|
|
701
647
|
*/
|
|
702
648
|
export async function runAutoUpdate(options = {}) {
|
|
703
|
-
|
|
649
|
+
// Default sink is SILENT (spec 074 SC8): the outcome reaches the journal once,
|
|
650
|
+
// via the runtime's stdout print of the returned output. A stderr default
|
|
651
|
+
// duplicated every line (systemd journals both streams).
|
|
652
|
+
const log = options.log ?? (() => undefined);
|
|
704
653
|
const now = options.now ?? new Date();
|
|
705
654
|
try {
|
|
706
655
|
const config = await readRunningConfig();
|
|
@@ -719,17 +668,9 @@ export async function runAutoUpdate(options = {}) {
|
|
|
719
668
|
log(line);
|
|
720
669
|
return { output: line };
|
|
721
670
|
}
|
|
722
|
-
// Due + enabled:
|
|
723
|
-
//
|
|
724
|
-
//
|
|
725
|
-
// take the server down (spec SC7). If another update already holds the lock,
|
|
726
|
-
// SKIP cleanly (do NOT stamp last_run_at — the in-flight update will stamp).
|
|
727
|
-
const lock = acquireUpdateLock(autoUpdateLockPath(options));
|
|
728
|
-
if (!lock) {
|
|
729
|
-
const line = "autoupdate: another update in progress — skipping.";
|
|
730
|
-
log(line);
|
|
731
|
-
return { output: line };
|
|
732
|
-
}
|
|
671
|
+
// Due + enabled: run the update. `runUpdate` itself holds the exclusive host
|
|
672
|
+
// lock (spec 074 SC5 — one acquisition point covers manual runs and timer
|
|
673
|
+
// fires alike); a lock already held surfaces as the typed refusal below.
|
|
733
674
|
try {
|
|
734
675
|
const result = await runUpdate({
|
|
735
676
|
...(options.home !== undefined ? { home: options.home } : {}),
|
|
@@ -752,20 +693,31 @@ export async function runAutoUpdate(options = {}) {
|
|
|
752
693
|
return { output: `${line}\n${redactSecrets(result.output)}` };
|
|
753
694
|
}
|
|
754
695
|
catch (error) {
|
|
696
|
+
// Another update (a manual run, an overlapping fire) holds the lock: SKIP
|
|
697
|
+
// cleanly and do NOT stamp last_run_at — the in-flight holder stamps.
|
|
698
|
+
if (error instanceof UpdateInProgressError) {
|
|
699
|
+
const line = "autoupdate: another update in progress — skipping.";
|
|
700
|
+
log(line);
|
|
701
|
+
return { output: line };
|
|
702
|
+
}
|
|
755
703
|
// The update failed — its own health-check rollback left the prior container
|
|
756
704
|
// running. Do NOT stamp last_run_at (so the next fire retries). Log + exit 0.
|
|
757
705
|
const detail = error instanceof UpdateError || error instanceof Error
|
|
758
706
|
? redactSecrets(error.message)
|
|
759
707
|
: String(error);
|
|
760
|
-
|
|
708
|
+
// SPEC 074 SC6: a no-deploy-state failure from the TIMER means the unit
|
|
709
|
+
// predates 074 (it ran as root against root's home — the silent hourly
|
|
710
|
+
// failure this spec killed). Anyone seeing this line has the broken unit;
|
|
711
|
+
// teach the migration inline.
|
|
712
|
+
const migrationHint = /No deploy-state found/.test(detail)
|
|
713
|
+
? " If this timer was installed by an older CLI (it ran as root against root's home), " +
|
|
714
|
+
"upgrade the CLI and re-run `librarian server autoupdate enable` as the user who ran " +
|
|
715
|
+
"`server up`."
|
|
716
|
+
: "";
|
|
717
|
+
const line = `autoupdate: update failed — left the previous server running, did NOT stamp last_run_at (will retry next fire). ${firstLine(detail)}${migrationHint}`;
|
|
761
718
|
log(line);
|
|
762
719
|
return { output: line };
|
|
763
720
|
}
|
|
764
|
-
finally {
|
|
765
|
-
// Always release — a held lock that outlives the update would wedge the next
|
|
766
|
-
// fire until the stale-reclaim window elapses.
|
|
767
|
-
lock.release();
|
|
768
|
-
}
|
|
769
721
|
}
|
|
770
722
|
catch (error) {
|
|
771
723
|
// Belt-and-braces: ANY unexpected throw is swallowed so the timer never fails.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autoupdate.js","sourceRoot":"","sources":["../../src/server/autoupdate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"autoupdate.js","sourceRoot":"","sources":["../../src/server/autoupdate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/** The fixed lock path: `<deployDir>/.autoupdate.lock` (no root needed). */
|
|
2
|
+
export declare function updateLockPath(options: {
|
|
3
|
+
home?: string | undefined;
|
|
4
|
+
dir?: string | undefined;
|
|
5
|
+
}): string;
|
|
6
|
+
/**
|
|
7
|
+
* The typed refusal `runUpdate` throws when another update holds the lock. The
|
|
8
|
+
* manual CLI surfaces `.message` as a teaching line; the auto-update wrapper
|
|
9
|
+
* catches the TYPE and logs its skip line instead (without stamping — the
|
|
10
|
+
* in-flight holder stamps).
|
|
11
|
+
*/
|
|
12
|
+
export declare class UpdateInProgressError extends Error {
|
|
13
|
+
constructor(lockPath: string);
|
|
14
|
+
}
|
|
15
|
+
/** A held lock — call `release()` exactly once when the critical section ends. */
|
|
16
|
+
export interface HeldLock {
|
|
17
|
+
release(): void;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Acquire the EXCLUSIVE host update lock. Returns the held lock on success, or
|
|
21
|
+
* `null` when another update already holds it. A STALE lock (older than
|
|
22
|
+
* {@link LOCK_STALE_MS} — a crashed holder) is reclaimed once, then retried.
|
|
23
|
+
*
|
|
24
|
+
* Any lock-subsystem error (a read-only FS, a permissions problem) THROWS — the
|
|
25
|
+
* manual path surfaces it as an ordinary failure; the auto-update wrapper's
|
|
26
|
+
* outer fail-soft guard logs + skips (a lock problem must never crash the timer
|
|
27
|
+
* or leave the server mid-recreate).
|
|
28
|
+
*/
|
|
29
|
+
export declare function acquireUpdateLock(lockPath: string): HeldLock | null;
|
|
30
|
+
//# sourceMappingURL=update-lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-lock.d.ts","sourceRoot":"","sources":["../../src/server/update-lock.ts"],"names":[],"mappings":"AAoCA,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,OAAO,EAAE;IACtC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B,GAAG,MAAM,CAGT;AAED;;;;;GAKG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,QAAQ,EAAE,MAAM;CAU7B;AAED,kFAAkF;AAClF,MAAM,WAAW,QAAQ;IACvB,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CA8CnE"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
// The exclusive host update lock (FIX C1, moved here by spec 074 SC5).
|
|
2
|
+
//
|
|
3
|
+
// Two updates interleaving `docker stop` / `rm` / `run` on the same container
|
|
4
|
+
// leave a window with NO running container — the server would simply be down.
|
|
5
|
+
// Before 074 only the auto-update TIMER wrapper took this lock, so a manual
|
|
6
|
+
// `librarian server update` could still interleave with a timer fire (the lock's
|
|
7
|
+
// own doc claimed otherwise). The lock now lives in `runUpdate` itself — ONE
|
|
8
|
+
// acquisition point covering every caller — and this module exists so both
|
|
9
|
+
// `update.ts` (acquires) and `autoupdate.ts` (catches the typed refusal) can
|
|
10
|
+
// share it without a circular import.
|
|
11
|
+
//
|
|
12
|
+
// Implemented as an `O_CREAT|O_EXCL` lockfile (atomic on POSIX, no root, no
|
|
13
|
+
// external `flock`): the create succeeds for exactly one caller. A STALE lock
|
|
14
|
+
// (a crashed holder that never released) is reclaimed after {@link LOCK_STALE_MS}.
|
|
15
|
+
import { closeSync, mkdirSync, openSync, readFileSync, statSync, unlinkSync, writeSync, } from "node:fs";
|
|
16
|
+
import path from "node:path";
|
|
17
|
+
import { librarianDir } from "../paths.js";
|
|
18
|
+
/**
|
|
19
|
+
* After this many milliseconds an unrefreshed lockfile is treated as STALE and
|
|
20
|
+
* reclaimed — a crashed/killed update (the holder never released its lock) must
|
|
21
|
+
* not wedge updates forever. `server update` rebuilds + recreates, so a wide
|
|
22
|
+
* margin (1h) is safe: a real in-flight update is far shorter, and a lock older
|
|
23
|
+
* than this is from a dead process, not a slow one.
|
|
24
|
+
*/
|
|
25
|
+
const LOCK_STALE_MS = 60 * 60 * 1000;
|
|
26
|
+
/** The fixed lock path: `<deployDir>/.autoupdate.lock` (no root needed). */
|
|
27
|
+
export function updateLockPath(options) {
|
|
28
|
+
const dir = options.dir ?? path.join(librarianDir(options.home), "server");
|
|
29
|
+
return path.join(dir, ".autoupdate.lock");
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The typed refusal `runUpdate` throws when another update holds the lock. The
|
|
33
|
+
* manual CLI surfaces `.message` as a teaching line; the auto-update wrapper
|
|
34
|
+
* catches the TYPE and logs its skip line instead (without stamping — the
|
|
35
|
+
* in-flight holder stamps).
|
|
36
|
+
*/
|
|
37
|
+
export class UpdateInProgressError extends Error {
|
|
38
|
+
constructor(lockPath) {
|
|
39
|
+
super(`Another update is already in progress (lock: ${lockPath}).\n` +
|
|
40
|
+
"A concurrent `librarian server update` or auto-update timer fire holds the exclusive " +
|
|
41
|
+
"update lock — wait for it to finish and re-run. If a previous update CRASHED, the " +
|
|
42
|
+
"lock is reclaimed automatically after 1 hour; remove the file yourself only if " +
|
|
43
|
+
"you're certain nothing is updating right now.");
|
|
44
|
+
this.name = "UpdateInProgressError";
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Acquire the EXCLUSIVE host update lock. Returns the held lock on success, or
|
|
49
|
+
* `null` when another update already holds it. A STALE lock (older than
|
|
50
|
+
* {@link LOCK_STALE_MS} — a crashed holder) is reclaimed once, then retried.
|
|
51
|
+
*
|
|
52
|
+
* Any lock-subsystem error (a read-only FS, a permissions problem) THROWS — the
|
|
53
|
+
* manual path surfaces it as an ordinary failure; the auto-update wrapper's
|
|
54
|
+
* outer fail-soft guard logs + skips (a lock problem must never crash the timer
|
|
55
|
+
* or leave the server mid-recreate).
|
|
56
|
+
*/
|
|
57
|
+
export function acquireUpdateLock(lockPath) {
|
|
58
|
+
// Best-effort: ensure the directory exists (the deploy dir normally does).
|
|
59
|
+
mkdirSync(path.dirname(lockPath), { recursive: true });
|
|
60
|
+
const tryCreate = () => {
|
|
61
|
+
let fd;
|
|
62
|
+
try {
|
|
63
|
+
// O_CREAT|O_EXCL|O_WRONLY → fails with EEXIST if the lockfile already exists.
|
|
64
|
+
fd = openSync(lockPath, "wx");
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
if (error.code === "EEXIST")
|
|
68
|
+
return null;
|
|
69
|
+
throw error; // a real FS error → the caller decides (fail vs fail-soft)
|
|
70
|
+
}
|
|
71
|
+
// Record our pid + acquisition time (debuggable; carries NO secret).
|
|
72
|
+
try {
|
|
73
|
+
writeSync(fd, `${process.pid} ${Date.now()}\n`);
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
closeSync(fd);
|
|
77
|
+
}
|
|
78
|
+
let released = false;
|
|
79
|
+
return {
|
|
80
|
+
release() {
|
|
81
|
+
if (released)
|
|
82
|
+
return;
|
|
83
|
+
released = true;
|
|
84
|
+
try {
|
|
85
|
+
unlinkSync(lockPath);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// Already gone (e.g. reclaimed as stale elsewhere) — nothing to do.
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
const held = tryCreate();
|
|
94
|
+
if (held)
|
|
95
|
+
return held;
|
|
96
|
+
// The lock exists. If it's STALE (a crashed holder), reclaim it ONCE and retry.
|
|
97
|
+
if (isLockStale(lockPath)) {
|
|
98
|
+
try {
|
|
99
|
+
unlinkSync(lockPath);
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
// Someone else reclaimed it first — fall through to a single retry anyway.
|
|
103
|
+
}
|
|
104
|
+
return tryCreate(); // null again ⇒ a live holder won the race → skip
|
|
105
|
+
}
|
|
106
|
+
return null; // a live update is in progress → skip
|
|
107
|
+
}
|
|
108
|
+
/** True iff the lockfile is older than {@link LOCK_STALE_MS} (a crashed holder). */
|
|
109
|
+
function isLockStale(lockPath) {
|
|
110
|
+
try {
|
|
111
|
+
// Prefer the timestamp written into the file; fall back to mtime.
|
|
112
|
+
const written = Number.parseInt(readFileSync(lockPath, "utf8").trim().split(/\s+/)[1] ?? "", 10);
|
|
113
|
+
const acquiredAt = Number.isFinite(written) ? written : statSync(lockPath).mtimeMs;
|
|
114
|
+
return Date.now() - acquiredAt >= LOCK_STALE_MS;
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return false; // can't read it → don't reclaim (conservative: skip, don't steal)
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=update-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-lock.js","sourceRoot":"","sources":["../../src/server/update-lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/server/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/server/update.ts"],"names":[],"mappings":"AAgFA,MAAM,WAAW,aAAa;IAC5B,4EAA4E;IAC5E,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,4EAA4E;IAC5E,GAAG,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,2DAA2D;IAC3D,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC;IACvC,mFAAmF;IACnF,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,sDAAsD;IACtD,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,yFAAyF;AACzF,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,YAAY;IAC3B,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAgClF"}
|
package/dist/server/update.js
CHANGED
|
@@ -66,6 +66,7 @@ import { run } from "./docker.js";
|
|
|
66
66
|
import { preflight } from "./preflight.js";
|
|
67
67
|
import { redactSecrets } from "./redact.js";
|
|
68
68
|
import { buildRunArgs, CONTAINER_NAME, dirOwner, LEGACY_DASHBOARD_PORT, mintAgentToken, readDeployEnvFile, waitForHealthy, writeDeployEnvFile, } from "./up.js";
|
|
69
|
+
import { acquireUpdateLock, UpdateInProgressError, updateLockPath } from "./update-lock.js";
|
|
69
70
|
/** A teaching error from `update`; the runtime renders `.message` as one stderr line. */
|
|
70
71
|
export class UpdateError extends Error {
|
|
71
72
|
constructor(message) {
|
|
@@ -92,6 +93,26 @@ export async function runUpdate(options = {}) {
|
|
|
92
93
|
"(or the deploy dir is wrong). Run `librarian server up` first, " +
|
|
93
94
|
"or pass `--dir <path>` to point at an existing deploy dir.");
|
|
94
95
|
}
|
|
96
|
+
// SPEC 074 SC5: ONE exclusive lock serialises EVERY update — manual runs and
|
|
97
|
+
// auto-update timer fires alike — so two can never interleave stop/rm/run on
|
|
98
|
+
// the same container (a window with no running container takes the server
|
|
99
|
+
// down). Before 074 only the timer wrapper locked, so a manual update could
|
|
100
|
+
// race a fire. Held around everything from ref resolution to deploy-state
|
|
101
|
+
// write; released on success AND failure (a failure must not wedge the next
|
|
102
|
+
// fire — the stale-reclaim window is for crashes, not ordinary errors).
|
|
103
|
+
const lockPath = updateLockPath({ home: options.home, dir: options.dir });
|
|
104
|
+
const lock = acquireUpdateLock(lockPath);
|
|
105
|
+
if (!lock)
|
|
106
|
+
throw new UpdateInProgressError(lockPath);
|
|
107
|
+
try {
|
|
108
|
+
return await performUpdate(options, deployDir, state);
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
lock.release();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/** The locked body of {@link runUpdate} — everything after preflight/state/lock. */
|
|
115
|
+
async function performUpdate(options, deployDir, state) {
|
|
95
116
|
// 2) Resolve the target ref (explicit `--ref` wins; else the latest tag).
|
|
96
117
|
const targetRef = await resolveRef(options.ref);
|
|
97
118
|
// 3) IDEMPOTENCY FIRST: already at the resolved ref AND healthy → clean no-op.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/server/update.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,EAAE;AACF,4EAA4E;AAC5E,+EAA+E;AAC/E,kFAAkF;AAClF,EAAE;AACF,gFAAgF;AAChF,2CAA2C;AAC3C,4EAA4E;AAC5E,2EAA2E;AAC3E,+EAA+E;AAC/E,4CAA4C;AAC5C,sDAAsD;AACtD,iFAAiF;AACjF,gFAAgF;AAChF,0EAA0E;AAC1E,6EAA6E;AAC7E,8BAA8B;AAC9B,iFAAiF;AACjF,iFAAiF;AACjF,0EAA0E;AAC1E,gFAAgF;AAChF,yBAAyB;AACzB,+EAA+E;AAC/E,8EAA8E;AAC9E,0CAA0C;AAC1C,oEAAoE;AACpE,gFAAgF;AAChF,kFAAkF;AAClF,gFAAgF;AAChF,8EAA8E;AAC9E,+EAA+E;AAC/E,EAAE;AACF,gFAAgF;AAChF,4EAA4E;AAC5E,iFAAiF;AACjF,0EAA0E;AAC1E,gFAAgF;AAChF,EAAE;AACF,4EAA4E;AAC5E,0EAA0E;AAC1E,8CAA8C;AAC9C,+EAA+E;AAC/E,8EAA8E;AAC9E,gFAAgF;AAChF,iFAAiF;AACjF,iFAAiF;AACjF,+CAA+C;AAC/C,EAAE;AACF,yEAAyE;AACzE,+EAA+E;AAC/E,iDAAiD;AACjD,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,+EAA+E;AAC/E,EAAE;AACF,6EAA6E;AAC7E,iFAAiF;AACjF,kCAAkC;AAElC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/server/update.ts"],"names":[],"mappings":"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"}
|