@detergent-software/conductor 3.0.0-dev.20 → 3.0.0-dev.22

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.
Files changed (39) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +21 -12
  3. package/build/cli.js +30 -18
  4. package/build/cli.js.map +1 -1
  5. package/build/code-host-cli.js +8 -6
  6. package/build/code-host-cli.js.map +1 -1
  7. package/build/daemon.js +1 -1
  8. package/build/daemon.js.map +1 -1
  9. package/build/help.js +14 -8
  10. package/build/help.js.map +1 -1
  11. package/build/host/launchd.js +118 -0
  12. package/build/host/launchd.js.map +1 -0
  13. package/build/host/startup.js +26 -0
  14. package/build/host/startup.js.map +1 -0
  15. package/build/host/systemd.js +91 -0
  16. package/build/host/systemd.js.map +1 -0
  17. package/build/host/task-scheduler.js +78 -0
  18. package/build/host/task-scheduler.js.map +1 -0
  19. package/build/lib/providers/ado/pipelines.js +23 -4
  20. package/build/lib/providers/ado/pipelines.js.map +1 -1
  21. package/build/lib/providers/ado/trigger.js +5 -0
  22. package/build/lib/providers/ado/trigger.js.map +1 -1
  23. package/build/lib/providers/index.js +1 -1
  24. package/build/lib/providers/index.js.map +1 -1
  25. package/build/lib/providers/verdicts/runs.js +12 -2
  26. package/build/lib/providers/verdicts/runs.js.map +1 -1
  27. package/build/run.js +20 -7
  28. package/build/run.js.map +1 -1
  29. package/build/runs.js +39 -14
  30. package/build/runs.js.map +1 -1
  31. package/build/server.js +1 -1
  32. package/build/server.js.map +1 -1
  33. package/build/upgrade.js +8 -9
  34. package/build/upgrade.js.map +1 -1
  35. package/package.json +1 -1
  36. package/plugin/skills/conductor-console/SKILL.md +1 -1
  37. package/plugin/skills/work-item/SKILL.md +3 -3
  38. package/build/startup.js +0 -92
  39. package/build/startup.js.map +0 -1
package/build/startup.js DELETED
@@ -1,92 +0,0 @@
1
- import { execFileSync, spawnSync } from 'node:child_process';
2
- import { ConductorError } from "./errors.js";
3
- export const TASK_NAME = 'Conductor';
4
- // Registers a per-user Task Scheduler task that runs `conduct supervise` at logon, which keeps
5
- // `conduct serve` running (supervise.ts). No elevation is needed for a task that runs as the
6
- // current user. conhost --headless keeps a console window (or a Windows Terminal tab) from
7
- // opening, and the zero time limit stops Task Scheduler from ending the daemon after its default
8
- // 72 hours. A second start while one runs exits on the pid lock, and its supervisor with it.
9
- export function installStartup({ cliPath, nodePath }) {
10
- requireWindows();
11
- const script = [
12
- "$ErrorActionPreference = 'Stop'",
13
- '$user = "$env:USERDOMAIN\\$env:USERNAME"',
14
- '$action = New-ScheduledTaskAction -Execute "$env:SystemRoot\\System32\\conhost.exe" -Argument $env:CONDUCTOR_TASK_ARGS',
15
- '$trigger = New-ScheduledTaskTrigger -AtLogOn -User $user',
16
- '$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable -MultipleInstances IgnoreNew -ExecutionTimeLimit ([TimeSpan]::Zero)',
17
- '$principal = New-ScheduledTaskPrincipal -UserId $user -LogonType Interactive -RunLevel Limited',
18
- `Register-ScheduledTask -TaskName '${TASK_NAME}' -Description 'Starts the conductor daemon (conduct supervise) at logon.' -Action $action -Trigger $trigger -Settings $settings -Principal $principal -Force | Out-Null`,
19
- ].join('\n');
20
- powershell(script, { CONDUCTOR_TASK_ARGS: `--headless "${nodePath}" "${cliPath}" supervise` });
21
- }
22
- // True when a task was removed, false when there was none.
23
- export function removeStartup() {
24
- requireWindows();
25
- if (!startupInstalled())
26
- return false;
27
- execFileSync('schtasks', ['/Delete', '/TN', TASK_NAME, '/F'], { stdio: 'ignore' });
28
- return true;
29
- }
30
- export function runStartup() {
31
- const result = spawnSync('schtasks', ['/Run', '/TN', TASK_NAME], { encoding: 'utf8' });
32
- if (result.status !== 0) {
33
- throw new ConductorError(`could not run the "${TASK_NAME}" logon task`, [
34
- result.stderr?.trim() || result.error?.message || `exit ${result.status}`,
35
- ]);
36
- }
37
- }
38
- export function startupInstalled() {
39
- return spawnSync('schtasks', ['/Query', '/TN', TASK_NAME], { stdio: 'ignore' }).status === 0;
40
- }
41
- // True when the logon task exists and its action runs this cli.js, so running it starts this
42
- // build. A task registered from another build (a linked checkout) would start that one.
43
- export function startupRunsCli(cliPath) {
44
- if (process.platform !== 'win32')
45
- return false;
46
- const result = spawnSync('schtasks', ['/Query', '/TN', TASK_NAME, '/XML'], { encoding: 'utf8' });
47
- return result.status === 0 && taskRunsCli(result.stdout, cliPath);
48
- }
49
- // True when the logon task runs `conduct supervise`. One an install-startup from before ATK-417
50
- // registered runs `conduct serve`, which nothing restarts.
51
- export function startupSupervises() {
52
- if (process.platform !== 'win32')
53
- return false;
54
- const result = spawnSync('schtasks', ['/Query', '/TN', TASK_NAME, '/XML'], { encoding: 'utf8' });
55
- return result.status === 0 && taskSupervises(result.stdout);
56
- }
57
- // The task's <Arguments> quote the cli.js path (installStartup); XML escapes it, and Windows paths
58
- // compare without case.
59
- export function taskRunsCli(xml, cliPath) {
60
- const args = taskArguments(xml);
61
- return args !== undefined && args.toLowerCase().includes(`"${cliPath.toLowerCase()}"`);
62
- }
63
- export function taskSupervises(xml) {
64
- return /\ssupervise\s*$/.test(taskArguments(xml) ?? '');
65
- }
66
- function powershell(script, env) {
67
- const result = spawnSync('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', script], {
68
- encoding: 'utf8',
69
- env: { ...process.env, ...env },
70
- });
71
- if (result.status !== 0) {
72
- throw new ConductorError('could not register the logon task', [result.stderr.trim() || `exit ${result.status}`]);
73
- }
74
- }
75
- function requireWindows() {
76
- if (process.platform !== 'win32') {
77
- throw new ConductorError('install-startup supports Windows only', [
78
- 'start `conduct serve` from your own login items',
79
- ]);
80
- }
81
- }
82
- // The task action's <Arguments>, XML unescaped.
83
- function taskArguments(xml) {
84
- return /<Arguments>([^<]*)<\/Arguments>/
85
- .exec(xml)?.[1]
86
- ?.replaceAll('&quot;', '"')
87
- .replaceAll('&apos;', "'")
88
- .replaceAll('&lt;', '<')
89
- .replaceAll('&gt;', '>')
90
- .replaceAll('&amp;', '&');
91
- }
92
- //# sourceMappingURL=startup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"startup.js","sourceRoot":"","sources":["../src/startup.ts"],"names":[],"mappings":"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"}