@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.
- package/dist/admin-client.d.ts +58 -0
- package/dist/admin-client.d.ts.map +1 -0
- package/dist/admin-client.js +275 -0
- package/dist/admin-client.js.map +1 -0
- package/dist/admin-operations.d.ts +197 -0
- package/dist/admin-operations.d.ts.map +1 -0
- package/dist/admin-operations.js +433 -0
- package/dist/admin-operations.js.map +1 -0
- package/dist/admin-routes.d.ts +306 -0
- package/dist/admin-routes.d.ts.map +1 -0
- package/dist/admin-routes.js +383 -0
- package/dist/admin-routes.js.map +1 -0
- package/dist/api-user-manager.d.ts +72 -0
- package/dist/api-user-manager.d.ts.map +1 -0
- package/dist/api-user-manager.js +89 -0
- package/dist/api-user-manager.js.map +1 -0
- package/dist/auth.d.ts +67 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +142 -0
- package/dist/auth.js.map +1 -0
- package/dist/collection-routes.d.ts +37 -0
- package/dist/collection-routes.d.ts.map +1 -0
- package/dist/collection-routes.js +43 -0
- package/dist/collection-routes.js.map +1 -0
- package/dist/compose.d.ts +52 -0
- package/dist/compose.d.ts.map +1 -0
- package/dist/compose.js +153 -0
- package/dist/compose.js.map +1 -0
- package/dist/configure.d.ts +87 -0
- package/dist/configure.d.ts.map +1 -0
- package/dist/configure.js +104 -0
- package/dist/configure.js.map +1 -0
- package/dist/deploy-to-gcp.d.ts +67 -0
- package/dist/deploy-to-gcp.d.ts.map +1 -0
- package/dist/deploy-to-gcp.js +268 -0
- package/dist/deploy-to-gcp.js.map +1 -0
- package/dist/deploy-to-runpod.d.ts +53 -0
- package/dist/deploy-to-runpod.d.ts.map +1 -0
- package/dist/deploy-to-runpod.js +207 -0
- package/dist/deploy-to-runpod.js.map +1 -0
- package/dist/deploy.d.ts +54 -0
- package/dist/deploy.d.ts.map +1 -0
- package/dist/deploy.js +82 -0
- package/dist/deploy.js.map +1 -0
- package/dist/deployment-config.d.ts +1073 -0
- package/dist/deployment-config.d.ts.map +1 -0
- package/dist/deployment-config.js +536 -0
- package/dist/deployment-config.js.map +1 -0
- package/dist/docker-run.d.ts +85 -0
- package/dist/docker-run.d.ts.map +1 -0
- package/dist/docker-run.js +202 -0
- package/dist/docker-run.js.map +1 -0
- package/dist/docker.d.ts +98 -0
- package/dist/docker.d.ts.map +1 -0
- package/dist/docker.js +396 -0
- package/dist/docker.js.map +1 -0
- package/dist/fly.d.ts +40 -0
- package/dist/fly.d.ts.map +1 -0
- package/dist/fly.js +291 -0
- package/dist/fly.js.map +1 -0
- package/dist/gcp.d.ts +59 -0
- package/dist/gcp.d.ts.map +1 -0
- package/dist/gcp.js +339 -0
- package/dist/gcp.js.map +1 -0
- package/dist/google-cloud-run-api.d.ts +134 -0
- package/dist/google-cloud-run-api.d.ts.map +1 -0
- package/dist/google-cloud-run-api.js +532 -0
- package/dist/google-cloud-run-api.js.map +1 -0
- package/dist/huggingface.d.ts +69 -0
- package/dist/huggingface.d.ts.map +1 -0
- package/dist/huggingface.js +346 -0
- package/dist/huggingface.js.map +1 -0
- package/dist/image-builder.d.ts +35 -0
- package/dist/image-builder.d.ts.map +1 -0
- package/dist/image-builder.js +157 -0
- package/dist/image-builder.js.map +1 -0
- package/dist/image-spec.d.ts +41 -0
- package/dist/image-spec.d.ts.map +1 -0
- package/dist/image-spec.js +49 -0
- package/dist/image-spec.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/manager.d.ts +121 -0
- package/dist/manager.d.ts.map +1 -0
- package/dist/manager.js +225 -0
- package/dist/manager.js.map +1 -0
- package/dist/progress.d.ts +91 -0
- package/dist/progress.d.ts.map +1 -0
- package/dist/progress.js +262 -0
- package/dist/progress.js.map +1 -0
- package/dist/railway.d.ts +65 -0
- package/dist/railway.d.ts.map +1 -0
- package/dist/railway.js +284 -0
- package/dist/railway.js.map +1 -0
- package/dist/remote-users.d.ts +74 -0
- package/dist/remote-users.d.ts.map +1 -0
- package/dist/remote-users.js +172 -0
- package/dist/remote-users.js.map +1 -0
- package/dist/runpod-api.d.ts +206 -0
- package/dist/runpod-api.d.ts.map +1 -0
- package/dist/runpod-api.js +703 -0
- package/dist/runpod-api.js.map +1 -0
- package/dist/runpod.d.ts +82 -0
- package/dist/runpod.d.ts.map +1 -0
- package/dist/runpod.js +188 -0
- package/dist/runpod.js.map +1 -0
- package/dist/self-hosted.d.ts +157 -0
- package/dist/self-hosted.d.ts.map +1 -0
- package/dist/self-hosted.js +799 -0
- package/dist/self-hosted.js.map +1 -0
- package/dist/ssh.d.ts +166 -0
- package/dist/ssh.d.ts.map +1 -0
- package/dist/ssh.js +430 -0
- package/dist/ssh.js.map +1 -0
- package/dist/state.d.ts +83 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +368 -0
- package/dist/state.js.map +1 -0
- package/dist/storage-routes.d.ts +55 -0
- package/dist/storage-routes.d.ts.map +1 -0
- package/dist/storage-routes.js +160 -0
- package/dist/storage-routes.js.map +1 -0
- package/dist/sync.d.ts +38 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +130 -0
- package/dist/sync.js.map +1 -0
- package/dist/workflow-syncer.d.ts +51 -0
- package/dist/workflow-syncer.d.ts.map +1 -0
- package/dist/workflow-syncer.js +192 -0
- package/dist/workflow-syncer.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Cloud Run Deployment Script for NodeTool Workflows
|
|
3
|
+
*
|
|
4
|
+
* Automates the deployment of NodeTool services to Google Cloud Run:
|
|
5
|
+
* 1. Builds a Docker container for Cloud Run execution
|
|
6
|
+
* 2. Pushes the image to Google Container Registry or Artifact Registry
|
|
7
|
+
* 3. Deploys the service to Google Cloud Run
|
|
8
|
+
*
|
|
9
|
+
* Ported from nodetool.deploy.deploy_to_gcp (Python).
|
|
10
|
+
*/
|
|
11
|
+
import { deployToCloudRun, enableRequiredApis, ensureCloudRunPermissions, ensureGcloudAuth, ensureProjectSet, pushToGcr, deleteCloudRunService, listCloudRunServices } from "./google-cloud-run-api.js";
|
|
12
|
+
import { buildDockerImage, runCommand } from "./docker.js";
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Helpers
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
/**
|
|
17
|
+
* Sanitize a name for use as Cloud Run service name.
|
|
18
|
+
*
|
|
19
|
+
* Cloud Run service names must:
|
|
20
|
+
* - Start with a letter
|
|
21
|
+
* - Contain only lowercase letters, numbers, and hyphens
|
|
22
|
+
* - Be 63 characters or less
|
|
23
|
+
* - End with a letter or number
|
|
24
|
+
*/
|
|
25
|
+
export function sanitizeServiceName(name) {
|
|
26
|
+
// Convert to lowercase and replace invalid chars with hyphens
|
|
27
|
+
let sanitized = name.toLowerCase().replace(/[^a-z0-9-]/g, "-");
|
|
28
|
+
// Remove consecutive hyphens
|
|
29
|
+
sanitized = sanitized.replace(/-+/g, "-");
|
|
30
|
+
// Ensure it starts with a letter
|
|
31
|
+
if (sanitized.length > 0 && !/^[a-z]/.test(sanitized)) {
|
|
32
|
+
sanitized = "svc-" + sanitized;
|
|
33
|
+
}
|
|
34
|
+
// Remove leading/trailing hyphens
|
|
35
|
+
sanitized = sanitized.replace(/^-+|-+$/g, "");
|
|
36
|
+
// Ensure it ends with alphanumeric
|
|
37
|
+
if (sanitized.length > 0 && !/[a-z0-9]$/.test(sanitized)) {
|
|
38
|
+
sanitized = sanitized.replace(/-+$/, "");
|
|
39
|
+
}
|
|
40
|
+
// Truncate to 63 characters
|
|
41
|
+
if (sanitized.length > 63) {
|
|
42
|
+
sanitized = sanitized.slice(0, 60) + "svc";
|
|
43
|
+
}
|
|
44
|
+
// Ensure it's not empty
|
|
45
|
+
if (!sanitized) {
|
|
46
|
+
sanitized = "nodetool-svc";
|
|
47
|
+
}
|
|
48
|
+
return sanitized;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Infer Artifact Registry URL from region.
|
|
52
|
+
*/
|
|
53
|
+
export function inferRegistryFromRegion(region) {
|
|
54
|
+
return `${region}-docker.pkg.dev`;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get the default environment variables for a GCP deployment.
|
|
58
|
+
*/
|
|
59
|
+
export function getGcpDefaultEnv(deployment) {
|
|
60
|
+
const env = {};
|
|
61
|
+
const gcsBucket = deployment.storage?.gcs_bucket ?? null;
|
|
62
|
+
const gcsMountPath = deployment.storage?.gcs_mount_path ?? "/mnt/gcs";
|
|
63
|
+
env["NODETOOL_SERVER_MODE"] = "private";
|
|
64
|
+
env["HF_HOME"] = gcsBucket
|
|
65
|
+
? `${gcsMountPath}/.cache/huggingface`
|
|
66
|
+
: "/workspace/.cache/huggingface";
|
|
67
|
+
env["HF_HUB_CACHE"] = gcsBucket
|
|
68
|
+
? `${gcsMountPath}/.cache/huggingface/hub`
|
|
69
|
+
: "/workspace/.cache/huggingface/hub";
|
|
70
|
+
env["TRANSFORMERS_CACHE"] = gcsBucket
|
|
71
|
+
? `${gcsMountPath}/.cache/transformers`
|
|
72
|
+
: "/workspace/.cache/transformers";
|
|
73
|
+
env["OLLAMA_MODELS"] = gcsBucket
|
|
74
|
+
? `${gcsMountPath}/.ollama/models`
|
|
75
|
+
: "/workspace/.ollama/models";
|
|
76
|
+
const persistentPaths = deployment.persistent_paths;
|
|
77
|
+
if (persistentPaths) {
|
|
78
|
+
env["USERS_FILE"] = persistentPaths.users_file;
|
|
79
|
+
env["DB_PATH"] = persistentPaths.db_path;
|
|
80
|
+
env["CHROMA_PATH"] = persistentPaths.chroma_path;
|
|
81
|
+
env["ASSET_BUCKET"] = persistentPaths.asset_bucket;
|
|
82
|
+
env["AUTH_PROVIDER"] = "multi_user";
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
env["AUTH_PROVIDER"] = "static";
|
|
86
|
+
}
|
|
87
|
+
return env;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Deploy nodetool service to Google Cloud Run infrastructure.
|
|
91
|
+
*
|
|
92
|
+
* This is the main deployment function that orchestrates the entire process.
|
|
93
|
+
*/
|
|
94
|
+
export async function deployToGcp(options) {
|
|
95
|
+
const { deployment, env: envInput, skipBuild = false, skipPush = false, skipDeploy = false, noCache = false, skipPermissionSetup = false } = options;
|
|
96
|
+
const env = envInput ? { ...envInput } : {};
|
|
97
|
+
let serviceName = deployment.service_name;
|
|
98
|
+
let projectId = deployment.project_id;
|
|
99
|
+
const region = deployment.region;
|
|
100
|
+
let registry = deployment.image.registry;
|
|
101
|
+
const cpu = deployment.resources.cpu;
|
|
102
|
+
const memory = deployment.resources.memory;
|
|
103
|
+
const gpuType = deployment.resources.gpu_type ?? null;
|
|
104
|
+
const gpuCount = deployment.resources.gpu_count ?? (gpuType ? 1 : 0);
|
|
105
|
+
const minInstances = deployment.resources.min_instances;
|
|
106
|
+
const maxInstances = deployment.resources.max_instances;
|
|
107
|
+
const concurrency = deployment.resources.concurrency;
|
|
108
|
+
const timeout = deployment.resources.timeout;
|
|
109
|
+
const allowUnauthenticated = deployment.iam.allow_unauthenticated;
|
|
110
|
+
let imageName = deployment.image.repository;
|
|
111
|
+
const tag = deployment.image.tag;
|
|
112
|
+
const platform = deployment.image.build.platform;
|
|
113
|
+
const serviceAccount = deployment.iam.service_account ?? null;
|
|
114
|
+
const gcsBucket = deployment.storage?.gcs_bucket ?? null;
|
|
115
|
+
const gcsMountPath = deployment.storage?.gcs_mount_path ?? "/mnt/gcs";
|
|
116
|
+
// Sanitize service name for Cloud Run
|
|
117
|
+
serviceName = sanitizeServiceName(serviceName);
|
|
118
|
+
console.log(`Using service name: ${serviceName}`);
|
|
119
|
+
// Ensure Google Cloud authentication and configuration
|
|
120
|
+
await ensureGcloudAuth();
|
|
121
|
+
projectId = await ensureProjectSet(projectId);
|
|
122
|
+
console.log(`Using project: ${projectId}`);
|
|
123
|
+
// Enable required APIs
|
|
124
|
+
await enableRequiredApis(projectId);
|
|
125
|
+
// Ensure Cloud Run permissions (unless skipped)
|
|
126
|
+
if (!skipPermissionSetup) {
|
|
127
|
+
await ensureCloudRunPermissions(projectId, serviceAccount);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
console.warn("Skipping automatic permission setup");
|
|
131
|
+
}
|
|
132
|
+
// Infer registry from region if not provided
|
|
133
|
+
if (!registry) {
|
|
134
|
+
registry = inferRegistryFromRegion(region);
|
|
135
|
+
console.log(`Inferred registry from region: ${registry}`);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
console.log(`Using provided registry: ${registry}`);
|
|
139
|
+
}
|
|
140
|
+
const imageTag = tag;
|
|
141
|
+
console.log(`Using provided tag: ${imageTag}`);
|
|
142
|
+
// Use service name as image name if not provided
|
|
143
|
+
if (!imageName) {
|
|
144
|
+
imageName = serviceName;
|
|
145
|
+
}
|
|
146
|
+
const localImageName = `${registry}/${projectId}/${imageName}`;
|
|
147
|
+
// Check if Docker is running
|
|
148
|
+
if (!skipBuild) {
|
|
149
|
+
try {
|
|
150
|
+
runCommand("docker --version", true);
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
throw new Error("Docker is not installed or not running");
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
console.log(`Local image name: ${localImageName}`);
|
|
157
|
+
let deploymentInfo = null;
|
|
158
|
+
try {
|
|
159
|
+
// Build Docker image
|
|
160
|
+
if (!skipBuild) {
|
|
161
|
+
buildDockerImage({
|
|
162
|
+
imageName: localImageName,
|
|
163
|
+
tag: imageTag,
|
|
164
|
+
platform,
|
|
165
|
+
useCache: !noCache,
|
|
166
|
+
autoPush: false // Always disable auto_push for GCP to keep image local
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
// Push to Google Container Registry
|
|
170
|
+
let gcpImageUrl = null;
|
|
171
|
+
if (!skipPush) {
|
|
172
|
+
gcpImageUrl = await pushToGcr(localImageName, imageTag, projectId, registry);
|
|
173
|
+
console.log(`Image pushed to registry: ${gcpImageUrl}`);
|
|
174
|
+
}
|
|
175
|
+
// Set default cache envs (respect provided values)
|
|
176
|
+
const defaultEnv = getGcpDefaultEnv(deployment);
|
|
177
|
+
for (const [key, value] of Object.entries(defaultEnv)) {
|
|
178
|
+
if (!(key in env)) {
|
|
179
|
+
env[key] = value;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// Deploy to Cloud Run
|
|
183
|
+
if (!skipDeploy && gcpImageUrl) {
|
|
184
|
+
console.log("Deploying to Cloud Run...");
|
|
185
|
+
deploymentInfo = await deployToCloudRun({
|
|
186
|
+
serviceName,
|
|
187
|
+
imageUrl: gcpImageUrl,
|
|
188
|
+
region,
|
|
189
|
+
projectId,
|
|
190
|
+
port: 8000,
|
|
191
|
+
cpu,
|
|
192
|
+
memory,
|
|
193
|
+
gpuType,
|
|
194
|
+
gpuCount,
|
|
195
|
+
minInstances,
|
|
196
|
+
maxInstances,
|
|
197
|
+
concurrency,
|
|
198
|
+
timeout,
|
|
199
|
+
allowUnauthenticated,
|
|
200
|
+
envVars: env,
|
|
201
|
+
serviceAccount,
|
|
202
|
+
gcsBucket,
|
|
203
|
+
gcsMountPath
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
// Print deployment summary
|
|
207
|
+
printGcpDeploymentSummary({
|
|
208
|
+
imageName: localImageName,
|
|
209
|
+
imageTag,
|
|
210
|
+
gcpImageUrl,
|
|
211
|
+
serviceName,
|
|
212
|
+
region,
|
|
213
|
+
projectId,
|
|
214
|
+
deploymentInfo
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
catch (e) {
|
|
218
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
219
|
+
console.error(`Deployment failed: ${msg}`);
|
|
220
|
+
if (e instanceof Error && e.stack) {
|
|
221
|
+
console.error(e.stack);
|
|
222
|
+
}
|
|
223
|
+
throw new Error(`GCP deployment failed: ${msg}`);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Print a summary of the Google Cloud Run deployment results.
|
|
228
|
+
*/
|
|
229
|
+
export function printGcpDeploymentSummary(opts) {
|
|
230
|
+
console.log("\nGoogle Cloud Run Deployment completed successfully!");
|
|
231
|
+
console.log(`Local Image: ${opts.imageName}:${opts.imageTag}`);
|
|
232
|
+
if (opts.gcpImageUrl) {
|
|
233
|
+
console.log(`GCP Image: ${opts.gcpImageUrl}`);
|
|
234
|
+
}
|
|
235
|
+
console.log(`Project: ${opts.projectId}`);
|
|
236
|
+
console.log(`Region: ${opts.region}`);
|
|
237
|
+
console.log(`Service: ${opts.serviceName}`);
|
|
238
|
+
if (opts.deploymentInfo) {
|
|
239
|
+
const status = opts.deploymentInfo["status"];
|
|
240
|
+
const serviceUrl = status?.["url"];
|
|
241
|
+
if (serviceUrl) {
|
|
242
|
+
console.log(`Service URL: ${serviceUrl}`);
|
|
243
|
+
console.log(`Console: https://console.cloud.google.com/run/detail/${opts.region}/${opts.serviceName}/metrics?project=${opts.projectId}`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
console.log("\nDeployment ready for use!");
|
|
247
|
+
}
|
|
248
|
+
// ---------------------------------------------------------------------------
|
|
249
|
+
// Service management helpers
|
|
250
|
+
// ---------------------------------------------------------------------------
|
|
251
|
+
/**
|
|
252
|
+
* Delete a Google Cloud Run service.
|
|
253
|
+
*/
|
|
254
|
+
export async function deleteGcpService(serviceName, region = "us-central1", projectId) {
|
|
255
|
+
await ensureGcloudAuth();
|
|
256
|
+
const resolvedProjectId = await ensureProjectSet(projectId);
|
|
257
|
+
const sanitizedName = sanitizeServiceName(serviceName);
|
|
258
|
+
return deleteCloudRunService(sanitizedName, region, resolvedProjectId);
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* List Google Cloud Run services.
|
|
262
|
+
*/
|
|
263
|
+
export async function listGcpServices(region = "us-central1", projectId) {
|
|
264
|
+
await ensureGcloudAuth();
|
|
265
|
+
const resolvedProjectId = await ensureProjectSet(projectId);
|
|
266
|
+
return listCloudRunServices(region, resolvedProjectId);
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=deploy-to-gcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy-to-gcp.js","sourceRoot":"","sources":["../src/deploy-to-gcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RunPod Deployment Script for NodeTool Workflows
|
|
3
|
+
*
|
|
4
|
+
* Automates deployment of NodeTool services to RunPod serverless infrastructure:
|
|
5
|
+
* 1. Builds a Docker container for RunPod execution
|
|
6
|
+
* 2. Optionally creates RunPod templates and endpoints using the RunPod SDK
|
|
7
|
+
*
|
|
8
|
+
* Requirements:
|
|
9
|
+
* - Docker installed and running
|
|
10
|
+
* - RunPod API key (for deployment operations)
|
|
11
|
+
* - Docker registry authentication (docker login)
|
|
12
|
+
*/
|
|
13
|
+
import type { RunPodDeployment } from "./deployment-config.js";
|
|
14
|
+
/**
|
|
15
|
+
* Sanitize a name for use as Docker image name or RunPod template name.
|
|
16
|
+
*
|
|
17
|
+
* Converts to lowercase, replaces spaces and special characters with hyphens,
|
|
18
|
+
* removes consecutive hyphens, and removes leading/trailing hyphens.
|
|
19
|
+
*/
|
|
20
|
+
export declare function sanitizeName(name: string): string;
|
|
21
|
+
export interface DeployToRunpodOptions {
|
|
22
|
+
deployment: RunPodDeployment;
|
|
23
|
+
dockerUsername?: string;
|
|
24
|
+
dockerRegistry?: string;
|
|
25
|
+
imageName?: string;
|
|
26
|
+
tag?: string;
|
|
27
|
+
templateName?: string;
|
|
28
|
+
platform?: string;
|
|
29
|
+
gpuTypes?: string[];
|
|
30
|
+
gpuCount?: number;
|
|
31
|
+
dataCenters?: string[];
|
|
32
|
+
workersMin?: number;
|
|
33
|
+
workersMax?: number;
|
|
34
|
+
idleTimeout?: number;
|
|
35
|
+
executionTimeout?: number;
|
|
36
|
+
flashboot?: boolean;
|
|
37
|
+
skipBuild?: boolean;
|
|
38
|
+
skipPush?: boolean;
|
|
39
|
+
skipTemplate?: boolean;
|
|
40
|
+
skipEndpoint?: boolean;
|
|
41
|
+
noCache?: boolean;
|
|
42
|
+
noAutoPush?: boolean;
|
|
43
|
+
name?: string;
|
|
44
|
+
env?: Record<string, string>;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Deploy workflow or chat handler to RunPod serverless infrastructure.
|
|
48
|
+
*
|
|
49
|
+
* This is the main deployment function that orchestrates the entire deployment
|
|
50
|
+
* process: build, push, template creation, and endpoint creation.
|
|
51
|
+
*/
|
|
52
|
+
export declare function deployToRunpod(opts: DeployToRunpodOptions): Promise<void>;
|
|
53
|
+
//# sourceMappingURL=deploy-to-runpod.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy-to-runpod.d.ts","sourceRoot":"","sources":["../src/deploy-to-runpod.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAiB/D;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKjD;AA6DD,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA8Kf"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RunPod Deployment Script for NodeTool Workflows
|
|
3
|
+
*
|
|
4
|
+
* Automates deployment of NodeTool services to RunPod serverless infrastructure:
|
|
5
|
+
* 1. Builds a Docker container for RunPod execution
|
|
6
|
+
* 2. Optionally creates RunPod templates and endpoints using the RunPod SDK
|
|
7
|
+
*
|
|
8
|
+
* Requirements:
|
|
9
|
+
* - Docker installed and running
|
|
10
|
+
* - RunPod API key (for deployment operations)
|
|
11
|
+
* - Docker registry authentication (docker login)
|
|
12
|
+
*/
|
|
13
|
+
import { buildDockerImage, formatImageName, generateImageTag, pushToRegistry, runCommand } from "./docker.js";
|
|
14
|
+
import { createOrUpdateRunpodTemplate, createRunpodEndpointGraphql } from "./runpod-api.js";
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// Helpers
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
/**
|
|
19
|
+
* Sanitize a name for use as Docker image name or RunPod template name.
|
|
20
|
+
*
|
|
21
|
+
* Converts to lowercase, replaces spaces and special characters with hyphens,
|
|
22
|
+
* removes consecutive hyphens, and removes leading/trailing hyphens.
|
|
23
|
+
*/
|
|
24
|
+
export function sanitizeName(name) {
|
|
25
|
+
let sanitized = name.toLowerCase().replace(/[^a-zA-Z0-9-]/g, "-");
|
|
26
|
+
sanitized = sanitized.replace(/-+/g, "-");
|
|
27
|
+
sanitized = sanitized.replace(/^-+|-+$/g, "");
|
|
28
|
+
return sanitized || "workflow";
|
|
29
|
+
}
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
// Docker username resolution
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
/**
|
|
34
|
+
* Resolve Docker username from explicit argument, env, or config.
|
|
35
|
+
* Matches Python's `get_docker_username`.
|
|
36
|
+
*/
|
|
37
|
+
function getDockerUsername(dockerUsername, _dockerRegistry, skipBuild, skipPush) {
|
|
38
|
+
const username = dockerUsername ?? process.env.DOCKER_USERNAME ?? undefined;
|
|
39
|
+
if (!username && !(skipBuild && skipPush)) {
|
|
40
|
+
console.error("Error: Docker username is required for building and pushing images.");
|
|
41
|
+
console.error("Provide it via one of these methods:");
|
|
42
|
+
console.error("1. Pass dockerUsername option");
|
|
43
|
+
console.error("2. Environment variable: export DOCKER_USERNAME=myusername");
|
|
44
|
+
console.error("3. Docker login: docker login (will be read from ~/.docker/config.json)");
|
|
45
|
+
throw new Error("Docker username is required");
|
|
46
|
+
}
|
|
47
|
+
if (username) {
|
|
48
|
+
console.log(`Using Docker username: ${username}`);
|
|
49
|
+
}
|
|
50
|
+
return username;
|
|
51
|
+
}
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
// Deployment summary
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
function printDeploymentSummary(fullImageName, imageTag, platform, templateId, endpointId, deploymentPlatform = "RunPod") {
|
|
56
|
+
console.log(`\n${deploymentPlatform} Deployment completed successfully!`);
|
|
57
|
+
console.log(`Image: ${fullImageName}:${imageTag}`);
|
|
58
|
+
console.log(`Platform: ${platform}`);
|
|
59
|
+
if (templateId)
|
|
60
|
+
console.log(`Template ID: ${templateId}`);
|
|
61
|
+
if (endpointId)
|
|
62
|
+
console.log(`Endpoint ID: ${endpointId}`);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Deploy workflow or chat handler to RunPod serverless infrastructure.
|
|
66
|
+
*
|
|
67
|
+
* This is the main deployment function that orchestrates the entire deployment
|
|
68
|
+
* process: build, push, template creation, and endpoint creation.
|
|
69
|
+
*/
|
|
70
|
+
export async function deployToRunpod(opts) {
|
|
71
|
+
const { deployment } = opts;
|
|
72
|
+
const env = { ...(opts.env ?? {}) };
|
|
73
|
+
let dockerUsername = opts.dockerUsername ?? deployment.docker.username ?? undefined;
|
|
74
|
+
const dockerRegistry = opts.dockerRegistry ?? deployment.docker.registry ?? "docker.io";
|
|
75
|
+
const imageName = opts.imageName ?? deployment.image.name;
|
|
76
|
+
const platform = opts.platform ?? deployment.platform ?? "linux/amd64";
|
|
77
|
+
let templateName = opts.templateName ?? opts.name ?? deployment.template_name ?? undefined;
|
|
78
|
+
const computeType = deployment.compute_type ?? "GPU";
|
|
79
|
+
const gpuTypes = opts.gpuTypes ?? deployment.gpu_types ?? [];
|
|
80
|
+
const gpuCount = opts.gpuCount ?? deployment.gpu_count ?? undefined;
|
|
81
|
+
const dataCenters = opts.dataCenters ?? deployment.data_centers ?? [];
|
|
82
|
+
const workersMin = opts.workersMin ?? deployment.workers_min ?? 0;
|
|
83
|
+
const workersMax = opts.workersMax ?? deployment.workers_max ?? 3;
|
|
84
|
+
const idleTimeout = opts.idleTimeout ?? deployment.idle_timeout ?? 5;
|
|
85
|
+
const executionTimeout = opts.executionTimeout ?? deployment.execution_timeout ?? undefined;
|
|
86
|
+
const flashboot = opts.flashboot ?? deployment.flashboot ?? false;
|
|
87
|
+
const networkVolumeId = deployment.network_volume_id ?? undefined;
|
|
88
|
+
const skipBuild = opts.skipBuild ?? false;
|
|
89
|
+
const skipPush = opts.skipPush ?? false;
|
|
90
|
+
const skipTemplate = opts.skipTemplate ?? false;
|
|
91
|
+
const skipEndpoint = opts.skipEndpoint ?? false;
|
|
92
|
+
const noCache = opts.noCache ?? false;
|
|
93
|
+
const noAutoPush = opts.noAutoPush ?? false;
|
|
94
|
+
// Get Docker username
|
|
95
|
+
dockerUsername = getDockerUsername(dockerUsername, dockerRegistry, skipBuild, skipPush);
|
|
96
|
+
// Generate unique tag if not provided
|
|
97
|
+
let imageTag;
|
|
98
|
+
if (opts.tag ?? deployment.image.tag) {
|
|
99
|
+
imageTag = opts.tag ?? deployment.image.tag;
|
|
100
|
+
console.log(`Using provided tag: ${imageTag}`);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
imageTag = generateImageTag();
|
|
104
|
+
console.log(`Generated unique tag: ${imageTag}`);
|
|
105
|
+
}
|
|
106
|
+
// Check if Docker is running
|
|
107
|
+
if (!skipBuild) {
|
|
108
|
+
try {
|
|
109
|
+
runCommand("docker --version", true);
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
console.error("Error: Docker is not installed or not running");
|
|
113
|
+
throw new Error("Docker is not available");
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// Format full image name with registry and username
|
|
117
|
+
if (!imageName) {
|
|
118
|
+
throw new Error("Image name is required");
|
|
119
|
+
}
|
|
120
|
+
if (!dockerUsername) {
|
|
121
|
+
throw new Error("Docker username is required");
|
|
122
|
+
}
|
|
123
|
+
const fullImageName = formatImageName(imageName, dockerUsername, dockerRegistry);
|
|
124
|
+
console.log(`Full image name: ${fullImageName}`);
|
|
125
|
+
templateName = templateName ?? imageName;
|
|
126
|
+
console.log(`Using template name: ${templateName}`);
|
|
127
|
+
let templateId;
|
|
128
|
+
let endpointId;
|
|
129
|
+
try {
|
|
130
|
+
// Build Docker image
|
|
131
|
+
let imagePushedDuringBuild = false;
|
|
132
|
+
if (!skipBuild) {
|
|
133
|
+
imagePushedDuringBuild = buildDockerImage({
|
|
134
|
+
imageName: fullImageName,
|
|
135
|
+
tag: imageTag,
|
|
136
|
+
platform,
|
|
137
|
+
useCache: !noCache,
|
|
138
|
+
autoPush: !noAutoPush
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
// Push to registry if needed
|
|
142
|
+
if (!skipPush && !imagePushedDuringBuild) {
|
|
143
|
+
pushToRegistry(fullImageName, imageTag, dockerRegistry);
|
|
144
|
+
}
|
|
145
|
+
else if (imagePushedDuringBuild) {
|
|
146
|
+
console.log(`Image ${fullImageName}:${imageTag} already pushed during optimized build`);
|
|
147
|
+
}
|
|
148
|
+
// Create or update RunPod template
|
|
149
|
+
if (!skipTemplate) {
|
|
150
|
+
env.PORT = "8000";
|
|
151
|
+
env.PORT_HEALTH = "8000";
|
|
152
|
+
if (!env.NODETOOL_SERVER_MODE) {
|
|
153
|
+
env.NODETOOL_SERVER_MODE = "private";
|
|
154
|
+
}
|
|
155
|
+
// Configure paths from persistent_paths if available
|
|
156
|
+
const persistentPaths = deployment.persistent_paths;
|
|
157
|
+
if (persistentPaths) {
|
|
158
|
+
if (!env.USERS_FILE)
|
|
159
|
+
env.USERS_FILE = persistentPaths.users_file;
|
|
160
|
+
if (!env.DB_PATH)
|
|
161
|
+
env.DB_PATH = persistentPaths.db_path;
|
|
162
|
+
if (!env.CHROMA_PATH)
|
|
163
|
+
env.CHROMA_PATH = persistentPaths.chroma_path;
|
|
164
|
+
if (!env.HF_HOME)
|
|
165
|
+
env.HF_HOME = persistentPaths.hf_cache;
|
|
166
|
+
if (!env.ASSET_BUCKET)
|
|
167
|
+
env.ASSET_BUCKET = persistentPaths.asset_bucket;
|
|
168
|
+
if (!env.AUTH_PROVIDER)
|
|
169
|
+
env.AUTH_PROVIDER = "multi_user";
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
if (!env.AUTH_PROVIDER)
|
|
173
|
+
env.AUTH_PROVIDER = "static";
|
|
174
|
+
}
|
|
175
|
+
templateId = await createOrUpdateRunpodTemplate(templateName, fullImageName, imageTag, env);
|
|
176
|
+
}
|
|
177
|
+
// Create RunPod endpoint
|
|
178
|
+
if (!skipEndpoint && templateId) {
|
|
179
|
+
const gpuTypeIds = gpuTypes.length > 0 ? gpuTypes : undefined;
|
|
180
|
+
const dataCenterIds = dataCenters.length > 0 ? dataCenters : undefined;
|
|
181
|
+
if (!opts.name) {
|
|
182
|
+
throw new Error("Name is required for endpoint creation");
|
|
183
|
+
}
|
|
184
|
+
endpointId = await createRunpodEndpointGraphql({
|
|
185
|
+
templateId,
|
|
186
|
+
name: opts.name,
|
|
187
|
+
computeType,
|
|
188
|
+
gpuTypeIds,
|
|
189
|
+
gpuCount,
|
|
190
|
+
dataCenterIds,
|
|
191
|
+
workersMin,
|
|
192
|
+
workersMax,
|
|
193
|
+
idleTimeout,
|
|
194
|
+
executionTimeoutMs: executionTimeout,
|
|
195
|
+
flashboot,
|
|
196
|
+
networkVolumeId
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
// Print deployment summary
|
|
200
|
+
printDeploymentSummary(fullImageName, imageTag, platform, templateId, endpointId, "RunPod");
|
|
201
|
+
}
|
|
202
|
+
catch (err) {
|
|
203
|
+
console.error("Deployment failed:", err);
|
|
204
|
+
throw err;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=deploy-to-runpod.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy-to-runpod.js","sourceRoot":"","sources":["../src/deploy-to-runpod.ts"],"names":[],"mappings":"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"}
|
package/dist/deploy.d.ts
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic Deployment Module
|
|
3
|
+
*
|
|
4
|
+
* This module provides generic deployment functionality that can be shared
|
|
5
|
+
* across different deployment targets (RunPod, local, etc.).
|
|
6
|
+
*
|
|
7
|
+
* Key Features:
|
|
8
|
+
* - Docker image management
|
|
9
|
+
* - Environment variable handling
|
|
10
|
+
* - Local testing capabilities
|
|
11
|
+
* - Common deployment utilities
|
|
12
|
+
*/
|
|
13
|
+
/** Function that runs a shell command (provided by the caller). */
|
|
14
|
+
export type RunCommandFn = (command: string) => void;
|
|
15
|
+
/**
|
|
16
|
+
* Run a Docker container locally instead of deploying to a remote platform.
|
|
17
|
+
*
|
|
18
|
+
* @param fullImageName - Full Docker image name with registry/username
|
|
19
|
+
* @param imageTag - Docker image tag
|
|
20
|
+
* @param runCommand - Function to execute shell commands
|
|
21
|
+
*/
|
|
22
|
+
export declare function runLocalDocker(fullImageName: string, imageTag: string, runCommand: RunCommandFn): void;
|
|
23
|
+
/** Function to retrieve Docker username from config file. */
|
|
24
|
+
export type GetDockerUsernameFromConfigFn = (registry: string) => string | null;
|
|
25
|
+
/**
|
|
26
|
+
* Get Docker username from multiple sources with validation.
|
|
27
|
+
*
|
|
28
|
+
* @param opts.dockerUsername - Explicit username from command line
|
|
29
|
+
* @param opts.dockerRegistry - Docker registry URL (default: "docker.io")
|
|
30
|
+
* @param opts.skipBuild - Whether build is being skipped
|
|
31
|
+
* @param opts.skipPush - Whether push is being skipped
|
|
32
|
+
* @param opts.getDockerUsernameFromConfig - Function to read username from Docker config
|
|
33
|
+
* @returns Docker username or null if not needed
|
|
34
|
+
* @throws Error if username is required but not found
|
|
35
|
+
*/
|
|
36
|
+
export declare function getDockerUsername(opts: {
|
|
37
|
+
dockerUsername?: string;
|
|
38
|
+
dockerRegistry?: string;
|
|
39
|
+
skipBuild?: boolean;
|
|
40
|
+
skipPush?: boolean;
|
|
41
|
+
getDockerUsernameFromConfig: GetDockerUsernameFromConfigFn;
|
|
42
|
+
}): string | null;
|
|
43
|
+
/**
|
|
44
|
+
* Print a summary of the deployment results.
|
|
45
|
+
*/
|
|
46
|
+
export declare function printDeploymentSummary(opts: {
|
|
47
|
+
fullImageName: string;
|
|
48
|
+
imageTag: string;
|
|
49
|
+
platform: string;
|
|
50
|
+
templateId?: string;
|
|
51
|
+
endpointId?: string;
|
|
52
|
+
deploymentPlatform?: string;
|
|
53
|
+
}): void;
|
|
54
|
+
//# sourceMappingURL=deploy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../src/deploy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,mEAAmE;AACnE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAErD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,YAAY,GACvB,IAAI,CAqBN;AAED,6DAA6D;AAC7D,MAAM,MAAM,6BAA6B,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;AAEhF;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2BAA2B,EAAE,6BAA6B,CAAC;CAC5D,GAAG,MAAM,GAAG,IAAI,CA8BhB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,GAAG,IAAI,CAqBP"}
|