@nodetool-ai/deploy 0.7.0-rc.23 → 0.8.2
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/README.md +41 -0
- package/dist/.nodetool-build-stamp +1 -0
- package/dist/admin-client.d.ts +5 -39
- package/dist/admin-client.d.ts.map +1 -1
- package/dist/admin-client.js +9 -230
- package/dist/admin-client.js.map +1 -1
- package/dist/api-user-manager.d.ts.map +1 -1
- package/dist/api-user-manager.js +5 -2
- package/dist/api-user-manager.js.map +1 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +0 -3
- package/dist/auth.js.map +1 -1
- package/dist/compose.d.ts.map +1 -1
- package/dist/compose.js +5 -6
- package/dist/compose.js.map +1 -1
- package/dist/configure.d.ts +1 -43
- package/dist/configure.d.ts.map +1 -1
- package/dist/configure.js +2 -43
- package/dist/configure.js.map +1 -1
- package/dist/deployment-config.d.ts +28 -786
- package/dist/deployment-config.d.ts.map +1 -1
- package/dist/deployment-config.js +34 -218
- package/dist/deployment-config.js.map +1 -1
- package/dist/docker-run.d.ts +2 -1
- package/dist/docker-run.d.ts.map +1 -1
- package/dist/docker-run.js +6 -22
- package/dist/docker-run.js.map +1 -1
- package/dist/docker.d.ts +6 -21
- package/dist/docker.d.ts.map +1 -1
- package/dist/docker.js +6 -53
- package/dist/docker.js.map +1 -1
- package/dist/image-spec.d.ts +1 -1
- package/dist/index.d.ts +0 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -17
- package/dist/index.js.map +1 -1
- package/dist/manager.d.ts.map +1 -1
- package/dist/manager.js +0 -44
- package/dist/manager.js.map +1 -1
- package/dist/progress.d.ts.map +1 -1
- package/dist/progress.js +0 -1
- package/dist/progress.js.map +1 -1
- package/dist/remote-users.d.ts.map +1 -1
- package/dist/remote-users.js +1 -4
- package/dist/remote-users.js.map +1 -1
- package/dist/runpod-rest.d.ts +114 -0
- package/dist/runpod-rest.d.ts.map +1 -0
- package/dist/runpod-rest.js +150 -0
- package/dist/runpod-rest.js.map +1 -0
- package/dist/self-hosted.d.ts +17 -43
- package/dist/self-hosted.d.ts.map +1 -1
- package/dist/self-hosted.js +50 -124
- package/dist/self-hosted.js.map +1 -1
- package/dist/ssh.d.ts +9 -0
- package/dist/ssh.d.ts.map +1 -1
- package/dist/ssh.js +1 -5
- package/dist/ssh.js.map +1 -1
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +1 -11
- package/dist/state.js.map +1 -1
- package/dist/workflow-syncer.d.ts +3 -32
- package/dist/workflow-syncer.d.ts.map +1 -1
- package/dist/workflow-syncer.js +3 -162
- package/dist/workflow-syncer.js.map +1 -1
- package/package.json +29 -14
- package/dist/admin-operations.d.ts +0 -197
- package/dist/admin-operations.d.ts.map +0 -1
- package/dist/admin-operations.js +0 -433
- package/dist/admin-operations.js.map +0 -1
- package/dist/admin-routes.d.ts +0 -306
- package/dist/admin-routes.d.ts.map +0 -1
- package/dist/admin-routes.js +0 -383
- package/dist/admin-routes.js.map +0 -1
- package/dist/collection-routes.d.ts +0 -37
- package/dist/collection-routes.d.ts.map +0 -1
- package/dist/collection-routes.js +0 -43
- package/dist/collection-routes.js.map +0 -1
- package/dist/deploy-to-gcp.d.ts +0 -67
- package/dist/deploy-to-gcp.d.ts.map +0 -1
- package/dist/deploy-to-gcp.js +0 -268
- package/dist/deploy-to-gcp.js.map +0 -1
- package/dist/deploy-to-runpod.d.ts +0 -53
- package/dist/deploy-to-runpod.d.ts.map +0 -1
- package/dist/deploy-to-runpod.js +0 -207
- package/dist/deploy-to-runpod.js.map +0 -1
- package/dist/fly.d.ts +0 -40
- package/dist/fly.d.ts.map +0 -1
- package/dist/fly.js +0 -291
- package/dist/fly.js.map +0 -1
- package/dist/gcp.d.ts +0 -59
- package/dist/gcp.d.ts.map +0 -1
- package/dist/gcp.js +0 -339
- package/dist/gcp.js.map +0 -1
- package/dist/google-cloud-run-api.d.ts +0 -134
- package/dist/google-cloud-run-api.d.ts.map +0 -1
- package/dist/google-cloud-run-api.js +0 -532
- package/dist/google-cloud-run-api.js.map +0 -1
- package/dist/huggingface.d.ts +0 -69
- package/dist/huggingface.d.ts.map +0 -1
- package/dist/huggingface.js +0 -346
- package/dist/huggingface.js.map +0 -1
- package/dist/railway.d.ts +0 -65
- package/dist/railway.d.ts.map +0 -1
- package/dist/railway.js +0 -284
- package/dist/railway.js.map +0 -1
- package/dist/runpod-api.d.ts +0 -206
- package/dist/runpod-api.d.ts.map +0 -1
- package/dist/runpod-api.js +0 -703
- package/dist/runpod-api.js.map +0 -1
- package/dist/runpod.d.ts +0 -82
- package/dist/runpod.d.ts.map +0 -1
- package/dist/runpod.js +0 -188
- package/dist/runpod.js.map +0 -1
- package/dist/storage-routes.d.ts +0 -55
- package/dist/storage-routes.d.ts.map +0 -1
- package/dist/storage-routes.js +0 -160
- package/dist/storage-routes.js.map +0 -1
- package/dist/sync.d.ts +0 -38
- package/dist/sync.d.ts.map +0 -1
- package/dist/sync.js +0 -130
- package/dist/sync.js.map +0 -1
package/dist/deploy-to-runpod.js
DELETED
|
@@ -1,207 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"deploy-to-runpod.js","sourceRoot":"","sources":["../src/deploy-to-runpod.ts"],"names":[],"mappings":"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"}
|
package/dist/fly.d.ts
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
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 { StateManager } from "./state.js";
|
|
12
|
-
import type { FlyDeployment } from "./deployment-config.js";
|
|
13
|
-
import type { DeployResult, DeployPlan, DeployStatus } from "./self-hosted.js";
|
|
14
|
-
/**
|
|
15
|
-
* Deploys NodeTool to Fly.io using the flyctl CLI.
|
|
16
|
-
*
|
|
17
|
-
* Lifecycle:
|
|
18
|
-
* plan() — check what will be created/updated
|
|
19
|
-
* apply() — build image, create app, set secrets, deploy
|
|
20
|
-
* destroy() — tear down the Fly app
|
|
21
|
-
* status() — query current app status
|
|
22
|
-
* logs() — stream or tail app logs
|
|
23
|
-
*/
|
|
24
|
-
export declare class FlyDeployer {
|
|
25
|
-
readonly deploymentName: string;
|
|
26
|
-
readonly deployment: FlyDeployment;
|
|
27
|
-
readonly stateManager: StateManager;
|
|
28
|
-
constructor(deploymentName: string, deployment: FlyDeployment, stateManager?: StateManager);
|
|
29
|
-
plan(): Promise<DeployPlan>;
|
|
30
|
-
apply(opts?: {
|
|
31
|
-
dryRun?: boolean;
|
|
32
|
-
}): Promise<DeployResult>;
|
|
33
|
-
destroy(): Promise<DeployResult>;
|
|
34
|
-
status(): Promise<DeployStatus>;
|
|
35
|
-
logs(opts?: {
|
|
36
|
-
follow?: boolean;
|
|
37
|
-
tail?: number;
|
|
38
|
-
}): Promise<string>;
|
|
39
|
-
}
|
|
40
|
-
//# sourceMappingURL=fly.d.ts.map
|
package/dist/fly.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fly.d.ts","sourceRoot":"","sources":["../src/fly.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAiE/E;;;;;;;;;GASG;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;IASvB,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC;IA2C3B,KAAK,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IAyHzD,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC;IAkChC,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;IAoC/B,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAqBxE"}
|
package/dist/fly.js
DELETED
|
@@ -1,291 +0,0 @@
|
|
|
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
|
package/dist/fly.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fly.js","sourceRoot":"","sources":["../src/fly.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAK1C,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;;;GAIG;AACH,KAAK,UAAU,MAAM,CACnB,IAAc,EACd,IAA2B;IAE3B,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE;YACrD,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,MAAM;SACjC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,CAA0B,CAAC;QACvC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,qEAAqE,CACtE,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;IACtD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,UAAU,CACvB,IAAc,EACd,IAA2B;IAE3B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACrC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,SAAS,CAAC,GAAW;IAClC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,UAAU,CAA0C;YACrE,MAAM;YACN,MAAM;YACN,QAAQ;SACT,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E;;;;;;;;;GASG;AACH,MAAM,OAAO,WAAW;IACb,cAAc,CAAS;IACvB,UAAU,CAAgB;IAC1B,YAAY,CAAe;IAEpC,YACE,cAAsB,EACtB,UAAyB,EACzB,YAA2B;QAE3B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,YAAY,IAAI,IAAI,YAAY,EAAE,CAAC;IACzD,CAAC;IAED,6BAA6B;IAE7B,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,GAAe;YACvB,eAAe,EAAE,IAAI,CAAC,cAAc;YACpC,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,UAAU;YACtC,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,EAAE;YACf,WAAW,EAAE,EAAE;YACf,YAAY,EAAE,EAAE;SACjB,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAEpD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;YACpE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;YACzD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAEnD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;YACpC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBAC1C,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB,WAAW,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC,KAAK,GAAG,CACtD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACtD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8BAA8B;IAE9B,KAAK,CAAC,KAAK,CAAC,IAA2B;QACrC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAA4B,CAAC;QACxD,CAAC;QAED,MAAM,OAAO,GAAiB;YAC5B,eAAe,EAAE,IAAI,CAAC,cAAc;YACpC,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;SACX,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAC5C,IAAI,CAAC,cAAc,EACnB,gBAAgB,CAAC,SAAS,CAC3B,CAAC;YAEF,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YACtC,MAAM,QAAQ,GAAG,mBAAmB,GAAG,SAAS,CAAC;YAEjD,2DAA2D;YAC3D,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC3C,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;YAEzD,6CAA6C;YAC7C,MAAM,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC;YAEtD,uBAAuB;YACvB,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YACxE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAEnD,2BAA2B;YAC3B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,MAAM,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAChD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;YACvD,CAAC;YAED,iCAAiC;YACjC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;gBACpC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;oBAC1C,IAAI,CAAC;wBACH,MAAM,MAAM,CAAC;4BACX,SAAS;4BACT,QAAQ;4BACR,GAAG,CAAC,IAAI;4BACR,OAAO;4BACP,GAAG;4BACH,UAAU;4BACV,MAAM;4BACN,QAAQ;4BACR,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;4BAChB,QAAQ;4BACR,OAAO;yBACR,CAAC,CAAC;wBACH,OAAO,CAAC,KAAK,CAAC,IAAI,CAChB,mBAAmB,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC,KAAK,GAAG,CAC9D,CAAC;oBACJ,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,sCAAsC;wBACtC,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;wBACvD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;4BACpC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC;wBACpD,CAAC;6BAAM,CAAC;4BACN,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;wBAC3D,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,0CAA0C;YAC1C,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;gBAChC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;gBAC5D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACxD,MAAM,MAAM,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC;oBAC9D,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,MAAM,YAAY,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;YAED,YAAY;YACZ,MAAM,MAAM,CACV,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,EACjE,EAAE,OAAO,EAAE,OAAO,EAAE,CACrB,CAAC;YACF,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAE1C,kBAAkB;YAClB,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE;gBACtD,MAAM,EAAE,gBAAgB,CAAC,OAAO;gBAChC,GAAG;gBACH,MAAM;gBACN,GAAG,EAAE,WAAW,GAAG,UAAU;aAC9B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;YACzB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAEhE,MAAM,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAC5C,IAAI,CAAC,cAAc,EACnB,gBAAgB,CAAC,KAAK,CACvB,CAAC;YAEF,MAAM,CAAC,CAAC;QACV,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,gCAAgC;IAEhC,KAAK,CAAC,OAAO;QACX,MAAM,OAAO,GAAiB;YAC5B,eAAe,EAAE,IAAI,CAAC,cAAc;YACpC,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;SACX,CAAC;QAEF,IAAI,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,CAAC;YAEpE,MAAM,MAAM,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;YAEhE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAEjD,MAAM,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAC5C,IAAI,CAAC,cAAc,EACnB,gBAAgB,CAAC,SAAS,CAC3B,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;YACzB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAChE,MAAM,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAC5C,IAAI,CAAC,cAAc,EACnB,gBAAgB,CAAC,KAAK,CACvB,CAAC;YACF,MAAM,CAAC,CAAC;QACV,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,+BAA+B;IAE/B,KAAK,CAAC,MAAM;QACV,MAAM,UAAU,GAAiB;YAC/B,eAAe,EAAE,IAAI,CAAC,cAAc;YACpC,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,UAAU;YACtC,IAAI,EAAE,KAAK;SACZ,CAAC;QAEF,kBAAkB;QAClB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACrE,IAAI,KAAK,EAAE,CAAC;YACV,UAAU,CAAC,MAAM,GAAI,KAAK,CAAC,QAAQ,CAAY,IAAI,SAAS,CAAC;YAC7D,UAAU,CAAC,aAAa,GAAG,KAAK,CAAC,eAAe,CAAuB,CAAC;YACxE,UAAU,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAuB,CAAC;QACtD,CAAC;QAED,2BAA2B;QAC3B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC;gBACvB,QAAQ;gBACR,OAAO;gBACP,IAAI,CAAC,UAAU,CAAC,GAAG;gBACnB,QAAQ;aACT,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;YACxD,UAAU,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAE7C,CAAC;QAChB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,UAAU,CAAC,iBAAiB,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,6BAA6B;IAE7B,KAAK,CAAC,IAAI,CAAC,IAA0C;QACnD,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,uDAAuD;gBACrD,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,sBAAsB,CAC/C,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACpD,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACvD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;CACF"}
|
package/dist/gcp.d.ts
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
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
|
package/dist/gcp.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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"}
|