@usine/server 0.2.1 → 0.4.0

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 (231) hide show
  1. package/LICENSE +661 -21
  2. package/README.md +54 -20
  3. package/dist/backend.d.ts +26 -5
  4. package/dist/backend.d.ts.map +1 -1
  5. package/dist/backend.js +41 -16
  6. package/dist/backend.js.map +1 -1
  7. package/dist/backup.d.ts +6 -3
  8. package/dist/backup.d.ts.map +1 -1
  9. package/dist/backup.js +26 -8
  10. package/dist/backup.js.map +1 -1
  11. package/dist/cli.d.ts +77 -11
  12. package/dist/cli.d.ts.map +1 -1
  13. package/dist/cli.js +280 -31
  14. package/dist/cli.js.map +1 -1
  15. package/dist/command.d.ts +22 -0
  16. package/dist/command.d.ts.map +1 -0
  17. package/dist/command.js +51 -0
  18. package/dist/command.js.map +1 -0
  19. package/dist/detach.d.ts +83 -0
  20. package/dist/detach.d.ts.map +1 -0
  21. package/dist/detach.js +320 -0
  22. package/dist/detach.js.map +1 -0
  23. package/dist/export-run.d.ts +1 -1
  24. package/dist/export-run.d.ts.map +1 -1
  25. package/dist/export-run.js +3 -3
  26. package/dist/export-run.js.map +1 -1
  27. package/dist/failure-message.d.ts +19 -0
  28. package/dist/failure-message.d.ts.map +1 -0
  29. package/dist/failure-message.js +127 -0
  30. package/dist/failure-message.js.map +1 -0
  31. package/dist/http.d.ts +14 -5
  32. package/dist/http.d.ts.map +1 -1
  33. package/dist/http.js +86 -33
  34. package/dist/http.js.map +1 -1
  35. package/dist/index.d.ts +1 -1
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +1 -1
  38. package/dist/index.js.map +1 -1
  39. package/dist/instance/environment.d.ts +17 -0
  40. package/dist/instance/environment.d.ts.map +1 -0
  41. package/dist/instance/environment.js +51 -0
  42. package/dist/instance/environment.js.map +1 -0
  43. package/dist/instance/id.d.ts +17 -0
  44. package/dist/instance/id.d.ts.map +1 -0
  45. package/dist/instance/id.js +35 -0
  46. package/dist/instance/id.js.map +1 -0
  47. package/dist/instance/lock.d.ts +27 -0
  48. package/dist/instance/lock.d.ts.map +1 -0
  49. package/dist/instance/lock.js +127 -0
  50. package/dist/instance/lock.js.map +1 -0
  51. package/dist/instance/manifest.d.ts +52 -0
  52. package/dist/instance/manifest.d.ts.map +1 -0
  53. package/dist/instance/manifest.js +131 -0
  54. package/dist/instance/manifest.js.map +1 -0
  55. package/dist/instance/operator-api.d.ts +30 -0
  56. package/dist/instance/operator-api.d.ts.map +1 -0
  57. package/dist/instance/operator-api.js +47 -0
  58. package/dist/instance/operator-api.js.map +1 -0
  59. package/dist/instance/ports.d.ts +23 -0
  60. package/dist/instance/ports.d.ts.map +1 -0
  61. package/dist/instance/ports.js +81 -0
  62. package/dist/instance/ports.js.map +1 -0
  63. package/dist/instance/record.d.ts +82 -0
  64. package/dist/instance/record.d.ts.map +1 -0
  65. package/dist/instance/record.js +116 -0
  66. package/dist/instance/record.js.map +1 -0
  67. package/dist/instance/state.d.ts +45 -0
  68. package/dist/instance/state.d.ts.map +1 -0
  69. package/dist/instance/state.js +79 -0
  70. package/dist/instance/state.js.map +1 -0
  71. package/dist/instance/systemd.d.ts +36 -0
  72. package/dist/instance/systemd.d.ts.map +1 -0
  73. package/dist/instance/systemd.js +61 -0
  74. package/dist/instance/systemd.js.map +1 -0
  75. package/dist/logger.d.ts +3 -0
  76. package/dist/logger.d.ts.map +1 -0
  77. package/dist/logger.js +27 -0
  78. package/dist/logger.js.map +1 -0
  79. package/dist/main.js +38 -18
  80. package/dist/main.js.map +1 -1
  81. package/dist/registry.d.ts +20 -0
  82. package/dist/registry.d.ts.map +1 -0
  83. package/dist/registry.js +37 -0
  84. package/dist/registry.js.map +1 -0
  85. package/dist/reload-signal.d.ts +8 -0
  86. package/dist/reload-signal.d.ts.map +1 -0
  87. package/dist/reload-signal.js +21 -0
  88. package/dist/reload-signal.js.map +1 -0
  89. package/dist/restart.d.ts +19 -0
  90. package/dist/restart.d.ts.map +1 -0
  91. package/dist/restart.js +105 -0
  92. package/dist/restart.js.map +1 -0
  93. package/dist/shutdown.d.ts +5 -2
  94. package/dist/shutdown.d.ts.map +1 -1
  95. package/dist/shutdown.js +11 -5
  96. package/dist/shutdown.js.map +1 -1
  97. package/dist/status.d.ts +12 -0
  98. package/dist/status.d.ts.map +1 -0
  99. package/dist/status.js +99 -0
  100. package/dist/status.js.map +1 -0
  101. package/dist/stop.d.ts +81 -0
  102. package/dist/stop.d.ts.map +1 -0
  103. package/dist/stop.js +195 -0
  104. package/dist/stop.js.map +1 -0
  105. package/dist/system-sleep.d.ts +9 -0
  106. package/dist/system-sleep.d.ts.map +1 -0
  107. package/dist/system-sleep.js +42 -0
  108. package/dist/system-sleep.js.map +1 -0
  109. package/dist/tracing.d.ts +22 -0
  110. package/dist/tracing.d.ts.map +1 -0
  111. package/dist/tracing.js +61 -0
  112. package/dist/tracing.js.map +1 -0
  113. package/dist/up.d.ts +2 -2
  114. package/dist/up.d.ts.map +1 -1
  115. package/dist/up.js +62 -24
  116. package/dist/up.js.map +1 -1
  117. package/dist/upgrade.d.ts +58 -0
  118. package/dist/upgrade.d.ts.map +1 -0
  119. package/dist/upgrade.js +237 -0
  120. package/dist/upgrade.js.map +1 -0
  121. package/dist/web/assets/CompositeItem-DU6IyNMY.js +1 -0
  122. package/dist/web/assets/ToolbarRootContext-Cytu6o2e.js +1 -0
  123. package/dist/web/assets/X.es-B7iqdxa_.js +1 -0
  124. package/dist/web/assets/_agent-BVKD5odk.js +1 -0
  125. package/dist/web/assets/_loop-BFLzamuo.js +1 -0
  126. package/dist/web/assets/_name-Bh4AQ9sR.js +6 -0
  127. package/dist/web/assets/_name-CMVsmWzq.js +1 -0
  128. package/dist/web/assets/_name-DCkgEma_.js +1 -0
  129. package/dist/web/assets/_name-Ds_pWi15.js +1 -0
  130. package/dist/web/assets/_number-B9aYwvcQ.js +1 -0
  131. package/dist/web/assets/_run-BZWt47QS.js +8 -0
  132. package/dist/web/assets/_worker-Dgfufm5p.js +1 -0
  133. package/dist/web/assets/action-rCd1FeAz.js +1 -0
  134. package/dist/web/assets/agents-Drbg6qpH.js +1 -0
  135. package/dist/web/assets/agents-_6-dEjrY.js +1 -0
  136. package/dist/web/assets/button-DVWXde__.js +1 -0
  137. package/dist/web/assets/collapsible-IOhZV1qg.js +1 -0
  138. package/dist/web/assets/core-wi-Hu_JV.js +12 -0
  139. package/dist/web/assets/drawer-BiqnR_8i.js +1 -0
  140. package/dist/web/assets/dropdown-menu-C9D1kRkO.js +1 -0
  141. package/dist/web/assets/edit-and-retry-BgOR6mvP.js +1 -0
  142. package/dist/web/assets/engine-javascript-D-6se_EF.js +141 -0
  143. package/dist/web/assets/error-alert-9tKpTE3v.js +1 -0
  144. package/dist/web/assets/file-error-SjG2jLJ9.js +1 -0
  145. package/dist/web/assets/fill-cell-ClM88KFD.js +1 -0
  146. package/dist/web/assets/heading-lX1a1LNN.js +1 -0
  147. package/dist/web/assets/index-BymNZU1Q.js +10 -0
  148. package/dist/web/assets/index-Dyjfp3ET.css +2 -0
  149. package/dist/web/assets/inter-cyrillic-ext-opsz-normal-CfYZpDVp.woff2 +0 -0
  150. package/dist/web/assets/inter-cyrillic-opsz-normal-BFQXbQ-f.woff2 +0 -0
  151. package/dist/web/assets/inter-greek-ext-opsz-normal-BmPQvyvo.woff2 +0 -0
  152. package/dist/web/assets/inter-greek-opsz-normal-BM0NlUE_.woff2 +0 -0
  153. package/dist/web/assets/inter-latin-ext-opsz-normal-DpK-iCPk.woff2 +0 -0
  154. package/dist/web/assets/inter-latin-opsz-normal-BwkfbSeq.woff2 +0 -0
  155. package/dist/web/assets/inter-vietnamese-opsz-normal-Ci9T9ieq.woff2 +0 -0
  156. package/dist/web/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
  157. package/dist/web/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
  158. package/dist/web/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  159. package/dist/web/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  160. package/dist/web/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
  161. package/dist/web/assets/label-badge-aIGT1Bry.js +1 -0
  162. package/dist/web/assets/list-v8WJp2Eq.js +1 -0
  163. package/dist/web/assets/loops-BFoFf_og.js +1 -0
  164. package/dist/web/assets/mark-CC3RwMy_.js +1 -0
  165. package/dist/web/assets/markdown-BnyfnuCL.js +29 -0
  166. package/dist/web/assets/matchContext-BquevSJS.js +2 -0
  167. package/dist/web/assets/model-BerBT6R0.js +1 -0
  168. package/dist/web/assets/moves-Dg9sshX5.js +1 -0
  169. package/dist/web/assets/overview-C_tFKGZ8.js +1 -0
  170. package/dist/web/assets/page-DWnGi6wA.js +301 -0
  171. package/dist/web/assets/project-not-found-CodaBVdu.js +1 -0
  172. package/dist/web/assets/pull-request-marks-DE00nqGW.js +1 -0
  173. package/dist/web/assets/queries-B1SHA_r4.js +1 -0
  174. package/dist/web/assets/reload-Dsl0zjJ7.js +1 -0
  175. package/dist/web/assets/repositories-BdxmD192.js +1 -0
  176. package/dist/web/assets/repositories-D4wYJfa_.js +1 -0
  177. package/dist/web/assets/route-B_gphTYG.js +1 -0
  178. package/dist/web/assets/route-Cc7dKnn5.js +1 -0
  179. package/dist/web/assets/routes-BLy5TGH_.js +65 -0
  180. package/dist/web/assets/run-again-BTKagSXR.js +1 -0
  181. package/dist/web/assets/section-B3pWIIBa.js +1 -0
  182. package/dist/web/assets/section-CD-MB5r3.js +1 -0
  183. package/dist/web/assets/section-Id99HktI.js +1 -0
  184. package/dist/web/assets/settings-YrDysQXW.js +1 -0
  185. package/dist/web/assets/slots-BraHmbNr.js +1 -0
  186. package/dist/web/assets/status-badge-DnvNo1tG.js +1 -0
  187. package/dist/web/assets/strings-CW2XaR5f.js +1 -0
  188. package/dist/web/assets/table-BjyI4fVI.js +1 -0
  189. package/dist/web/assets/tasks-DCL8kLmD.js +1 -0
  190. package/dist/web/assets/transcript-sxRJzx6t.js +5 -0
  191. package/dist/web/assets/usage-CLQJdX9-.js +1 -0
  192. package/dist/web/assets/use-now-0P8TUXeg.js +1 -0
  193. package/dist/web/assets/useAnchoredPopupScrollLock-CQ83Wy-r.js +1 -0
  194. package/dist/web/assets/useNavigate-BW1WdocJ.js +1 -0
  195. package/dist/web/assets/usePositioner-rNCxnHO-.js +1 -0
  196. package/dist/web/assets/useTimeout-_TcdZXP6.js +1 -0
  197. package/dist/web/assets/with-selector-DoElmmtd.js +1 -0
  198. package/dist/web/assets/workers-BH5CBOR3.js +1 -0
  199. package/dist/web/index.html +16 -10
  200. package/package.json +17 -12
  201. package/dist/web/assets/_name-DdyMEUN6.js +0 -6
  202. package/dist/web/assets/_name-eoobiMh0.js +0 -1
  203. package/dist/web/assets/_name-pUxlKZt5.js +0 -1
  204. package/dist/web/assets/badge-t7m0Vk1K.js +0 -146
  205. package/dist/web/assets/button-BoOukj77.js +0 -1
  206. package/dist/web/assets/core-CLXRiB63.js +0 -12
  207. package/dist/web/assets/empty-DbVYU7bi.js +0 -1
  208. package/dist/web/assets/engine-javascript-h-x4hGa4.js +0 -141
  209. package/dist/web/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  210. package/dist/web/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  211. package/dist/web/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  212. package/dist/web/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  213. package/dist/web/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2 +0 -0
  214. package/dist/web/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2 +0 -0
  215. package/dist/web/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2 +0 -0
  216. package/dist/web/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
  217. package/dist/web/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2 +0 -0
  218. package/dist/web/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2 +0 -0
  219. package/dist/web/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  220. package/dist/web/assets/index-CVBBoW6r.css +0 -2
  221. package/dist/web/assets/index-CsW8KcJW.js +0 -10
  222. package/dist/web/assets/loops-DghpuoiG.js +0 -1
  223. package/dist/web/assets/operator-copy-DIsVXn17.js +0 -1
  224. package/dist/web/assets/overview-DmCIVPwN.js +0 -1
  225. package/dist/web/assets/rolldown-runtime-hePW80VL.js +0 -1
  226. package/dist/web/assets/routes-BDyP7vCr.js +0 -1
  227. package/dist/web/assets/run-drawer-B-xhTXe4.js +0 -157
  228. package/dist/web/assets/status-badge-yblcElE0.js +0 -1
  229. package/dist/web/assets/table-B8cLYNvq.js +0 -1
  230. package/dist/web/assets/useCompositeItem-HmBmWxUW.js +0 -1
  231. package/dist/web/assets/with-selector-N6m4X0X_.js +0 -1
package/dist/cli.js CHANGED
@@ -1,15 +1,43 @@
1
+ import { createServer } from "node:net";
1
2
  import { tmpdir } from "node:os";
2
3
  import { resolve, sep } from "node:path";
3
4
  import { fileURLToPath } from "node:url";
4
5
  import { RunId } from "@usine/core/run";
5
- import { Console, Duration, Effect, FileSystem, Option, Schema } from "effect";
6
- import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process";
6
+ import { Array as Arr, Console, Duration, Effect, FileSystem, Option, Schema } from "effect";
7
+ import { ChildProcess, ChildProcessSpawner } from "effect/process";
7
8
  export const DEFAULT_PORT = 7_331;
9
+ /** The address that the HTTP server listens on and the port check probes. */
10
+ export const SERVER_HOST = "127.0.0.1";
8
11
  export const BROWSER_OPEN_TIMEOUT = "2 seconds";
12
+ const PORT_HOLDER_TIMEOUT = "2 seconds";
9
13
  export const Port = Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 65_535 }, { message: "Expected a TCP port" })).pipe(Schema.brand("ServerPort"));
10
14
  const PortFromString = Schema.NumberFromString.pipe(Schema.decodeTo(Port));
15
+ /**
16
+ * The origin of the UI's pages behind a proxy, such as the HTTPS URL at which `tailscale serve`
17
+ * publishes the UI: an `http` or `https` scheme, a host, and a port other than the scheme's
18
+ * default, as a browser writes it in the `Origin` header.
19
+ */
20
+ export const UiOrigin = Schema.String.check(Schema.makeFilter((origin) => URL.canParse(origin) &&
21
+ ["http:", "https:"].includes(new URL(origin).protocol) &&
22
+ new URL(origin).origin === origin, { message: "Expected an http or https origin, such as https://orchestrator.example.ts.net" })).pipe(Schema.brand("UiOrigin"));
23
+ /** The minimum level of the lines `usine up` logs. */
24
+ export const UpLogLevel = Schema.Literals(["Trace", "Debug", "Info", "Warn", "Error"]);
25
+ export const DEFAULT_LOG_LEVEL = "Info";
26
+ const LogLevelName = Schema.Literals(["trace", "debug", "info", "warn", "error"]);
27
+ const LOG_LEVEL_NAMES = {
28
+ trace: "Trace",
29
+ debug: "Debug",
30
+ info: "Info",
31
+ warn: "Warn",
32
+ error: "Error",
33
+ };
34
+ export const DEFAULT_LIFECYCLE_TIMEOUT_SECONDS = 120;
11
35
  export const CLI_USAGE = `Usage:
12
- usine up [--port <port>] [--allow-volatile-instance]
36
+ usine up [--port <port>] [--origin <url>] [--log-level <level>] [--allow-volatile-instance] [--detach]
37
+ usine status
38
+ usine stop [--timeout <seconds>] [--force]
39
+ usine restart [--timeout <seconds>] [--force]
40
+ usine upgrade [<version>] [--check] [--timeout <seconds>] [--force]
13
41
  usine backup <path>
14
42
  usine export-run <runId> [--output <path>]
15
43
  usine --help
@@ -17,23 +45,38 @@ export const CLI_USAGE = `Usage:
17
45
 
18
46
  Options:
19
47
  -p, --port <port> Listen on this port (default: 7331)
20
- --allow-volatile-instance Start even when the instance folder sits under a temp path
21
- -o, --output <path> Write Run evidence here (default: run-<encoded-runId>.json)
22
- -h, --help Print this usage
23
- -v, --version Print the pinned @usine/server version
48
+ --origin <url> Also accept the UI's pages at this origin, such as the URL of tailscale serve
49
+ --log-level <level> Log at this level and above: trace, debug, info, warn, or error (default: info)
50
+ --allow-volatile-instance Start even when the instance folder is in a temporary directory
51
+ --detach Start in the background, with the output in .usine/usine.log
52
+ --timeout <seconds> Wait this long for the instance to stop, and for the new one to listen or log a line (default: ${DEFAULT_LIFECYCLE_TIMEOUT_SECONDS})
53
+ --force Stop without waiting for running attempts; the next start reattaches them
54
+ --check Print the running and the latest @usine/server version, and change nothing
55
+ -o, --output <path> Write the run evidence to this file (default: run-<encoded-runId>.json)
56
+ -h, --help Print this help
57
+ -v, --version Print the installed @usine/server version
24
58
 
25
59
  Environment:
26
- USINE_PORT Listen on this port when --port is absent
27
- USINE_ALLOW_VOLATILE_INSTANCE Same as --allow-volatile-instance when set to 1`;
60
+ USINE_PORT Listen on this port if --port is not set
61
+ USINE_ORIGIN Also accept the UI's pages at this origin if --origin is not set
62
+ USINE_LOG_LEVEL Log at this level if --log-level is not set
63
+ USINE_ALLOW_VOLATILE_INSTANCE Set to 1 for the same effect as --allow-volatile-instance
64
+
65
+ Every command reads .env in the instance folder for the variables that the environment doesn't set.`;
28
66
  export class CliUsageError extends Schema.TaggedError("@usine/server/CliUsageError")("CliUsageError", { message: Schema.String }) {
29
67
  }
30
68
  export class CliVersionError extends Schema.TaggedError("@usine/server/CliVersionError")("CliVersionError", { cause: Schema.Defect() }) {
31
69
  }
32
- export class PortInUseError extends Schema.TaggedError("@usine/server/PortInUseError")("PortInUseError", { port: Port }) {
70
+ /** Another process is listening on the HTTP port. */
71
+ export class PortInUseError extends Schema.TaggedError("@usine/server/PortInUseError")("PortInUseError", {
72
+ port: Port,
73
+ /** The PID of the listening process, or `None` if lsof can't find it. */
74
+ holder: Schema.Option(Schema.Int),
75
+ }) {
33
76
  }
34
77
  export class ServerStartError extends Schema.TaggedError("@usine/server/ServerStartError")("ServerStartError", { port: Port, cause: Schema.Defect() }) {
35
78
  }
36
- /** Raised when the instance folder sits under a path the OS may clear, since its runtime store is the only copy of run history. */
79
+ /** The instance folder is in a directory the OS may clear, which would delete the run history. */
37
80
  export class VolatileInstanceDirectoryError extends Schema.TaggedError("@usine/server/VolatileInstanceDirectoryError")("VolatileInstanceDirectoryError", {
38
81
  directory: Schema.String,
39
82
  root: Schema.String,
@@ -48,7 +91,38 @@ export class HelpCommand extends Schema.TaggedClass("@usine/server/HelpCommand")
48
91
  }
49
92
  export class VersionCommand extends Schema.TaggedClass("@usine/server/VersionCommand")("VersionCommand", {}) {
50
93
  }
51
- export class UpCommand extends Schema.TaggedClass("@usine/server/UpCommand")("UpCommand", { port: Port, allowVolatileInstance: Schema.Boolean }) {
94
+ export class UpCommand extends Schema.TaggedClass("@usine/server/UpCommand")("UpCommand", {
95
+ port: Port,
96
+ /** The origin of the UI's pages besides the loopback ones, which the operator API accepts. */
97
+ origin: Schema.Option(UiOrigin),
98
+ logLevel: UpLogLevel,
99
+ allowVolatileInstance: Schema.Boolean,
100
+ detach: Schema.Boolean,
101
+ }) {
102
+ }
103
+ /** Reports whether `usine up` runs in the current instance folder. */
104
+ export class StatusCommand extends Schema.TaggedClass("@usine/server/StatusCommand")("StatusCommand", {}) {
105
+ }
106
+ /** How long a lifecycle command waits for each stop and start, and whether it ends the drain. */
107
+ export class LifecycleOptions extends Schema.Class("@usine/server/LifecycleOptions")({
108
+ timeout: Schema.Duration,
109
+ /** Sends a second `SIGTERM`, which stops the instance without waiting for running Attempts. */
110
+ force: Schema.Boolean,
111
+ }) {
112
+ }
113
+ /** Stops the `usine up` of the current instance folder and waits for it to exit. */
114
+ export class StopCommand extends Schema.TaggedClass("@usine/server/StopCommand")("StopCommand", { options: LifecycleOptions }) {
115
+ }
116
+ /** Stops the `usine up` of the current instance folder and starts it again in the background. */
117
+ export class RestartCommand extends Schema.TaggedClass("@usine/server/RestartCommand")("RestartCommand", { options: LifecycleOptions }) {
118
+ }
119
+ /** Moves the instance's `@usine/server` pin to another published version and restarts it. */
120
+ export class UpgradeCommand extends Schema.TaggedClass("@usine/server/UpgradeCommand")("UpgradeCommand", {
121
+ /** A version or dist-tag; `latest` if absent. */
122
+ version: Schema.Option(Schema.NonEmptyString),
123
+ check: Schema.Boolean,
124
+ options: LifecycleOptions,
125
+ }) {
52
126
  }
53
127
  /** Exports one Run from the current instance into a new local JSON file. */
54
128
  export class ExportRunCommand extends Schema.TaggedClass("@usine/server/ExportRunCommand")("ExportRunCommand", {
@@ -63,11 +137,26 @@ export const CliCommand = Schema.Union([
63
137
  HelpCommand,
64
138
  VersionCommand,
65
139
  UpCommand,
140
+ StatusCommand,
141
+ StopCommand,
142
+ RestartCommand,
143
+ UpgradeCommand,
66
144
  ExportRunCommand,
67
145
  BackupCommand,
68
146
  ]);
69
147
  const usageError = (message = CLI_USAGE) => new CliUsageError({ message });
70
148
  const decodePort = (source, value) => Schema.decodeUnknownEffect(PortFromString)(value).pipe(Effect.mapError(() => usageError(`${source} must be a whole number between 1 and 65535.\n\n${CLI_USAGE}`)));
149
+ /** Returns the origin of a URL without a path, query, or fragment, else `value` itself. */
150
+ const originOf = (value) => {
151
+ if (!URL.canParse(value))
152
+ return value;
153
+ const url = new URL(value);
154
+ return url.href === `${url.origin}/` ? url.origin : value;
155
+ };
156
+ /** Decodes the URL of the UI's pages, such as `https://orchestrator.example.ts.net/`. */
157
+ const decodeUiOrigin = (source, value) => Schema.decodeUnknownEffect(UiOrigin)(originOf(value)).pipe(Effect.mapError(() => usageError(`${source} must be the http or https URL of the UI without a path, such as https://orchestrator.example.ts.net.\n\n${CLI_USAGE}`)));
158
+ /** Decodes a log level name, ignoring case. */
159
+ const decodeLogLevel = (source, value) => Schema.decodeUnknownEffect(LogLevelName)(value.toLowerCase()).pipe(Effect.map((name) => LOG_LEVEL_NAMES[name]), Effect.mapError(() => usageError(`${source} must be trace, debug, info, warn, or error.\n\n${CLI_USAGE}`)));
71
160
  const ALLOW_VOLATILE_FLAG = "--allow-volatile-instance";
72
161
  const exportRunCommand = (args) => {
73
162
  const [runId, flag, output] = args;
@@ -89,7 +178,10 @@ const backupCommand = (args) => {
89
178
  };
90
179
  const upCommand = (args, environment) => Effect.gen(function* () {
91
180
  let port = Option.none();
181
+ let origin = Option.none();
182
+ let logLevel = Option.none();
92
183
  let allowVolatileInstance = Option.exists(environment.allowVolatileInstance, (v) => v === "1");
184
+ let detach = false;
93
185
  for (let index = 0; index < args.length; index += 1) {
94
186
  const arg = args[index];
95
187
  if (arg === "--port" || arg === "-p") {
@@ -102,9 +194,32 @@ const upCommand = (args, environment) => Effect.gen(function* () {
102
194
  else if (arg?.startsWith("--port=")) {
103
195
  port = Option.some(arg.slice("--port=".length));
104
196
  }
197
+ else if (arg === "--origin") {
198
+ const value = args[index + 1];
199
+ if (value === undefined)
200
+ return yield* usageError();
201
+ origin = Option.some(value);
202
+ index += 1;
203
+ }
204
+ else if (arg?.startsWith("--origin=")) {
205
+ origin = Option.some(arg.slice("--origin=".length));
206
+ }
207
+ else if (arg === "--log-level") {
208
+ const value = args[index + 1];
209
+ if (value === undefined)
210
+ return yield* usageError();
211
+ logLevel = Option.some(value);
212
+ index += 1;
213
+ }
214
+ else if (arg?.startsWith("--log-level=")) {
215
+ logLevel = Option.some(arg.slice("--log-level=".length));
216
+ }
105
217
  else if (arg === ALLOW_VOLATILE_FLAG) {
106
218
  allowVolatileInstance = true;
107
219
  }
220
+ else if (arg === "--detach") {
221
+ detach = true;
222
+ }
108
223
  else {
109
224
  return yield* usageError();
110
225
  }
@@ -116,28 +231,123 @@ const upCommand = (args, environment) => Effect.gen(function* () {
116
231
  }),
117
232
  onSome: (value) => decodePort("--port", value),
118
233
  });
119
- return new UpCommand({ port: resolvedPort, allowVolatileInstance });
234
+ const resolvedOrigin = yield* Option.match(origin, {
235
+ onNone: () => Option.match(environment.origin, {
236
+ onNone: () => Effect.succeedNone,
237
+ onSome: (value) => Effect.asSome(decodeUiOrigin("USINE_ORIGIN", value)),
238
+ }),
239
+ onSome: (value) => Effect.asSome(decodeUiOrigin("--origin", value)),
240
+ });
241
+ const resolvedLogLevel = yield* Option.match(logLevel, {
242
+ onNone: () => Option.match(environment.logLevel, {
243
+ onNone: () => Effect.succeed(DEFAULT_LOG_LEVEL),
244
+ onSome: (value) => decodeLogLevel("USINE_LOG_LEVEL", value),
245
+ }),
246
+ onSome: (value) => decodeLogLevel("--log-level", value),
247
+ });
248
+ return new UpCommand({
249
+ port: resolvedPort,
250
+ origin: resolvedOrigin,
251
+ logLevel: resolvedLogLevel,
252
+ allowVolatileInstance,
253
+ detach,
254
+ });
255
+ });
256
+ /** Returns the settings of a `usine up` without flags: those of the environment, or the defaults. */
257
+ export const environmentUp = (environment) => upCommand([], environment);
258
+ const SecondsFromString = Schema.NumberFromString.pipe(Schema.decodeTo(Schema.Int.check(Schema.isGreaterThan(0))));
259
+ /** Parses `--timeout`, `--force`, and, if `allowCheck`, `--check`, and collects the operands. */
260
+ const lifecycleArguments = (args, allowCheck) => Effect.gen(function* () {
261
+ let timeout = Option.none();
262
+ let force = false;
263
+ let check = false;
264
+ const operands = [];
265
+ for (let index = 0; index < args.length; index += 1) {
266
+ const arg = args[index] ?? "";
267
+ if (arg === "--timeout") {
268
+ const value = args[index + 1];
269
+ if (value === undefined)
270
+ return yield* usageError();
271
+ timeout = Option.some(value);
272
+ index += 1;
273
+ }
274
+ else if (arg.startsWith("--timeout=")) {
275
+ timeout = Option.some(arg.slice("--timeout=".length));
276
+ }
277
+ else if (arg === "--force") {
278
+ force = true;
279
+ }
280
+ else if (arg === "--check" && allowCheck) {
281
+ check = true;
282
+ }
283
+ else if (arg !== "" && !arg.startsWith("-")) {
284
+ operands.push(arg);
285
+ }
286
+ else {
287
+ return yield* usageError();
288
+ }
289
+ }
290
+ const seconds = yield* Option.match(timeout, {
291
+ onNone: () => Effect.succeed(DEFAULT_LIFECYCLE_TIMEOUT_SECONDS),
292
+ onSome: (value) => Schema.decodeUnknownEffect(SecondsFromString)(value).pipe(Effect.mapError(() => usageError(`--timeout must be a whole number of seconds above 0.\n\n${CLI_USAGE}`))),
293
+ });
294
+ return {
295
+ options: new LifecycleOptions({ timeout: Duration.seconds(seconds), force }),
296
+ check,
297
+ operands,
298
+ };
120
299
  });
300
+ const stopOrRestartCommand = (command, args) => Effect.flatMap(lifecycleArguments(args, false), ({ options, operands }) => {
301
+ if (operands.length > 0)
302
+ return Effect.fail(usageError());
303
+ return Effect.succeed(command === "stop" ? new StopCommand({ options }) : new RestartCommand({ options }));
304
+ });
305
+ const upgradeCommand = (args) => Effect.flatMap(lifecycleArguments(args, true), ({ options, check, operands }) => {
306
+ const [version, ...rest] = operands;
307
+ if (rest.length > 0)
308
+ return Effect.fail(usageError());
309
+ return Effect.succeed(new UpgradeCommand({ version: Option.fromUndefinedOr(version), check, options }));
310
+ });
311
+ const SUBCOMMANDS = new Set([
312
+ "up",
313
+ "status",
314
+ "stop",
315
+ "restart",
316
+ "upgrade",
317
+ "backup",
318
+ "export-run",
319
+ ]);
121
320
  /** Parses process arguments and the environment into one validated CLI command. */
122
321
  export const parseCli = Effect.fn("Cli.parse")((args, environment) => {
123
- if ((args.length === 1 && (args[0] === "--help" || args[0] === "-h")) ||
124
- (args.length === 2 &&
125
- (args[0] === "up" || args[0] === "export-run" || args[0] === "backup") &&
126
- (args[1] === "--help" || args[1] === "-h"))) {
322
+ const [command = "", ...rest] = args;
323
+ if ((args.length === 1 && (command === "--help" || command === "-h")) ||
324
+ (args.length === 2 && SUBCOMMANDS.has(command) && (rest[0] === "--help" || rest[0] === "-h"))) {
127
325
  return Effect.succeed(new HelpCommand());
128
326
  }
129
- if (args.length === 1 && (args[0] === "--version" || args[0] === "-v")) {
327
+ if (args.length === 1 && (command === "--version" || command === "-v")) {
130
328
  return Effect.succeed(new VersionCommand());
131
329
  }
132
- if (args[0] === "backup")
133
- return backupCommand(args.slice(1));
134
- if (args[0] === "export-run")
135
- return exportRunCommand(args.slice(1));
136
- if (args[0] !== "up")
137
- return Effect.fail(usageError());
138
- return upCommand(args.slice(1), environment);
330
+ switch (command) {
331
+ case "backup":
332
+ return backupCommand(rest);
333
+ case "export-run":
334
+ return exportRunCommand(rest);
335
+ case "up":
336
+ return upCommand(rest, environment);
337
+ case "status":
338
+ return rest.length === 0 ? Effect.succeed(new StatusCommand()) : Effect.fail(usageError());
339
+ case "stop":
340
+ case "restart":
341
+ return stopOrRestartCommand(command, rest);
342
+ case "upgrade":
343
+ return upgradeCommand(rest);
344
+ default:
345
+ return Effect.fail(usageError());
346
+ }
139
347
  });
140
- /** Directories the OS may clear: `os.tmpdir()`, `$TMPDIR`, and the usual temp locations. */
348
+ /**
349
+ * Returns the directories the OS may clear: `os.tmpdir()`, `$TMPDIR`, and common temp locations.
350
+ */
141
351
  export const volatileRoots = (environmentTmpdir) => [
142
352
  ...new Set([
143
353
  tmpdir(),
@@ -150,13 +360,12 @@ export const volatileRoots = (environmentTmpdir) => [
150
360
  .filter((root) => root.length > 0)
151
361
  .map((root) => resolve(root));
152
362
  const isUnder = (directory, root) => directory === root || directory.startsWith(root.endsWith(sep) ? root : `${root}${sep}`);
153
- /** Returns the volatile root the directory sits under, if any. Paths are compared as given, with symlinks unresolved. */
363
+ /** Returns the volatile root that contains `directory`, if any, without resolving symlinks. */
154
364
  export const volatileRoot = (directory, roots) => {
155
365
  const resolved = resolve(directory);
156
366
  return Option.fromNullishOr(roots.find((root) => isUnder(resolved, root)));
157
367
  };
158
368
  const PackageMetadataFromJson = Schema.fromJsonString(Schema.Struct({ version: Schema.NonEmptyString }));
159
- /** Reads the version of this installed server from its package.json. */
160
369
  export const packageVersion = Effect.fn("Cli.packageVersion")(function* () {
161
370
  const fileSystem = yield* FileSystem.FileSystem;
162
371
  const packagePath = fileURLToPath(new URL("../package.json", import.meta.url));
@@ -167,10 +376,50 @@ export const packageVersion = Effect.fn("Cli.packageVersion")(function* () {
167
376
  return metadata.version;
168
377
  });
169
378
  const AddressInUse = Schema.Struct({ code: Schema.Literal("EADDRINUSE") });
170
- /** Maps a bind failure to the CLI's startup error, so an address already in use is reported as such. */
379
+ /** Returns `PortInUseError` for `EADDRINUSE`, otherwise `ServerStartError`. */
171
380
  export const serverStartError = (port, error) => Schema.is(AddressInUse)(error.cause)
172
- ? new PortInUseError({ port })
381
+ ? new PortInUseError({ port, holder: Option.none() })
173
382
  : new ServerStartError({ port, cause: error.cause });
383
+ const ProcessIdFromString = Schema.NumberFromString.pipe(Schema.decodeTo(Schema.Int));
384
+ /**
385
+ * Returns the PID listening on `port` from lsof, or `None` if lsof is missing or can't see the
386
+ * process.
387
+ */
388
+ const portHolder = Effect.fn("Cli.portHolder")(function* (port) {
389
+ const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
390
+ const lines = yield* spawner
391
+ .lines(ChildProcess.make("lsof", ["-nP", `-iTCP:${port}`, "-sTCP:LISTEN", "-t"], {
392
+ stdin: "ignore",
393
+ stderr: "ignore",
394
+ }))
395
+ .pipe(Effect.timeout(PORT_HOLDER_TIMEOUT), Effect.tapError((cause) => Effect.logDebug("Could not look up the process listening on the port", { port, cause })), Effect.orElseSucceed(() => []));
396
+ return Arr.findFirst(lines, (line) => Schema.decodeUnknownOption(ProcessIdFromString)(line.trim()));
397
+ });
398
+ /** Fails with `PortInUseError`, with the listening PID if found. */
399
+ export const portInUse = Effect.fn("Cli.portInUse")(function* (port) {
400
+ const holder = yield* portHolder(port);
401
+ yield* Effect.logWarning("Another process listens on the HTTP port", {
402
+ port,
403
+ holder: Option.getOrUndefined(holder),
404
+ });
405
+ return yield* new PortInUseError({ port, holder });
406
+ });
407
+ const portTaken = (port) => Effect.callback((resume) => {
408
+ const server = createServer();
409
+ server.once("error", (cause) => resume(Schema.is(AddressInUse)(cause)
410
+ ? Effect.succeed(true)
411
+ : Effect.fail(new ServerStartError({ port, cause }))));
412
+ server.listen({ host: SERVER_HOST, port }, () => server.close(() => resume(Effect.succeed(false))));
413
+ return Effect.sync(() => server.close());
414
+ });
415
+ /**
416
+ * Fails with `PortInUseError` if another process is listening on `port`. Call it before `usine up`
417
+ * builds its runtime.
418
+ */
419
+ export const refuseTakenPort = Effect.fn("Cli.refuseTakenPort")(function* (port) {
420
+ if (yield* portTaken(port))
421
+ return yield* portInUse(port);
422
+ });
174
423
  const browserCommand = (url) => {
175
424
  if (process.platform === "darwin")
176
425
  return { command: "open", args: [url] };
@@ -179,7 +428,7 @@ const browserCommand = (url) => {
179
428
  }
180
429
  return { command: "xdg-open", args: [url] };
181
430
  };
182
- /** Opens the setup page in a browser; call it only after the HTTP server has bound. */
431
+ /** Opens the setup page in a browser. Call it only after the HTTP server has bound. */
183
432
  export const openBrowser = Effect.fn("Cli.openBrowser")(function* (url, timeout = BROWSER_OPEN_TIMEOUT) {
184
433
  const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
185
434
  const { command, args } = browserCommand(url);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { Duration, Effect, Schema } from "effect";
2
+ import { ChildProcessSpawner } from "effect/process";
3
+ declare const CommandError_base: Schema.Class<CommandError, Schema.TaggedStruct<"CommandError", {
4
+ readonly command: Schema.String;
5
+ readonly reason: Schema.String;
6
+ }>, import("effect/Cause").YieldableError>;
7
+ /** A command couldn't run, timed out, or exited non-zero. */
8
+ export declare class CommandError extends CommandError_base {
9
+ }
10
+ /** Runs a command in `cwd` and returns its output. Fails if it exits non-zero or times out. */
11
+ export declare const runCommand: (command: string, args: readonly string[], cwd: string, timeout: Duration.Input) => Effect.Effect<{
12
+ exitCode: number;
13
+ stdout: string;
14
+ stderr: string;
15
+ }, CommandError, ChildProcessSpawner.ChildProcessSpawner>;
16
+ /**
17
+ * Runs a command in `cwd` with the terminal as its standard output and error, so that the operator
18
+ * sees its progress. Fails if it exits non-zero.
19
+ */
20
+ export declare const runInTerminal: (command: string, args: readonly string[], cwd: string) => Effect.Effect<undefined, CommandError, ChildProcessSpawner.ChildProcessSpawner>;
21
+ export {};
22
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAS,MAAM,EAAU,MAAM,QAAQ,CAAC;AACjE,OAAO,EAAgB,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;;;;;AASnE,6DAA6D;AAC7D,qBAAa,YAAa,SAAQ,iBAGjC;CAAG;AAMJ,+FAA+F;AAC/F,eAAO,MAAM,UAAU;;;;yDAsCrB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,aAAa,4IAwBxB,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { Duration, Effect, Fiber, Schema, Stream } from "effect";
2
+ import { ChildProcess, ChildProcessSpawner } from "effect/process";
3
+ /** A command couldn't run, timed out, or exited non-zero. */
4
+ export class CommandError extends Schema.TaggedError("@usine/server/CommandError")("CommandError", { command: Schema.String, reason: Schema.String }) {
5
+ }
6
+ const commandLine = (command, args) => [command, ...args].join(" ");
7
+ const firstLine = (text) => text.trim().split("\n")[0] ?? "";
8
+ /** Runs a command in `cwd` and returns its output. Fails if it exits non-zero or times out. */
9
+ export const runCommand = Effect.fn("Cli.runCommand")(function* (command, args, cwd, timeout) {
10
+ const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
11
+ const line = commandLine(command, args);
12
+ yield* Effect.annotateCurrentSpan({ command: line, cwd });
13
+ const result = yield* Effect.scoped(Effect.gen(function* () {
14
+ const handle = yield* spawner.spawn(ChildProcess.make(command, args, { cwd, stdin: "ignore" }));
15
+ const stdout = yield* handle.stdout.pipe(Stream.decodeText(), Stream.mkString, Effect.forkChild);
16
+ const stderr = yield* handle.stderr.pipe(Stream.decodeText(), Stream.mkString, Effect.forkChild);
17
+ const exitCode = Number(yield* handle.exitCode);
18
+ const [out, err] = yield* Effect.all([Fiber.join(stdout), Fiber.join(stderr)]);
19
+ return { exitCode, stdout: out, stderr: err };
20
+ })).pipe(Effect.timeout(timeout), Effect.mapError((cause) => new CommandError({ command: line, reason: cause.message })));
21
+ if (result.exitCode !== 0) {
22
+ const reason = `exited with status ${result.exitCode}: ${firstLine(result.stderr) || firstLine(result.stdout)}`;
23
+ yield* Effect.logWarning("A command exited non-zero", { command: line, reason });
24
+ return yield* new CommandError({ command: line, reason });
25
+ }
26
+ return result;
27
+ });
28
+ /**
29
+ * Runs a command in `cwd` with the terminal as its standard output and error, so that the operator
30
+ * sees its progress. Fails if it exits non-zero.
31
+ */
32
+ export const runInTerminal = Effect.fn("Cli.runInTerminal")(function* (command, args, cwd) {
33
+ const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
34
+ const line = commandLine(command, args);
35
+ yield* Effect.annotateCurrentSpan({ command: line, cwd });
36
+ const exitCode = yield* spawner
37
+ .exitCode(ChildProcess.make(command, args, {
38
+ cwd,
39
+ stdin: "ignore",
40
+ stdout: "inherit",
41
+ stderr: "inherit",
42
+ }))
43
+ .pipe(Effect.mapError((cause) => new CommandError({ command: line, reason: cause.message })));
44
+ if (Number(exitCode) !== 0) {
45
+ return yield* new CommandError({
46
+ command: line,
47
+ reason: `exited with status ${Number(exitCode)}`,
48
+ });
49
+ }
50
+ });
51
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"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"}