@nodetool-ai/deploy 0.7.0-rc.11

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 (133) hide show
  1. package/dist/admin-client.d.ts +58 -0
  2. package/dist/admin-client.d.ts.map +1 -0
  3. package/dist/admin-client.js +275 -0
  4. package/dist/admin-client.js.map +1 -0
  5. package/dist/admin-operations.d.ts +197 -0
  6. package/dist/admin-operations.d.ts.map +1 -0
  7. package/dist/admin-operations.js +433 -0
  8. package/dist/admin-operations.js.map +1 -0
  9. package/dist/admin-routes.d.ts +306 -0
  10. package/dist/admin-routes.d.ts.map +1 -0
  11. package/dist/admin-routes.js +383 -0
  12. package/dist/admin-routes.js.map +1 -0
  13. package/dist/api-user-manager.d.ts +72 -0
  14. package/dist/api-user-manager.d.ts.map +1 -0
  15. package/dist/api-user-manager.js +89 -0
  16. package/dist/api-user-manager.js.map +1 -0
  17. package/dist/auth.d.ts +67 -0
  18. package/dist/auth.d.ts.map +1 -0
  19. package/dist/auth.js +142 -0
  20. package/dist/auth.js.map +1 -0
  21. package/dist/collection-routes.d.ts +37 -0
  22. package/dist/collection-routes.d.ts.map +1 -0
  23. package/dist/collection-routes.js +43 -0
  24. package/dist/collection-routes.js.map +1 -0
  25. package/dist/compose.d.ts +52 -0
  26. package/dist/compose.d.ts.map +1 -0
  27. package/dist/compose.js +153 -0
  28. package/dist/compose.js.map +1 -0
  29. package/dist/configure.d.ts +87 -0
  30. package/dist/configure.d.ts.map +1 -0
  31. package/dist/configure.js +104 -0
  32. package/dist/configure.js.map +1 -0
  33. package/dist/deploy-to-gcp.d.ts +67 -0
  34. package/dist/deploy-to-gcp.d.ts.map +1 -0
  35. package/dist/deploy-to-gcp.js +268 -0
  36. package/dist/deploy-to-gcp.js.map +1 -0
  37. package/dist/deploy-to-runpod.d.ts +53 -0
  38. package/dist/deploy-to-runpod.d.ts.map +1 -0
  39. package/dist/deploy-to-runpod.js +207 -0
  40. package/dist/deploy-to-runpod.js.map +1 -0
  41. package/dist/deploy.d.ts +54 -0
  42. package/dist/deploy.d.ts.map +1 -0
  43. package/dist/deploy.js +82 -0
  44. package/dist/deploy.js.map +1 -0
  45. package/dist/deployment-config.d.ts +1073 -0
  46. package/dist/deployment-config.d.ts.map +1 -0
  47. package/dist/deployment-config.js +536 -0
  48. package/dist/deployment-config.js.map +1 -0
  49. package/dist/docker-run.d.ts +85 -0
  50. package/dist/docker-run.d.ts.map +1 -0
  51. package/dist/docker-run.js +202 -0
  52. package/dist/docker-run.js.map +1 -0
  53. package/dist/docker.d.ts +98 -0
  54. package/dist/docker.d.ts.map +1 -0
  55. package/dist/docker.js +396 -0
  56. package/dist/docker.js.map +1 -0
  57. package/dist/fly.d.ts +40 -0
  58. package/dist/fly.d.ts.map +1 -0
  59. package/dist/fly.js +291 -0
  60. package/dist/fly.js.map +1 -0
  61. package/dist/gcp.d.ts +59 -0
  62. package/dist/gcp.d.ts.map +1 -0
  63. package/dist/gcp.js +339 -0
  64. package/dist/gcp.js.map +1 -0
  65. package/dist/google-cloud-run-api.d.ts +134 -0
  66. package/dist/google-cloud-run-api.d.ts.map +1 -0
  67. package/dist/google-cloud-run-api.js +532 -0
  68. package/dist/google-cloud-run-api.js.map +1 -0
  69. package/dist/huggingface.d.ts +69 -0
  70. package/dist/huggingface.d.ts.map +1 -0
  71. package/dist/huggingface.js +346 -0
  72. package/dist/huggingface.js.map +1 -0
  73. package/dist/image-builder.d.ts +35 -0
  74. package/dist/image-builder.d.ts.map +1 -0
  75. package/dist/image-builder.js +157 -0
  76. package/dist/image-builder.js.map +1 -0
  77. package/dist/image-spec.d.ts +41 -0
  78. package/dist/image-spec.d.ts.map +1 -0
  79. package/dist/image-spec.js +49 -0
  80. package/dist/image-spec.js.map +1 -0
  81. package/dist/index.d.ts +33 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +45 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/manager.d.ts +121 -0
  86. package/dist/manager.d.ts.map +1 -0
  87. package/dist/manager.js +225 -0
  88. package/dist/manager.js.map +1 -0
  89. package/dist/progress.d.ts +91 -0
  90. package/dist/progress.d.ts.map +1 -0
  91. package/dist/progress.js +262 -0
  92. package/dist/progress.js.map +1 -0
  93. package/dist/railway.d.ts +65 -0
  94. package/dist/railway.d.ts.map +1 -0
  95. package/dist/railway.js +284 -0
  96. package/dist/railway.js.map +1 -0
  97. package/dist/remote-users.d.ts +74 -0
  98. package/dist/remote-users.d.ts.map +1 -0
  99. package/dist/remote-users.js +172 -0
  100. package/dist/remote-users.js.map +1 -0
  101. package/dist/runpod-api.d.ts +206 -0
  102. package/dist/runpod-api.d.ts.map +1 -0
  103. package/dist/runpod-api.js +703 -0
  104. package/dist/runpod-api.js.map +1 -0
  105. package/dist/runpod.d.ts +82 -0
  106. package/dist/runpod.d.ts.map +1 -0
  107. package/dist/runpod.js +188 -0
  108. package/dist/runpod.js.map +1 -0
  109. package/dist/self-hosted.d.ts +157 -0
  110. package/dist/self-hosted.d.ts.map +1 -0
  111. package/dist/self-hosted.js +799 -0
  112. package/dist/self-hosted.js.map +1 -0
  113. package/dist/ssh.d.ts +166 -0
  114. package/dist/ssh.d.ts.map +1 -0
  115. package/dist/ssh.js +430 -0
  116. package/dist/ssh.js.map +1 -0
  117. package/dist/state.d.ts +83 -0
  118. package/dist/state.d.ts.map +1 -0
  119. package/dist/state.js +368 -0
  120. package/dist/state.js.map +1 -0
  121. package/dist/storage-routes.d.ts +55 -0
  122. package/dist/storage-routes.d.ts.map +1 -0
  123. package/dist/storage-routes.js +160 -0
  124. package/dist/storage-routes.js.map +1 -0
  125. package/dist/sync.d.ts +38 -0
  126. package/dist/sync.d.ts.map +1 -0
  127. package/dist/sync.js +130 -0
  128. package/dist/sync.js.map +1 -0
  129. package/dist/workflow-syncer.d.ts +51 -0
  130. package/dist/workflow-syncer.d.ts.map +1 -0
  131. package/dist/workflow-syncer.js +192 -0
  132. package/dist/workflow-syncer.js.map +1 -0
  133. package/package.json +58 -0
package/dist/fly.js ADDED
@@ -0,0 +1,291 @@
1
+ /**
2
+ * Fly.io deployment implementation for NodeTool.
3
+ *
4
+ * Handles deployment to Fly.io using the `flyctl` CLI, including:
5
+ * - Docker image building from nodetool-image.yaml specs
6
+ * - Fly app creation and management
7
+ * - Volume provisioning
8
+ * - Secret/environment variable configuration
9
+ * - Service deployment and monitoring
10
+ */
11
+ import { execFile } from "node:child_process";
12
+ import { promisify } from "node:util";
13
+ import { resolve } from "node:path";
14
+ import { loadImageSpec } from "./image-spec.js";
15
+ import { buildImage } from "./image-builder.js";
16
+ import { DeploymentStatus } from "./deployment-config.js";
17
+ import { StateManager } from "./state.js";
18
+ const execFileAsync = promisify(execFile);
19
+ // ============================================================================
20
+ // Helpers
21
+ // ============================================================================
22
+ /**
23
+ * Run a flyctl command and return parsed JSON output.
24
+ *
25
+ * Throws a descriptive error when flyctl is not installed or the command fails.
26
+ */
27
+ async function flyctl(args, opts) {
28
+ try {
29
+ const { stdout } = await execFileAsync("flyctl", args, {
30
+ timeout: opts?.timeout ?? 60_000
31
+ });
32
+ return stdout;
33
+ }
34
+ catch (e) {
35
+ const err = e;
36
+ if (err.code === "ENOENT") {
37
+ throw new Error("flyctl not found — install from https://fly.io/docs/flyctl/install/");
38
+ }
39
+ const msg = e instanceof Error ? e.message : String(e);
40
+ throw new Error(`flyctl ${args[0]} failed: ${msg}`);
41
+ }
42
+ }
43
+ /**
44
+ * Run flyctl and parse the JSON output.
45
+ */
46
+ async function flyctlJson(args, opts) {
47
+ const raw = await flyctl(args, opts);
48
+ return JSON.parse(raw);
49
+ }
50
+ /**
51
+ * Check whether a Fly app already exists.
52
+ */
53
+ async function appExists(app) {
54
+ try {
55
+ const apps = await flyctlJson([
56
+ "apps",
57
+ "list",
58
+ "--json"
59
+ ]);
60
+ return apps.some((a) => (a.Name ?? a.name) === app);
61
+ }
62
+ catch {
63
+ return false;
64
+ }
65
+ }
66
+ // ============================================================================
67
+ // FlyDeployer
68
+ // ============================================================================
69
+ /**
70
+ * Deploys NodeTool to Fly.io using the flyctl CLI.
71
+ *
72
+ * Lifecycle:
73
+ * plan() — check what will be created/updated
74
+ * apply() — build image, create app, set secrets, deploy
75
+ * destroy() — tear down the Fly app
76
+ * status() — query current app status
77
+ * logs() — stream or tail app logs
78
+ */
79
+ export class FlyDeployer {
80
+ deploymentName;
81
+ deployment;
82
+ stateManager;
83
+ constructor(deploymentName, deployment, stateManager) {
84
+ this.deploymentName = deploymentName;
85
+ this.deployment = deployment;
86
+ this.stateManager = stateManager ?? new StateManager();
87
+ }
88
+ // ---------- plan ----------
89
+ async plan() {
90
+ const plan = {
91
+ deployment_name: this.deploymentName,
92
+ host: `${this.deployment.app}.fly.dev`,
93
+ type: "fly",
94
+ changes: [],
95
+ will_create: [],
96
+ will_update: [],
97
+ will_destroy: []
98
+ };
99
+ const exists = await appExists(this.deployment.app);
100
+ if (!exists) {
101
+ plan.changes.push("Initial deployment — will create all resources");
102
+ plan.will_create.push(`Fly app: ${this.deployment.app}`);
103
+ }
104
+ else {
105
+ plan.changes.push("App exists — will update deployment");
106
+ plan.will_update.push(`Fly app: ${this.deployment.app}`);
107
+ }
108
+ plan.will_create.push("Docker image (if changed)");
109
+ if (this.deployment.volumes?.length) {
110
+ for (const vol of this.deployment.volumes) {
111
+ plan.will_create.push(`Volume: ${vol.name} (${vol.size}GB at ${vol.mount})`);
112
+ }
113
+ }
114
+ if (this.deployment.environment) {
115
+ const keys = Object.keys(this.deployment.environment);
116
+ if (keys.length > 0) {
117
+ plan.will_update.push(`Secrets: ${keys.join(", ")}`);
118
+ }
119
+ }
120
+ return plan;
121
+ }
122
+ // ---------- apply ----------
123
+ async apply(opts) {
124
+ if (!/^[\w-]+$/.test(this.deployment.app)) {
125
+ throw new Error(`Invalid Fly app name: "${this.deployment.app}"`);
126
+ }
127
+ if (opts?.dryRun) {
128
+ return (await this.plan());
129
+ }
130
+ const results = {
131
+ deployment_name: this.deploymentName,
132
+ status: "success",
133
+ steps: [],
134
+ errors: []
135
+ };
136
+ try {
137
+ await this.stateManager.updateDeploymentStatus(this.deploymentName, DeploymentStatus.DEPLOYING);
138
+ const app = this.deployment.app;
139
+ const region = this.deployment.region;
140
+ const imageTag = `registry.fly.io/${app}:latest`;
141
+ // 1. Load and validate image spec, then build Docker image
142
+ const specPath = resolve(this.deployment.image);
143
+ const spec = await loadImageSpec(specPath);
144
+ results.steps.push(`Loaded image spec from ${specPath}`);
145
+ // Build Docker image tagged for Fly registry
146
+ await buildImage(spec, imageTag);
147
+ results.steps.push(`Built Docker image: ${imageTag}`);
148
+ // Push to Fly registry
149
+ await execFileAsync("docker", ["push", imageTag], { timeout: 600_000 });
150
+ results.steps.push(`Pushed image to Fly registry`);
151
+ // 2. Ensure Fly app exists
152
+ const exists = await appExists(app);
153
+ if (!exists) {
154
+ await flyctl(["apps", "create", app, "--json"]);
155
+ results.steps.push(`Created Fly app: ${app}`);
156
+ }
157
+ else {
158
+ results.steps.push(`Fly app already exists: ${app}`);
159
+ }
160
+ // 3. Create volumes if specified
161
+ if (this.deployment.volumes?.length) {
162
+ for (const vol of this.deployment.volumes) {
163
+ try {
164
+ await flyctl([
165
+ "volumes",
166
+ "create",
167
+ vol.name,
168
+ "--app",
169
+ app,
170
+ "--region",
171
+ region,
172
+ "--size",
173
+ String(vol.size),
174
+ "--json",
175
+ "--yes"
176
+ ]);
177
+ results.steps.push(`Created volume: ${vol.name} (${vol.size}GB at ${vol.mount})`);
178
+ }
179
+ catch (e) {
180
+ // Volume may already exist; not fatal
181
+ const msg = e instanceof Error ? e.message : String(e);
182
+ if (!msg.includes("already exists")) {
183
+ results.errors.push(`Volume ${vol.name}: ${msg}`);
184
+ }
185
+ else {
186
+ results.steps.push(`Volume already exists: ${vol.name}`);
187
+ }
188
+ }
189
+ }
190
+ }
191
+ // 4. Set environment variables as secrets
192
+ if (this.deployment.environment) {
193
+ const entries = Object.entries(this.deployment.environment);
194
+ if (entries.length > 0) {
195
+ const secretArgs = entries.map(([k, v]) => `${k}=${v}`);
196
+ await flyctl(["secrets", "set", "--app", app, ...secretArgs]);
197
+ results.steps.push(`Set ${entries.length} secret(s)`);
198
+ }
199
+ }
200
+ // 5. Deploy
201
+ await flyctl(["deploy", "--app", app, "--image", imageTag, "--region", region], { timeout: 600_000 });
202
+ results.steps.push("Deployment complete");
203
+ // 6. Update state
204
+ await this.stateManager.writeState(this.deploymentName, {
205
+ status: DeploymentStatus.SERVING,
206
+ app,
207
+ region,
208
+ url: `https://${app}.fly.dev`
209
+ });
210
+ }
211
+ catch (e) {
212
+ results.status = "error";
213
+ results.errors.push(e instanceof Error ? e.message : String(e));
214
+ await this.stateManager.updateDeploymentStatus(this.deploymentName, DeploymentStatus.ERROR);
215
+ throw e;
216
+ }
217
+ return results;
218
+ }
219
+ // ---------- destroy ----------
220
+ async destroy() {
221
+ const results = {
222
+ deployment_name: this.deploymentName,
223
+ status: "success",
224
+ steps: [],
225
+ errors: []
226
+ };
227
+ try {
228
+ results.steps.push(`Destroying Fly app: ${this.deployment.app}...`);
229
+ await flyctl(["apps", "destroy", this.deployment.app, "--yes"]);
230
+ results.steps.push("App destroyed successfully");
231
+ await this.stateManager.updateDeploymentStatus(this.deploymentName, DeploymentStatus.DESTROYED);
232
+ }
233
+ catch (e) {
234
+ results.status = "error";
235
+ results.errors.push(e instanceof Error ? e.message : String(e));
236
+ await this.stateManager.updateDeploymentStatus(this.deploymentName, DeploymentStatus.ERROR);
237
+ throw e;
238
+ }
239
+ return results;
240
+ }
241
+ // ---------- status ----------
242
+ async status() {
243
+ const statusInfo = {
244
+ deployment_name: this.deploymentName,
245
+ host: `${this.deployment.app}.fly.dev`,
246
+ type: "fly"
247
+ };
248
+ // Get saved state
249
+ const state = await this.stateManager.readState(this.deploymentName);
250
+ if (state) {
251
+ statusInfo.status = state["status"] ?? "unknown";
252
+ statusInfo.last_deployed = state["last_deployed"];
253
+ statusInfo.url = state["url"];
254
+ }
255
+ // Get live status from Fly
256
+ try {
257
+ const raw = await flyctl([
258
+ "status",
259
+ "--app",
260
+ this.deployment.app,
261
+ "--json"
262
+ ]);
263
+ const live = JSON.parse(raw);
264
+ statusInfo.live_status = (live["Status"] ?? live["status"]);
265
+ }
266
+ catch (e) {
267
+ statusInfo.live_status_error = e instanceof Error ? e.message : String(e);
268
+ }
269
+ return statusInfo;
270
+ }
271
+ // ---------- logs ----------
272
+ async logs(opts) {
273
+ if (opts?.follow) {
274
+ throw new Error("Streaming logs not supported. Use 'flyctl logs --app " +
275
+ `${this.deployment.app} --follow' directly.`);
276
+ }
277
+ const args = ["logs", "--app", this.deployment.app];
278
+ if (opts?.tail !== undefined) {
279
+ args.push("--num", String(opts.tail));
280
+ }
281
+ try {
282
+ const stdout = await flyctl(args, { timeout: 30_000 });
283
+ return stdout;
284
+ }
285
+ catch (e) {
286
+ const msg = e instanceof Error ? e.message : String(e);
287
+ throw new Error(`Failed to fetch logs: ${msg}`);
288
+ }
289
+ }
290
+ }
291
+ //# sourceMappingURL=fly.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fly.js","sourceRoot":"","sources":["../src/fly.ts"],"names":[],"mappings":"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"}
package/dist/gcp.d.ts ADDED
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Google Cloud Run deployment implementation for NodeTool.
3
+ *
4
+ * Handles deployment to Google Cloud Run, including:
5
+ * - Docker image building and pushing to GCR/Artifact Registry
6
+ * - Cloud Run service deployment
7
+ * - Service management
8
+ * - IAM permission setup
9
+ *
10
+ * Ported from nodetool.deploy.gcp (Python).
11
+ */
12
+ import type { GCPDeployment } from "./deployment-config.js";
13
+ import { StateManager } from "./state.js";
14
+ /**
15
+ * Handles deployment to Google Cloud Run.
16
+ *
17
+ * Orchestrates the entire GCP deployment process including:
18
+ * - Docker image building and pushing
19
+ * - Cloud Run service deployment
20
+ * - Service configuration
21
+ * - State management
22
+ */
23
+ export declare class GCPDeployer {
24
+ readonly deploymentName: string;
25
+ readonly deployment: GCPDeployment;
26
+ readonly stateManager: StateManager;
27
+ constructor(deploymentName: string, deployment: GCPDeployment, stateManager?: StateManager);
28
+ /**
29
+ * Detect changes between local configuration and remote service.
30
+ */
31
+ private _detectChanges;
32
+ /**
33
+ * Generate a deployment plan showing what changes will be made.
34
+ */
35
+ plan(): Promise<Record<string, unknown>>;
36
+ /**
37
+ * Apply the deployment to Google Cloud Run.
38
+ *
39
+ * @param dryRun If true, only show what would be done without executing.
40
+ */
41
+ apply(dryRun?: boolean): Promise<Record<string, unknown>>;
42
+ /**
43
+ * Get current deployment status.
44
+ */
45
+ status(): Promise<Record<string, unknown>>;
46
+ /**
47
+ * Get logs from Cloud Run service.
48
+ *
49
+ * @param service Not used for GCP (kept for interface compatibility).
50
+ * @param follow Follow log output (not recommended for programmatic use).
51
+ * @param tail Number of lines to show.
52
+ */
53
+ logs(_service?: string, follow?: boolean, tail?: number): Promise<string>;
54
+ /**
55
+ * Destroy the deployment (delete Cloud Run service).
56
+ */
57
+ destroy(): Promise<Record<string, unknown>>;
58
+ }
59
+ //# sourceMappingURL=gcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcp.d.ts","sourceRoot":"","sources":["../src/gcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAe1C;;;;;;;;GAQG;AACH,qBAAa,WAAW;IACtB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;gBAGlC,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,aAAa,EACzB,YAAY,CAAC,EAAE,YAAY;IAS7B;;OAEG;IACH,OAAO,CAAC,cAAc;IA4ItB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAkD9C;;;;OAIG;IACG,KAAK,CAAC,MAAM,UAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IA6D7D;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IA4ChD;;;;;;OAMG;IACG,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,UAAQ,EAAE,IAAI,SAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA4B1E;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAyClD"}