agent-oven 0.1.1 → 0.2.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/cli/commands/add.d.ts.map +1 -1
- package/dist/cli/commands/add.js +29 -7
- package/dist/cli/commands/add.js.map +1 -1
- package/dist/cli/commands/daemon.d.ts.map +1 -1
- package/dist/cli/commands/daemon.js +12 -0
- package/dist/cli/commands/daemon.js.map +1 -1
- package/dist/cli/commands/status.js +1 -1
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/up.d.ts.map +1 -1
- package/dist/cli/commands/up.js +2 -0
- package/dist/cli/commands/up.js.map +1 -1
- package/dist/cli/utils/daemon.d.ts +3 -0
- package/dist/cli/utils/daemon.d.ts.map +1 -0
- package/dist/cli/utils/daemon.js +29 -0
- package/dist/cli/utils/daemon.js.map +1 -0
- package/dist/core/auth.d.ts +4 -1
- package/dist/core/auth.d.ts.map +1 -1
- package/dist/core/auth.js +20 -2
- package/dist/core/auth.js.map +1 -1
- package/dist/core/docker.d.ts.map +1 -1
- package/dist/core/docker.js +133 -44
- package/dist/core/docker.js.map +1 -1
- package/dist/core/jobs.d.ts +1 -0
- package/dist/core/jobs.d.ts.map +1 -1
- package/dist/core/jobs.js +13 -1
- package/dist/core/jobs.js.map +1 -1
- package/dist/core/platform-darwin.d.ts +4 -0
- package/dist/core/platform-darwin.d.ts.map +1 -1
- package/dist/core/platform-darwin.js +84 -11
- package/dist/core/platform-darwin.js.map +1 -1
- package/dist/core/platform-linux.d.ts +3 -0
- package/dist/core/platform-linux.d.ts.map +1 -1
- package/dist/core/platform-linux.js +53 -0
- package/dist/core/platform-linux.js.map +1 -1
- package/dist/core/platform.d.ts +11 -0
- package/dist/core/platform.d.ts.map +1 -1
- package/dist/core/platform.js.map +1 -1
- package/dist/core/scheduler-runner.d.ts.map +1 -1
- package/dist/core/scheduler-runner.js +2 -1
- package/dist/core/scheduler-runner.js.map +1 -1
- package/dist/core/scheduler.d.ts +28 -2
- package/dist/core/scheduler.d.ts.map +1 -1
- package/dist/core/scheduler.js +151 -11
- package/dist/core/scheduler.js.map +1 -1
- package/dist/core/setup.d.ts +12 -0
- package/dist/core/setup.d.ts.map +1 -1
- package/dist/core/setup.js +35 -3
- package/dist/core/setup.js.map +1 -1
- package/dist/core/types.d.ts +12 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/tui/components/Dashboard.d.ts.map +1 -1
- package/dist/tui/components/Dashboard.js +1 -1
- package/dist/tui/components/Dashboard.js.map +1 -1
- package/dist/tui/components/JobDetail.d.ts.map +1 -1
- package/dist/tui/components/JobDetail.js +1 -1
- package/dist/tui/components/JobDetail.js.map +1 -1
- package/dist/tui/components/JobForm.d.ts.map +1 -1
- package/dist/tui/components/JobForm.js +40 -23
- package/dist/tui/components/JobForm.js.map +1 -1
- package/dist/tui/components/JobList.js +3 -1
- package/dist/tui/components/JobList.js.map +1 -1
- package/images/pipeline-runner/Dockerfile +5 -1
- package/images/pipeline-runner/entrypoint.sh +25 -2
- package/package.json +1 -1
- package/scheduler.sh +7 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/add.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/add.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsL/C"}
|
package/dist/cli/commands/add.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { requireConfig, handleError } from '../utils/errors.js';
|
|
5
5
|
import { addJob, validateJob } from '../../core/jobs.js';
|
|
6
|
-
import { validateCron } from '../../core/scheduler.js';
|
|
6
|
+
import { validateCron, validateRandomWindow } from '../../core/scheduler.js';
|
|
7
7
|
import { success, error } from '../utils/output.js';
|
|
8
8
|
function collectRepeatable(value, previous) {
|
|
9
9
|
return [...previous, value];
|
|
@@ -19,8 +19,10 @@ export function register(program) {
|
|
|
19
19
|
.option('--repo <url>', 'Git repo URL (required for pipeline type)')
|
|
20
20
|
.option('--pipeline <name>', 'Pipeline name (required for pipeline type)')
|
|
21
21
|
.option('--branch <branch>', 'Git branch (default: main)')
|
|
22
|
-
.option('--schedule <cron>', 'Cron expression (mutually exclusive with --once)')
|
|
22
|
+
.option('--schedule <cron>', 'Cron expression (mutually exclusive with --once, --random-window)')
|
|
23
23
|
.option('--once <datetime>', 'ISO 8601 datetime for one-time run')
|
|
24
|
+
.option('--random-window <start-end>', 'Random window in HH:MM-HH:MM format (e.g. 09:30-10:00)')
|
|
25
|
+
.option('--random-window-days <days>', 'Days for random-window (cron weekday syntax, default: *)')
|
|
24
26
|
.option('-v, --volume <vol>', 'Volume mount (repeatable)', collectRepeatable, [])
|
|
25
27
|
.option('-e, --env <kv>', 'Environment variable KEY=VALUE (repeatable)', collectRepeatable, [])
|
|
26
28
|
.option('--timeout <seconds>', 'Timeout in seconds', parseInt)
|
|
@@ -30,13 +32,14 @@ export function register(program) {
|
|
|
30
32
|
.action(async (id, opts) => {
|
|
31
33
|
try {
|
|
32
34
|
const config = requireConfig();
|
|
33
|
-
// Build schedule
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
// Build schedule — exactly one of --schedule, --once, --random-window required
|
|
36
|
+
const schedCount = [opts.schedule, opts.once, opts.randomWindow].filter(Boolean).length;
|
|
37
|
+
if (schedCount === 0) {
|
|
38
|
+
error('One of --schedule, --once, or --random-window is required');
|
|
36
39
|
process.exit(1);
|
|
37
40
|
}
|
|
38
|
-
if (
|
|
39
|
-
error('--schedule and --
|
|
41
|
+
if (schedCount > 1) {
|
|
42
|
+
error('--schedule, --once, and --random-window are mutually exclusive');
|
|
40
43
|
process.exit(1);
|
|
41
44
|
}
|
|
42
45
|
let schedule;
|
|
@@ -48,6 +51,25 @@ export function register(program) {
|
|
|
48
51
|
}
|
|
49
52
|
schedule = { type: 'cron', cron: opts.schedule };
|
|
50
53
|
}
|
|
54
|
+
else if (opts.randomWindow) {
|
|
55
|
+
const rwMatch = opts.randomWindow.match(/^(\d{2}:\d{2})-(\d{2}:\d{2})$/);
|
|
56
|
+
if (!rwMatch) {
|
|
57
|
+
error('Invalid --random-window format (expected HH:MM-HH:MM)');
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
const rwSchedule = {
|
|
61
|
+
type: 'random-window',
|
|
62
|
+
start: rwMatch[1],
|
|
63
|
+
end: rwMatch[2],
|
|
64
|
+
...(opts.randomWindowDays ? { days: opts.randomWindowDays } : {}),
|
|
65
|
+
};
|
|
66
|
+
const rwErr = validateRandomWindow(rwSchedule);
|
|
67
|
+
if (rwErr) {
|
|
68
|
+
error(`Invalid random-window: ${rwErr}`);
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
schedule = rwSchedule;
|
|
72
|
+
}
|
|
51
73
|
else {
|
|
52
74
|
const d = new Date(opts.once);
|
|
53
75
|
if (isNaN(d.getTime())) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/cli/commands/add.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/cli/commands/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/daemon.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/daemon.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuG/C"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import { handleError } from '../utils/errors.js';
|
|
5
5
|
import { platform } from '../../core/platform.js';
|
|
6
6
|
import { success, error, info, statusIcon } from '../utils/output.js';
|
|
7
|
+
import { repairStaleDaemonConfig, warnIfDaemonConfigStale } from '../utils/daemon.js';
|
|
7
8
|
export function register(program) {
|
|
8
9
|
const cmd = program
|
|
9
10
|
.command('daemon')
|
|
@@ -22,6 +23,15 @@ export function register(program) {
|
|
|
22
23
|
if (status.lastExitStatus !== undefined) {
|
|
23
24
|
console.log(` Last exit: ${status.lastExitStatus}`);
|
|
24
25
|
}
|
|
26
|
+
if (warnIfDaemonConfigStale()) {
|
|
27
|
+
console.log();
|
|
28
|
+
if (platform.getDaemonProjectDir()) {
|
|
29
|
+
info('Run `agent-oven daemon restart` to regenerate the config.');
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
info('Run `agent-oven init` from the intended project directory to regenerate the config.');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
25
35
|
console.log();
|
|
26
36
|
}
|
|
27
37
|
catch (err) {
|
|
@@ -37,6 +47,7 @@ export function register(program) {
|
|
|
37
47
|
error(`Daemon config not found at ${platform.getDaemonConfigPath()}. Run \`agent-oven init\` first.`);
|
|
38
48
|
process.exit(1);
|
|
39
49
|
}
|
|
50
|
+
await repairStaleDaemonConfig();
|
|
40
51
|
const status = await platform.getSchedulerStatus();
|
|
41
52
|
if (status.loaded) {
|
|
42
53
|
info('Daemon is already loaded');
|
|
@@ -75,6 +86,7 @@ export function register(program) {
|
|
|
75
86
|
error(`Daemon config not found at ${platform.getDaemonConfigPath()}. Run \`agent-oven init\` first.`);
|
|
76
87
|
process.exit(1);
|
|
77
88
|
}
|
|
89
|
+
await repairStaleDaemonConfig();
|
|
78
90
|
const status = await platform.getSchedulerStatus();
|
|
79
91
|
if (status.loaded) {
|
|
80
92
|
await platform.stopDaemon();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/cli/commands/daemon.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/cli/commands/daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,7 +44,7 @@ export function register(program) {
|
|
|
44
44
|
}
|
|
45
45
|
// Jobs
|
|
46
46
|
const j = status.jobs;
|
|
47
|
-
console.log(` Jobs: ${j.total} total, ${j.enabled} enabled, ${j.cron} cron, ${j.oncePending} pending`);
|
|
47
|
+
console.log(` Jobs: ${j.total} total, ${j.enabled} enabled, ${j.cron} cron, ${j.randomWindow} random-window, ${j.oncePending} pending`);
|
|
48
48
|
// Running containers
|
|
49
49
|
if (status.runningContainers.length > 0) {
|
|
50
50
|
console.log(` Running: ${status.runningContainers.length} container${status.runningContainers.length > 1 ? 's' : ''}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,MAAM,UAAU,QAAQ,CAAC,OAAgB;IACvC,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,6BAA6B,CAAC;SAC1C,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,IAAwB,EAAE,EAAE;QACzC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;YAC/B,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;YAE7C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC7C,OAAO;YACT,CAAC;YAED,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;YAE5D,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YAEnC,UAAU;YACV,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YAC/B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,KAAK,GAAG;oBACZ,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI;oBACzC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,IAAI;oBACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI;iBAC/C,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvG,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC3E,CAAC;YAED,YAAY;YACZ,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC;YAC/B,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/F,OAAO,CAAC,GAAG,CAAC,mBAAmB,UAAU,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;YACnE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,mBAAmB,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACjE,CAAC;YAED,OAAO;YACP,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,OAAO,aAAa,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,WAAW,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"up.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/up.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"up.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/up.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0C/C"}
|
package/dist/cli/commands/up.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import { requireConfig, handleError } from '../utils/errors.js';
|
|
5
5
|
import { platform } from '../../core/platform.js';
|
|
6
6
|
import { success, info } from '../utils/output.js';
|
|
7
|
+
import { repairStaleDaemonConfig } from '../utils/daemon.js';
|
|
7
8
|
export function register(program) {
|
|
8
9
|
program
|
|
9
10
|
.command('up')
|
|
@@ -30,6 +31,7 @@ export function register(program) {
|
|
|
30
31
|
info('Scheduler config not found — skipping daemon. Run `agent-oven init` to set up.');
|
|
31
32
|
return;
|
|
32
33
|
}
|
|
34
|
+
await repairStaleDaemonConfig();
|
|
33
35
|
const sched = await platform.getSchedulerStatus();
|
|
34
36
|
if (sched.loaded) {
|
|
35
37
|
info('Scheduler daemon is already loaded');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"up.js","sourceRoot":"","sources":["../../../src/cli/commands/up.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"up.js","sourceRoot":"","sources":["../../../src/cli/commands/up.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,MAAM,UAAU,QAAQ,CAAC,OAAgB;IACvC,OAAO;SACJ,OAAO,CAAC,IAAI,CAAC;SACb,WAAW,CAAC,kDAAkD,CAAC;SAC/D,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;YAE/B,kBAAkB;YAClB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YAClD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC;YACrF,CAAC;iBAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBAC5B,IAAI,CAAC,oBAAoB,CAAC,CAAC;gBAC3B,MAAM,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBACpC,OAAO,CAAC,gBAAgB,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,+CAA+C;gBAC/C,MAAM,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACtC,CAAC;YAED,iBAAiB;YACjB,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,EAAE,CAAC;gBACnC,IAAI,CAAC,gFAAgF,CAAC,CAAC;gBACvF,OAAO;YACT,CAAC;YAED,MAAM,uBAAuB,EAAE,CAAC;YAEhC,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,kBAAkB,EAAE,CAAC;YAClD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,oCAAoC,CAAC,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACN,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAC7B,OAAO,CAAC,0BAA0B,CAAC,CAAC;YACtC,CAAC;YAED,OAAO,CAAC,cAAc,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/daemon.ts"],"names":[],"mappings":"AAGA,wBAAgB,uBAAuB,IAAI,OAAO,CAQjD;AAED,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,OAAO,CAAC,CAuBhE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { platform } from '../../core/platform.js';
|
|
2
|
+
import { success, warn } from './output.js';
|
|
3
|
+
export function warnIfDaemonConfigStale() {
|
|
4
|
+
const diagnostic = platform.validateDaemonConfig();
|
|
5
|
+
if (!diagnostic) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
warn(diagnostic);
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
export async function repairStaleDaemonConfig() {
|
|
12
|
+
const diagnostic = platform.validateDaemonConfig();
|
|
13
|
+
if (!diagnostic) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
warn(diagnostic);
|
|
17
|
+
const projectDir = platform.getDaemonProjectDir();
|
|
18
|
+
if (!projectDir) {
|
|
19
|
+
throw new Error(`Unable to determine the project directory from daemon config at ${platform.getDaemonConfigPath()}. ` +
|
|
20
|
+
'Run `agent-oven init` from the intended project directory to regenerate it.');
|
|
21
|
+
}
|
|
22
|
+
const result = await platform.installDaemon(projectDir);
|
|
23
|
+
if (!result.success) {
|
|
24
|
+
throw new Error(`Failed to regenerate daemon config: ${result.error}`);
|
|
25
|
+
}
|
|
26
|
+
success(`Daemon config regenerated with current Node path for ${projectDir}.`);
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=daemon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/cli/utils/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,UAAU,uBAAuB;IACrC,MAAM,UAAU,GAAG,QAAQ,CAAC,oBAAoB,EAAE,CAAC;IACnD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,CAAC;IACjB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB;IAC3C,MAAM,UAAU,GAAG,QAAQ,CAAC,oBAAoB,EAAE,CAAC;IACnD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,CAAC;IAEjB,MAAM,UAAU,GAAG,QAAQ,CAAC,mBAAmB,EAAE,CAAC;IAClD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CACb,mEAAmE,QAAQ,CAAC,mBAAmB,EAAE,IAAI;YACrG,6EAA6E,CAC9E,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IACxD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,uCAAuC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,CAAC,wDAAwD,UAAU,GAAG,CAAC,CAAC;IAC/E,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/core/auth.d.ts
CHANGED
|
@@ -10,10 +10,12 @@ export interface AuthHealthStatus {
|
|
|
10
10
|
claude: {
|
|
11
11
|
available: boolean;
|
|
12
12
|
error?: string;
|
|
13
|
+
warning?: string;
|
|
13
14
|
};
|
|
14
15
|
github: {
|
|
15
16
|
available: boolean;
|
|
16
17
|
error?: string;
|
|
18
|
+
warning?: string;
|
|
17
19
|
};
|
|
18
20
|
}
|
|
19
21
|
/**
|
|
@@ -35,6 +37,7 @@ export declare function checkAuthHealth(authConfig: AuthConfig): AuthHealthStatu
|
|
|
35
37
|
/**
|
|
36
38
|
* Validate that auth requirements are met for a pipeline job.
|
|
37
39
|
* Throws if credentials are missing for the resolved auth mode.
|
|
40
|
+
* Returns an array of non-fatal warnings (e.g. missing ~/.claude.json).
|
|
38
41
|
*/
|
|
39
|
-
export declare function validateAuthForJob(job: PipelineJob, authConfig: AuthConfig):
|
|
42
|
+
export declare function validateAuthForJob(job: PipelineJob, authConfig: AuthConfig): string[];
|
|
40
43
|
//# sourceMappingURL=auth.d.ts.map
|
package/dist/core/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEpE,iCAAiC;AACjC,eAAO,MAAM,mBAAmB,EAAE,UAIjC,CAAC;AAEF,+CAA+C;AAC/C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEpE,iCAAiC;AACjC,eAAO,MAAM,mBAAmB,EAAE,UAIjC,CAAC;AAEF,+CAA+C;AAC/C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,MAAM,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAClE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,GAAG,QAAQ,CAElF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAoCxD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,gBAAgB,CAcxE;AA2BD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,EAAE,CAsCrF"}
|
package/dist/core/auth.js
CHANGED
|
@@ -25,11 +25,18 @@ export function generateAuthArgs(authMode, authConfig, jobEnv) {
|
|
|
25
25
|
const volumes = [];
|
|
26
26
|
const envVars = {};
|
|
27
27
|
if (authMode === 'host-login') {
|
|
28
|
-
// Mount credential directories
|
|
28
|
+
// Mount credential directories
|
|
29
|
+
// .claude and .claude.json need read-write: Claude Code writes debug logs,
|
|
30
|
+
// task tracking, and uses atomic-rename on .claude.json
|
|
31
|
+
// .config/gh is read-only: gh CLI only reads credentials
|
|
29
32
|
const claudePath = authConfig.claudeCredPath;
|
|
33
|
+
const claudeJsonPath = `${claudePath}.json`; // ~/.claude.json (sibling config file)
|
|
30
34
|
const ghPath = authConfig.ghCredPath;
|
|
31
35
|
if (fs.existsSync(claudePath)) {
|
|
32
|
-
volumes.push(`${claudePath}:/root/.claude
|
|
36
|
+
volumes.push(`${claudePath}:/root/.claude`);
|
|
37
|
+
}
|
|
38
|
+
if (fs.existsSync(claudeJsonPath)) {
|
|
39
|
+
volumes.push(`${claudeJsonPath}:/root/.claude.json`);
|
|
33
40
|
}
|
|
34
41
|
if (fs.existsSync(ghPath)) {
|
|
35
42
|
volumes.push(`${ghPath}:/root/.config/gh:ro`);
|
|
@@ -53,9 +60,14 @@ export function generateAuthArgs(authMode, authConfig, jobEnv) {
|
|
|
53
60
|
*/
|
|
54
61
|
export function checkAuthHealth(authConfig) {
|
|
55
62
|
const claudePath = authConfig.claudeCredPath;
|
|
63
|
+
const claudeJsonPath = `${claudePath}.json`;
|
|
56
64
|
const ghPath = authConfig.ghCredPath;
|
|
57
65
|
const claude = checkCredentialPath(claudePath, 'Claude');
|
|
58
66
|
const github = checkCredentialPath(ghPath, 'GitHub CLI');
|
|
67
|
+
// Warn if ~/.claude dir is healthy but ~/.claude.json is missing
|
|
68
|
+
if (claude.available && !fs.existsSync(claudeJsonPath)) {
|
|
69
|
+
claude.warning = `Claude config file not found: ${claudeJsonPath} (required by newer Claude Code versions)`;
|
|
70
|
+
}
|
|
59
71
|
return { claude, github };
|
|
60
72
|
}
|
|
61
73
|
function checkCredentialPath(credPath, label) {
|
|
@@ -80,15 +92,20 @@ function checkCredentialPath(credPath, label) {
|
|
|
80
92
|
/**
|
|
81
93
|
* Validate that auth requirements are met for a pipeline job.
|
|
82
94
|
* Throws if credentials are missing for the resolved auth mode.
|
|
95
|
+
* Returns an array of non-fatal warnings (e.g. missing ~/.claude.json).
|
|
83
96
|
*/
|
|
84
97
|
export function validateAuthForJob(job, authConfig) {
|
|
85
98
|
const mode = resolveAuthMode(job, authConfig);
|
|
99
|
+
const warnings = [];
|
|
86
100
|
if (mode === 'host-login') {
|
|
87
101
|
const health = checkAuthHealth(authConfig);
|
|
88
102
|
const errors = [];
|
|
89
103
|
if (!health.claude.available) {
|
|
90
104
|
errors.push(health.claude.error ?? 'Claude credentials not available');
|
|
91
105
|
}
|
|
106
|
+
else if (health.claude.warning) {
|
|
107
|
+
warnings.push(health.claude.warning);
|
|
108
|
+
}
|
|
92
109
|
if (!health.github.available) {
|
|
93
110
|
errors.push(health.github.error ?? 'GitHub credentials not available');
|
|
94
111
|
}
|
|
@@ -110,5 +127,6 @@ export function validateAuthForJob(job, authConfig) {
|
|
|
110
127
|
throw new Error(`Auth validation failed for job "${job.id}":\n ${errors.join('\n ')}`);
|
|
111
128
|
}
|
|
112
129
|
}
|
|
130
|
+
return warnings;
|
|
113
131
|
}
|
|
114
132
|
//# sourceMappingURL=auth.js.map
|
package/dist/core/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,iCAAiC;AACjC,MAAM,CAAC,MAAM,mBAAmB,GAAe;IAC7C,WAAW,EAAE,YAAY;IACzB,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC;IAClD,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC;CACrD,CAAC;AAQF;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,GAAgB,EAAE,UAAsB;IACtE,OAAO,GAAG,CAAC,IAAI,IAAI,UAAU,CAAC,WAAW,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAkB,EAClB,UAAsB,EACtB,MAA+B;IAE/B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC9B,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/core/docker.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/core/docker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EACV,MAAM,EACN,GAAG,EAGH,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,YAAY,EACb,MAAM,YAAY,CAAC;AAgBpB;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAwBxE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,WAAW,EAAE,CAuD5E;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAiB3E;AAwBD;;GAEG;AACH,wBAAsB,MAAM,CAC1B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,EACR,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC,OAAO,CAAC,YAAY,CAAC,CAMvB;AA0YD;;GAEG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKlD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAYtE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,CAUnE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAO1D"}
|
package/dist/core/docker.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Handles container operations via Colima
|
|
4
4
|
*/
|
|
5
5
|
import { execa } from 'execa';
|
|
6
|
+
import { spawn } from 'node:child_process';
|
|
6
7
|
import * as fs from 'node:fs';
|
|
7
8
|
import * as path from 'node:path';
|
|
8
9
|
import { isPipelineJob } from './types.js';
|
|
@@ -138,6 +139,124 @@ export async function runJob(config, job, options = {}) {
|
|
|
138
139
|
// Default: Docker job (also handles any legacy jobs)
|
|
139
140
|
return runDockerJob(config, job, options);
|
|
140
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* Escape a string for safe use as a POSIX shell argument.
|
|
144
|
+
*/
|
|
145
|
+
function shellEscape(arg) {
|
|
146
|
+
return "'" + arg.replace(/'/g, "'\\''") + "'";
|
|
147
|
+
}
|
|
148
|
+
/** Give detached jobs a brief grace period to surface immediate startup failures. */
|
|
149
|
+
const DETACHED_STARTUP_GRACE_MS = 750;
|
|
150
|
+
function closeLogFd(fd) {
|
|
151
|
+
try {
|
|
152
|
+
fs.closeSync(fd);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
// Ignore close errors
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
function readLogTail(logFile, maxChars = 4096) {
|
|
159
|
+
try {
|
|
160
|
+
const content = fs.readFileSync(logFile, 'utf-8');
|
|
161
|
+
if (content.length <= maxChars) {
|
|
162
|
+
return content.trim();
|
|
163
|
+
}
|
|
164
|
+
return content.slice(-maxChars).trim();
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
return '';
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Spawn a detached Docker process that streams output to a log file.
|
|
172
|
+
* The parent process can exit immediately; the Docker container
|
|
173
|
+
* continues running with stdout/stderr flowing to the log.
|
|
174
|
+
* When the container exits, finish markers and exit code are appended.
|
|
175
|
+
*/
|
|
176
|
+
async function spawnDetachedDockerRun(args, logFile) {
|
|
177
|
+
const logFd = fs.openSync(logFile, 'a');
|
|
178
|
+
const dockerCmd = ['docker', ...args].map(shellEscape).join(' ');
|
|
179
|
+
// Run docker in foreground inside a detached shell.
|
|
180
|
+
// After docker exits, append finish markers with the exit code.
|
|
181
|
+
const script = [
|
|
182
|
+
dockerCmd,
|
|
183
|
+
'EC=$?',
|
|
184
|
+
`printf '\\n=== Finished: %s ===\\n=== Exit Code: %d ===\\n' "$(date -u +%Y-%m-%dT%H:%M:%SZ)" "$EC"`,
|
|
185
|
+
].join('\n');
|
|
186
|
+
let child;
|
|
187
|
+
try {
|
|
188
|
+
child = spawn('sh', ['-c', script], {
|
|
189
|
+
detached: true,
|
|
190
|
+
stdio: ['ignore', logFd, logFd],
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
catch (err) {
|
|
194
|
+
closeLogFd(logFd);
|
|
195
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
196
|
+
return {
|
|
197
|
+
success: false,
|
|
198
|
+
exitCode: 1,
|
|
199
|
+
logFile,
|
|
200
|
+
output: `Failed to start detached job: ${msg}`,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
return await new Promise((resolve) => {
|
|
204
|
+
let settled = false;
|
|
205
|
+
let startupTimer = null;
|
|
206
|
+
const settle = (result) => {
|
|
207
|
+
if (settled)
|
|
208
|
+
return;
|
|
209
|
+
settled = true;
|
|
210
|
+
if (startupTimer) {
|
|
211
|
+
clearTimeout(startupTimer);
|
|
212
|
+
startupTimer = null;
|
|
213
|
+
}
|
|
214
|
+
child.removeListener('error', onError);
|
|
215
|
+
child.removeListener('exit', onExit);
|
|
216
|
+
closeLogFd(logFd);
|
|
217
|
+
resolve(result);
|
|
218
|
+
};
|
|
219
|
+
const onError = (err) => {
|
|
220
|
+
settle({
|
|
221
|
+
success: false,
|
|
222
|
+
exitCode: 1,
|
|
223
|
+
logFile,
|
|
224
|
+
output: `Failed to start detached job: ${err.message}`,
|
|
225
|
+
});
|
|
226
|
+
};
|
|
227
|
+
const onExit = (exitCode, signal) => {
|
|
228
|
+
const code = exitCode ?? 1;
|
|
229
|
+
if (code === 0 && !signal) {
|
|
230
|
+
settle({
|
|
231
|
+
success: true,
|
|
232
|
+
exitCode: 0,
|
|
233
|
+
logFile,
|
|
234
|
+
output: 'Job completed before detaching',
|
|
235
|
+
});
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
const logTail = readLogTail(logFile);
|
|
239
|
+
settle({
|
|
240
|
+
success: false,
|
|
241
|
+
exitCode: code,
|
|
242
|
+
logFile,
|
|
243
|
+
output: logTail || `Detached job exited before startup completed${signal ? ` (signal: ${signal})` : ''}`,
|
|
244
|
+
});
|
|
245
|
+
};
|
|
246
|
+
child.once('error', onError);
|
|
247
|
+
child.once('exit', onExit);
|
|
248
|
+
startupTimer = setTimeout(() => {
|
|
249
|
+
child.unref();
|
|
250
|
+
settle({
|
|
251
|
+
success: true,
|
|
252
|
+
exitCode: 0,
|
|
253
|
+
logFile,
|
|
254
|
+
output: 'Job started in background',
|
|
255
|
+
});
|
|
256
|
+
}, DETACHED_STARTUP_GRACE_MS);
|
|
257
|
+
startupTimer.unref?.();
|
|
258
|
+
});
|
|
259
|
+
}
|
|
141
260
|
/**
|
|
142
261
|
* Run a Docker container job.
|
|
143
262
|
*/
|
|
@@ -183,27 +302,7 @@ async function runDockerJob(config, job, options = {}) {
|
|
|
183
302
|
].join('\n');
|
|
184
303
|
fs.writeFileSync(logFile, logHeader);
|
|
185
304
|
if (options.detach) {
|
|
186
|
-
|
|
187
|
-
dockerArgs.splice(1, 0, '-d');
|
|
188
|
-
try {
|
|
189
|
-
await execa('docker', dockerArgs);
|
|
190
|
-
return {
|
|
191
|
-
success: true,
|
|
192
|
-
exitCode: 0,
|
|
193
|
-
logFile,
|
|
194
|
-
output: 'Job started in detached mode',
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
catch (err) {
|
|
198
|
-
const error = err;
|
|
199
|
-
const errOutput = typeof error.stderr === 'string' ? error.stderr : error.message;
|
|
200
|
-
return {
|
|
201
|
-
success: false,
|
|
202
|
-
exitCode: error.exitCode ?? 1,
|
|
203
|
-
logFile,
|
|
204
|
-
output: errOutput,
|
|
205
|
-
};
|
|
206
|
-
}
|
|
305
|
+
return spawnDetachedDockerRun(args, logFile);
|
|
207
306
|
}
|
|
208
307
|
// Run in foreground with timeout
|
|
209
308
|
try {
|
|
@@ -256,8 +355,9 @@ async function runPipelineJob(config, job, options = {}) {
|
|
|
256
355
|
const logFile = prepareLogFile(config, job.id);
|
|
257
356
|
const authConfig = config.auth ?? DEFAULT_AUTH_CONFIG;
|
|
258
357
|
// Validate auth requirements
|
|
358
|
+
let authWarnings = [];
|
|
259
359
|
try {
|
|
260
|
-
validateAuthForJob(job, authConfig);
|
|
360
|
+
authWarnings = validateAuthForJob(job, authConfig);
|
|
261
361
|
}
|
|
262
362
|
catch (err) {
|
|
263
363
|
const errMsg = err instanceof Error ? err.message : String(err);
|
|
@@ -304,10 +404,18 @@ async function runPipelineJob(config, job, options = {}) {
|
|
|
304
404
|
args.push('-e', `${key}=${value}`);
|
|
305
405
|
}
|
|
306
406
|
}
|
|
407
|
+
// Handle local repo paths: mount the host repo into the container
|
|
408
|
+
// so the entrypoint can `git clone` from it inside the container.
|
|
409
|
+
let repoArg = job.source.repo;
|
|
410
|
+
if (repoArg === '.' || repoArg.startsWith('./') || repoArg.startsWith('/')) {
|
|
411
|
+
const absRepo = path.resolve(config.projectDir, repoArg);
|
|
412
|
+
args.push('-v', `${absRepo}:/workspace/source:ro`);
|
|
413
|
+
repoArg = '/workspace/source';
|
|
414
|
+
}
|
|
307
415
|
// Add image
|
|
308
416
|
args.push('agent-oven/pipeline-runner');
|
|
309
417
|
// Add entrypoint args: repo, branch, pipeline
|
|
310
|
-
args.push(
|
|
418
|
+
args.push(repoArg);
|
|
311
419
|
args.push(job.source.branch ?? 'main');
|
|
312
420
|
args.push(job.pipeline);
|
|
313
421
|
// Timeout: default 30 minutes for pipeline jobs
|
|
@@ -319,33 +427,14 @@ async function runPipelineJob(config, job, options = {}) {
|
|
|
319
427
|
`=== Pipeline: ${job.pipeline} ===`,
|
|
320
428
|
`=== Repo: ${job.source.repo} (${job.source.branch ?? 'main'}) ===`,
|
|
321
429
|
`=== Auth: ${authMode} ===`,
|
|
430
|
+
...authWarnings.map((w) => `=== WARNING: ${w} ===`),
|
|
322
431
|
`=== Started: ${new Date().toISOString()} ===`,
|
|
323
432
|
`=== Command: docker ${args.join(' ')} ===`,
|
|
324
433
|
'',
|
|
325
434
|
].join('\n');
|
|
326
435
|
fs.writeFileSync(logFile, logHeader);
|
|
327
436
|
if (options.detach) {
|
|
328
|
-
|
|
329
|
-
dockerArgs.splice(1, 0, '-d');
|
|
330
|
-
try {
|
|
331
|
-
await execa('docker', dockerArgs);
|
|
332
|
-
return {
|
|
333
|
-
success: true,
|
|
334
|
-
exitCode: 0,
|
|
335
|
-
logFile,
|
|
336
|
-
output: 'Pipeline job started in detached mode',
|
|
337
|
-
};
|
|
338
|
-
}
|
|
339
|
-
catch (err) {
|
|
340
|
-
const error = err;
|
|
341
|
-
const errOutput = typeof error.stderr === 'string' ? error.stderr : error.message;
|
|
342
|
-
return {
|
|
343
|
-
success: false,
|
|
344
|
-
exitCode: error.exitCode ?? 1,
|
|
345
|
-
logFile,
|
|
346
|
-
output: errOutput,
|
|
347
|
-
};
|
|
348
|
-
}
|
|
437
|
+
return spawnDetachedDockerRun(args, logFile);
|
|
349
438
|
}
|
|
350
439
|
// Run in foreground with timeout
|
|
351
440
|
try {
|