@geekmidas/cli 10.0.0-alpha.87 → 10.0.0-alpha.89
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/GoDaddyProvider--36rw8cP.mjs +387 -0
- package/dist/GoDaddyProvider--36rw8cP.mjs.map +1 -0
- package/dist/GoDaddyProvider-DnRor066.cjs +387 -0
- package/dist/GoDaddyProvider-DnRor066.cjs.map +1 -0
- package/dist/{HostingerProvider-CVc3rLPB.mjs → HostingerProvider-BI6J7oJr.mjs} +2 -2
- package/dist/{HostingerProvider-CVc3rLPB.mjs.map → HostingerProvider-BI6J7oJr.mjs.map} +1 -1
- package/dist/{HostingerProvider-BCB1QJj1.cjs → HostingerProvider-CyTpG_jy.cjs} +2 -2
- package/dist/{HostingerProvider-BCB1QJj1.cjs.map → HostingerProvider-CyTpG_jy.cjs.map} +1 -1
- package/dist/{LegacyStateStore-CWG_HVC0.cjs → LegacyStateStore-BaBoYl59.cjs} +2 -2
- package/dist/{LegacyStateStore-CWG_HVC0.cjs.map → LegacyStateStore-BaBoYl59.cjs.map} +1 -1
- package/dist/{LegacyStateStore-B0R4LlX_.mjs → LegacyStateStore-CO7bzJCU.mjs} +2 -2
- package/dist/{LegacyStateStore-B0R4LlX_.mjs.map → LegacyStateStore-CO7bzJCU.mjs.map} +1 -1
- package/dist/{LocalStateStore-CLwa2DpK.cjs → LocalStateStore-CUWh2BWU.cjs} +2 -2
- package/dist/{LocalStateStore-CLwa2DpK.cjs.map → LocalStateStore-CUWh2BWU.cjs.map} +1 -1
- package/dist/{LocalStateStore-Q4vXg2ua.mjs → LocalStateStore-C_hYDv6I.mjs} +2 -2
- package/dist/{LocalStateStore-Q4vXg2ua.mjs.map → LocalStateStore-C_hYDv6I.mjs.map} +1 -1
- package/dist/{S3StateStore-Cea9_5gF.cjs → S3StateStore-O8EYfjfG.cjs} +2 -2
- package/dist/{S3StateStore-Cea9_5gF.cjs.map → S3StateStore-O8EYfjfG.cjs.map} +1 -1
- package/dist/{S3StateStore-CksKYKRa.mjs → S3StateStore-hIm8Rrmu.mjs} +2 -2
- package/dist/{S3StateStore-CksKYKRa.mjs.map → S3StateStore-hIm8Rrmu.mjs.map} +1 -1
- package/dist/{SSMStateStore-aBOTF018.cjs → SSMStateStore-DIzbiqCz.cjs} +2 -2
- package/dist/{SSMStateStore-aBOTF018.cjs.map → SSMStateStore-DIzbiqCz.cjs.map} +1 -1
- package/dist/{SSMStateStore-BszSCAS2.mjs → SSMStateStore-IvcjTk8h.mjs} +2 -2
- package/dist/{SSMStateStore-BszSCAS2.mjs.map → SSMStateStore-IvcjTk8h.mjs.map} +1 -1
- package/dist/SubscriberGenerator-BPqQf8fB.mjs.map +1 -1
- package/dist/SubscriberGenerator-BVn7cQ-2.cjs.map +1 -1
- package/dist/{add-5MZAXybv.cjs → add-C9qX4Juc.cjs} +30 -7
- package/dist/add-C9qX4Juc.cjs.map +1 -0
- package/dist/{add-D_jNqnfZ.mjs → add-v3tCbrpE.mjs} +30 -7
- package/dist/add-v3tCbrpE.mjs.map +1 -0
- package/dist/{bundler-1REMhKps.cjs → bundler-C4NmpRTD.cjs} +5 -5
- package/dist/{bundler-1REMhKps.cjs.map → bundler-C4NmpRTD.cjs.map} +1 -1
- package/dist/{bundler-BMo-JP5s.mjs → bundler-C_fCgcVO.mjs} +5 -5
- package/dist/{bundler-BMo-JP5s.mjs.map → bundler-C_fCgcVO.mjs.map} +1 -1
- package/dist/{cli-BL8ZHsLQ.cjs → cli-C85Dut8K.cjs} +6 -5
- package/dist/cli-C85Dut8K.cjs.map +1 -0
- package/dist/{cli-7edNFwGk.mjs → cli-REdO9X5b.mjs} +7 -6
- package/dist/cli-REdO9X5b.mjs.map +1 -0
- package/dist/{compose-xw86kVYi.cjs → compose-BvrhDwJ6.cjs} +556 -30
- package/dist/compose-BvrhDwJ6.cjs.map +1 -0
- package/dist/{compose-DbJhRQlh.mjs → compose-Dn0oAgQ0.mjs} +509 -31
- package/dist/compose-Dn0oAgQ0.mjs.map +1 -0
- package/dist/{config-DrCAyoH5.d.mts → config-CdEcTrjG.d.mts} +3 -3
- package/dist/{config-CpjsVxru.d.cts.map → config-CdEcTrjG.d.mts.map} +1 -1
- package/dist/{config-CpjsVxru.d.cts → config-pST7E0CS.d.cts} +3 -3
- package/dist/{config-DrCAyoH5.d.mts.map → config-pST7E0CS.d.cts.map} +1 -1
- package/dist/config.cjs +1 -1
- package/dist/config.d.cts +3 -3
- package/dist/config.d.mts +3 -3
- package/dist/config.mjs +1 -1
- package/dist/{credentials-tr26-KML.cjs → credentials-BKfIugu2.cjs} +47 -2
- package/dist/credentials-BKfIugu2.cjs.map +1 -0
- package/dist/{credentials-BgJ5mS_d.mjs → credentials-CnVqoXMb.mjs} +30 -3
- package/dist/credentials-CnVqoXMb.mjs.map +1 -0
- package/dist/databases-BY-pEImp.cjs.map +1 -1
- package/dist/databases-CzszQV0N.mjs.map +1 -1
- package/dist/deploy/public.cjs +10 -10
- package/dist/deploy/public.d.cts +9 -3
- package/dist/deploy/public.d.cts.map +1 -1
- package/dist/deploy/public.d.mts +9 -3
- package/dist/deploy/public.d.mts.map +1 -1
- package/dist/deploy/public.mjs +10 -10
- package/dist/{deploy-BTfmXd3g.mjs → deploy-BaERRh0Q.mjs} +10 -8
- package/dist/deploy-BaERRh0Q.mjs.map +1 -0
- package/dist/{deploy-CtbZj4zN.cjs → deploy-DbBGo3a6.cjs} +10 -8
- package/dist/deploy-DbBGo3a6.cjs.map +1 -0
- package/dist/{dokploy-r69yZaIt.mjs → dokploy-CMmD_ddX.mjs} +2 -2
- package/dist/{dokploy-r69yZaIt.mjs.map → dokploy-CMmD_ddX.mjs.map} +1 -1
- package/dist/{dokploy-TGk3oPwr.cjs → dokploy-DwAaKA9B.cjs} +2 -2
- package/dist/{dokploy-TGk3oPwr.cjs.map → dokploy-DwAaKA9B.cjs.map} +1 -1
- package/dist/{encryption-C-8Tt5Hh.mjs → encryption-BQmhq9_y.mjs} +3 -3
- package/dist/{encryption-C-8Tt5Hh.mjs.map → encryption-BQmhq9_y.mjs.map} +1 -1
- package/dist/{encryption-CDn7BH5O.cjs → encryption-BrN_9_CM.cjs} +3 -3
- package/dist/{encryption-CDn7BH5O.cjs.map → encryption-BrN_9_CM.cjs.map} +1 -1
- package/dist/{engine-jAINgiOB.mjs → engine-DILocOOH.mjs} +23 -404
- package/dist/engine-DILocOOH.mjs.map +1 -0
- package/dist/{engine-Bt5k_UMq.cjs → engine-DgHoFBMw.cjs} +25 -406
- package/dist/engine-DgHoFBMw.cjs.map +1 -0
- package/dist/{github-DFhuJQlp.cjs → github-Bf7pz6AV.cjs} +3 -3
- package/dist/{github-DFhuJQlp.cjs.map → github-Bf7pz6AV.cjs.map} +1 -1
- package/dist/{github-CZHAtwPT.mjs → github-xzg99wz8.mjs} +3 -3
- package/dist/{github-CZHAtwPT.mjs.map → github-xzg99wz8.mjs.map} +1 -1
- package/dist/{index-MnUJuUlj.d.mts → index-D-F_hTDz.d.cts} +21 -4
- package/dist/index-D-F_hTDz.d.cts.map +1 -0
- package/dist/{index-elsLJTUv.d.cts → index-YFNxR5Ns.d.mts} +21 -4
- package/dist/index-YFNxR5Ns.d.mts.map +1 -0
- package/dist/index.cjs +305 -69
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +306 -71
- package/dist/index.mjs.map +1 -1
- package/dist/{local-Cq8qdgNX.cjs → local-BjxDfPvy.cjs} +2 -2
- package/dist/{local-Cq8qdgNX.cjs.map → local-BjxDfPvy.cjs.map} +1 -1
- package/dist/{local-Ciq-bTPr.mjs → local-IuoIF3CT.mjs} +2 -2
- package/dist/{local-Ciq-bTPr.mjs.map → local-IuoIF3CT.mjs.map} +1 -1
- package/dist/{migrate-B1rVlwj1.cjs → migrate-7xayVtzL.cjs} +3 -3
- package/dist/{migrate-B1rVlwj1.cjs.map → migrate-7xayVtzL.cjs.map} +1 -1
- package/dist/{migrate-ggkPVJRC.mjs → migrate-CKLJ73OO.mjs} +4 -4
- package/dist/{migrate-ggkPVJRC.mjs.map → migrate-CKLJ73OO.mjs.map} +1 -1
- package/dist/{migrate-Dn7nK6sh.mjs → migrate-CpmO5qnl.mjs} +3 -3
- package/dist/{migrate-Dn7nK6sh.mjs.map → migrate-CpmO5qnl.mjs.map} +1 -1
- package/dist/{migrate-B16qgYTn.cjs → migrate-DPF7ZF8M.cjs} +3 -3
- package/dist/{migrate-B16qgYTn.cjs.map → migrate-DPF7ZF8M.cjs.map} +1 -1
- package/dist/openapi.cjs +1 -1
- package/dist/openapi.d.cts +1 -1
- package/dist/openapi.d.mts +1 -1
- package/dist/openapi.mjs +1 -1
- package/dist/ready-BpNbORRB.cjs.map +1 -1
- package/dist/ready-b6vm0-W-.mjs.map +1 -1
- package/dist/reconcile/public.d.cts +1 -1
- package/dist/reconcile/public.d.mts +1 -1
- package/dist/{reconcile--I7V4Klj.mjs → reconcile-Dh1Jk7WE.mjs} +2 -2
- package/dist/{reconcile--I7V4Klj.mjs.map → reconcile-Dh1Jk7WE.mjs.map} +1 -1
- package/dist/{resolve-BSke45k6.mjs → resolve-Dv_weZoh.mjs} +4 -4
- package/dist/{resolve-BSke45k6.mjs.map → resolve-Dv_weZoh.mjs.map} +1 -1
- package/dist/{resolve-BXeXzpmU.cjs → resolve-dlKPFNgv.cjs} +4 -4
- package/dist/{resolve-BXeXzpmU.cjs.map → resolve-dlKPFNgv.cjs.map} +1 -1
- package/dist/{rollback-DFMiBWf0.cjs → rollback-65VVIdBM.cjs} +6 -6
- package/dist/{rollback-DFMiBWf0.cjs.map → rollback-65VVIdBM.cjs.map} +1 -1
- package/dist/{rollback-CEE6dse4.mjs → rollback-DpSU2DsD.mjs} +6 -6
- package/dist/{rollback-CEE6dse4.mjs.map → rollback-DpSU2DsD.mjs.map} +1 -1
- package/dist/{runtime-HabiNBtJ.d.mts → runtime-CN_kmqxo.d.cts} +2 -2
- package/dist/{runtime-D48ZKk8_.d.cts.map → runtime-CN_kmqxo.d.cts.map} +1 -1
- package/dist/{runtime-D48ZKk8_.d.cts → runtime-Cjvon3oj.d.mts} +2 -2
- package/dist/{runtime-HabiNBtJ.d.mts.map → runtime-Cjvon3oj.d.mts.map} +1 -1
- package/dist/{seeds-CsI0A_Ef.cjs → seeds-CN6tB-va.cjs} +646 -187
- package/dist/{seeds-CsI0A_Ef.cjs.map → seeds-CN6tB-va.cjs.map} +1 -1
- package/dist/{seeds-BYdrtZsC.mjs → seeds-perzdN81.mjs} +599 -164
- package/dist/seeds-perzdN81.mjs.map +1 -0
- package/dist/{sniffer-B0EU73bj.mjs → sniffer-BTtX3NUM.mjs} +3 -3
- package/dist/{sniffer-B0EU73bj.mjs.map → sniffer-BTtX3NUM.mjs.map} +1 -1
- package/dist/{sniffer-DJYupBeK.cjs → sniffer-IAQEpsQb.cjs} +3 -3
- package/dist/{sniffer-DJYupBeK.cjs.map → sniffer-IAQEpsQb.cjs.map} +1 -1
- package/dist/{sst-DAqUoZKG.cjs → sst-BgcOsaBi.cjs} +3 -3
- package/dist/{sst-DAqUoZKG.cjs.map → sst-BgcOsaBi.cjs.map} +1 -1
- package/dist/{sst-D1Qj4sIs.mjs → sst-CJzvyrEz.mjs} +3 -3
- package/dist/{sst-D1Qj4sIs.mjs.map → sst-CJzvyrEz.mjs.map} +1 -1
- package/dist/{stages-Brn3vcdy.cjs → stages-CUn6gvXL.cjs} +2 -2
- package/dist/{stages-Brn3vcdy.cjs.map → stages-CUn6gvXL.cjs.map} +1 -1
- package/dist/{stages-DoHHz6pS.mjs → stages-CnZRYmkI.mjs} +2 -2
- package/dist/{stages-DoHHz6pS.mjs.map → stages-CnZRYmkI.mjs.map} +1 -1
- package/dist/target/public.cjs +1 -1
- package/dist/target/public.d.cts +2 -2
- package/dist/target/public.d.mts +2 -2
- package/dist/target/public.mjs +1 -1
- package/dist/{terminal-BTbZlrFV.mjs → terminal-D8TPK7o9.mjs} +3 -3
- package/dist/{terminal-BTbZlrFV.mjs.map → terminal-D8TPK7o9.mjs.map} +1 -1
- package/dist/{terminal-COv23heb.cjs → terminal-DuapRxh6.cjs} +2 -2
- package/dist/{terminal-COv23heb.cjs.map → terminal-DuapRxh6.cjs.map} +1 -1
- package/dist/{types-0oAyFOfR.d.cts → types-NqX1Hz4P.d.cts} +210 -205
- package/dist/types-NqX1Hz4P.d.cts.map +1 -0
- package/dist/{types-BZ01tZs-.d.mts → types-ZHuZ89hv.d.mts} +210 -205
- package/dist/types-ZHuZ89hv.d.mts.map +1 -0
- package/dist/workspace/index.cjs +3 -1
- package/dist/workspace/index.d.cts +3 -3
- package/dist/workspace/index.d.mts +3 -3
- package/dist/workspace/index.mjs +2 -2
- package/dist/{workspace-D2CYLMCW.mjs → workspace-CJ0lKFq-.mjs} +231 -10
- package/dist/workspace-CJ0lKFq-.mjs.map +1 -0
- package/dist/{workspace-CT0JM3Y8.cjs → workspace-CwW3Gkru.cjs} +266 -9
- package/dist/workspace-CwW3Gkru.cjs.map +1 -0
- package/package.json +15 -15
- package/dist/add-5MZAXybv.cjs.map +0 -1
- package/dist/add-D_jNqnfZ.mjs.map +0 -1
- package/dist/cli-7edNFwGk.mjs.map +0 -1
- package/dist/cli-BL8ZHsLQ.cjs.map +0 -1
- package/dist/compose-DbJhRQlh.mjs.map +0 -1
- package/dist/compose-xw86kVYi.cjs.map +0 -1
- package/dist/credentials-BgJ5mS_d.mjs.map +0 -1
- package/dist/credentials-tr26-KML.cjs.map +0 -1
- package/dist/deploy-BTfmXd3g.mjs.map +0 -1
- package/dist/deploy-CtbZj4zN.cjs.map +0 -1
- package/dist/engine-Bt5k_UMq.cjs.map +0 -1
- package/dist/engine-jAINgiOB.mjs.map +0 -1
- package/dist/index-MnUJuUlj.d.mts.map +0 -1
- package/dist/index-elsLJTUv.d.cts.map +0 -1
- package/dist/seeds-BYdrtZsC.mjs.map +0 -1
- package/dist/types-0oAyFOfR.d.cts.map +0 -1
- package/dist/types-BZ01tZs-.d.mts.map +0 -1
- package/dist/workspace-CT0JM3Y8.cjs.map +0 -1
- package/dist/workspace-D2CYLMCW.mjs.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
#!/usr/bin/env -S npx tsx
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const require_rolldown_runtime = require("./rolldown-runtime-C0BPl7ul.cjs");
|
|
4
|
-
const require_credentials = require("./credentials-
|
|
4
|
+
const require_credentials = require("./credentials-BKfIugu2.cjs");
|
|
5
5
|
const require_discover = require("./discover-D1It5r_h.cjs");
|
|
6
6
|
const require_derive = require("./derive-DAbo49sm.cjs");
|
|
7
|
-
const require_workspace = require("./workspace-
|
|
7
|
+
const require_workspace = require("./workspace-CwW3Gkru.cjs");
|
|
8
8
|
const require_config = require("./config.cjs");
|
|
9
|
-
const require_seeds = require("./seeds-
|
|
9
|
+
const require_seeds = require("./seeds-CN6tB-va.cjs");
|
|
10
10
|
const require_EndpointGenerator = require("./EndpointGenerator-CwLjBCFE.cjs");
|
|
11
11
|
const require_openapi = require("./openapi.cjs");
|
|
12
12
|
const require_SubscriberGenerator = require("./SubscriberGenerator-BVn7cQ-2.cjs");
|
|
13
13
|
const require_appPorts = require("./appPorts-Cu79hJF6.cjs");
|
|
14
14
|
const require_drivers = require("./drivers-LYSdQDmd.cjs");
|
|
15
15
|
const require_emit = require("./emit-Dmc1nvdS.cjs");
|
|
16
|
-
const require_local = require("./local-
|
|
17
|
-
const require_sniffer = require("./sniffer-
|
|
18
|
-
const require_deploy = require("./deploy-
|
|
19
|
-
const require_compose = require("./compose-
|
|
16
|
+
const require_local = require("./local-BjxDfPvy.cjs");
|
|
17
|
+
const require_sniffer = require("./sniffer-IAQEpsQb.cjs");
|
|
18
|
+
const require_deploy = require("./deploy-DbBGo3a6.cjs");
|
|
19
|
+
const require_compose = require("./compose-BvrhDwJ6.cjs");
|
|
20
20
|
const require_credentialSchemas = require("./credentialSchemas-DCR4Wd1W.cjs");
|
|
21
|
-
const require_LocalStateStore = require("./LocalStateStore-
|
|
21
|
+
const require_LocalStateStore = require("./LocalStateStore-CUWh2BWU.cjs");
|
|
22
22
|
const require_utils = require("./utils-D2Nk1Nv2.cjs");
|
|
23
23
|
const require_ready = require("./ready-BpNbORRB.cjs");
|
|
24
24
|
let node_path = require("node:path");
|
|
@@ -53,7 +53,7 @@ crypto = require_rolldown_runtime.__toESM(crypto, 1);
|
|
|
53
53
|
let _geekmidas_constructs_functions = require("@geekmidas/constructs/functions");
|
|
54
54
|
let _geekmidas_constructs_topic = require("@geekmidas/constructs/topic");
|
|
55
55
|
//#region package.json
|
|
56
|
-
var version = "10.0.0-alpha.
|
|
56
|
+
var version = "10.0.0-alpha.89";
|
|
57
57
|
//#endregion
|
|
58
58
|
//#region src/prompt.ts
|
|
59
59
|
/**
|
|
@@ -136,7 +136,7 @@ const logger$8 = console;
|
|
|
136
136
|
* Validate Dokploy token by making a test API call
|
|
137
137
|
*/
|
|
138
138
|
async function validateDokployToken(endpoint, token) {
|
|
139
|
-
const { DokployApi } = await Promise.resolve().then(() => require("./sniffer-
|
|
139
|
+
const { DokployApi } = await Promise.resolve().then(() => require("./sniffer-IAQEpsQb.cjs")).then((n) => n.dokploy_api_exports);
|
|
140
140
|
return new DokployApi({
|
|
141
141
|
baseUrl: endpoint,
|
|
142
142
|
token
|
|
@@ -183,6 +183,10 @@ async function loginCommand(options) {
|
|
|
183
183
|
logger$8.log(` Credentials stored in: ${require_credentials.getCredentialsPath()}`);
|
|
184
184
|
logger$8.log("\nYou can now use deploy commands without setting DOKPLOY_API_TOKEN.");
|
|
185
185
|
}
|
|
186
|
+
if (provider === "godaddy") {
|
|
187
|
+
await loginGoDaddy(options);
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
186
190
|
if (provider === "hostinger") {
|
|
187
191
|
logger$8.log("\n🔐 Logging in to Hostinger...\n");
|
|
188
192
|
let token = providedToken;
|
|
@@ -205,15 +209,50 @@ async function loginCommand(options) {
|
|
|
205
209
|
}
|
|
206
210
|
}
|
|
207
211
|
/**
|
|
212
|
+
* Store a GoDaddy Personal Access Token. Not validated: the only call that
|
|
213
|
+
* proves a token without a domain is an account call (`GET /v1/domains`),
|
|
214
|
+
* which a token scoped to `domains.dns:update` alone may not make — the first
|
|
215
|
+
* `gkm setup` that writes a record is where a bad token reports itself.
|
|
216
|
+
*/
|
|
217
|
+
async function loginGoDaddy(options) {
|
|
218
|
+
logger$8.log("\n🔐 Logging in to GoDaddy...\n");
|
|
219
|
+
let token = options.token;
|
|
220
|
+
if (!token) {
|
|
221
|
+
logger$8.log("\nCreate a Personal Access Token in the GoDaddy developer dashboard\n(https://developer.godaddy.com) with only the domains.dns:update scope.\n");
|
|
222
|
+
token = await prompt("Personal Access Token: ", {
|
|
223
|
+
hidden: true,
|
|
224
|
+
instead: LOGIN_INSTEAD
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
if (!token) {
|
|
228
|
+
logger$8.error("Token is required");
|
|
229
|
+
process.exit(1);
|
|
230
|
+
}
|
|
231
|
+
const where = options.home ? { home: options.home } : void 0;
|
|
232
|
+
await require_credentials.storeGoDaddyToken(token, where);
|
|
233
|
+
logger$8.log("\n✓ GoDaddy token stored.");
|
|
234
|
+
logger$8.log(` Token: ${maskToken(token)}`);
|
|
235
|
+
logger$8.log(` Credentials stored in: ${require_credentials.getCredentialsPath(where)}`);
|
|
236
|
+
logger$8.log(" Not validated here: proving a token without a domain needs an account\n scope a DNS-only token does not have, so the first gkm setup that\n writes a record is where a bad token reports itself.");
|
|
237
|
+
logger$8.log("\nYou can now use it as a DNS provider without setting GODADDY_API_TOKEN.");
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
208
240
|
* Logout from a service
|
|
209
241
|
*/
|
|
210
242
|
async function logoutCommand(options) {
|
|
211
243
|
const { provider = "dokploy" } = options;
|
|
212
244
|
if (provider === "all") {
|
|
213
|
-
|
|
245
|
+
const dokployRemoved = await require_credentials.removeDokployCredentials();
|
|
246
|
+
const godaddyRemoved = await require_credentials.removeGoDaddyCredentials();
|
|
247
|
+
if (dokployRemoved || godaddyRemoved) logger$8.log("\n✓ Logged out from all services");
|
|
214
248
|
else logger$8.log("\nNo stored credentials found");
|
|
215
249
|
return;
|
|
216
250
|
}
|
|
251
|
+
if (provider === "godaddy") {
|
|
252
|
+
const removed = await require_credentials.removeGoDaddyCredentials();
|
|
253
|
+
logger$8.log(removed ? "\n✓ Logged out from GoDaddy" : "\nNo GoDaddy credentials found");
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
217
256
|
if (provider === "dokploy") {
|
|
218
257
|
if (await require_credentials.removeDokployCredentials()) logger$8.log("\n✓ Logged out from Dokploy");
|
|
219
258
|
else logger$8.log("\nNo Dokploy credentials found");
|
|
@@ -230,6 +269,8 @@ async function whoamiCommand() {
|
|
|
230
269
|
logger$8.log(` Endpoint: ${dokploy.endpoint}`);
|
|
231
270
|
logger$8.log(` Token: ${maskToken(dokploy.token)}`);
|
|
232
271
|
} else logger$8.log(" Dokploy: Not logged in");
|
|
272
|
+
const godaddy = (await require_credentials.readCredentials()).godaddy;
|
|
273
|
+
logger$8.log(godaddy ? ` GoDaddy:\n Token: ${maskToken(godaddy.token)}` : " GoDaddy: Not logged in");
|
|
233
274
|
logger$8.log(`\n Credentials file: ${require_credentials.getCredentialsPath()}`);
|
|
234
275
|
}
|
|
235
276
|
/**
|
|
@@ -499,6 +540,54 @@ var UnsupportedPlatform = class extends Error {
|
|
|
499
540
|
}
|
|
500
541
|
};
|
|
501
542
|
//#endregion
|
|
543
|
+
//#region src/workspace/stageTypes.ts
|
|
544
|
+
/**
|
|
545
|
+
* `.gkm/stages.d.ts`: the declared stages, as types application code can see.
|
|
546
|
+
*
|
|
547
|
+
* Constructs and app code cannot import `gkm.config.ts`, so the stage names it
|
|
548
|
+
* declares were plain strings everywhere else. This writes them into
|
|
549
|
+
* `@geekmidas/constructs`' `Stages` interface, which `LocalStage`,
|
|
550
|
+
* `DeployedStage` and `AnyStage` read — an `ExternalApi` url keyed `prodution`
|
|
551
|
+
* becomes a type error. Without the file those types are `string`.
|
|
552
|
+
*
|
|
553
|
+
* Written by `gkm dev`, `gkm build` and `gkm test --prepare`, beside the
|
|
554
|
+
* generated clients; a project's tsconfig `include`s it.
|
|
555
|
+
*/
|
|
556
|
+
/** Where the declaration is written, relative to the workspace root. */
|
|
557
|
+
const STAGE_TYPES_FILE = ".gkm/stages.d.ts";
|
|
558
|
+
/** A union of string literal types: `'staging' | 'prod'`, or `never`. */
|
|
559
|
+
function union(names) {
|
|
560
|
+
return names.length ? names.map((name) => `'${name}'`).join(" | ") : "never";
|
|
561
|
+
}
|
|
562
|
+
/** The declaration for a stages block. */
|
|
563
|
+
function stageTypesDeclaration(stages) {
|
|
564
|
+
return `// Generated by gkm from the \`stages\` in gkm.config.ts — do not edit.
|
|
565
|
+
// \`gkm dev\`, \`gkm build\` and \`gkm test --prepare\` rewrite it.
|
|
566
|
+
export {};
|
|
567
|
+
|
|
568
|
+
declare module '@geekmidas/constructs' {
|
|
569
|
+
interface Stages {
|
|
570
|
+
local: ${union([stages.local])};
|
|
571
|
+
deployed: ${union(stages.deployed)};
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
`;
|
|
575
|
+
}
|
|
576
|
+
/**
|
|
577
|
+
* Write `.gkm/stages.d.ts` under the workspace root, and return its path — or
|
|
578
|
+
* nothing when there are no stages to write. Left untouched when unchanged, so
|
|
579
|
+
* an editor's watcher does not re-check the project on every start.
|
|
580
|
+
*/
|
|
581
|
+
async function writeStageTypes(root, stages) {
|
|
582
|
+
if (!stages) return void 0;
|
|
583
|
+
const path = (0, node_path.join)(root, STAGE_TYPES_FILE);
|
|
584
|
+
const content = stageTypesDeclaration(stages);
|
|
585
|
+
if (await (0, node_fs_promises.readFile)(path, "utf8").catch(() => void 0) === content) return path;
|
|
586
|
+
await (0, node_fs_promises.mkdir)((0, node_path.join)(root, ".gkm"), { recursive: true });
|
|
587
|
+
await (0, node_fs_promises.writeFile)(path, content);
|
|
588
|
+
return path;
|
|
589
|
+
}
|
|
590
|
+
//#endregion
|
|
502
591
|
//#region src/dev/credentials.ts
|
|
503
592
|
/**
|
|
504
593
|
* `gkm dev:credentials` — where to sign in to each local service, and as
|
|
@@ -1812,8 +1901,10 @@ async function devCommand(options) {
|
|
|
1812
1901
|
if (!appConfig) {
|
|
1813
1902
|
logger$5.log("🔎 Reading gkm.config.ts and the constructs");
|
|
1814
1903
|
const { workspace: everything } = await require_config.loadWorkspaceConfig();
|
|
1904
|
+
await writeStageTypes(everything.root, everything.stages);
|
|
1815
1905
|
return workspaceDevCommand(everything, options);
|
|
1816
1906
|
}
|
|
1907
|
+
await writeStageTypes(appConfig.workspace.root, appConfig.workspace.stages);
|
|
1817
1908
|
const config = appConfig.gkmConfig;
|
|
1818
1909
|
const appRoot = appConfig.appRoot;
|
|
1819
1910
|
const secretsRoot = appConfig.workspaceRoot;
|
|
@@ -2239,9 +2330,9 @@ async function workspaceDevCommand(configured, options) {
|
|
|
2239
2330
|
for (const { id, port } of fakes) logger$5.log(`🎭 ${id} fake: http://localhost:${port}`);
|
|
2240
2331
|
logger$5.log(options.migrate || options.seed ? "🗄️ Migrating the databases" : "🗄️ Checking for pending migrations");
|
|
2241
2332
|
if (options.migrate || options.seed) {
|
|
2242
|
-
const { prepareDevDatabases } = await Promise.resolve().then(() => require("./migrate-
|
|
2333
|
+
const { prepareDevDatabases } = await Promise.resolve().then(() => require("./migrate-7xayVtzL.cjs"));
|
|
2243
2334
|
await prepareDevDatabases(workspace, reconciled.env, { seed: !!options.seed });
|
|
2244
|
-
} else await Promise.resolve().then(() => require("./migrate-
|
|
2335
|
+
} else await Promise.resolve().then(() => require("./migrate-7xayVtzL.cjs")).then(({ reportPendingMigrations }) => reportPendingMigrations(workspace, reconciled.env)).catch((error) => {
|
|
2245
2336
|
logger$5.log(`⚠️ Could not check for pending migrations: ${error instanceof Error ? error.message : String(error)}`);
|
|
2246
2337
|
});
|
|
2247
2338
|
const appUrls = {};
|
|
@@ -3144,6 +3235,7 @@ var UnknownCacheBackend = class extends Error {
|
|
|
3144
3235
|
};
|
|
3145
3236
|
async function buildCommand(options) {
|
|
3146
3237
|
const loadedConfig = await require_config.loadWorkspaceConfig();
|
|
3238
|
+
await writeStageTypes(loadedConfig.workspace.root, loadedConfig.workspace.stages);
|
|
3147
3239
|
if (loadedConfig.type === "workspace") {
|
|
3148
3240
|
const cwd = (0, node_path.resolve)(process.cwd());
|
|
3149
3241
|
const workspaceRoot = (0, node_path.resolve)(loadedConfig.workspace.root);
|
|
@@ -3293,7 +3385,7 @@ async function buildApp(input) {
|
|
|
3293
3385
|
...production,
|
|
3294
3386
|
...telemetry ? { telemetry } : {}
|
|
3295
3387
|
});
|
|
3296
|
-
const { bundleServer } = await Promise.resolve().then(() => require("./bundler-
|
|
3388
|
+
const { bundleServer } = await Promise.resolve().then(() => require("./bundler-C4NmpRTD.cjs"));
|
|
3297
3389
|
await bundleServer({
|
|
3298
3390
|
entryPoint,
|
|
3299
3391
|
outputDir: (0, node_path.join)(outputDir, "dist"),
|
|
@@ -3438,7 +3530,7 @@ async function buildWorkers(input) {
|
|
|
3438
3530
|
});
|
|
3439
3531
|
logger$4.log(`Generated worker ${worker.id}: ${crons.length} crons, ${queues.length} queues, ${subscribers.length} subscribers`);
|
|
3440
3532
|
if (!input.bundle) continue;
|
|
3441
|
-
const { bundleServer } = await Promise.resolve().then(() => require("./bundler-
|
|
3533
|
+
const { bundleServer } = await Promise.resolve().then(() => require("./bundler-C4NmpRTD.cjs"));
|
|
3442
3534
|
const outfile = require_seeds.workerBundleName(worker.id);
|
|
3443
3535
|
await bundleServer({
|
|
3444
3536
|
entryPoint,
|
|
@@ -3524,7 +3616,7 @@ async function buildForTarget(target, context, appRoot, workspaceRoot, endpointG
|
|
|
3524
3616
|
let masterKey;
|
|
3525
3617
|
if (context.production?.bundle && !skipBundle) {
|
|
3526
3618
|
logger$4.log(`\n📦 Bundling production server...`);
|
|
3527
|
-
const { bundleServer } = await Promise.resolve().then(() => require("./bundler-
|
|
3619
|
+
const { bundleServer } = await Promise.resolve().then(() => require("./bundler-C4NmpRTD.cjs"));
|
|
3528
3620
|
const allConstructs = [
|
|
3529
3621
|
...endpoints.map((e) => e.construct),
|
|
3530
3622
|
...functions.map((f) => f.construct),
|
|
@@ -3818,6 +3910,7 @@ async function composeCommand(options, deps = {}) {
|
|
|
3818
3910
|
...options.dryRun ? { dryRun: true } : {},
|
|
3819
3911
|
...options.push ? { buildOnly: true } : {},
|
|
3820
3912
|
...options.allowDevServices ? { allowDevServices: true } : {},
|
|
3913
|
+
...options.skipDnsCheck ? { skipDnsCheck: true } : {},
|
|
3821
3914
|
logger: {
|
|
3822
3915
|
info: (message) => console.log(message),
|
|
3823
3916
|
warn: (message) => console.warn(message),
|
|
@@ -5225,25 +5318,25 @@ function loadPackageJson() {
|
|
|
5225
5318
|
* Run: pnpm --filter @geekmidas/cli sync-versions
|
|
5226
5319
|
*/
|
|
5227
5320
|
const GEEKMIDAS_VERSIONS = {
|
|
5228
|
-
"@geekmidas/audit": "~10.0.0-alpha.
|
|
5229
|
-
"@geekmidas/auth": "~10.0.0-alpha.
|
|
5230
|
-
"@geekmidas/cache": "~10.0.0-alpha.
|
|
5231
|
-
"@geekmidas/client": "~10.0.0-alpha.
|
|
5232
|
-
"@geekmidas/cloud": "~10.0.0-alpha.
|
|
5233
|
-
"@geekmidas/constructs": "~10.0.0-alpha.
|
|
5234
|
-
"@geekmidas/db": "~10.0.0-alpha.
|
|
5235
|
-
"@geekmidas/emailkit": "~10.0.0-alpha.
|
|
5236
|
-
"@geekmidas/envkit": "~10.0.0-alpha.
|
|
5237
|
-
"@geekmidas/errors": "~10.0.0-alpha.
|
|
5238
|
-
"@geekmidas/events": "~10.0.0-alpha.
|
|
5239
|
-
"@geekmidas/logger": "~10.0.0-alpha.
|
|
5240
|
-
"@geekmidas/manifest": "~10.0.0-alpha.
|
|
5241
|
-
"@geekmidas/rate-limit": "~10.0.0-alpha.
|
|
5242
|
-
"@geekmidas/schema": "~10.0.0-alpha.
|
|
5243
|
-
"@geekmidas/services": "~10.0.0-alpha.
|
|
5244
|
-
"@geekmidas/storage": "~10.0.0-alpha.
|
|
5245
|
-
"@geekmidas/telescope": "~10.0.0-alpha.
|
|
5246
|
-
"@geekmidas/testkit": "~10.0.0-alpha.
|
|
5321
|
+
"@geekmidas/audit": "~10.0.0-alpha.89",
|
|
5322
|
+
"@geekmidas/auth": "~10.0.0-alpha.89",
|
|
5323
|
+
"@geekmidas/cache": "~10.0.0-alpha.89",
|
|
5324
|
+
"@geekmidas/client": "~10.0.0-alpha.89",
|
|
5325
|
+
"@geekmidas/cloud": "~10.0.0-alpha.89",
|
|
5326
|
+
"@geekmidas/constructs": "~10.0.0-alpha.89",
|
|
5327
|
+
"@geekmidas/db": "~10.0.0-alpha.89",
|
|
5328
|
+
"@geekmidas/emailkit": "~10.0.0-alpha.89",
|
|
5329
|
+
"@geekmidas/envkit": "~10.0.0-alpha.89",
|
|
5330
|
+
"@geekmidas/errors": "~10.0.0-alpha.89",
|
|
5331
|
+
"@geekmidas/events": "~10.0.0-alpha.89",
|
|
5332
|
+
"@geekmidas/logger": "~10.0.0-alpha.89",
|
|
5333
|
+
"@geekmidas/manifest": "~10.0.0-alpha.89",
|
|
5334
|
+
"@geekmidas/rate-limit": "~10.0.0-alpha.89",
|
|
5335
|
+
"@geekmidas/schema": "~10.0.0-alpha.89",
|
|
5336
|
+
"@geekmidas/services": "~10.0.0-alpha.89",
|
|
5337
|
+
"@geekmidas/storage": "~10.0.0-alpha.89",
|
|
5338
|
+
"@geekmidas/telescope": "~10.0.0-alpha.89",
|
|
5339
|
+
"@geekmidas/testkit": "~10.0.0-alpha.89",
|
|
5247
5340
|
"@geekmidas/cli": `~${loadPackageJson().version}`
|
|
5248
5341
|
};
|
|
5249
5342
|
//#endregion
|
|
@@ -5294,7 +5387,7 @@ function generateAuthAppFiles(options) {
|
|
|
5294
5387
|
[`@${options.name}/*`]: ["../../packages/*/src"]
|
|
5295
5388
|
}
|
|
5296
5389
|
},
|
|
5297
|
-
include: ["src/**/*.ts"],
|
|
5390
|
+
include: ["src/**/*.ts", "../../.gkm/stages.d.ts"],
|
|
5298
5391
|
exclude: ["node_modules", "dist"]
|
|
5299
5392
|
};
|
|
5300
5393
|
return [
|
|
@@ -5405,7 +5498,7 @@ export default defineConfig({${stagesBlock(options.stages)}${options.monorepo ?
|
|
|
5405
5498
|
gkmConfig += `
|
|
5406
5499
|
});
|
|
5407
5500
|
`;
|
|
5408
|
-
const tsConfig = options.monorepo ? workspaceApiTsConfig(options.name) : {
|
|
5501
|
+
const tsConfig = options.monorepo ? workspaceApiTsConfig(options.name, ".gkm/stages.d.ts") : {
|
|
5409
5502
|
compilerOptions: {
|
|
5410
5503
|
target: "ES2022",
|
|
5411
5504
|
module: "NodeNext",
|
|
@@ -5420,7 +5513,7 @@ export default defineConfig({${stagesBlock(options.stages)}${options.monorepo ?
|
|
|
5420
5513
|
allowImportingTsExtensions: true,
|
|
5421
5514
|
paths: { "~/*": ["./src/*"] }
|
|
5422
5515
|
},
|
|
5423
|
-
include: ["src/**/*.ts"],
|
|
5516
|
+
include: ["src/**/*.ts", ".gkm/stages.d.ts"],
|
|
5424
5517
|
exclude: ["node_modules", "dist"]
|
|
5425
5518
|
};
|
|
5426
5519
|
if (options.monorepo) {
|
|
@@ -5535,7 +5628,7 @@ export default defineConfig({${stagesBlock(options.stages)}${options.monorepo ?
|
|
|
5535
5628
|
* the root constructs, so in the other `@<name>/constructs/api.ts` fell through
|
|
5536
5629
|
* to the `packages/` mapping and nothing could load the surface.
|
|
5537
5630
|
*/
|
|
5538
|
-
function workspaceApiTsConfig(name) {
|
|
5631
|
+
function workspaceApiTsConfig(name, stageTypes) {
|
|
5539
5632
|
return {
|
|
5540
5633
|
extends: "../../tsconfig.json",
|
|
5541
5634
|
compilerOptions: {
|
|
@@ -5547,12 +5640,12 @@ function workspaceApiTsConfig(name) {
|
|
|
5547
5640
|
[`@${name}/*`]: ["../../packages/*/src"]
|
|
5548
5641
|
}
|
|
5549
5642
|
},
|
|
5550
|
-
include: ["src/**/*.ts"],
|
|
5643
|
+
include: ["src/**/*.ts", stageTypes],
|
|
5551
5644
|
exclude: ["node_modules", "dist"]
|
|
5552
5645
|
};
|
|
5553
5646
|
}
|
|
5554
5647
|
function generateSingleAppConfigFiles(options, _template, _helpers) {
|
|
5555
|
-
const tsConfig = workspaceApiTsConfig(options.name);
|
|
5648
|
+
const tsConfig = workspaceApiTsConfig(options.name, "../../.gkm/stages.d.ts");
|
|
5556
5649
|
const files = [{
|
|
5557
5650
|
path: "tsconfig.json",
|
|
5558
5651
|
content: `${JSON.stringify(tsConfig, null, 2)}\n`
|
|
@@ -5644,7 +5737,7 @@ const COMMIT = /^[0-9a-f]{40}$/;
|
|
|
5644
5737
|
* The `uses:` value for the stages action, with a comment saying which CLI
|
|
5645
5738
|
* release the pinned commit is.
|
|
5646
5739
|
*/
|
|
5647
|
-
function stagesActionUses(commit = "
|
|
5740
|
+
function stagesActionUses(commit = "e1be097c3e5909843479a2dcd97f06e952f5b1aa", version = cliVersion()) {
|
|
5648
5741
|
return commit && COMMIT.test(commit) ? `${STAGES_ACTION}@${commit} # @geekmidas/cli ${version}` : `${STAGES_ACTION}@main # pin to a commit SHA: see the action's README`;
|
|
5649
5742
|
}
|
|
5650
5743
|
//#endregion
|
|
@@ -7404,6 +7497,7 @@ ${isSst ? "\n# SST\n.sst/\n" : ""}`;
|
|
|
7404
7497
|
forceConsistentCasingInFileNames: true,
|
|
7405
7498
|
resolveJsonModule: true
|
|
7406
7499
|
},
|
|
7500
|
+
include: ["**/*", ".gkm/stages.d.ts"],
|
|
7407
7501
|
exclude: [
|
|
7408
7502
|
"node_modules",
|
|
7409
7503
|
"dist",
|
|
@@ -10925,6 +11019,135 @@ function maskUrl(url) {
|
|
|
10925
11019
|
}
|
|
10926
11020
|
}
|
|
10927
11021
|
//#endregion
|
|
11022
|
+
//#region src/providers/dns.ts
|
|
11023
|
+
/** Whether the workspace deploys through the compose target. */
|
|
11024
|
+
function deploysWithCompose(workspace) {
|
|
11025
|
+
return workspace.deploy?.default === "compose" || Object.values(workspace.apps).some((app) => app.resolvedDeployTarget === "compose");
|
|
11026
|
+
}
|
|
11027
|
+
/**
|
|
11028
|
+
* A compose stage that serves a domain has its server's address in its
|
|
11029
|
+
* secrets — checked before `gkm setup --stage` does anything else.
|
|
11030
|
+
*
|
|
11031
|
+
* @throws {ServerAddressMissing} for a compose stage with a domain and none
|
|
11032
|
+
* @throws {ServerAddressInvalid} for a value that is not an address
|
|
11033
|
+
*/
|
|
11034
|
+
function assertStageServer(workspace, stage, secrets) {
|
|
11035
|
+
if (stage === workspace.stages.local) return void 0;
|
|
11036
|
+
if (!deploysWithCompose(workspace)) return require_compose.serverAddress(stage, secrets?.custom);
|
|
11037
|
+
return require_compose.requiredServerAddress(stage, workspace.domains?.[stage], secrets?.custom);
|
|
11038
|
+
}
|
|
11039
|
+
/**
|
|
11040
|
+
* The hosts a compose stage serves: its stack composed as a deploy would —
|
|
11041
|
+
* with the secrets it would generate made up in memory, never written — and
|
|
11042
|
+
* every route's host read off it.
|
|
11043
|
+
*/
|
|
11044
|
+
async function composeStageHosts(options) {
|
|
11045
|
+
const { workspace, stage } = options;
|
|
11046
|
+
const runnables = options.runnables ?? {};
|
|
11047
|
+
const background = options.background ?? {};
|
|
11048
|
+
const manifest = options.manifest ?? await require_discover.discover({
|
|
11049
|
+
patterns: require_seeds.constructGlobs(workspace),
|
|
11050
|
+
cwd: workspace.root,
|
|
11051
|
+
runnables,
|
|
11052
|
+
background
|
|
11053
|
+
});
|
|
11054
|
+
const stored = await (await require_seeds.secretsStoreFor(workspace, stage, {
|
|
11055
|
+
...options.profile ? { profile: options.profile } : {},
|
|
11056
|
+
...options.home ? { home: options.home } : {}
|
|
11057
|
+
})).read(stage);
|
|
11058
|
+
const { deployedStackSecrets } = await Promise.resolve().then(() => require("./compose-BvrhDwJ6.cjs")).then((n) => n.secrets_exports);
|
|
11059
|
+
const { composeStack } = await Promise.resolve().then(() => require("./compose-BvrhDwJ6.cjs")).then((n) => n.stack_exports);
|
|
11060
|
+
const { secrets } = deployedStackSecrets(workspace, stage, stored, manifest);
|
|
11061
|
+
const stack = composeStack({
|
|
11062
|
+
workspace,
|
|
11063
|
+
manifest,
|
|
11064
|
+
runnables,
|
|
11065
|
+
background,
|
|
11066
|
+
stage,
|
|
11067
|
+
identity: require_seeds.deployIdentity(workspace, stage),
|
|
11068
|
+
images: {
|
|
11069
|
+
mode: "pull",
|
|
11070
|
+
tag: "dns",
|
|
11071
|
+
...workspace.deploy?.registry ? { registry: workspace.deploy.registry } : {}
|
|
11072
|
+
},
|
|
11073
|
+
secrets,
|
|
11074
|
+
buildOnly: true,
|
|
11075
|
+
allowDevServices: true
|
|
11076
|
+
});
|
|
11077
|
+
return require_compose.stackHosts(stack);
|
|
11078
|
+
}
|
|
11079
|
+
/**
|
|
11080
|
+
* `GKM_SERVER_IPV4` from the stage's secrets and `dns`: each public host's
|
|
11081
|
+
* records, created or corrected. A dry run reads and prints, and writes
|
|
11082
|
+
* nothing.
|
|
11083
|
+
*/
|
|
11084
|
+
async function provisionStageDns(options) {
|
|
11085
|
+
const { workspace, stage } = options;
|
|
11086
|
+
const log = options.log ?? ((line) => console.log(line));
|
|
11087
|
+
if (stage === workspace.stages.local || !workspace.dns || !deploysWithCompose(workspace)) return {
|
|
11088
|
+
mode: "none",
|
|
11089
|
+
hosts: [],
|
|
11090
|
+
changes: []
|
|
11091
|
+
};
|
|
11092
|
+
const store = await require_seeds.secretsStoreFor(workspace, stage, {
|
|
11093
|
+
...options.profile ? { profile: options.profile } : {},
|
|
11094
|
+
...options.home ? { home: options.home } : {}
|
|
11095
|
+
});
|
|
11096
|
+
const server = require_compose.serverAddress(stage, (await store.read(stage))?.custom);
|
|
11097
|
+
if (!server) {
|
|
11098
|
+
log(`\n🌐 DNS for '${stage}': no GKM_SERVER_IPV4 in its secrets, so no records — ${require_compose.serverAddressHint(stage)}`);
|
|
11099
|
+
return {
|
|
11100
|
+
mode: "none",
|
|
11101
|
+
hosts: [],
|
|
11102
|
+
changes: []
|
|
11103
|
+
};
|
|
11104
|
+
}
|
|
11105
|
+
const hosts = [...options.hosts ?? await composeStageHosts({
|
|
11106
|
+
workspace,
|
|
11107
|
+
stage,
|
|
11108
|
+
...options.profile ? { profile: options.profile } : {},
|
|
11109
|
+
...options.home ? { home: options.home } : {},
|
|
11110
|
+
...options.manifest ? { manifest: options.manifest } : {},
|
|
11111
|
+
...options.runnables ? { runnables: options.runnables } : {},
|
|
11112
|
+
...options.background ? { background: options.background } : {}
|
|
11113
|
+
})];
|
|
11114
|
+
log(`\n🌐 DNS for '${stage}' → ${server.ipv4}${server.ipv6 ? ` / ${server.ipv6}` : ""}${options.dryRun ? " (dry run — nothing is written)" : ""}`);
|
|
11115
|
+
const plan = require_compose.planStackDns({
|
|
11116
|
+
stage,
|
|
11117
|
+
hosts,
|
|
11118
|
+
server,
|
|
11119
|
+
dns: workspace.dns
|
|
11120
|
+
});
|
|
11121
|
+
try {
|
|
11122
|
+
return {
|
|
11123
|
+
mode: "records",
|
|
11124
|
+
hosts,
|
|
11125
|
+
changes: await require_compose.applyStackDns(plan, {
|
|
11126
|
+
...options.dryRun ? { dryRun: true } : {},
|
|
11127
|
+
log,
|
|
11128
|
+
credentials: {
|
|
11129
|
+
env: options.env ?? process.env,
|
|
11130
|
+
...options.home ? { home: options.home } : {},
|
|
11131
|
+
log
|
|
11132
|
+
},
|
|
11133
|
+
...options.providerFor ? { providerFor: options.providerFor } : {}
|
|
11134
|
+
})
|
|
11135
|
+
};
|
|
11136
|
+
} catch (error) {
|
|
11137
|
+
if (error instanceof require_credentials.MissingCredential) {
|
|
11138
|
+
log(` ⚠ ${error.message}`);
|
|
11139
|
+
log(" Until then, create these records yourself:");
|
|
11140
|
+
for (const domain of plan.domains) for (const r of domain.records) log(` ${r.host.padEnd(32)} ${r.type.padEnd(5)} ${r.value} (TTL ${r.ttl})`);
|
|
11141
|
+
return {
|
|
11142
|
+
mode: "records",
|
|
11143
|
+
hosts,
|
|
11144
|
+
changes: []
|
|
11145
|
+
};
|
|
11146
|
+
}
|
|
11147
|
+
throw error;
|
|
11148
|
+
}
|
|
11149
|
+
}
|
|
11150
|
+
//#endregion
|
|
10928
11151
|
//#region src/setup/index.ts
|
|
10929
11152
|
var setup_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll({
|
|
10930
11153
|
createFreshWorkspaceSecrets: () => createFreshWorkspaceSecrets,
|
|
@@ -10958,6 +11181,7 @@ async function setupCommand(options = {}) {
|
|
|
10958
11181
|
logger$1.log(`📦 Workspace: ${workspace.name}`);
|
|
10959
11182
|
logger$1.log(`📱 Apps: ${Object.keys(workspace.apps).join(", ")}`);
|
|
10960
11183
|
logger$1.log(`🔑 Stage: ${stage}\n`);
|
|
11184
|
+
if (!local) assertStageServer(workspace, stage, await (await require_seeds.secretsStoreFor(workspace, stage, { ...options.profile ? { profile: options.profile } : {} })).read(stage));
|
|
10961
11185
|
if (!local && options.dryRun) {
|
|
10962
11186
|
await provisionDeployed(workspace, stage, options);
|
|
10963
11187
|
return;
|
|
@@ -10991,11 +11215,16 @@ async function provisionDeployed(workspace, stage, options) {
|
|
|
10991
11215
|
...options.retireOldKeys ? { retireOldKeys: true } : {},
|
|
10992
11216
|
log: (line) => logger$1.log(line)
|
|
10993
11217
|
})).filter((r) => r.mode === "provider");
|
|
10994
|
-
if (configured.length === 0) {
|
|
10995
|
-
|
|
10996
|
-
|
|
10997
|
-
|
|
10998
|
-
|
|
11218
|
+
if (configured.length === 0) logger$1.log(` None configured: '${stage}' takes every key from its secrets (gkm secrets:add --stage ${stage}). Name one in gkm.config.ts — deploy: { objects: { ${stage}: { provider: 's3' } } } — to have ${require_seeds.provisionCommand(stage)} create it.`);
|
|
11219
|
+
const dns = await provisionStageDns({
|
|
11220
|
+
workspace,
|
|
11221
|
+
stage,
|
|
11222
|
+
...options.dryRun ? { dryRun: true } : {},
|
|
11223
|
+
...options.profile ? { profile: options.profile } : {},
|
|
11224
|
+
log: (line) => logger$1.log(line)
|
|
11225
|
+
});
|
|
11226
|
+
const changes = configured.reduce((n, r) => n + r.actions.length, 0) + dns.changes.filter((c) => c.action !== "unchanged" && c.action !== "manual").length;
|
|
11227
|
+
if (configured.length === 0 && dns.mode === "none") return;
|
|
10999
11228
|
logger$1.log(options.dryRun ? `\n${changes === 0 ? "✅ Nothing to change" : `📋 ${changes} change${changes === 1 ? "" : "s"} planned`}` : `\n✅ '${stage}' provisioned${changes === 0 ? " — already up to date" : ` (${changes} change${changes === 1 ? "" : "s"})`}`);
|
|
11000
11229
|
}
|
|
11001
11230
|
/**
|
|
@@ -11266,6 +11495,7 @@ async function testCommand(options = {}) {
|
|
|
11266
11495
|
const preloadPath = (0, node_path.join)(gkmDir, "test-credentials-preload.ts");
|
|
11267
11496
|
await require_seeds.createCredentialsPreload(preloadPath, result.secretsJsonPath);
|
|
11268
11497
|
const workspace = await require_config.loadWorkspaceConfig(cwd).then((loaded) => loaded.workspace).catch(() => void 0);
|
|
11498
|
+
if (workspace) await writeStageTypes(workspace.root, workspace.stages);
|
|
11269
11499
|
const manifestPath = workspace ? await require_ready.writeTestHarness({
|
|
11270
11500
|
root: workspace.root,
|
|
11271
11501
|
targets: [workspace.root, ...Object.values(workspace.apps).map((app) => (0, node_path.isAbsolute)(app.path) ? app.path : (0, node_path.join)(workspace.root, app.path))],
|
|
@@ -11349,7 +11579,7 @@ function testDatabases(reconciled) {
|
|
|
11349
11579
|
* starts without the reference data the app needs.
|
|
11350
11580
|
*/
|
|
11351
11581
|
async function migrateTestStage(workspace, env) {
|
|
11352
|
-
const { migrateAndSeed } = await Promise.resolve().then(() => require("./migrate-
|
|
11582
|
+
const { migrateAndSeed } = await Promise.resolve().then(() => require("./migrate-7xayVtzL.cjs"));
|
|
11353
11583
|
const { discover } = await Promise.resolve().then(() => require("./discover-D1It5r_h.cjs")).then((n) => n.discover_exports);
|
|
11354
11584
|
const sources = {};
|
|
11355
11585
|
const manifest = await discover({
|
|
@@ -11793,7 +12023,7 @@ program.command("migrate").description("Apply each database construct's migratio
|
|
|
11793
12023
|
try {
|
|
11794
12024
|
const globalOptions = program.opts();
|
|
11795
12025
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11796
|
-
const { migrateCommand } = await Promise.resolve().then(() => require("./migrate-
|
|
12026
|
+
const { migrateCommand } = await Promise.resolve().then(() => require("./migrate-7xayVtzL.cjs"));
|
|
11797
12027
|
await migrateCommand({
|
|
11798
12028
|
...options,
|
|
11799
12029
|
...construct ? { construct } : {}
|
|
@@ -11807,7 +12037,7 @@ program.command("seed").description("Migrate, then run each database construct's
|
|
|
11807
12037
|
try {
|
|
11808
12038
|
const globalOptions = program.opts();
|
|
11809
12039
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11810
|
-
const { seedCommand } = await Promise.resolve().then(() => require("./migrate-
|
|
12040
|
+
const { seedCommand } = await Promise.resolve().then(() => require("./migrate-7xayVtzL.cjs"));
|
|
11811
12041
|
await seedCommand({
|
|
11812
12042
|
...options,
|
|
11813
12043
|
...construct ? { construct } : {}
|
|
@@ -11821,7 +12051,7 @@ program.command("migration").description("Write a construct's next migration: an
|
|
|
11821
12051
|
try {
|
|
11822
12052
|
const globalOptions = program.opts();
|
|
11823
12053
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11824
|
-
const { migrationCommand } = await Promise.resolve().then(() => require("./migrate-
|
|
12054
|
+
const { migrationCommand } = await Promise.resolve().then(() => require("./migrate-7xayVtzL.cjs"));
|
|
11825
12055
|
await migrationCommand({
|
|
11826
12056
|
construct,
|
|
11827
12057
|
...name ? { name } : {}
|
|
@@ -11870,7 +12100,7 @@ program.command("docker").description("Generate Docker deployment files").option
|
|
|
11870
12100
|
process.exit(1);
|
|
11871
12101
|
}
|
|
11872
12102
|
});
|
|
11873
|
-
program.command("compose").description("Run the workspace's APIs and sites for a stage as one Docker Compose stack behind Caddy").requiredOption("--stage <stage>", "Stage to run — always named, so a stack is never a deployed stage by accident").option("--tag <tag>", "Run the images CI pushed at this tag (sites: <tag>-<stage>); nothing is built").option("--build", "Build images from this checkout, tagged with the commit").option("--pull", "Pull images (at --tag, or latest) rather than build them").option("--push", "With --build: push every image to deploy.registry and start nothing (for CI)").option("--digests-file <path>", "With --push: write each image as <ref>@sha256:… (JSON). With --tag: run the images at those digests").option("--dry-run", "Write the files and print the plan; start nothing").option("--down", "Stop the stage's stack (its volumes are kept)").option("--allow-dev-services", "Deployed stage: run the dev service (MinIO, Mailpit) for every bucket and mail the stage doesn't account for. Not production-grade").action(async (options) => {
|
|
12103
|
+
program.command("compose").description("Run the workspace's APIs and sites for a stage as one Docker Compose stack behind Caddy").requiredOption("--stage <stage>", "Stage to run — always named, so a stack is never a deployed stage by accident").option("--tag <tag>", "Run the images CI pushed at this tag (sites: <tag>-<stage>); nothing is built").option("--build", "Build images from this checkout, tagged with the commit").option("--pull", "Pull images (at --tag, or latest) rather than build them").option("--push", "With --build: push every image to deploy.registry and start nothing (for CI)").option("--digests-file <path>", "With --push: write each image as <ref>@sha256:… (JSON). With --tag: run the images at those digests").option("--dry-run", "Write the files and print the plan; start nothing").option("--down", "Stop the stage's stack (its volumes are kept)").option("--allow-dev-services", "Deployed stage: run the dev service (MinIO, Mailpit) for every bucket and mail the stage doesn't account for. Not production-grade").option("--skip-dns-check", "Deployed stage: do not check that each public host resolves to GKM_SERVER_IPV4 in the stage secrets before starting (a CDN or proxy in front)").action(async (options) => {
|
|
11874
12104
|
try {
|
|
11875
12105
|
const globalOptions = program.opts();
|
|
11876
12106
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
@@ -11929,7 +12159,7 @@ program.command("secrets:add").description("Build the keys a stage must be given
|
|
|
11929
12159
|
try {
|
|
11930
12160
|
const globalOptions = program.opts();
|
|
11931
12161
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11932
|
-
const { secretsAddCommand } = await Promise.resolve().then(() => require("./add-
|
|
12162
|
+
const { secretsAddCommand } = await Promise.resolve().then(() => require("./add-C9qX4Juc.cjs"));
|
|
11933
12163
|
await secretsAddCommand(options);
|
|
11934
12164
|
} catch (error) {
|
|
11935
12165
|
console.error(formatError(error));
|
|
@@ -11940,7 +12170,7 @@ program.command("encryption:rotate").description("Add a new current key to an En
|
|
|
11940
12170
|
try {
|
|
11941
12171
|
const globalOptions = program.opts();
|
|
11942
12172
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11943
|
-
const { encryptionRotateCommand } = await Promise.resolve().then(() => require("./encryption-
|
|
12173
|
+
const { encryptionRotateCommand } = await Promise.resolve().then(() => require("./encryption-BrN_9_CM.cjs"));
|
|
11944
12174
|
await encryptionRotateCommand(construct, options);
|
|
11945
12175
|
} catch (error) {
|
|
11946
12176
|
console.error(formatError(error));
|
|
@@ -11951,7 +12181,7 @@ program.command("encryption:retire").description("Remove an old key from an Encr
|
|
|
11951
12181
|
try {
|
|
11952
12182
|
const globalOptions = program.opts();
|
|
11953
12183
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11954
|
-
const { encryptionRetireCommand } = await Promise.resolve().then(() => require("./encryption-
|
|
12184
|
+
const { encryptionRetireCommand } = await Promise.resolve().then(() => require("./encryption-BrN_9_CM.cjs"));
|
|
11955
12185
|
await encryptionRetireCommand(construct, key, options);
|
|
11956
12186
|
} catch (error) {
|
|
11957
12187
|
console.error(formatError(error));
|
|
@@ -11994,7 +12224,7 @@ program.command("secrets:reconcile").description("Backfill missing custom secret
|
|
|
11994
12224
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11995
12225
|
const { loadWorkspaceConfig } = await Promise.resolve().then(() => require("./config.cjs"));
|
|
11996
12226
|
const { reconcileMissingSecrets } = await Promise.resolve().then(() => require("./reconcile-CuCQBa5-.cjs"));
|
|
11997
|
-
const { secretsStoreFor } = await Promise.resolve().then(() => require("./seeds-
|
|
12227
|
+
const { secretsStoreFor } = await Promise.resolve().then(() => require("./seeds-CN6tB-va.cjs")).then((n) => n.store_exports);
|
|
11998
12228
|
const { workspace } = await loadWorkspaceConfig();
|
|
11999
12229
|
const stage = options.stage ?? workspace.stages.local;
|
|
12000
12230
|
const store = await secretsStoreFor(workspace, stage);
|
|
@@ -12003,7 +12233,7 @@ program.command("secrets:reconcile").description("Backfill missing custom secret
|
|
|
12003
12233
|
console.error(`No secrets found for stage "${stage}". Run "gkm secrets:init --stage ${stage}" first.`);
|
|
12004
12234
|
process.exit(1);
|
|
12005
12235
|
}
|
|
12006
|
-
const { derivedContainers } = await Promise.resolve().then(() => require("./seeds-
|
|
12236
|
+
const { derivedContainers } = await Promise.resolve().then(() => require("./seeds-CN6tB-va.cjs")).then((n) => n.workspace_exports);
|
|
12007
12237
|
const result = reconcileMissingSecrets(secrets, workspace, await derivedContainers(workspace, stage));
|
|
12008
12238
|
if (!result) {
|
|
12009
12239
|
console.log(`\n✓ Secrets for stage "${stage}" are up-to-date`);
|
|
@@ -12021,15 +12251,15 @@ program.command("secrets:migrate").description("Copy a deployed stage's secrets
|
|
|
12021
12251
|
try {
|
|
12022
12252
|
const globalOptions = program.opts();
|
|
12023
12253
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
12024
|
-
const { secretsMigrateCommand } = await Promise.resolve().then(() => require("./migrate-
|
|
12254
|
+
const { secretsMigrateCommand } = await Promise.resolve().then(() => require("./migrate-DPF7ZF8M.cjs"));
|
|
12025
12255
|
await secretsMigrateCommand(options);
|
|
12026
12256
|
} catch (error) {
|
|
12027
12257
|
console.error(formatError(error));
|
|
12028
12258
|
process.exit(1);
|
|
12029
12259
|
}
|
|
12030
12260
|
});
|
|
12031
|
-
program.command("deploy").description("Deploy a stage through its target").option("--target <name>", "Deploy target: dokploy, compose, sst, or one named in deploy.targets (default: deploy.default)").option("--provider <provider>", "[DEPRECATED] Use --target instead").requiredOption("--stage <stage>", "Deployment stage (e.g., production, staging)").option("--tag <tag>", "Image tag (default: stage-timestamp; compose: the commit). Compose pulls a given tag").option("--skip-push", "Skip pushing image to registry").option("--skip-build", "Skip build step (use existing build)").option("--json", "Write events as JSON lines instead of progress; never prompts").option("--dry-run", "Show what would be created or reused; change, build and push nothing").option("--atomic", "If the release fails, roll back every app it released, not only the failed ones").option("--allow-dev-services", "Server targets: run the dev service (MinIO, Mailpit) for every bucket and mail the stage doesn't account for. Not production-grade").action(async (options) => {
|
|
12032
|
-
const { deployCli } = await Promise.resolve().then(() => require("./cli-
|
|
12261
|
+
program.command("deploy").description("Deploy a stage through its target").option("--target <name>", "Deploy target: dokploy, compose, sst, or one named in deploy.targets (default: deploy.default)").option("--provider <provider>", "[DEPRECATED] Use --target instead").requiredOption("--stage <stage>", "Deployment stage (e.g., production, staging)").option("--tag <tag>", "Image tag (default: stage-timestamp; compose: the commit). Compose pulls a given tag").option("--skip-push", "Skip pushing image to registry").option("--skip-build", "Skip build step (use existing build)").option("--json", "Write events as JSON lines instead of progress; never prompts").option("--dry-run", "Show what would be created or reused; change, build and push nothing").option("--atomic", "If the release fails, roll back every app it released, not only the failed ones").option("--allow-dev-services", "Server targets: run the dev service (MinIO, Mailpit) for every bucket and mail the stage doesn't account for. Not production-grade").option("--skip-dns-check", "Compose: do not check that each public host resolves to GKM_SERVER_IPV4 in the stage secrets before starting (a CDN or proxy in front)").action(async (options) => {
|
|
12262
|
+
const { deployCli } = await Promise.resolve().then(() => require("./cli-C85Dut8K.cjs"));
|
|
12033
12263
|
const globalOptions = program.opts();
|
|
12034
12264
|
const code = await deployCli({
|
|
12035
12265
|
cwd: (0, node_path.resolve)(globalOptions.cwd ?? process.cwd()),
|
|
@@ -12040,14 +12270,15 @@ program.command("deploy").description("Deploy a stage through its target").optio
|
|
|
12040
12270
|
...options.json ? { json: true } : {},
|
|
12041
12271
|
...options.dryRun ? { dryRun: true } : {},
|
|
12042
12272
|
...options.atomic ? { atomic: true } : {},
|
|
12043
|
-
...options.allowDevServices ? { allowDevServices: true } : {}
|
|
12273
|
+
...options.allowDevServices ? { allowDevServices: true } : {},
|
|
12274
|
+
...options.skipDnsCheck ? { skipDnsCheck: true } : {}
|
|
12044
12275
|
});
|
|
12045
12276
|
if (code !== 0) process.exit(code);
|
|
12046
12277
|
});
|
|
12047
12278
|
program.command("deploy:rollback").description("Put a stage's app back on its previous release (Dokploy): one app with --app, every app with --atomic").requiredOption("--stage <stage>", "A deployed stage").option("--app <app>", "The app to roll back").option("--atomic", "Roll back every app that has an earlier release").action(async (options) => {
|
|
12048
12279
|
try {
|
|
12049
|
-
const { rollbackStage } = await Promise.resolve().then(() => require("./rollback-
|
|
12050
|
-
const { terminalCredentials } = await Promise.resolve().then(() => require("./terminal-
|
|
12280
|
+
const { rollbackStage } = await Promise.resolve().then(() => require("./rollback-65VVIdBM.cjs")).then((n) => n.rollback_exports);
|
|
12281
|
+
const { terminalCredentials } = await Promise.resolve().then(() => require("./terminal-DuapRxh6.cjs"));
|
|
12051
12282
|
const globalOptions = program.opts();
|
|
12052
12283
|
await rollbackStage({
|
|
12053
12284
|
cwd: (0, node_path.resolve)(globalOptions.cwd ?? process.cwd()),
|
|
@@ -12082,7 +12313,7 @@ program.command("deploy:github").description("Let GitHub Actions deploy a stage:
|
|
|
12082
12313
|
try {
|
|
12083
12314
|
const globalOptions = program.opts();
|
|
12084
12315
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
12085
|
-
const { deployGithubCommand } = await Promise.resolve().then(() => require("./github-
|
|
12316
|
+
const { deployGithubCommand } = await Promise.resolve().then(() => require("./github-Bf7pz6AV.cjs"));
|
|
12086
12317
|
await deployGithubCommand(options);
|
|
12087
12318
|
} catch (error) {
|
|
12088
12319
|
console.error(formatError(error));
|
|
@@ -12093,7 +12324,7 @@ program.command("stages").description("The workspace's stages from gkm.config.ts
|
|
|
12093
12324
|
try {
|
|
12094
12325
|
const globalOptions = program.opts();
|
|
12095
12326
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
12096
|
-
const { stagesCommand } = await Promise.resolve().then(() => require("./stages-
|
|
12327
|
+
const { stagesCommand } = await Promise.resolve().then(() => require("./stages-CUn6gvXL.cjs"));
|
|
12097
12328
|
await stagesCommand(options);
|
|
12098
12329
|
} catch (error) {
|
|
12099
12330
|
console.error(formatError(error));
|
|
@@ -12127,13 +12358,17 @@ program.command("deploy:list").description("List Dokploy resources (projects, re
|
|
|
12127
12358
|
process.exit(1);
|
|
12128
12359
|
}
|
|
12129
12360
|
});
|
|
12130
|
-
program.command("login").description("Authenticate with a deployment or DNS provider").option("--provider <provider>", "Provider to log in to (dokploy, hostinger)", "dokploy").option("--service <provider>", "[DEPRECATED] Use --provider instead").option("--token <token>", "API token (will prompt if not provided)").option("--endpoint <url>", "Service endpoint URL").action(async (options) => {
|
|
12361
|
+
program.command("login").description("Authenticate with a deployment or DNS provider").option("--provider <provider>", "Provider to log in to (dokploy, hostinger, godaddy)", "dokploy").option("--service <provider>", "[DEPRECATED] Use --provider instead").option("--token <token>", "API token (will prompt if not provided)").option("--endpoint <url>", "Service endpoint URL").action(async (options) => {
|
|
12131
12362
|
try {
|
|
12132
12363
|
const globalOptions = program.opts();
|
|
12133
12364
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
12134
12365
|
const provider = options.service ?? options.provider;
|
|
12135
|
-
if (![
|
|
12136
|
-
|
|
12366
|
+
if (![
|
|
12367
|
+
"dokploy",
|
|
12368
|
+
"hostinger",
|
|
12369
|
+
"godaddy"
|
|
12370
|
+
].includes(provider)) {
|
|
12371
|
+
console.error(`Unknown provider: ${provider}. Supported: dokploy, hostinger, godaddy`);
|
|
12137
12372
|
process.exit(1);
|
|
12138
12373
|
}
|
|
12139
12374
|
await loginCommand({
|
|
@@ -12146,7 +12381,7 @@ program.command("login").description("Authenticate with a deployment or DNS prov
|
|
|
12146
12381
|
process.exit(1);
|
|
12147
12382
|
}
|
|
12148
12383
|
});
|
|
12149
|
-
program.command("logout").description("Remove stored credentials").option("--provider <provider>", "Whose credentials to remove (dokploy, all)", "dokploy").option("--service <provider>", "[DEPRECATED] Use --provider instead").action(async (options) => {
|
|
12384
|
+
program.command("logout").description("Remove stored credentials").option("--provider <provider>", "Whose credentials to remove (dokploy, godaddy, all)", "dokploy").option("--service <provider>", "[DEPRECATED] Use --provider instead").action(async (options) => {
|
|
12150
12385
|
try {
|
|
12151
12386
|
const globalOptions = program.opts();
|
|
12152
12387
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
@@ -12235,6 +12470,7 @@ try {
|
|
|
12235
12470
|
program.parse();
|
|
12236
12471
|
//#endregion
|
|
12237
12472
|
exports.canPrompt = canPrompt;
|
|
12473
|
+
exports.deploysWithCompose = deploysWithCompose;
|
|
12238
12474
|
exports.formatError = formatError;
|
|
12239
12475
|
exports.generateFullstackCustomSecrets = generateFullstackCustomSecrets;
|
|
12240
12476
|
exports.prompt = prompt;
|