@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/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { Effect, Schema } from "effect";
2
+ declare const PackageLookupError_base: Schema.Class<PackageLookupError, Schema.TaggedStruct<"PackageLookupError", {
3
+ readonly name: Schema.String;
4
+ readonly spec: Schema.String;
5
+ readonly reason: Schema.String;
6
+ }>, import("effect/Cause").YieldableError>;
7
+ /** The registry has no version of the package that matches the spec, or npm couldn't ask it. */
8
+ export declare class PackageLookupError extends PackageLookupError_base {
9
+ }
10
+ /**
11
+ * Returns the version that `spec`, a version, range, or dist-tag, resolves to on the registry: the
12
+ * highest one for a range.
13
+ */
14
+ export declare const resolveVersion: (directory: string, name: string, spec: string) => Effect.Effect<string, PackageLookupError, import("effect/process/ChildProcessSpawner").ChildProcessSpawner>;
15
+ /** Returns the published dependencies of `name@version`, with their version specs. */
16
+ export declare const dependenciesOf: (directory: string, name: string, version: string) => Effect.Effect<{
17
+ readonly [x: string]: string;
18
+ }, PackageLookupError, import("effect/process/ChildProcessSpawner").ChildProcessSpawner>;
19
+ export {};
20
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;;;;;;AAKxC,gGAAgG;AAChG,qBAAa,kBAAmB,SAAQ,uBAMtC;CAAG;AAYL;;;GAGG;AACH,eAAO,MAAM,cAAc,gKAkBzB,CAAC;AAEH,sFAAsF;AACtF,eAAO,MAAM,cAAc;;wFAYzB,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { Effect, Schema } from "effect";
2
+ import { runCommand } from "./command.js";
3
+ const NPM_VIEW_TIMEOUT = "30 seconds";
4
+ /** The registry has no version of the package that matches the spec, or npm couldn't ask it. */
5
+ export class PackageLookupError extends Schema.TaggedError("@usine/server/PackageLookupError")("PackageLookupError", {
6
+ name: Schema.String,
7
+ spec: Schema.String,
8
+ reason: Schema.String,
9
+ }) {
10
+ }
11
+ const Versions = Schema.fromJsonString(Schema.Union([Schema.String, Schema.Array(Schema.String)]));
12
+ const Dependencies = Schema.fromJsonString(Schema.Record(Schema.String, Schema.String));
13
+ /** Runs `npm view <name>@<spec> <field> --json` in `directory`, so its `.npmrc` applies. */
14
+ const npmView = (directory, name, spec, field) => runCommand("npm", ["view", `${name}@${spec}`, field, "--json"], directory, NPM_VIEW_TIMEOUT).pipe(Effect.map(({ stdout }) => stdout.trim()), Effect.mapError((error) => new PackageLookupError({ name, spec, reason: error.reason })));
15
+ /**
16
+ * Returns the version that `spec`, a version, range, or dist-tag, resolves to on the registry: the
17
+ * highest one for a range.
18
+ */
19
+ export const resolveVersion = Effect.fn("Registry.resolveVersion")(function* (directory, name, spec) {
20
+ yield* Effect.annotateCurrentSpan({ name, spec });
21
+ const output = yield* npmView(directory, name, spec, "version");
22
+ const decoded = yield* Schema.decodeUnknownEffect(Versions)(output).pipe(Effect.mapError(() => new PackageLookupError({ name, spec, reason: "no published version matches" })));
23
+ const versions = Schema.is(Schema.String)(decoded) ? [decoded] : decoded;
24
+ const version = versions.at(-1);
25
+ if (version === undefined) {
26
+ return yield* new PackageLookupError({ name, spec, reason: "no published version matches" });
27
+ }
28
+ return version;
29
+ });
30
+ /** Returns the published dependencies of `name@version`, with their version specs. */
31
+ export const dependenciesOf = Effect.fn("Registry.dependenciesOf")(function* (directory, name, version) {
32
+ const output = yield* npmView(directory, name, version, "dependencies");
33
+ if (output === "")
34
+ return {};
35
+ return yield* Schema.decodeUnknownEffect(Dependencies)(output).pipe(Effect.mapError((error) => new PackageLookupError({ name, spec: version, reason: error.message })));
36
+ });
37
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { CurrentInstance } from "@usine/orchestrator/current-instance";
2
+ import { Effect } from "effect";
3
+ /**
4
+ * Reloads the instance folder on each SIGHUP until the scope closes, instead of exiting. A SIGHUP
5
+ * during a reload triggers one more reload.
6
+ */
7
+ export declare const reloadOnHangup: (instances: CurrentInstance["Service"]) => Effect.Effect<void, never, import("effect/Scope").Scope>;
8
+ //# sourceMappingURL=reload-signal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reload-signal.d.ts","sourceRoot":"","sources":["../src/reload-signal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAS,MAAM,QAAQ,CAAC;AAEvC;;;GAGG;AACH,eAAO,MAAM,cAAc,cAAe,eAAe,CAAC,SAAS,CAAC,6DAyBhE,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { Effect, Queue } from "effect";
2
+ /**
3
+ * Reloads the instance folder on each SIGHUP until the scope closes, instead of exiting. A SIGHUP
4
+ * during a reload triggers one more reload.
5
+ */
6
+ export const reloadOnHangup = (instances) => Effect.gen(function* () {
7
+ const signals = yield* Queue.sliding(1);
8
+ yield* Effect.acquireRelease(Effect.sync(() => {
9
+ const onSignal = () => {
10
+ Queue.offerUnsafe(signals, undefined);
11
+ };
12
+ process.on("SIGHUP", onSignal);
13
+ return onSignal;
14
+ }), (onSignal) => Effect.sync(() => {
15
+ process.removeListener("SIGHUP", onSignal);
16
+ }));
17
+ yield* Effect.forkScoped(Queue.take(signals).pipe(Effect.andThen(Effect.logInfo("SIGHUP received; reloading the instance folder")), Effect.andThen(instances.reload),
18
+ // The reload logs its own outcome.
19
+ Effect.ignore, Effect.forever));
20
+ });
21
+ //# sourceMappingURL=reload-signal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reload-signal.js","sourceRoot":"","sources":["../src/reload-signal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEvC;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,SAAqC,EAAE,EAAE,CACtE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAO,CAAC,CAAC,CAAC;IAC9C,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAC1B,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;QACf,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACxC,CAAC,CAAC;QACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/B,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC,EACF,CAAC,QAAQ,EAAE,EAAE,CACX,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;QACf,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC,CAAC,CACL,CAAC;IACF,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CACtB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CACtB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC,EAChF,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;IAChC,mCAAmC;IACnC,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,OAAO,CACf,CACF,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { Effect } from "effect";
2
+ import { type CliEnvironment, type CliUsageError, type LifecycleOptions } from "./cli.ts";
3
+ import { type InstanceLaunch } from "./instance/record.ts";
4
+ import { InstanceNotRunningError, UnrecordedInstanceError } from "./stop.ts";
5
+ /**
6
+ * Returns the launch of a `usine up --detach` without flags from this CLI, which `usine restart`
7
+ * starts for an instance without a readable record.
8
+ */
9
+ export declare const fallbackLaunch: (environment: CliEnvironment) => Effect.Effect<InstanceLaunch, CliUsageError, never>;
10
+ /**
11
+ * Stops the `usine up` of the instance folder and starts it again in the background, with the
12
+ * Node.js binary, entry point, port, and flags that it recorded, or with `systemctl` if a systemd
13
+ * service runs it. Without a readable record, as from a usine version that writes only
14
+ * `.usine/instance.pid`, stops the process in that file and starts `fallback`. The checks then ask
15
+ * the port on which that process answers, and pass if none does. Fails with `ListeningPortsError`,
16
+ * before any signal, if the OS can't list that process's ports.
17
+ */
18
+ export declare const restart: (directory: string & import("effect/Brand").Brand<"InstanceDirectory">, options: LifecycleOptions, fallback: Effect.Effect<InstanceLaunch, CliUsageError, never>) => Effect.Effect<void, CliUsageError | import("./detach.ts").DetachedSpawnError | import("./detach.ts").DetachedStartError | import("./instance/lock.ts").InstanceLockError | InstanceNotRunningError | import("./stop.ts").KillTimeoutError | import("./instance/ports.ts").ListeningPortsError | import("./stop.ts").LiveAttemptsError | import("./stop.ts").MissingEnvironmentError | import("./instance/state.ts").SignalError | import("./stop.ts").StopTimeoutError | import("./instance/systemd.ts").SystemctlError | import("./detach.ts").SystemdStartError | UnrecordedInstanceError, import("effect/process/ChildProcessSpawner").ChildProcessSpawner | import("effect/FileSystem").FileSystem | import("effect/http/HttpClient").HttpClient>;
19
+ //# sourceMappingURL=restart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart.d.ts","sourceRoot":"","sources":["../src/restart.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,MAAM,EAAU,MAAM,QAAQ,CAAC;AACjD,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EAEtB,MAAM,UAAU,CAAC;AAIlB,OAAO,EACL,KAAK,cAAc,EAIpB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EAIxB,MAAM,WAAW,CAAC;AAEnB;;;GAGG;AACH,eAAO,MAAM,cAAc,gBAAiB,cAAc,wDACM,CAAC;AA4FjE;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,43BAoBlB,CAAC"}
@@ -0,0 +1,105 @@
1
+ import { Console, Effect, Option } from "effect";
2
+ import { environmentUp, } from "./cli.js";
3
+ import { startAgain, startedMessage } from "./detach.js";
4
+ import { listRuns } from "./instance/operator-api.js";
5
+ import { listeningPorts } from "./instance/ports.js";
6
+ import { currentLaunch, } from "./instance/record.js";
7
+ import { probeInstance } from "./instance/state.js";
8
+ import { supervisingUnit } from "./instance/systemd.js";
9
+ import { InstanceNotRunningError, UnrecordedInstanceError, refuseLiveAttempts, refuseMissingEnvironment, stopProcess, } from "./stop.js";
10
+ /**
11
+ * Returns the launch of a `usine up --detach` without flags from this CLI, which `usine restart`
12
+ * starts for an instance without a readable record.
13
+ */
14
+ export const fallbackLaunch = (environment) => environmentUp(environment).pipe(Effect.flatMap(currentLaunch));
15
+ /**
16
+ * Returns the port on which the process answers the operator API, or `None` if none of its ports
17
+ * does. Fails if the OS can't list its ports.
18
+ */
19
+ const operatorPort = Effect.fn("Cli.operatorPort")(function* (pid) {
20
+ const ports = yield* listeningPorts(pid);
21
+ const port = yield* Effect.findFirst(ports, (port) => listRuns(port).pipe(Effect.tapError((error) => Effect.logDebug("A port of the instance process doesn't answer the operator API", {
22
+ pid,
23
+ port,
24
+ reason: error.reason,
25
+ })), Effect.isSuccess));
26
+ yield* Effect.annotateCurrentSpan({ pid, ports, port: Option.getOrUndefined(port) });
27
+ return port;
28
+ });
29
+ /**
30
+ * Returns the process that `usine restart` stops, its record if readable, the systemd service that
31
+ * runs it, the port on which the checks ask it, and the next launch.
32
+ */
33
+ const restartTarget = Effect.fn("Cli.restartTarget")(function* (directory, fallback) {
34
+ yield* Effect.annotateCurrentSpan({ instanceDirectory: directory });
35
+ const state = yield* probeInstance(directory);
36
+ if (state._tag === "Stopped") {
37
+ yield* Effect.logInfo("Refusing to restart: usine is not running in the instance folder", {
38
+ instanceDirectory: directory,
39
+ });
40
+ return yield* new InstanceNotRunningError({ command: "restart", directory });
41
+ }
42
+ if (state._tag === "Running") {
43
+ const { record } = state;
44
+ yield* Effect.annotateCurrentSpan({ pid: record.pid });
45
+ return {
46
+ pid: record.pid,
47
+ record: Option.some(record),
48
+ unit: yield* supervisingUnit(record.pid, record.systemdUnit),
49
+ port: Option.some(record.launch.port),
50
+ launch: record.launch,
51
+ };
52
+ }
53
+ if (Option.isNone(state.pid)) {
54
+ yield* Effect.logInfo("Refusing to restart: a process holds the instance lock, but the pid file names no running process", { instanceDirectory: directory });
55
+ return yield* new UnrecordedInstanceError({ command: "restart", directory, pid: state.pid });
56
+ }
57
+ const pid = state.pid.value;
58
+ yield* Effect.annotateCurrentSpan({ pid });
59
+ const launch = yield* fallback;
60
+ const port = yield* operatorPort(pid).pipe(Effect.tapError((error) => Effect.logWarning("Refusing to restart: the ports of the instance process are unknown", {
61
+ pid,
62
+ reason: error.reason,
63
+ })));
64
+ yield* Effect.logInfo("Restarting an instance without a readable record with this CLI's launch", {
65
+ pid,
66
+ port: Option.getOrUndefined(port),
67
+ launchPort: launch.port,
68
+ script: launch.script,
69
+ });
70
+ yield* Console.log(Option.match(port, {
71
+ onNone: () => `usine (pid ${pid}) runs without a readable .usine/instance.json and answers on no port, so usine restart can't check its running attempts or gateway variables. usine restart starts usine up as usine up --detach would, on port ${launch.port}.`,
72
+ onSome: (current) => `usine (pid ${pid}) runs without a readable .usine/instance.json and answers on port ${current}. usine restart checks it there, then starts usine up as usine up --detach would, on port ${launch.port}.`,
73
+ }));
74
+ return {
75
+ pid,
76
+ record: Option.none(),
77
+ unit: Option.none(),
78
+ port,
79
+ launch,
80
+ };
81
+ });
82
+ /**
83
+ * Stops the `usine up` of the instance folder and starts it again in the background, with the
84
+ * Node.js binary, entry point, port, and flags that it recorded, or with `systemctl` if a systemd
85
+ * service runs it. Without a readable record, as from a usine version that writes only
86
+ * `.usine/instance.pid`, stops the process in that file and starts `fallback`. The checks then ask
87
+ * the port on which that process answers, and pass if none does. Fails with `ListeningPortsError`,
88
+ * before any signal, if the OS can't list that process's ports.
89
+ */
90
+ export const restart = Effect.fn("Cli.restart")(function* (directory, options, fallback) {
91
+ const { pid, record, unit, port, launch } = yield* restartTarget(directory, fallback);
92
+ if (Option.isSome(port)) {
93
+ yield* refuseMissingEnvironment("restart", port.value);
94
+ yield* refuseLiveAttempts("restart", port.value, options.force);
95
+ }
96
+ else {
97
+ yield* Effect.logWarning("Skipping the restart checks: the instance process answers on no port", {
98
+ pid,
99
+ });
100
+ }
101
+ yield* stopProcess("restart", pid, record, unit, options);
102
+ const started = yield* startAgain(directory, launch, unit, pid, options.timeout);
103
+ yield* Console.log(startedMessage(started));
104
+ });
105
+ //# sourceMappingURL=restart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart.js","sourceRoot":"","sources":["../src/restart.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EAIL,aAAa,GACd,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAIL,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAoB,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,EAClB,wBAAwB,EACxB,WAAW,GACZ,MAAM,WAAW,CAAC;AAEnB;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,WAA2B,EAAE,EAAE,CAC5D,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;AAEjE;;;GAGG;AACH,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAc;IAC1E,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CACnD,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CACjB,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,MAAM,CAAC,QAAQ,CAAC,gEAAgE,EAAE;QAChF,GAAG;QACH,IAAI;QACJ,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC,CACH,EACD,MAAM,CAAC,SAAS,CACjB,CACF,CAAC;IACF,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrF,OAAO,IAAI,CAAC;AACd,CAAC,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,EAC5D,SAA4B,EAC5B,QAAsD;IAEtD,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC,CAAC;IACpE,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAC9C,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,kEAAkE,EAAE;YACxF,iBAAiB,EAAE,SAAS;SAC7B,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,CAAC,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QACzB,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QACvD,OAAO;YACL,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;YAC3B,IAAI,EAAE,KAAK,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC;YAC5D,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YACrC,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CACnB,mGAAmG,EACnG,EAAE,iBAAiB,EAAE,SAAS,EAAE,CACjC,CAAC;QACF,OAAO,KAAK,CAAC,CAAC,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/F,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IAC5B,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC;IAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CACxC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,MAAM,CAAC,UAAU,CAAC,oEAAoE,EAAE;QACtF,GAAG;QACH,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC,CACH,CACF,CAAC;IACF,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,yEAAyE,EAAE;QAC/F,GAAG;QACH,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC;QACjC,UAAU,EAAE,MAAM,CAAC,IAAI;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;IACH,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAChB,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;QACjB,MAAM,EAAE,GAAG,EAAE,CACX,cAAc,GAAG,oNAAoN,MAAM,CAAC,IAAI,GAAG;QACrP,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAClB,cAAc,GAAG,sEAAsE,OAAO,6FAA6F,MAAM,CAAC,IAAI,GAAG;KAC5M,CAAC,CACH,CAAC;IACF,OAAO;QACL,GAAG;QACH,MAAM,EAAE,MAAM,CAAC,IAAI,EAAkB;QACrC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAe;QAChC,IAAI;QACJ,MAAM;KACP,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,EACvD,SAA4B,EAC5B,OAAyB,EACzB,QAAsD;IAEtD,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACtF,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,CAAC,wBAAwB,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACvD,KAAK,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CACtB,sEAAsE,EACtE;YACE,GAAG;SACJ,CACF,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACjF,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9C,CAAC,CAAC,CAAC"}
@@ -1,7 +1,10 @@
1
1
  import { Deferred, Duration, Effect, Scope } from "effect";
2
- /** Protects startup and running work with a bounded drain before runtime resources close. */
2
+ /**
3
+ * Runs `startup` and its work, and on shutdown drains them within `deadline` before runtime
4
+ * resources close. Reads `deadline` when the drain starts.
5
+ */
3
6
  export declare const withGracefulShutdown: <A, E, R, E2, R2>(startup: Effect.Effect<{
4
7
  readonly running: Effect.Effect<A, E, R>;
5
8
  readonly drain: Effect.Effect<void>;
6
- }, E2, R2>, requested: Deferred.Deferred<void>, deadline: Duration.Duration) => Effect.Effect<A, E | E2, Exclude<Exclude<R, Scope.Scope>, Scope.Scope> | Exclude<Exclude<R2, Scope.Scope>, Scope.Scope>>;
9
+ }, E2, R2>, requested: Deferred.Deferred<void>, deadline: Effect.Effect<Duration.Duration>) => Effect.Effect<A, E | E2, Exclude<Exclude<R, Scope.Scope>, Scope.Scope> | Exclude<Exclude<R2, Scope.Scope>, Scope.Scope>>;
7
10
  //# sourceMappingURL=shutdown.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../src/shutdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAuB,KAAK,EAAE,MAAM,QAAQ,CAAC;AAuBhF,6FAA6F;AAC7F,eAAO,MAAM,oBAAoB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,WACzC,MAAM,CAAC,MAAM,CACpB;IACE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CACrC,EACD,EAAE,EACF,EAAE,CACH,aACU,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,YACxB,QAAQ,CAAC,QAAQ,6HAsE1B,CAAC"}
1
+ {"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../src/shutdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAuB,KAAK,EAAE,MAAM,QAAQ,CAAC;AAuBhF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,WACzC,MAAM,CAAC,MAAM,CACpB;IACE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CACrC,EACD,EAAE,EACF,EAAE,CACH,aACU,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,YACxB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,6HAwEzC,CAAC"}
package/dist/shutdown.js CHANGED
@@ -14,19 +14,23 @@ const observeSignals = (requested, forced) => Effect.acquireRelease(Effect.sync(
14
14
  process.removeListener("SIGINT", onSignal);
15
15
  process.removeListener("SIGTERM", onSignal);
16
16
  }));
17
- /** Protects startup and running work with a bounded drain before runtime resources close. */
17
+ /**
18
+ * Runs `startup` and its work, and on shutdown drains them within `deadline` before runtime
19
+ * resources close. Reads `deadline` when the drain starts.
20
+ */
18
21
  export const withGracefulShutdown = (startup, requested, deadline) => Effect.scoped(Effect.gen(function* () {
19
22
  const forced = yield* Deferred.make();
20
23
  yield* observeSignals(requested, forced);
21
- // Acquired before the forks: their shutdown completes while runtime
22
- // resources (database, executor, HTTP) are still available.
24
+ // Acquired before the forks, so their shutdown completes while runtime resources (database,
25
+ // executor, HTTP) are still available.
23
26
  const runtimeScope = yield* Effect.acquireRelease(Scope.make(), (scope, exit) => Scope.close(scope, exit));
24
27
  const started = yield* Effect.forkScoped(Scope.provide(startup, runtimeScope));
25
28
  const running = yield* Effect.forkScoped(Fiber.join(started).pipe(Effect.flatMap(({ running }) => Deferred.isDone(requested).pipe(Effect.flatMap((stopped) => stopped ? Effect.never : Scope.provide(running, runtimeScope))))));
26
29
  return yield* Fiber.join(running).pipe(Effect.onInterrupt(() => Effect.gen(function* () {
27
30
  yield* Deferred.succeed(requested, undefined);
31
+ const limit = yield* deadline;
28
32
  yield* Effect.logInfo("Orchestrator shutdown started", {
29
- deadlineMilliseconds: Duration.toMillis(deadline),
33
+ deadlineMilliseconds: Duration.toMillis(limit),
30
34
  });
31
35
  const stopping = yield* Effect.forkScoped(Fiber.interrupt(running).pipe(Effect.interruptible), { startImmediately: true });
32
36
  const drain = Fiber.join(started).pipe(Effect.matchEffect({
@@ -35,7 +39,9 @@ export const withGracefulShutdown = (startup, requested, deadline) => Effect.sco
35
39
  }));
36
40
  // Finalizers are uninterruptible; raced waits must remain
37
41
  // interruptible so the losing drain or signal wait can be stopped.
38
- const outcome = yield* Effect.raceFirst(Effect.all([drain, Fiber.join(stopping)], { concurrency: "unbounded" }).pipe(Effect.timeoutOption(deadline), Effect.map((result) => Option.isSome(result) ? "drained" : "deadline"), Effect.interruptible), Deferred.await(forced).pipe(Effect.as("forced"), Effect.interruptible));
42
+ const outcome = yield* Effect.raceFirst(Effect.all([drain, Fiber.join(stopping)], { concurrency: "unbounded" }).pipe(
43
+ // An infinite deadline never elapses; only the second signal ends the drain.
44
+ Effect.timeoutOption(limit), Effect.map((result) => Option.isSome(result) ? "drained" : "deadline"), Effect.interruptible), Deferred.await(forced).pipe(Effect.as("forced"), Effect.interruptible));
39
45
  if (outcome === "drained") {
40
46
  yield* Effect.logInfo("Orchestrator exiting after graceful drain");
41
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../src/shutdown.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../src/shutdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEhF,gFAAgF;AAChF,+EAA+E;AAC/E,MAAM,cAAc,GAAG,CAAC,SAAkC,EAAE,MAA+B,EAAE,EAAE,CAC7F,MAAM,CAAC,cAAc,CACnB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;IACf,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,QAAQ,IAAI,CAAC,CAAC;QACd,QAAQ,CAAC,UAAU,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC,CAAC;IACF,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC5C,OAAO,CAAC,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC7C,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC,EACF,CAAC,QAAQ,EAAE,EAAE,CACX,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;IACf,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC3C,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC9C,CAAC,CAAC,CACL,CAAC;AAEJ;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,OAOC,EACD,SAAkC,EAClC,QAA0C,EAC1C,EAAE,CACF,MAAM,CAAC,MAAM,CACX,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAQ,CAAC;IAC5C,KAAK,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACzC,4FAA4F;IAC5F,uCAAuC;IACvC,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAC9E,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CACzB,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAC/E,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CACtC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CACtB,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAC7B,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAC7B,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CACzB,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAC9D,CACF,CACF,CACF,CACF,CAAC;IACF,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CACpC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,CACtB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC;QAC9B,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,+BAA+B,EAAE;YACrD,oBAAoB,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;SAC/C,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CACvC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EACnD,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAC3B,CAAC;QACF,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CACpC,MAAM,CAAC,WAAW,CAAC;YACjB,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CACnB,MAAM,CAAC,UAAU,CAAC,wCAAwC,EAAE,EAAE,KAAK,EAAE,CAAC;YACxE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK;SAChC,CAAC,CACH,CAAC;QACF,0DAA0D;QAC1D,mEAAmE;QACnE,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CACrC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI;QAC1E,6EAA6E;QAC7E,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACpB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,SAAmB,CAAC,CAAC,CAAE,UAAoB,CACrE,EACD,MAAM,CAAC,aAAa,CACrB,EACD,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAiB,CAAC,EAAE,MAAM,CAAC,aAAa,CAAC,CAChF,CAAC;QACF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CACtB,2FAA2F,EAC3F,EAAE,MAAM,EAAE,OAAO,EAAE,CACpB,CAAC;YACF,8DAA8D;YAC9D,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CACf,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EACvE,EAAE,WAAW,EAAE,WAAW,EAAE,CAC7B,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CACH,CACF,CAAC;AACJ,CAAC,CAAC,CACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { Effect } from "effect";
2
+ /** What `usine status` prints, and whether a process holds the instance. */
3
+ export interface StatusReport {
4
+ readonly running: boolean;
5
+ readonly lines: ReadonlyArray<string>;
6
+ }
7
+ /**
8
+ * Reads whether `usine up` runs in the instance folder, with one request to its operator API and,
9
+ * for an engine installed from a pin, one `npm view`.
10
+ */
11
+ export declare const status: (directory: string & import("effect/Brand").Brand<"InstanceDirectory">) => Effect.Effect<StatusReport, import("./instance/lock.ts").InstanceLockError, import("effect/process/ChildProcessSpawner").ChildProcessSpawner | import("effect/FileSystem").FileSystem | import("effect/http/HttpClient").HttpClient>;
12
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,MAAM,EAAU,MAAM,QAAQ,CAAC;AAgB5D,4EAA4E;AAC5E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACvC;AA+ID;;;GAGG;AACH,eAAO,MAAM,MAAM,iTAGjB,CAAC"}
package/dist/status.js ADDED
@@ -0,0 +1,99 @@
1
+ import { DateTime, Duration, Effect, Option } from "effect";
2
+ import { SERVER_HOST, packageVersion } from "./cli.js";
3
+ import { SERVER_PACKAGE, compareVersions, installedInInstance, readManifest, realPathOrSelf, serverPin, } from "./instance/manifest.js";
4
+ import { listRuns } from "./instance/operator-api.js";
5
+ import { probeInstance } from "./instance/state.js";
6
+ import { supervisingUnit } from "./instance/systemd.js";
7
+ import { resolveVersion } from "./registry.js";
8
+ /** The Run states that count as open, in lifecycle order from the latest. */
9
+ const OPEN_STATES = ["Running", "Queued", "Waiting", "Pending"];
10
+ const ago = (since, now) => {
11
+ const seconds = Math.max(0, Math.floor(Duration.toSeconds(DateTime.distance(since, now))));
12
+ return `${seconds === 0 ? "0s" : Duration.format(Duration.seconds(seconds))} ago`;
13
+ };
14
+ const field = (label, value) => ` ${label.padEnd(10)}${value}`;
15
+ /** Summarizes the open Runs by state, such as `2 running, 1 queued`. */
16
+ const openRuns = (runs) => {
17
+ const counts = OPEN_STATES.map((state) => [state, runs.filter((run) => run.state === state).length]).filter(([, count]) => count > 0);
18
+ return counts.length === 0
19
+ ? "none open"
20
+ : counts.map(([state, count]) => `${count} ${state.toLowerCase()}`).join(", ");
21
+ };
22
+ /**
23
+ * Returns the service line for an instance whose systemd service has it as its main process, or
24
+ * `None` for an instance outside one.
25
+ */
26
+ const serviceLine = (record) => supervisingUnit(record.pid, record.systemdUnit).pipe(Effect.map(Option.map((unit) => field("service", `${unit}, managed with systemctl`))), Effect.catchTag("SystemctlError", (error) => Effect.succeed(Option.some(field("service", `${error.unit}, unknown: ${error.reason}`)))));
27
+ /** Returns the update line for an engine installed from a pin, or `None` for other engines. */
28
+ const updateLine = Effect.fn("Cli.statusUpdate")(function* (directory, record, installed) {
29
+ if (!installed)
30
+ return Option.none();
31
+ const manifest = yield* readManifest(directory).pipe(Effect.tapError((error) => Effect.logWarning("Could not read the instance's package.json", {
32
+ path: error.path,
33
+ reason: error.reason,
34
+ })), Effect.orElseSucceed(() => Option.none()));
35
+ if (Option.isNone(Option.flatMap(manifest, serverPin)))
36
+ return Option.none();
37
+ return Option.some(yield* resolveVersion(directory, SERVER_PACKAGE, "latest").pipe(Effect.map((latest) => compareVersions(latest, record.version) > 0
38
+ ? field("update", `@usine/server ${latest} is available. Run usine upgrade.`)
39
+ : field("update", `none, ${record.version} is the latest release`)), Effect.catchTag("PackageLookupError", (error) => Effect.succeed(field("update", `unknown: ${error.reason}`)))));
40
+ });
41
+ const runningLines = Effect.fn("Cli.statusRunning")(function* (directory, record) {
42
+ const now = yield* DateTime.now;
43
+ const runs = yield* listRuns(record.launch.port).pipe(Effect.map(openRuns), Effect.catchTag("OperatorApiError", (error) => Effect.succeed(`unavailable: ${error.reason}`)));
44
+ const installed = installedInInstance(yield* realPathOrSelf(directory), yield* realPathOrSelf(record.launch.script));
45
+ const lines = [
46
+ record.stoppingSince === undefined
47
+ ? `usine is running in ${directory}.`
48
+ : `usine is stopping in ${directory}. Its drain started at ${DateTime.formatIso(record.stoppingSince)} (${ago(record.stoppingSince, now)}).`,
49
+ field("pid", String(record.pid)),
50
+ field("address", `http://${SERVER_HOST}:${record.launch.port}`),
51
+ ...Option.toArray(Option.map(record.launch.origin, (origin) => field("origin", origin))),
52
+ field("engine", `${SERVER_PACKAGE} ${record.version}, ${installed ? "installed in the instance" : `from ${record.launch.script}`}`),
53
+ field("started", `${DateTime.formatIso(record.startedAt)} (${ago(record.startedAt, now)})`),
54
+ ...Option.toArray(yield* serviceLine(record)),
55
+ field("runs", runs),
56
+ ];
57
+ // The same entry point at another version means that the install changed after the start.
58
+ if (process.argv[1] === record.launch.script) {
59
+ const version = yield* packageVersion().pipe(Effect.option);
60
+ if (Option.isSome(version) && version.value !== record.version) {
61
+ lines.push(field("installed", `${SERVER_PACKAGE} ${version.value}. Run usine restart to run it.`));
62
+ }
63
+ }
64
+ lines.push(...Option.toArray(yield* updateLine(directory, record, installed)));
65
+ return lines;
66
+ });
67
+ const reportOf = Effect.fn("Cli.statusReport")(function* (directory, state) {
68
+ switch (state._tag) {
69
+ case "Running":
70
+ return { running: true, lines: yield* runningLines(directory, state.record) };
71
+ case "Unrecorded":
72
+ return {
73
+ running: true,
74
+ lines: [
75
+ Option.match(state.pid, {
76
+ onNone: () => `A process holds .usine/instance.lock in ${directory}, but .usine/instance.pid names no running process.`,
77
+ onSome: (pid) => `usine is running in ${directory} with pid ${pid}, without .usine/instance.json. It is a usine version that doesn't write one, or it is still starting.`,
78
+ }),
79
+ ],
80
+ };
81
+ case "Stopped":
82
+ return {
83
+ running: false,
84
+ lines: [
85
+ `usine is not running in ${directory}.`,
86
+ ...Option.toArray(Option.map(state.stale, (pid) => field("stale", `pid ${pid} in .usine/ exited without removing its files. The next usine up replaces them.`))),
87
+ ],
88
+ };
89
+ }
90
+ });
91
+ /**
92
+ * Reads whether `usine up` runs in the instance folder, with one request to its operator API and,
93
+ * for an engine installed from a pin, one `npm view`.
94
+ */
95
+ export const status = Effect.fn("Cli.status")(function* (directory) {
96
+ const report = yield* reportOf(directory, yield* probeInstance(directory));
97
+ return report;
98
+ });
99
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"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"}
package/dist/stop.d.ts ADDED
@@ -0,0 +1,81 @@
1
+ import { Effect, Option, Schema } from "effect";
2
+ import type { LifecycleOptions } from "./cli.ts";
3
+ import { type InstanceRecord } from "./instance/record.ts";
4
+ /** The CLI command that stops the instance. */
5
+ export declare const LifecycleCommandName: Schema.Literals<readonly ["stop", "restart", "upgrade"]>;
6
+ export type LifecycleCommandName = typeof LifecycleCommandName.Type;
7
+ declare const StopTimeoutError_base: Schema.Class<StopTimeoutError, Schema.TaggedStruct<"StopTimeoutError", {
8
+ readonly command: Schema.Literals<readonly ["stop", "restart", "upgrade"]>;
9
+ readonly pid: Schema.brand<Schema.Int, "ProcessId">;
10
+ readonly timeout: Schema.Duration;
11
+ /** The Runs whose Attempts were live when the stop started. */
12
+ readonly runs: Schema.$Array<Schema.brand<Schema.NonEmptyString, "RunId">>;
13
+ /** The systemd service that runs the instance, which `systemctl start` starts again. */
14
+ readonly unit: Schema.Option<Schema.brand<Schema.String, "SystemdUnit">>;
15
+ }>, import("effect/Cause").YieldableError>;
16
+ /** The instance process didn't exit within the timeout. Its drain continues. */
17
+ export declare class StopTimeoutError extends StopTimeoutError_base {
18
+ }
19
+ declare const KillTimeoutError_base: Schema.Class<KillTimeoutError, Schema.TaggedStruct<"KillTimeoutError", {
20
+ readonly command: Schema.Literals<readonly ["stop", "restart", "upgrade"]>;
21
+ readonly pid: Schema.brand<Schema.Int, "ProcessId">;
22
+ readonly timeout: Schema.Duration;
23
+ }>, import("effect/Cause").YieldableError>;
24
+ /** The instance process still ran `timeout` after `--force` sent it `SIGKILL`. */
25
+ export declare class KillTimeoutError extends KillTimeoutError_base {
26
+ }
27
+ declare const InstanceNotRunningError_base: Schema.Class<InstanceNotRunningError, Schema.TaggedStruct<"InstanceNotRunningError", {
28
+ readonly command: Schema.Literals<readonly ["stop", "restart", "upgrade"]>;
29
+ readonly directory: Schema.String;
30
+ }>, import("effect/Cause").YieldableError>;
31
+ /** No `usine up` runs in the instance folder. */
32
+ export declare class InstanceNotRunningError extends InstanceNotRunningError_base {
33
+ }
34
+ declare const UnrecordedInstanceError_base: Schema.Class<UnrecordedInstanceError, Schema.TaggedStruct<"UnrecordedInstanceError", {
35
+ readonly command: Schema.Literals<readonly ["stop", "restart", "upgrade"]>;
36
+ readonly directory: Schema.String;
37
+ readonly pid: Schema.Option<Schema.brand<Schema.Int, "ProcessId">>;
38
+ }>, import("effect/Cause").YieldableError>;
39
+ /** A process holds the instance lock without an instance record, so its launch is unknown. */
40
+ export declare class UnrecordedInstanceError extends UnrecordedInstanceError_base {
41
+ }
42
+ declare const LiveAttemptsError_base: Schema.Class<LiveAttemptsError, Schema.TaggedStruct<"LiveAttemptsError", {
43
+ readonly command: Schema.Literals<readonly ["stop", "restart", "upgrade"]>;
44
+ readonly runs: Schema.$Array<Schema.brand<Schema.NonEmptyString, "RunId">>;
45
+ }>, import("effect/Cause").YieldableError>;
46
+ /** Runs have live Attempts, and the operator didn't pass `--force`. */
47
+ export declare class LiveAttemptsError extends LiveAttemptsError_base {
48
+ }
49
+ declare const MissingEnvironmentError_base: Schema.Class<MissingEnvironmentError, Schema.TaggedStruct<"MissingEnvironmentError", {
50
+ readonly command: Schema.Literals<readonly ["stop", "restart", "upgrade"]>;
51
+ readonly variables: Schema.$Array<Schema.NonEmptyString>;
52
+ }>, import("effect/Cause").YieldableError>;
53
+ /**
54
+ * Neither the shell that would start the new `usine up` nor `.env` sets variables that its startup
55
+ * needs.
56
+ */
57
+ export declare class MissingEnvironmentError extends MissingEnvironmentError_base {
58
+ }
59
+ /**
60
+ * Fails with `MissingEnvironmentError` if the current `ConfigProvider` lacks a gateway admin token
61
+ * variable of the instance that listens on `port`. The new `usine up` inherits this process's
62
+ * environment and reads the instance folder's `.env`, and doesn't start without them.
63
+ */
64
+ export declare const refuseMissingEnvironment: (command: "restart" | "stop" | "upgrade", port: number & import("effect/Brand").Brand<"ServerPort">) => Effect.Effect<undefined, MissingEnvironmentError, import("effect/http/HttpClient").HttpClient>;
65
+ /**
66
+ * Fails with `LiveAttemptsError` if a Run of the instance that listens on `port` has a live
67
+ * Attempt, unless `force` is set.
68
+ */
69
+ export declare const refuseLiveAttempts: (command: "restart" | "stop" | "upgrade", port: number & import("effect/Brand").Brand<"ServerPort">, force: boolean) => Effect.Effect<undefined, LiveAttemptsError, import("effect/http/HttpClient").HttpClient>;
70
+ /**
71
+ * Starts the drain of the instance process and waits for the process to exit: through
72
+ * `systemctl stop --no-block` if `unit` runs it, so that systemd doesn't restart it, else with
73
+ * `SIGTERM`. With `force`, sends a second `SIGTERM`, which ends the drain without waiting for
74
+ * running Attempts, and sends `SIGKILL` if the process still runs after the timeout. Doesn't repeat
75
+ * the first signal to a process that records that it is stopping.
76
+ */
77
+ export declare const stopProcess: (command: "restart" | "stop" | "upgrade", pid: number & import("effect/Brand").Brand<"ProcessId">, record: Option.Option<InstanceRecord>, unit: Option.Option<string & import("effect/Brand").Brand<"SystemdUnit">>, options: LifecycleOptions) => Effect.Effect<undefined, KillTimeoutError | import("./instance/state.ts").SignalError | StopTimeoutError | import("./instance/systemd.ts").SystemctlError, import("effect/process/ChildProcessSpawner").ChildProcessSpawner | import("effect/http/HttpClient").HttpClient>;
78
+ /** Stops the `usine up` of the instance folder, and succeeds if none runs. */
79
+ export declare const stop: (directory: string & import("effect/Brand").Brand<"InstanceDirectory">, options: LifecycleOptions) => Effect.Effect<undefined, import("./instance/lock.ts").InstanceLockError | KillTimeoutError | import("./instance/state.ts").SignalError | StopTimeoutError | import("./instance/systemd.ts").SystemctlError | UnrecordedInstanceError, import("effect/process/ChildProcessSpawner").ChildProcessSpawner | import("effect/FileSystem").FileSystem | import("effect/http/HttpClient").HttpClient>;
80
+ export {};
81
+ //# sourceMappingURL=stop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../src/stop.ts"],"names":[],"mappings":"AAEA,OAAO,EAA6B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC3E,OAAO,KAAK,EAAE,gBAAgB,EAAQ,MAAM,UAAU,CAAC;AACvD,OAAO,EAAE,KAAK,cAAc,EAAa,MAAM,sBAAsB,CAAC;AAWtE,+CAA+C;AAC/C,eAAO,MAAM,oBAAoB,0DAAkD,CAAC;AACpF,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAC,IAAI,CAAC;;;;;IASlE,+DAA+D;;IAE/D,wFAAwF;;;AAT1F,gFAAgF;AAChF,qBAAa,gBAAiB,SAAQ,qBAUpC;CAAG;;;;;;AAEL,kFAAkF;AAClF,qBAAa,gBAAiB,SAAQ,qBAMpC;CAAG;;;;;AAEL,iDAAiD;AACjD,qBAAa,uBAAwB,SAAQ,4BAE4C;CAAG;;;;;;AAE5F,8FAA8F;AAC9F,qBAAa,uBAAwB,SAAQ,4BAM3C;CAAG;;;;;AAEL,uEAAuE;AACvE,qBAAa,iBAAkB,SAAQ,sBAE6C;CAAG;;;;;AAEvF;;;GAGG;AACH,qBAAa,uBAAwB,SAAQ,4BAK3C;CAAG;AAEL;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,wMA0BnC,CAAC;AAeH;;;GAGG;AACH,eAAO,MAAM,kBAAkB,kNAa7B,CAAC;AA+BH;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,+fAwDtB,CAAC;AAEH,8EAA8E;AAC9E,eAAO,MAAM,IAAI,seAkBf,CAAC"}