@geekmidas/cli 0.45.0 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{config-C0b0jdmU.mjs → config-C3LSBNSl.mjs} +2 -2
- package/dist/{config-C0b0jdmU.mjs.map → config-C3LSBNSl.mjs.map} +1 -1
- package/dist/{config-xVZsRjN7.cjs → config-HYiM3iQJ.cjs} +2 -2
- package/dist/{config-xVZsRjN7.cjs.map → config-HYiM3iQJ.cjs.map} +1 -1
- package/dist/config.cjs +2 -2
- package/dist/config.d.cts +1 -1
- package/dist/config.d.mts +1 -1
- package/dist/config.mjs +2 -2
- package/dist/dokploy-api-C1JgU9Vr.mjs +3 -0
- package/dist/dokploy-api-Cpq_tLSz.cjs +3 -0
- package/dist/{dokploy-api-BdxOMH_V.cjs → dokploy-api-D8a0eQQB.cjs} +110 -1
- package/dist/dokploy-api-D8a0eQQB.cjs.map +1 -0
- package/dist/{dokploy-api-DWsqNjwP.mjs → dokploy-api-b6usLLKk.mjs} +110 -1
- package/dist/dokploy-api-b6usLLKk.mjs.map +1 -0
- package/dist/{index-CXa3odEw.d.mts → index-BtnjoghR.d.mts} +540 -46
- package/dist/index-BtnjoghR.d.mts.map +1 -0
- package/dist/{index-E8Nu2Rxl.d.cts → index-c89X2mi2.d.cts} +540 -46
- package/dist/index-c89X2mi2.d.cts.map +1 -0
- package/dist/index.cjs +254 -135
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +254 -135
- package/dist/index.mjs.map +1 -1
- package/dist/{openapi-D3pA6FfZ.mjs → openapi-C3C-BzIZ.mjs} +2 -2
- package/dist/{openapi-D3pA6FfZ.mjs.map → openapi-C3C-BzIZ.mjs.map} +1 -1
- package/dist/{openapi-DhcCtKzM.cjs → openapi-D7WwlpPF.cjs} +2 -2
- package/dist/{openapi-DhcCtKzM.cjs.map → openapi-D7WwlpPF.cjs.map} +1 -1
- package/dist/openapi.cjs +3 -3
- package/dist/openapi.mjs +3 -3
- package/dist/workspace/index.cjs +1 -1
- package/dist/workspace/index.d.cts +1 -1
- package/dist/workspace/index.d.mts +1 -1
- package/dist/workspace/index.mjs +1 -1
- package/dist/{workspace-BDAhr6Kb.cjs → workspace-CaVW6j2q.cjs} +10 -1
- package/dist/{workspace-BDAhr6Kb.cjs.map → workspace-CaVW6j2q.cjs.map} +1 -1
- package/dist/{workspace-D_6ZCaR_.mjs → workspace-DLFRaDc-.mjs} +10 -1
- package/dist/{workspace-D_6ZCaR_.mjs.map → workspace-DLFRaDc-.mjs.map} +1 -1
- package/package.json +3 -3
- package/src/deploy/dokploy-api.ts +163 -0
- package/src/deploy/index.ts +313 -233
- package/src/deploy/state.ts +146 -0
- package/src/workspace/types.ts +566 -47
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/dokploy-api-Bdmk5ImW.cjs +0 -3
- package/dist/dokploy-api-BdxOMH_V.cjs.map +0 -1
- package/dist/dokploy-api-DWsqNjwP.mjs.map +0 -1
- package/dist/dokploy-api-tZSZaHd9.mjs +0 -3
- package/dist/index-CXa3odEw.d.mts.map +0 -1
- package/dist/index-E8Nu2Rxl.d.cts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-c89X2mi2.d.cts","names":[],"sources":["../src/workspace/types.ts","../src/workspace/schema.ts","../src/workspace/index.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env -S npx tsx
|
|
2
2
|
const require_chunk = require('./chunk-CUT6urMc.cjs');
|
|
3
|
-
const require_workspace = require('./workspace-
|
|
4
|
-
const require_config = require('./config-
|
|
5
|
-
const require_openapi = require('./openapi-
|
|
3
|
+
const require_workspace = require('./workspace-CaVW6j2q.cjs');
|
|
4
|
+
const require_config = require('./config-HYiM3iQJ.cjs');
|
|
5
|
+
const require_openapi = require('./openapi-D7WwlpPF.cjs');
|
|
6
6
|
const require_storage = require('./storage-BPRgh3DU.cjs');
|
|
7
|
-
const require_dokploy_api = require('./dokploy-api-
|
|
7
|
+
const require_dokploy_api = require('./dokploy-api-D8a0eQQB.cjs');
|
|
8
8
|
const require_encryption = require('./encryption-DaCB_NmS.cjs');
|
|
9
9
|
const require_openapi_react_query = require('./openapi-react-query-C_MxpBgF.cjs');
|
|
10
10
|
const node_fs = require_chunk.__toESM(require("node:fs"));
|
|
@@ -29,7 +29,7 @@ const node_module = require_chunk.__toESM(require("node:module"));
|
|
|
29
29
|
|
|
30
30
|
//#region package.json
|
|
31
31
|
var name = "@geekmidas/cli";
|
|
32
|
-
var version = "0.
|
|
32
|
+
var version = "0.46.0";
|
|
33
33
|
var description = "CLI tools for building Lambda handlers, server applications, and generating OpenAPI specs";
|
|
34
34
|
var private$1 = false;
|
|
35
35
|
var type = "module";
|
|
@@ -228,7 +228,7 @@ const logger$10 = console;
|
|
|
228
228
|
* Validate Dokploy token by making a test API call
|
|
229
229
|
*/
|
|
230
230
|
async function validateDokployToken(endpoint, token) {
|
|
231
|
-
const { DokployApi: DokployApi$1 } = await Promise.resolve().then(() => require("./dokploy-api-
|
|
231
|
+
const { DokployApi: DokployApi$1 } = await Promise.resolve().then(() => require("./dokploy-api-Cpq_tLSz.cjs"));
|
|
232
232
|
const api = new DokployApi$1({
|
|
233
233
|
baseUrl: endpoint,
|
|
234
234
|
token
|
|
@@ -3811,6 +3811,89 @@ async function deployDokploy(options) {
|
|
|
3811
3811
|
};
|
|
3812
3812
|
}
|
|
3813
3813
|
|
|
3814
|
+
//#endregion
|
|
3815
|
+
//#region src/deploy/state.ts
|
|
3816
|
+
/**
|
|
3817
|
+
* Get the state file path for a stage
|
|
3818
|
+
*/
|
|
3819
|
+
function getStateFilePath(workspaceRoot, stage) {
|
|
3820
|
+
return (0, node_path.join)(workspaceRoot, ".gkm", `deploy-${stage}.json`);
|
|
3821
|
+
}
|
|
3822
|
+
/**
|
|
3823
|
+
* Read the deploy state for a stage
|
|
3824
|
+
* Returns null if state file doesn't exist
|
|
3825
|
+
*/
|
|
3826
|
+
async function readStageState(workspaceRoot, stage) {
|
|
3827
|
+
const filePath = getStateFilePath(workspaceRoot, stage);
|
|
3828
|
+
try {
|
|
3829
|
+
const content = await (0, node_fs_promises.readFile)(filePath, "utf-8");
|
|
3830
|
+
return JSON.parse(content);
|
|
3831
|
+
} catch (error) {
|
|
3832
|
+
if (error.code === "ENOENT") return null;
|
|
3833
|
+
console.warn(`Warning: Could not read deploy state: ${error}`);
|
|
3834
|
+
return null;
|
|
3835
|
+
}
|
|
3836
|
+
}
|
|
3837
|
+
/**
|
|
3838
|
+
* Write the deploy state for a stage
|
|
3839
|
+
*/
|
|
3840
|
+
async function writeStageState(workspaceRoot, stage, state) {
|
|
3841
|
+
const filePath = getStateFilePath(workspaceRoot, stage);
|
|
3842
|
+
const dir = (0, node_path.join)(workspaceRoot, ".gkm");
|
|
3843
|
+
await (0, node_fs_promises.mkdir)(dir, { recursive: true });
|
|
3844
|
+
state.lastDeployedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
3845
|
+
await (0, node_fs_promises.writeFile)(filePath, JSON.stringify(state, null, 2));
|
|
3846
|
+
}
|
|
3847
|
+
/**
|
|
3848
|
+
* Create a new empty state for a stage
|
|
3849
|
+
*/
|
|
3850
|
+
function createEmptyState(stage, environmentId) {
|
|
3851
|
+
return {
|
|
3852
|
+
provider: "dokploy",
|
|
3853
|
+
stage,
|
|
3854
|
+
environmentId,
|
|
3855
|
+
applications: {},
|
|
3856
|
+
services: {},
|
|
3857
|
+
lastDeployedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
3858
|
+
};
|
|
3859
|
+
}
|
|
3860
|
+
/**
|
|
3861
|
+
* Get application ID from state
|
|
3862
|
+
*/
|
|
3863
|
+
function getApplicationId(state, appName) {
|
|
3864
|
+
return state?.applications[appName];
|
|
3865
|
+
}
|
|
3866
|
+
/**
|
|
3867
|
+
* Set application ID in state (mutates state)
|
|
3868
|
+
*/
|
|
3869
|
+
function setApplicationId(state, appName, applicationId) {
|
|
3870
|
+
state.applications[appName] = applicationId;
|
|
3871
|
+
}
|
|
3872
|
+
/**
|
|
3873
|
+
* Get postgres ID from state
|
|
3874
|
+
*/
|
|
3875
|
+
function getPostgresId(state) {
|
|
3876
|
+
return state?.services.postgresId;
|
|
3877
|
+
}
|
|
3878
|
+
/**
|
|
3879
|
+
* Set postgres ID in state (mutates state)
|
|
3880
|
+
*/
|
|
3881
|
+
function setPostgresId(state, postgresId) {
|
|
3882
|
+
state.services.postgresId = postgresId;
|
|
3883
|
+
}
|
|
3884
|
+
/**
|
|
3885
|
+
* Get redis ID from state
|
|
3886
|
+
*/
|
|
3887
|
+
function getRedisId(state) {
|
|
3888
|
+
return state?.services.redisId;
|
|
3889
|
+
}
|
|
3890
|
+
/**
|
|
3891
|
+
* Set redis ID in state (mutates state)
|
|
3892
|
+
*/
|
|
3893
|
+
function setRedisId(state, redisId) {
|
|
3894
|
+
state.services.redisId = redisId;
|
|
3895
|
+
}
|
|
3896
|
+
|
|
3814
3897
|
//#endregion
|
|
3815
3898
|
//#region src/deploy/domain.ts
|
|
3816
3899
|
/**
|
|
@@ -4315,24 +4398,39 @@ async function prompt(message, hidden = false) {
|
|
|
4315
4398
|
* Provision docker compose services in Dokploy
|
|
4316
4399
|
* @internal Exported for testing
|
|
4317
4400
|
*/
|
|
4318
|
-
async function provisionServices(api, projectId, environmentId, appName, services,
|
|
4401
|
+
async function provisionServices(api, projectId, environmentId, appName, services, existingServiceIds) {
|
|
4319
4402
|
logger$1.log(`\n🔍 provisionServices called: services=${JSON.stringify(services)}, envId=${environmentId}`);
|
|
4320
4403
|
if (!services || !environmentId) {
|
|
4321
4404
|
logger$1.log(" Skipping: no services or no environmentId");
|
|
4322
4405
|
return void 0;
|
|
4323
4406
|
}
|
|
4324
4407
|
const serviceUrls = {};
|
|
4325
|
-
|
|
4326
|
-
|
|
4327
|
-
logger$1.log("\n🐘
|
|
4328
|
-
const postgresName =
|
|
4408
|
+
const serviceIds = {};
|
|
4409
|
+
if (services.postgres) {
|
|
4410
|
+
logger$1.log("\n🐘 Checking PostgreSQL...");
|
|
4411
|
+
const postgresName = "db";
|
|
4329
4412
|
try {
|
|
4330
|
-
|
|
4331
|
-
|
|
4332
|
-
|
|
4333
|
-
|
|
4334
|
-
|
|
4335
|
-
|
|
4413
|
+
let postgres = null;
|
|
4414
|
+
let created = false;
|
|
4415
|
+
if (existingServiceIds?.postgresId) {
|
|
4416
|
+
logger$1.log(` Using cached ID: ${existingServiceIds.postgresId}`);
|
|
4417
|
+
postgres = await api.getPostgres(existingServiceIds.postgresId);
|
|
4418
|
+
if (postgres) logger$1.log(` ✓ PostgreSQL found: ${postgres.postgresId}`);
|
|
4419
|
+
else logger$1.log(` ⚠ Cached ID invalid, will create new`);
|
|
4420
|
+
}
|
|
4421
|
+
if (!postgres) {
|
|
4422
|
+
const { randomBytes: randomBytes$1 } = await import("node:crypto");
|
|
4423
|
+
const databasePassword = randomBytes$1(16).toString("hex");
|
|
4424
|
+
const result = await api.findOrCreatePostgres(postgresName, projectId, environmentId, { databasePassword });
|
|
4425
|
+
postgres = result.postgres;
|
|
4426
|
+
created = result.created;
|
|
4427
|
+
if (created) {
|
|
4428
|
+
logger$1.log(` ✓ Created PostgreSQL: ${postgres.postgresId}`);
|
|
4429
|
+
await api.deployPostgres(postgres.postgresId);
|
|
4430
|
+
logger$1.log(" ✓ PostgreSQL deployed");
|
|
4431
|
+
} else logger$1.log(` ✓ PostgreSQL already exists: ${postgres.postgresId}`);
|
|
4432
|
+
}
|
|
4433
|
+
serviceIds.postgresId = postgres.postgresId;
|
|
4336
4434
|
serviceUrls.DATABASE_HOST = postgres.appName;
|
|
4337
4435
|
serviceUrls.DATABASE_PORT = "5432";
|
|
4338
4436
|
serviceUrls.DATABASE_NAME = postgres.databaseName;
|
|
@@ -4342,21 +4440,34 @@ async function provisionServices(api, projectId, environmentId, appName, service
|
|
|
4342
4440
|
logger$1.log(` ✓ Database credentials configured`);
|
|
4343
4441
|
} catch (error) {
|
|
4344
4442
|
const message = error instanceof Error ? error.message : "Unknown error";
|
|
4345
|
-
|
|
4346
|
-
else logger$1.log(` ⚠ Failed to provision PostgreSQL: ${message}`);
|
|
4443
|
+
logger$1.log(` ⚠ Failed to provision PostgreSQL: ${message}`);
|
|
4347
4444
|
}
|
|
4348
4445
|
}
|
|
4349
|
-
if (services.redis)
|
|
4350
|
-
|
|
4351
|
-
|
|
4352
|
-
const redisName = `${appName}-cache`;
|
|
4446
|
+
if (services.redis) {
|
|
4447
|
+
logger$1.log("\n🔴 Checking Redis...");
|
|
4448
|
+
const redisName = "cache";
|
|
4353
4449
|
try {
|
|
4354
|
-
|
|
4355
|
-
|
|
4356
|
-
|
|
4357
|
-
|
|
4358
|
-
|
|
4359
|
-
|
|
4450
|
+
let redis = null;
|
|
4451
|
+
let created = false;
|
|
4452
|
+
if (existingServiceIds?.redisId) {
|
|
4453
|
+
logger$1.log(` Using cached ID: ${existingServiceIds.redisId}`);
|
|
4454
|
+
redis = await api.getRedis(existingServiceIds.redisId);
|
|
4455
|
+
if (redis) logger$1.log(` ✓ Redis found: ${redis.redisId}`);
|
|
4456
|
+
else logger$1.log(` ⚠ Cached ID invalid, will create new`);
|
|
4457
|
+
}
|
|
4458
|
+
if (!redis) {
|
|
4459
|
+
const { randomBytes: randomBytes$1 } = await import("node:crypto");
|
|
4460
|
+
const databasePassword = randomBytes$1(16).toString("hex");
|
|
4461
|
+
const result = await api.findOrCreateRedis(redisName, projectId, environmentId, { databasePassword });
|
|
4462
|
+
redis = result.redis;
|
|
4463
|
+
created = result.created;
|
|
4464
|
+
if (created) {
|
|
4465
|
+
logger$1.log(` ✓ Created Redis: ${redis.redisId}`);
|
|
4466
|
+
await api.deployRedis(redis.redisId);
|
|
4467
|
+
logger$1.log(" ✓ Redis deployed");
|
|
4468
|
+
} else logger$1.log(` ✓ Redis already exists: ${redis.redisId}`);
|
|
4469
|
+
}
|
|
4470
|
+
serviceIds.redisId = redis.redisId;
|
|
4360
4471
|
serviceUrls.REDIS_HOST = redis.appName;
|
|
4361
4472
|
serviceUrls.REDIS_PORT = "6379";
|
|
4362
4473
|
if (redis.databasePassword) serviceUrls.REDIS_PASSWORD = redis.databasePassword;
|
|
@@ -4365,11 +4476,13 @@ async function provisionServices(api, projectId, environmentId, appName, service
|
|
|
4365
4476
|
logger$1.log(` ✓ Redis credentials configured`);
|
|
4366
4477
|
} catch (error) {
|
|
4367
4478
|
const message = error instanceof Error ? error.message : "Unknown error";
|
|
4368
|
-
|
|
4369
|
-
else logger$1.log(` ⚠ Failed to provision Redis: ${message}`);
|
|
4479
|
+
logger$1.log(` ⚠ Failed to provision Redis: ${message}`);
|
|
4370
4480
|
}
|
|
4371
4481
|
}
|
|
4372
|
-
return Object.keys(serviceUrls).length > 0 ?
|
|
4482
|
+
return Object.keys(serviceUrls).length > 0 ? {
|
|
4483
|
+
serviceUrls,
|
|
4484
|
+
serviceIds
|
|
4485
|
+
} : void 0;
|
|
4373
4486
|
}
|
|
4374
4487
|
/**
|
|
4375
4488
|
* Ensure Dokploy is fully configured, recovering/creating resources as needed
|
|
@@ -4424,7 +4537,7 @@ async function ensureDokploySetup(config, dockerConfig, stage, services) {
|
|
|
4424
4537
|
}
|
|
4425
4538
|
const environmentId$1 = environment.environmentId;
|
|
4426
4539
|
logger$1.log(` Services config: ${JSON.stringify(services)}, envId: ${environmentId$1}`);
|
|
4427
|
-
const
|
|
4540
|
+
const provisionResult$1 = await provisionServices(api, existingConfig.projectId, environmentId$1, dockerConfig.appName, services, void 0);
|
|
4428
4541
|
return {
|
|
4429
4542
|
config: {
|
|
4430
4543
|
endpoint: existingConfig.endpoint,
|
|
@@ -4433,7 +4546,7 @@ async function ensureDokploySetup(config, dockerConfig, stage, services) {
|
|
|
4433
4546
|
registry: existingConfig.registry,
|
|
4434
4547
|
registryId: storedRegistryId ?? void 0
|
|
4435
4548
|
},
|
|
4436
|
-
serviceUrls:
|
|
4549
|
+
serviceUrls: provisionResult$1?.serviceUrls
|
|
4437
4550
|
};
|
|
4438
4551
|
} catch {
|
|
4439
4552
|
logger$1.log("⚠ Project not found, will recover...");
|
|
@@ -4540,10 +4653,10 @@ async function ensureDokploySetup(config, dockerConfig, stage, services) {
|
|
|
4540
4653
|
logger$1.log(` Project: ${project.projectId}`);
|
|
4541
4654
|
logger$1.log(` Application: ${applicationId}`);
|
|
4542
4655
|
if (registryId) logger$1.log(` Registry: ${registryId}`);
|
|
4543
|
-
const
|
|
4656
|
+
const provisionResult = await provisionServices(api, project.projectId, environmentId, dockerConfig.appName, services, void 0);
|
|
4544
4657
|
return {
|
|
4545
4658
|
config: dokployConfig,
|
|
4546
|
-
serviceUrls
|
|
4659
|
+
serviceUrls: provisionResult?.serviceUrls
|
|
4547
4660
|
};
|
|
4548
4661
|
}
|
|
4549
4662
|
/**
|
|
@@ -4662,6 +4775,18 @@ async function workspaceDeployCommand(workspace, options) {
|
|
|
4662
4775
|
} else environmentId = result.environment.environmentId;
|
|
4663
4776
|
logger$1.log(` ✓ Created project: ${project.projectId}`);
|
|
4664
4777
|
}
|
|
4778
|
+
logger$1.log("\n📋 Loading deploy state...");
|
|
4779
|
+
let state = await readStageState(workspace.root, stage);
|
|
4780
|
+
if (state) {
|
|
4781
|
+
logger$1.log(` Found existing state for stage "${stage}"`);
|
|
4782
|
+
if (state.environmentId !== environmentId) {
|
|
4783
|
+
logger$1.log(` ⚠ Environment ID changed, updating state`);
|
|
4784
|
+
state.environmentId = environmentId;
|
|
4785
|
+
}
|
|
4786
|
+
} else {
|
|
4787
|
+
logger$1.log(` Creating new state for stage "${stage}"`);
|
|
4788
|
+
state = createEmptyState(stage, environmentId);
|
|
4789
|
+
}
|
|
4665
4790
|
logger$1.log("\n🐳 Checking registry...");
|
|
4666
4791
|
let registryId = await getDokployRegistryId();
|
|
4667
4792
|
const registry = workspace.deploy.dokploy?.registry;
|
|
@@ -4697,11 +4822,15 @@ async function workspaceDeployCommand(workspace, options) {
|
|
|
4697
4822
|
};
|
|
4698
4823
|
if (dockerServices.postgres || dockerServices.redis) {
|
|
4699
4824
|
logger$1.log("\n🔧 Provisioning infrastructure services...");
|
|
4700
|
-
const
|
|
4701
|
-
|
|
4702
|
-
|
|
4703
|
-
}
|
|
4704
|
-
await provisionServices(api, project.projectId, environmentId, workspace.name, dockerServices,
|
|
4825
|
+
const existingServiceIds = {
|
|
4826
|
+
postgresId: getPostgresId(state),
|
|
4827
|
+
redisId: getRedisId(state)
|
|
4828
|
+
};
|
|
4829
|
+
const provisionResult = await provisionServices(api, project.projectId, environmentId, workspace.name, dockerServices, existingServiceIds);
|
|
4830
|
+
if (provisionResult?.serviceIds) {
|
|
4831
|
+
if (provisionResult.serviceIds.postgresId) setPostgresId(state, provisionResult.serviceIds.postgresId);
|
|
4832
|
+
if (provisionResult.serviceIds.redisId) setRedisId(state, provisionResult.serviceIds.redisId);
|
|
4833
|
+
}
|
|
4705
4834
|
}
|
|
4706
4835
|
const backendApps = appsToDeployNames.filter((name$1) => workspace.apps[name$1].type === "backend");
|
|
4707
4836
|
const frontendApps = appsToDeployNames.filter((name$1) => workspace.apps[name$1].type === "frontend");
|
|
@@ -4714,16 +4843,22 @@ async function workspaceDeployCommand(workspace, options) {
|
|
|
4714
4843
|
const app = workspace.apps[appName];
|
|
4715
4844
|
logger$1.log(`\n ⚙️ Deploying ${appName}...`);
|
|
4716
4845
|
try {
|
|
4717
|
-
const dokployAppName =
|
|
4718
|
-
let application;
|
|
4719
|
-
|
|
4720
|
-
|
|
4721
|
-
logger$1.log(`
|
|
4722
|
-
|
|
4723
|
-
|
|
4724
|
-
|
|
4725
|
-
|
|
4846
|
+
const dokployAppName = appName;
|
|
4847
|
+
let application = null;
|
|
4848
|
+
const cachedAppId = getApplicationId(state, appName);
|
|
4849
|
+
if (cachedAppId) {
|
|
4850
|
+
logger$1.log(` Using cached ID: ${cachedAppId}`);
|
|
4851
|
+
application = await api.getApplication(cachedAppId);
|
|
4852
|
+
if (application) logger$1.log(` ✓ Application found: ${application.applicationId}`);
|
|
4853
|
+
else logger$1.log(` ⚠ Cached ID invalid, will create new`);
|
|
4854
|
+
}
|
|
4855
|
+
if (!application) {
|
|
4856
|
+
const result = await api.findOrCreateApplication(dokployAppName, project.projectId, environmentId);
|
|
4857
|
+
application = result.application;
|
|
4858
|
+
if (result.created) logger$1.log(` Created application: ${application.applicationId}`);
|
|
4859
|
+
else logger$1.log(` Found existing application: ${application.applicationId}`);
|
|
4726
4860
|
}
|
|
4861
|
+
setApplicationId(state, appName, application.applicationId);
|
|
4727
4862
|
const appSecrets = encryptedSecrets.get(appName);
|
|
4728
4863
|
const buildArgs = [];
|
|
4729
4864
|
if (appSecrets && appSecrets.secretCount > 0) {
|
|
@@ -4747,47 +4882,35 @@ async function workspaceDeployCommand(workspace, options) {
|
|
|
4747
4882
|
});
|
|
4748
4883
|
const envVars = [`NODE_ENV=production`, `PORT=${app.port}`];
|
|
4749
4884
|
if (appSecrets && appSecrets.masterKey) envVars.push(`GKM_MASTER_KEY=${appSecrets.masterKey}`);
|
|
4750
|
-
|
|
4751
|
-
|
|
4752
|
-
|
|
4753
|
-
|
|
4754
|
-
|
|
4755
|
-
|
|
4756
|
-
|
|
4757
|
-
|
|
4758
|
-
|
|
4759
|
-
|
|
4760
|
-
|
|
4761
|
-
|
|
4762
|
-
applicationId: application.applicationId
|
|
4763
|
-
});
|
|
4764
|
-
const publicUrl = `https://${host}`;
|
|
4765
|
-
publicUrls[appName] = publicUrl;
|
|
4766
|
-
logger$1.log(` ✓ Domain: ${publicUrl}`);
|
|
4767
|
-
} catch (domainError) {
|
|
4768
|
-
const host = resolveHost(appName, app, stage, dokployConfig, false);
|
|
4769
|
-
publicUrls[appName] = `https://${host}`;
|
|
4770
|
-
logger$1.log(` ℹ Domain already configured: https://${host}`);
|
|
4771
|
-
}
|
|
4772
|
-
results.push({
|
|
4773
|
-
appName,
|
|
4774
|
-
type: app.type,
|
|
4775
|
-
success: true,
|
|
4776
|
-
applicationId: application.applicationId,
|
|
4777
|
-
imageRef
|
|
4885
|
+
await api.saveDockerProvider(application.applicationId, imageRef, { registryId });
|
|
4886
|
+
await api.saveApplicationEnv(application.applicationId, envVars.join("\n"));
|
|
4887
|
+
logger$1.log(` Deploying to Dokploy...`);
|
|
4888
|
+
await api.deployApplication(application.applicationId);
|
|
4889
|
+
try {
|
|
4890
|
+
const host = resolveHost(appName, app, stage, dokployConfig, false);
|
|
4891
|
+
await api.createDomain({
|
|
4892
|
+
host,
|
|
4893
|
+
port: app.port,
|
|
4894
|
+
https: true,
|
|
4895
|
+
certificateType: "letsencrypt",
|
|
4896
|
+
applicationId: application.applicationId
|
|
4778
4897
|
});
|
|
4779
|
-
|
|
4780
|
-
|
|
4898
|
+
const publicUrl = `https://${host}`;
|
|
4899
|
+
publicUrls[appName] = publicUrl;
|
|
4900
|
+
logger$1.log(` ✓ Domain: ${publicUrl}`);
|
|
4901
|
+
} catch (domainError) {
|
|
4781
4902
|
const host = resolveHost(appName, app, stage, dokployConfig, false);
|
|
4782
4903
|
publicUrls[appName] = `https://${host}`;
|
|
4783
|
-
|
|
4784
|
-
appName,
|
|
4785
|
-
type: app.type,
|
|
4786
|
-
success: true,
|
|
4787
|
-
imageRef
|
|
4788
|
-
});
|
|
4789
|
-
logger$1.log(` ✓ ${appName} image pushed (app already exists)`);
|
|
4904
|
+
logger$1.log(` ℹ Domain already configured: https://${host}`);
|
|
4790
4905
|
}
|
|
4906
|
+
results.push({
|
|
4907
|
+
appName,
|
|
4908
|
+
type: app.type,
|
|
4909
|
+
success: true,
|
|
4910
|
+
applicationId: application.applicationId,
|
|
4911
|
+
imageRef
|
|
4912
|
+
});
|
|
4913
|
+
logger$1.log(` ✓ ${appName} deployed successfully`);
|
|
4791
4914
|
} catch (error) {
|
|
4792
4915
|
const message = error instanceof Error ? error.message : "Unknown error";
|
|
4793
4916
|
logger$1.log(` ✗ Failed to deploy ${appName}: ${message}`);
|
|
@@ -4807,16 +4930,22 @@ async function workspaceDeployCommand(workspace, options) {
|
|
|
4807
4930
|
const app = workspace.apps[appName];
|
|
4808
4931
|
logger$1.log(`\n 🌐 Deploying ${appName}...`);
|
|
4809
4932
|
try {
|
|
4810
|
-
const dokployAppName =
|
|
4811
|
-
let application;
|
|
4812
|
-
|
|
4813
|
-
|
|
4814
|
-
logger$1.log(`
|
|
4815
|
-
|
|
4816
|
-
|
|
4817
|
-
|
|
4818
|
-
else throw error;
|
|
4933
|
+
const dokployAppName = appName;
|
|
4934
|
+
let application = null;
|
|
4935
|
+
const cachedAppId = getApplicationId(state, appName);
|
|
4936
|
+
if (cachedAppId) {
|
|
4937
|
+
logger$1.log(` Using cached ID: ${cachedAppId}`);
|
|
4938
|
+
application = await api.getApplication(cachedAppId);
|
|
4939
|
+
if (application) logger$1.log(` ✓ Application found: ${application.applicationId}`);
|
|
4940
|
+
else logger$1.log(` ⚠ Cached ID invalid, will create new`);
|
|
4819
4941
|
}
|
|
4942
|
+
if (!application) {
|
|
4943
|
+
const result = await api.findOrCreateApplication(dokployAppName, project.projectId, environmentId);
|
|
4944
|
+
application = result.application;
|
|
4945
|
+
if (result.created) logger$1.log(` Created application: ${application.applicationId}`);
|
|
4946
|
+
else logger$1.log(` Found existing application: ${application.applicationId}`);
|
|
4947
|
+
}
|
|
4948
|
+
setApplicationId(state, appName, application.applicationId);
|
|
4820
4949
|
const buildArgs = generatePublicUrlBuildArgs(app, publicUrls);
|
|
4821
4950
|
if (buildArgs.length > 0) logger$1.log(` Public URLs: ${buildArgs.join(", ")}`);
|
|
4822
4951
|
const imageName = `${workspace.name}-${appName}`;
|
|
@@ -4835,49 +4964,36 @@ async function workspaceDeployCommand(workspace, options) {
|
|
|
4835
4964
|
publicUrlArgs: getPublicUrlArgNames(app)
|
|
4836
4965
|
});
|
|
4837
4966
|
const envVars = [`NODE_ENV=production`, `PORT=${app.port}`];
|
|
4838
|
-
|
|
4839
|
-
|
|
4840
|
-
|
|
4841
|
-
|
|
4842
|
-
|
|
4843
|
-
|
|
4844
|
-
|
|
4845
|
-
|
|
4846
|
-
|
|
4847
|
-
|
|
4848
|
-
|
|
4849
|
-
|
|
4850
|
-
|
|
4851
|
-
applicationId: application.applicationId
|
|
4852
|
-
});
|
|
4853
|
-
const publicUrl = `https://${host}`;
|
|
4854
|
-
publicUrls[appName] = publicUrl;
|
|
4855
|
-
logger$1.log(` ✓ Domain: ${publicUrl}`);
|
|
4856
|
-
} catch (domainError) {
|
|
4857
|
-
const host = resolveHost(appName, app, stage, dokployConfig, isMainFrontend);
|
|
4858
|
-
publicUrls[appName] = `https://${host}`;
|
|
4859
|
-
logger$1.log(` ℹ Domain already configured: https://${host}`);
|
|
4860
|
-
}
|
|
4861
|
-
results.push({
|
|
4862
|
-
appName,
|
|
4863
|
-
type: app.type,
|
|
4864
|
-
success: true,
|
|
4865
|
-
applicationId: application.applicationId,
|
|
4866
|
-
imageRef
|
|
4967
|
+
await api.saveDockerProvider(application.applicationId, imageRef, { registryId });
|
|
4968
|
+
await api.saveApplicationEnv(application.applicationId, envVars.join("\n"));
|
|
4969
|
+
logger$1.log(` Deploying to Dokploy...`);
|
|
4970
|
+
await api.deployApplication(application.applicationId);
|
|
4971
|
+
const isMainFrontend = isMainFrontendApp(appName, app, workspace.apps);
|
|
4972
|
+
try {
|
|
4973
|
+
const host = resolveHost(appName, app, stage, dokployConfig, isMainFrontend);
|
|
4974
|
+
await api.createDomain({
|
|
4975
|
+
host,
|
|
4976
|
+
port: app.port,
|
|
4977
|
+
https: true,
|
|
4978
|
+
certificateType: "letsencrypt",
|
|
4979
|
+
applicationId: application.applicationId
|
|
4867
4980
|
});
|
|
4868
|
-
|
|
4869
|
-
|
|
4870
|
-
|
|
4981
|
+
const publicUrl = `https://${host}`;
|
|
4982
|
+
publicUrls[appName] = publicUrl;
|
|
4983
|
+
logger$1.log(` ✓ Domain: ${publicUrl}`);
|
|
4984
|
+
} catch (domainError) {
|
|
4871
4985
|
const host = resolveHost(appName, app, stage, dokployConfig, isMainFrontend);
|
|
4872
4986
|
publicUrls[appName] = `https://${host}`;
|
|
4873
|
-
|
|
4874
|
-
appName,
|
|
4875
|
-
type: app.type,
|
|
4876
|
-
success: true,
|
|
4877
|
-
imageRef
|
|
4878
|
-
});
|
|
4879
|
-
logger$1.log(` ✓ ${appName} image pushed (app already exists)`);
|
|
4987
|
+
logger$1.log(` ℹ Domain already configured: https://${host}`);
|
|
4880
4988
|
}
|
|
4989
|
+
results.push({
|
|
4990
|
+
appName,
|
|
4991
|
+
type: app.type,
|
|
4992
|
+
success: true,
|
|
4993
|
+
applicationId: application.applicationId,
|
|
4994
|
+
imageRef
|
|
4995
|
+
});
|
|
4996
|
+
logger$1.log(` ✓ ${appName} deployed successfully`);
|
|
4881
4997
|
} catch (error) {
|
|
4882
4998
|
const message = error instanceof Error ? error.message : "Unknown error";
|
|
4883
4999
|
logger$1.log(` ✗ Failed to deploy ${appName}: ${message}`);
|
|
@@ -4890,6 +5006,9 @@ async function workspaceDeployCommand(workspace, options) {
|
|
|
4890
5006
|
}
|
|
4891
5007
|
}
|
|
4892
5008
|
}
|
|
5009
|
+
logger$1.log("\n📋 Saving deploy state...");
|
|
5010
|
+
await writeStageState(workspace.root, stage, state);
|
|
5011
|
+
logger$1.log(` ✓ State saved to .gkm/deploy-${stage}.json`);
|
|
4893
5012
|
const successCount = results.filter((r) => r.success).length;
|
|
4894
5013
|
const failedCount = results.filter((r) => !r.success).length;
|
|
4895
5014
|
logger$1.log(`\n${"─".repeat(50)}`);
|