@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
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
|
package/dist/fly.js.map
ADDED
|
@@ -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"}
|