@geekmidas/cli 10.0.0-alpha.76 → 10.0.0-alpha.78
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/{LegacyStateStore-dyq07_Ir.mjs → LegacyStateStore-Ceq7A_75.mjs} +2 -2
- package/dist/{LegacyStateStore-dyq07_Ir.mjs.map → LegacyStateStore-Ceq7A_75.mjs.map} +1 -1
- package/dist/{LegacyStateStore-DwngfJxr.cjs → LegacyStateStore-Z-EKUGSX.cjs} +2 -2
- package/dist/{LegacyStateStore-DwngfJxr.cjs.map → LegacyStateStore-Z-EKUGSX.cjs.map} +1 -1
- package/dist/{LocalStateStore-B0NCde8Z.cjs → LocalStateStore-Bocb8dmZ.cjs} +2 -2
- package/dist/{LocalStateStore-B0NCde8Z.cjs.map → LocalStateStore-Bocb8dmZ.cjs.map} +1 -1
- package/dist/{LocalStateStore-DLxCCatI.mjs → LocalStateStore-C72bwpG2.mjs} +2 -2
- package/dist/{LocalStateStore-DLxCCatI.mjs.map → LocalStateStore-C72bwpG2.mjs.map} +1 -1
- package/dist/{S3StateStore-BOenb-3o.cjs → S3StateStore-35YfcdL_.cjs} +2 -2
- package/dist/{S3StateStore-BOenb-3o.cjs.map → S3StateStore-35YfcdL_.cjs.map} +1 -1
- package/dist/{S3StateStore-CGK_4hlo.mjs → S3StateStore-C9upSW5o.mjs} +2 -2
- package/dist/{S3StateStore-CGK_4hlo.mjs.map → S3StateStore-C9upSW5o.mjs.map} +1 -1
- package/dist/{SSMStateStore-DYeD__7p.cjs → SSMStateStore-W-Ps22AQ.cjs} +2 -2
- package/dist/{SSMStateStore-DYeD__7p.cjs.map → SSMStateStore-W-Ps22AQ.cjs.map} +1 -1
- package/dist/{SSMStateStore-B_5_RqY-.mjs → SSMStateStore-dOmFO6g1.mjs} +2 -2
- package/dist/{SSMStateStore-B_5_RqY-.mjs.map → SSMStateStore-dOmFO6g1.mjs.map} +1 -1
- package/dist/{add-j2yI3cbS.cjs → add-BvOICikp.cjs} +8 -8
- package/dist/{add-j2yI3cbS.cjs.map → add-BvOICikp.cjs.map} +1 -1
- package/dist/{add-B7IMXzou.mjs → add-D2XKszYP.mjs} +3 -3
- package/dist/{add-B7IMXzou.mjs.map → add-D2XKszYP.mjs.map} +1 -1
- package/dist/{bundler-Cf6OgaOe.cjs → bundler-C6T-1OLT.cjs} +5 -5
- package/dist/{bundler-Cf6OgaOe.cjs.map → bundler-C6T-1OLT.cjs.map} +1 -1
- package/dist/{bundler-DO6bHhnb.mjs → bundler-CtHzKqnZ.mjs} +5 -5
- package/dist/{bundler-DO6bHhnb.mjs.map → bundler-CtHzKqnZ.mjs.map} +1 -1
- package/dist/{cli-BCPOHmg9.mjs → cli-BgPyhx1i.mjs} +3 -3
- package/dist/{cli-BCPOHmg9.mjs.map → cli-BgPyhx1i.mjs.map} +1 -1
- package/dist/{cli-CNanUB7a.cjs → cli-K6Vj_pPW.cjs} +4 -4
- package/dist/{cli-CNanUB7a.cjs.map → cli-K6Vj_pPW.cjs.map} +1 -1
- package/dist/{compose-h_6oNnHC.cjs → compose-B7MC19eC.cjs} +668 -110
- package/dist/compose-B7MC19eC.cjs.map +1 -0
- package/dist/{compose-Dq4VCtu5.mjs → compose-DByK353T.mjs} +606 -66
- package/dist/compose-DByK353T.mjs.map +1 -0
- package/dist/{config-CqAvPP-f.d.mts → config-Bql0AmJt.d.mts} +3 -3
- package/dist/{config-CWyhLSY1.d.cts.map → config-Bql0AmJt.d.mts.map} +1 -1
- package/dist/{config-CWyhLSY1.d.cts → config-DlNpHK8p.d.cts} +3 -3
- package/dist/{config-CqAvPP-f.d.mts.map → config-DlNpHK8p.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/deploy/public.cjs +12 -12
- package/dist/deploy/public.d.cts +3 -3
- package/dist/deploy/public.d.cts.map +1 -1
- package/dist/deploy/public.d.mts +3 -3
- package/dist/deploy/public.d.mts.map +1 -1
- package/dist/deploy/public.mjs +6 -6
- package/dist/{deploy-CVXEx7Nm.mjs → deploy-BerP7ppB.mjs} +5 -5
- package/dist/{deploy-CVXEx7Nm.mjs.map → deploy-BerP7ppB.mjs.map} +1 -1
- package/dist/{deploy-CT3R9de9.cjs → deploy-Dt42xiQA.cjs} +11 -11
- package/dist/{deploy-CT3R9de9.cjs.map → deploy-Dt42xiQA.cjs.map} +1 -1
- package/dist/{dokploy-eSGmlhhj.cjs → dokploy-NG9UrVrP.cjs} +2 -2
- package/dist/{dokploy-eSGmlhhj.cjs.map → dokploy-NG9UrVrP.cjs.map} +1 -1
- package/dist/{dokploy-CYm2ozFs.mjs → dokploy-ssZQRK2C.mjs} +2 -2
- package/dist/{dokploy-CYm2ozFs.mjs.map → dokploy-ssZQRK2C.mjs.map} +1 -1
- package/dist/{encryption-vS3Qzw73.cjs → encryption-CbMI24fI.cjs} +6 -6
- package/dist/{encryption-vS3Qzw73.cjs.map → encryption-CbMI24fI.cjs.map} +1 -1
- package/dist/{encryption-DC0rsR1W.mjs → encryption-De6MN0O5.mjs} +3 -3
- package/dist/{encryption-DC0rsR1W.mjs.map → encryption-De6MN0O5.mjs.map} +1 -1
- package/dist/{engine-C0N2d1i5.cjs → engine-CoCsNoW_.cjs} +73 -68
- package/dist/{engine-C0N2d1i5.cjs.map → engine-CoCsNoW_.cjs.map} +1 -1
- package/dist/{engine-BOO5TWZd.mjs → engine-DOjGIgl4.mjs} +9 -4
- package/dist/{engine-BOO5TWZd.mjs.map → engine-DOjGIgl4.mjs.map} +1 -1
- package/dist/{github-CEaFDL6t.mjs → github-CwX9z89E.mjs} +3 -3
- package/dist/{github-CEaFDL6t.mjs.map → github-CwX9z89E.mjs.map} +1 -1
- package/dist/{github-ClkdCOL9.cjs → github-D9vGqdLk.cjs} +7 -7
- package/dist/{github-ClkdCOL9.cjs.map → github-D9vGqdLk.cjs.map} +1 -1
- package/dist/{index-DOxmDKqv.d.mts → index-BXO0vlme.d.mts} +2 -2
- package/dist/{index-Ccu0f_2m.d.cts.map → index-BXO0vlme.d.mts.map} +1 -1
- package/dist/{index-Ccu0f_2m.d.cts → index-Rs0Fua-q.d.cts} +2 -2
- package/dist/{index-DOxmDKqv.d.mts.map → index-Rs0Fua-q.d.cts.map} +1 -1
- package/dist/index.cjs +180 -219
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +108 -147
- package/dist/index.mjs.map +1 -1
- package/dist/{migrate-BRbYtFXG.cjs → migrate-B4GBvCNY.cjs} +5 -5
- package/dist/{migrate-BRbYtFXG.cjs.map → migrate-B4GBvCNY.cjs.map} +1 -1
- package/dist/{migrate-D3NAT7Ns.mjs → migrate-BQ4wVKq_.mjs} +3 -3
- package/dist/{migrate-D3NAT7Ns.mjs.map → migrate-BQ4wVKq_.mjs.map} +1 -1
- package/dist/{migrate-DrO2p9Rl.mjs → migrate-CNKaQl3K.mjs} +3 -3
- package/dist/{migrate-DrO2p9Rl.mjs.map → migrate-CNKaQl3K.mjs.map} +1 -1
- package/dist/{migrate-D5_-ylI1.cjs → migrate-Cgoy58Sh.cjs} +8 -8
- package/dist/{migrate-D5_-ylI1.cjs.map → migrate-Cgoy58Sh.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/reconcile/public.d.cts +1 -1
- package/dist/reconcile/public.d.mts +1 -1
- package/dist/{resolve-Fa1Ii0BK.cjs → resolve-CEaqRBzY.cjs} +3 -3
- package/dist/{resolve-Fa1Ii0BK.cjs.map → resolve-CEaqRBzY.cjs.map} +1 -1
- package/dist/{resolve-C1muFos5.mjs → resolve-mvaystiE.mjs} +3 -3
- package/dist/{resolve-C1muFos5.mjs.map → resolve-mvaystiE.mjs.map} +1 -1
- package/dist/{rollback-C9N5lKVf.cjs → rollback-F3P-rA-r.cjs} +7 -7
- package/dist/{rollback-C9N5lKVf.cjs.map → rollback-F3P-rA-r.cjs.map} +1 -1
- package/dist/{rollback-DeQzbRqM.mjs → rollback-S2C-Y9pB.mjs} +5 -5
- package/dist/{rollback-DeQzbRqM.mjs.map → rollback-S2C-Y9pB.mjs.map} +1 -1
- package/dist/{runtime-Cm7QA53H.d.cts → runtime-D9AxGzrw.d.cts} +2 -2
- package/dist/{runtime-BSvzPqXW.d.mts.map → runtime-D9AxGzrw.d.cts.map} +1 -1
- package/dist/{runtime-BSvzPqXW.d.mts → runtime-Dflki3Vs.d.mts} +2 -2
- package/dist/{runtime-Cm7QA53H.d.cts.map → runtime-Dflki3Vs.d.mts.map} +1 -1
- package/dist/{sniffer-Y6GQOCXB.cjs → sniffer-BjG-1mlD.cjs} +6 -6
- package/dist/{sniffer-Y6GQOCXB.cjs.map → sniffer-BjG-1mlD.cjs.map} +1 -1
- package/dist/{sniffer-DR8AlRCk.mjs → sniffer-ByWtH28i.mjs} +6 -6
- package/dist/{sniffer-DR8AlRCk.mjs.map → sniffer-ByWtH28i.mjs.map} +1 -1
- package/dist/{state-C2qi0iQw.cjs → stale-BsiPJI7Y.cjs} +111 -25
- package/dist/stale-BsiPJI7Y.cjs.map +1 -0
- package/dist/{state-CUecOCNJ.mjs → stale-C5FqIVc8.mjs} +106 -26
- package/dist/stale-C5FqIVc8.mjs.map +1 -0
- 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/{types-BdptGBFS.d.cts → types-ByY0zi3n.d.cts} +42 -3
- package/dist/types-ByY0zi3n.d.cts.map +1 -0
- package/dist/{types-OxE0OAn2.d.mts → types-DKxkXsKC.d.mts} +42 -3
- package/dist/types-DKxkXsKC.d.mts.map +1 -0
- package/dist/workspace/index.cjs +1 -1
- package/dist/workspace/index.d.cts +2 -2
- package/dist/workspace/index.d.mts +2 -2
- package/dist/workspace/index.mjs +1 -1
- package/dist/{workspace-QUTqYmVy.mjs → workspace-BBdqmkch.mjs} +114 -17
- package/dist/workspace-BBdqmkch.mjs.map +1 -0
- package/dist/{workspace-DOm81oUo.cjs → workspace-Bp8FEkF-.cjs} +130 -15
- package/dist/workspace-Bp8FEkF-.cjs.map +1 -0
- package/package.json +15 -15
- package/dist/compose-Dq4VCtu5.mjs.map +0 -1
- package/dist/compose-h_6oNnHC.cjs.map +0 -1
- package/dist/state-C2qi0iQw.cjs.map +0 -1
- package/dist/state-CUecOCNJ.mjs.map +0 -1
- package/dist/types-BdptGBFS.d.cts.map +0 -1
- package/dist/types-OxE0OAn2.d.mts.map +0 -1
- package/dist/workspace-DOm81oUo.cjs.map +0 -1
- package/dist/workspace-QUTqYmVy.mjs.map +0 -1
package/dist/index.mjs
CHANGED
|
@@ -4,20 +4,20 @@ import { r as DEFAULT_TIMEOUT_MS, t as CommandFailed } from "./run-BJLIerMM.mjs"
|
|
|
4
4
|
import { c as getDokployCredentials, f as removeDokployCredentials, i as LocalSandbox, l as getDokployRegistryId, m as storeHostingerToken, p as storeDokployCredentials, s as getCredentialsPath, u as getDokployToken } from "./credentials-pAtB70k3.mjs";
|
|
5
5
|
import { l as withOwningTsconfigJsx, r as discover, u as ConstructGenerator } from "./discover-BPelzeGW.mjs";
|
|
6
6
|
import { t as appKey } from "./derive-B4vDpzgP.mjs";
|
|
7
|
-
import { A as deployedProblems, D as InvalidStages, O as TEST_STAGE, c as getAppGkmConfig, j as stageProblems, n as allConstructGlobs, s as getAppBuildOrder } from "./workspace-
|
|
7
|
+
import { A as deployedProblems, D as InvalidStages, O as TEST_STAGE, c as getAppGkmConfig, j as stageProblems, n as allConstructGlobs, s as getAppBuildOrder } from "./workspace-BBdqmkch.mjs";
|
|
8
8
|
import { ConfigNotFound, NotABackendApp, NotInAnApp, loadAppConfig, loadConfig, loadWorkspaceConfig, loadWorkspaceSettings, parseModuleConfig } from "./config.mjs";
|
|
9
|
-
import {
|
|
9
|
+
import { At as eventsBackendFor, Bt as findAvailablePort, Dt as imageBuildCredentials, Ft as fakeKey, G as workerEntryDir, H as workerUnits, Ht as loadEnvFiles, J as FAKE_ENV, K as QueueGenerator, Kt as secretsStoreFor, Lt as primaryPortKey, Ot as isImageBuild, Pt as describeServices, Q as reconcileWorkspace, Qt as projectKey, R as parseDevServices, Rt as createCredentialsPreload, U as WorkerGenerator, Ut as loadSecretsForApp, Vt as isPortAvailable, W as workerBundleName, Wt as prepareEntryCredentials, X as constructGlobs, Xt as getKeyPath, Y as backendsOf$1, Yt as FileSecretsStore, Z as derivedContainers, ct as quoteIdentifier, dn as toEmbeddableSecrets, dt as pgClient, et as LOCAL_CA_PATH, fn as withCustomSecret, jt as providerOf, kt as cacheBackendFor, ln as maskPassword, ot as postgresDatabaseNames, q as CronGenerator, tn as deployIdentity, tt as forgetState, y as dockerCommand, zt as createEntryWrapper } from "./stale-C5FqIVc8.mjs";
|
|
10
10
|
import { i as telemetryFor, n as runtimeFor, t as EndpointGenerator } from "./EndpointGenerator-DftalLYg.mjs";
|
|
11
11
|
import { generateOpenApi, openapiCommand, resolveOpenApiConfig } from "./openapi.mjs";
|
|
12
12
|
import { s as isCacheBackend, t as SubscriberGenerator } from "./SubscriberGenerator-5looQ3gB.mjs";
|
|
13
13
|
import { a as describeHolder, i as assignAppPorts, o as holderOf, r as appTag, s as withAppPorts, t as APP_TAG_ENV } from "./appPorts-C9z9Pzn9.mjs";
|
|
14
14
|
import { n as driversFor, r as eventsBackendsIn, t as cacheBackendsIn } from "./drivers-Ch1rJitn.mjs";
|
|
15
15
|
import { n as withCompute, r as withRoutes, t as manifestModule } from "./emit-C1e8qD08.mjs";
|
|
16
|
-
import { g as createStateStore, n as sniffAppEnvironment, o as DokployApi, x as keyFingerprint } from "./sniffer-
|
|
17
|
-
import { t as deploy$1 } from "./deploy-
|
|
18
|
-
import { a as stackOverrideFile, c as parseDigests, i as ComposePushNeedsBuild, l as pinnedRef, o as composeProject, r as ComposePinNeedsPull, s as stackDir, t as composeTarget, u as
|
|
16
|
+
import { g as createStateStore, n as sniffAppEnvironment, o as DokployApi, x as keyFingerprint } from "./sniffer-ByWtH28i.mjs";
|
|
17
|
+
import { t as deploy$1 } from "./deploy-BerP7ppB.mjs";
|
|
18
|
+
import { a as stackOverrideFile, c as parseDigests, d as removeEdgeRoutes, f as EDGE_PROJECT, i as ComposePushNeedsBuild, l as pinnedRef, o as composeProject, p as dockerCompose, r as ComposePinNeedsPull, s as stackDir, t as composeTarget, u as edgeDir } from "./compose-DByK353T.mjs";
|
|
19
19
|
import { o as loadCredentialSchemas, t as CredentialsInvalid } from "./credentialSchemas-BJqRJNK4.mjs";
|
|
20
|
-
import { t as LocalStateStore } from "./LocalStateStore-
|
|
20
|
+
import { t as LocalStateStore } from "./LocalStateStore-C72bwpG2.mjs";
|
|
21
21
|
import { a as getExecCommand, c as validateProjectName, i as findWorkspaceRoot, n as detectPackageManager$1, o as getInstallCommand, r as findWorkspacePackages, s as getRunCommand, t as checkDirectoryExists } from "./utils-D_fxUqvU.mjs";
|
|
22
22
|
import { a as writeTestHarness, i as TEST_MANIFEST_ENV, n as TEST_READY_FILE, t as TEST_READY_ENV } from "./ready-ZZoNskrr.mjs";
|
|
23
23
|
import { createRequire } from "node:module";
|
|
@@ -47,7 +47,7 @@ import crypto from "crypto";
|
|
|
47
47
|
import { Function } from "@geekmidas/constructs/functions";
|
|
48
48
|
import { Topic } from "@geekmidas/constructs/topic";
|
|
49
49
|
//#region package.json
|
|
50
|
-
var version = "10.0.0-alpha.
|
|
50
|
+
var version = "10.0.0-alpha.78";
|
|
51
51
|
//#endregion
|
|
52
52
|
//#region src/prompt.ts
|
|
53
53
|
/**
|
|
@@ -130,7 +130,7 @@ const logger$8 = console;
|
|
|
130
130
|
* Validate Dokploy token by making a test API call
|
|
131
131
|
*/
|
|
132
132
|
async function validateDokployToken(endpoint, token) {
|
|
133
|
-
const { DokployApi } = await import("./sniffer-
|
|
133
|
+
const { DokployApi } = await import("./sniffer-ByWtH28i.mjs").then((n) => n.c);
|
|
134
134
|
return new DokployApi({
|
|
135
135
|
baseUrl: endpoint,
|
|
136
136
|
token
|
|
@@ -1705,7 +1705,7 @@ async function devCommand(options) {
|
|
|
1705
1705
|
let secretsJsonPath;
|
|
1706
1706
|
let publicUrl;
|
|
1707
1707
|
let manifest;
|
|
1708
|
-
const appSecrets = await loadSecretsForApp(workspace ? await secretsStoreFor(workspace, config.stages.local) : new FileSecretsStore(secretsRoot), config.stages.local
|
|
1708
|
+
const appSecrets = await loadSecretsForApp(workspace ? await secretsStoreFor(workspace, config.stages.local) : new FileSecretsStore(secretsRoot), config.stages.local);
|
|
1709
1709
|
if (workspace) {
|
|
1710
1710
|
const reconciled = await reconcileWorkspace(workspace, {
|
|
1711
1711
|
stage: workspace.stages.local,
|
|
@@ -2053,9 +2053,9 @@ async function workspaceDevCommand(configured, options) {
|
|
|
2053
2053
|
for (const { id, port } of fakes) logger$5.log(`🎭 ${id} fake: http://localhost:${port}`);
|
|
2054
2054
|
logger$5.log(options.migrate || options.seed ? "🗄️ Migrating the databases" : "🗄️ Checking for pending migrations");
|
|
2055
2055
|
if (options.migrate || options.seed) {
|
|
2056
|
-
const { prepareDevDatabases } = await import("./migrate-
|
|
2056
|
+
const { prepareDevDatabases } = await import("./migrate-CNKaQl3K.mjs");
|
|
2057
2057
|
await prepareDevDatabases(workspace, reconciled.env, { seed: !!options.seed });
|
|
2058
|
-
} else await import("./migrate-
|
|
2058
|
+
} else await import("./migrate-CNKaQl3K.mjs").then(({ reportPendingMigrations }) => reportPendingMigrations(workspace, reconciled.env)).catch((error) => {
|
|
2059
2059
|
logger$5.log(`⚠️ Could not check for pending migrations: ${error instanceof Error ? error.message : String(error)}`);
|
|
2060
2060
|
});
|
|
2061
2061
|
const appUrls = {};
|
|
@@ -3063,7 +3063,7 @@ async function buildApp(input) {
|
|
|
3063
3063
|
if (production?.bundle && !input.skipBundle) {
|
|
3064
3064
|
const outputDir = join(appRoot, ".gkm", "server");
|
|
3065
3065
|
const entryPoint = await writeSurfaceServer(outputDir, production);
|
|
3066
|
-
const { bundleServer } = await import("./bundler-
|
|
3066
|
+
const { bundleServer } = await import("./bundler-CtHzKqnZ.mjs");
|
|
3067
3067
|
await bundleServer({
|
|
3068
3068
|
entryPoint,
|
|
3069
3069
|
outputDir: join(outputDir, "dist"),
|
|
@@ -3187,7 +3187,7 @@ async function buildWorkers(input) {
|
|
|
3187
3187
|
});
|
|
3188
3188
|
logger$4.log(`Generated worker ${worker.id}: ${crons.length} crons, ${queues.length} queues, ${subscribers.length} subscribers`);
|
|
3189
3189
|
if (!input.bundle) continue;
|
|
3190
|
-
const { bundleServer } = await import("./bundler-
|
|
3190
|
+
const { bundleServer } = await import("./bundler-CtHzKqnZ.mjs");
|
|
3191
3191
|
const outfile = workerBundleName(worker.id);
|
|
3192
3192
|
await bundleServer({
|
|
3193
3193
|
entryPoint,
|
|
@@ -3257,7 +3257,7 @@ async function buildForTarget(target, context, appRoot, workspaceRoot, endpointG
|
|
|
3257
3257
|
let masterKey;
|
|
3258
3258
|
if (context.production?.bundle && !skipBundle) {
|
|
3259
3259
|
logger$4.log(`\n📦 Bundling production server...`);
|
|
3260
|
-
const { bundleServer } = await import("./bundler-
|
|
3260
|
+
const { bundleServer } = await import("./bundler-CtHzKqnZ.mjs");
|
|
3261
3261
|
const allConstructs = [
|
|
3262
3262
|
...endpoints.map((e) => e.construct),
|
|
3263
3263
|
...functions.map((f) => f.construct),
|
|
@@ -3523,6 +3523,7 @@ async function composeCommand(options, deps = {}) {
|
|
|
3523
3523
|
...existsSync(override) ? { overrides: [override] } : {},
|
|
3524
3524
|
cwd: workspace.root
|
|
3525
3525
|
};
|
|
3526
|
+
if (await removeEdgeRoutes(edgeDir(deps.env ?? process.env), ref.project)) console.log(`🌐 Removed ${ref.project}'s routes from ${EDGE_PROJECT}.`);
|
|
3526
3527
|
await (deps.docker ?? dockerCompose).down(ref);
|
|
3527
3528
|
console.log(`🛑 Stopped ${ref.project}. Its volumes are kept.`);
|
|
3528
3529
|
return;
|
|
@@ -4027,13 +4028,6 @@ const SERVICE_DEFAULTS = {
|
|
|
4027
4028
|
region: "us-east-1"
|
|
4028
4029
|
}
|
|
4029
4030
|
};
|
|
4030
|
-
/** Default credentials for pgboss (not a Docker service, reuses postgres) */
|
|
4031
|
-
const PGBOSS_DEFAULTS = {
|
|
4032
|
-
host: "localhost",
|
|
4033
|
-
port: 5432,
|
|
4034
|
-
username: "pgboss",
|
|
4035
|
-
database: "app"
|
|
4036
|
-
};
|
|
4037
4031
|
/**
|
|
4038
4032
|
* Generate credentials for a specific service.
|
|
4039
4033
|
*/
|
|
@@ -4073,14 +4067,6 @@ function generateMinioEndpoint(creds) {
|
|
|
4073
4067
|
return `http://${host}:${port}`;
|
|
4074
4068
|
}
|
|
4075
4069
|
/**
|
|
4076
|
-
* Generate connection URL for pg-boss (uses PostgreSQL protocol).
|
|
4077
|
-
* Format: pgboss://user:pass@host:port/db?schema=pgboss
|
|
4078
|
-
*/
|
|
4079
|
-
function generatePgBossUrl(creds) {
|
|
4080
|
-
const { username, password, host, port, database } = creds;
|
|
4081
|
-
return `pgboss://${username}:${encodeURIComponent(password)}@${host}:${port}/${database}?schema=pgboss`;
|
|
4082
|
-
}
|
|
4083
|
-
/**
|
|
4084
4070
|
* Generate connection URLs from service credentials.
|
|
4085
4071
|
*/
|
|
4086
4072
|
function generateConnectionUrls(services) {
|
|
@@ -4088,7 +4074,6 @@ function generateConnectionUrls(services) {
|
|
|
4088
4074
|
if (services.postgres) urls.DATABASE_URL = generatePostgresUrl(services.postgres);
|
|
4089
4075
|
if (services.redis) urls.REDIS_URL = generateRedisUrl(services.redis);
|
|
4090
4076
|
if (services.minio) urls.STORAGE_ENDPOINT = generateMinioEndpoint(services.minio);
|
|
4091
|
-
if (services.pgboss) urls.EVENT_PUBLISHER_CONNECTION_STRING = generatePgBossUrl(services.pgboss);
|
|
4092
4077
|
if (services.mailpit) {
|
|
4093
4078
|
urls.SMTP_HOST = services.mailpit.host;
|
|
4094
4079
|
urls.SMTP_PORT = String(services.mailpit.port);
|
|
@@ -4112,13 +4097,6 @@ function createStageSecrets(stage, services, options) {
|
|
|
4112
4097
|
serviceCredentials.minio.username = options.projectName;
|
|
4113
4098
|
}
|
|
4114
4099
|
}
|
|
4115
|
-
if (serviceCredentials.postgres && !serviceCredentials.pgboss) serviceCredentials.pgboss = {
|
|
4116
|
-
...PGBOSS_DEFAULTS,
|
|
4117
|
-
password: generateSecurePassword(),
|
|
4118
|
-
host: serviceCredentials.postgres.host,
|
|
4119
|
-
port: serviceCredentials.postgres.port,
|
|
4120
|
-
database: serviceCredentials.postgres.database
|
|
4121
|
-
};
|
|
4122
4100
|
return {
|
|
4123
4101
|
stage,
|
|
4124
4102
|
createdAt: now,
|
|
@@ -4981,25 +4959,25 @@ function loadPackageJson() {
|
|
|
4981
4959
|
* Run: pnpm --filter @geekmidas/cli sync-versions
|
|
4982
4960
|
*/
|
|
4983
4961
|
const GEEKMIDAS_VERSIONS = {
|
|
4984
|
-
"@geekmidas/audit": "~10.0.0-alpha.
|
|
4985
|
-
"@geekmidas/auth": "~10.0.0-alpha.
|
|
4986
|
-
"@geekmidas/cache": "~10.0.0-alpha.
|
|
4987
|
-
"@geekmidas/client": "~10.0.0-alpha.
|
|
4988
|
-
"@geekmidas/cloud": "~10.0.0-alpha.
|
|
4989
|
-
"@geekmidas/constructs": "~10.0.0-alpha.
|
|
4990
|
-
"@geekmidas/db": "~10.0.0-alpha.
|
|
4991
|
-
"@geekmidas/emailkit": "~10.0.0-alpha.
|
|
4992
|
-
"@geekmidas/envkit": "~10.0.0-alpha.
|
|
4993
|
-
"@geekmidas/errors": "~10.0.0-alpha.
|
|
4994
|
-
"@geekmidas/events": "~10.0.0-alpha.
|
|
4995
|
-
"@geekmidas/logger": "~10.0.0-alpha.
|
|
4996
|
-
"@geekmidas/manifest": "~10.0.0-alpha.
|
|
4997
|
-
"@geekmidas/rate-limit": "~10.0.0-alpha.
|
|
4998
|
-
"@geekmidas/schema": "~10.0.0-alpha.
|
|
4999
|
-
"@geekmidas/services": "~10.0.0-alpha.
|
|
5000
|
-
"@geekmidas/storage": "~10.0.0-alpha.
|
|
5001
|
-
"@geekmidas/telescope": "~10.0.0-alpha.
|
|
5002
|
-
"@geekmidas/testkit": "~10.0.0-alpha.
|
|
4962
|
+
"@geekmidas/audit": "~10.0.0-alpha.78",
|
|
4963
|
+
"@geekmidas/auth": "~10.0.0-alpha.78",
|
|
4964
|
+
"@geekmidas/cache": "~10.0.0-alpha.78",
|
|
4965
|
+
"@geekmidas/client": "~10.0.0-alpha.78",
|
|
4966
|
+
"@geekmidas/cloud": "~10.0.0-alpha.78",
|
|
4967
|
+
"@geekmidas/constructs": "~10.0.0-alpha.78",
|
|
4968
|
+
"@geekmidas/db": "~10.0.0-alpha.78",
|
|
4969
|
+
"@geekmidas/emailkit": "~10.0.0-alpha.78",
|
|
4970
|
+
"@geekmidas/envkit": "~10.0.0-alpha.78",
|
|
4971
|
+
"@geekmidas/errors": "~10.0.0-alpha.78",
|
|
4972
|
+
"@geekmidas/events": "~10.0.0-alpha.78",
|
|
4973
|
+
"@geekmidas/logger": "~10.0.0-alpha.78",
|
|
4974
|
+
"@geekmidas/manifest": "~10.0.0-alpha.78",
|
|
4975
|
+
"@geekmidas/rate-limit": "~10.0.0-alpha.78",
|
|
4976
|
+
"@geekmidas/schema": "~10.0.0-alpha.78",
|
|
4977
|
+
"@geekmidas/services": "~10.0.0-alpha.78",
|
|
4978
|
+
"@geekmidas/storage": "~10.0.0-alpha.78",
|
|
4979
|
+
"@geekmidas/telescope": "~10.0.0-alpha.78",
|
|
4980
|
+
"@geekmidas/testkit": "~10.0.0-alpha.78",
|
|
5003
4981
|
"@geekmidas/cli": `~${loadPackageJson().version}`
|
|
5004
4982
|
};
|
|
5005
4983
|
//#endregion
|
|
@@ -6844,7 +6822,6 @@ docker-compose.constructs.yml
|
|
|
6844
6822
|
.env
|
|
6845
6823
|
.env.local
|
|
6846
6824
|
.env.*.local
|
|
6847
|
-
docker/.env
|
|
6848
6825
|
|
|
6849
6826
|
# IDE
|
|
6850
6827
|
.idea/
|
|
@@ -9913,7 +9890,6 @@ async function initCommand(projectName, options = {}) {
|
|
|
9913
9890
|
};
|
|
9914
9891
|
if (isFullstack) {
|
|
9915
9892
|
customSecrets.AUTH_PORT = "3002";
|
|
9916
|
-
customSecrets.AUTH_URL = "http://localhost:3002";
|
|
9917
9893
|
customSecrets.BETTER_AUTH_SECRET = `better-auth-${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
|
9918
9894
|
customSecrets.BETTER_AUTH_URL = "http://localhost:3002";
|
|
9919
9895
|
customSecrets.BETTER_AUTH_TRUSTED_ORIGINS = "http://localhost:3000,http://localhost:3001";
|
|
@@ -10077,27 +10053,18 @@ var NotAnAwsRegion = class extends Error {
|
|
|
10077
10053
|
//#endregion
|
|
10078
10054
|
//#region src/setup/fullstack-secrets.ts
|
|
10079
10055
|
/**
|
|
10080
|
-
* Generate a secure random password for database users.
|
|
10081
|
-
* Uses a combination of timestamp and random bytes for uniqueness.
|
|
10082
|
-
*/
|
|
10083
|
-
function generateDbPassword() {
|
|
10084
|
-
return `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}${Math.random().toString(36).slice(2)}`;
|
|
10085
|
-
}
|
|
10086
|
-
/**
|
|
10087
|
-
* Generate database URL for an app.
|
|
10088
|
-
* All apps connect to the same database, but use different users/schemas.
|
|
10089
|
-
*/
|
|
10090
|
-
function generateDbUrl(appName, password, projectName, host = "localhost", port = 5432) {
|
|
10091
|
-
return `postgresql://${appName.replace(/-/g, "_")}:${password}@${host}:${port}/${`${projectName.replace(/-/g, "_")}_dev`}`;
|
|
10092
|
-
}
|
|
10093
|
-
/**
|
|
10094
10056
|
* Generate fullstack-aware custom secrets for a workspace.
|
|
10095
10057
|
*
|
|
10096
10058
|
* Generates:
|
|
10097
10059
|
* - Common secrets: PORT, LOG_LEVEL, JWT_SECRET (no `NODE_ENV` — the command
|
|
10098
10060
|
* decides that; see `gkm init`)
|
|
10099
|
-
* - Per-app database passwords and URLs for backend apps with db service
|
|
10100
10061
|
* - Better-auth secrets for apps using the better-auth framework
|
|
10062
|
+
*
|
|
10063
|
+
* No address of anything a construct declares — a database's or a tenant's
|
|
10064
|
+
* URL, a surface's or a site's. Those are derived from the construct, with
|
|
10065
|
+
* passwords from the stage, and one stored here would be a value set by hand,
|
|
10066
|
+
* which wins over the derived one: a `localhost` URL handed to a container,
|
|
10067
|
+
* with a password no role has.
|
|
10101
10068
|
*/
|
|
10102
10069
|
function generateFullstackCustomSecrets(workspace, containers = []) {
|
|
10103
10070
|
const hasDb = containers.includes("postgres");
|
|
@@ -10107,22 +10074,10 @@ function generateFullstackCustomSecrets(workspace, containers = []) {
|
|
|
10107
10074
|
JWT_SECRET: `dev-${Date.now()}-${Math.random().toString(36).slice(2)}`
|
|
10108
10075
|
};
|
|
10109
10076
|
if (!hasDb) return customs;
|
|
10110
|
-
const
|
|
10111
|
-
|
|
10112
|
-
if (appConfig.type === "web") {
|
|
10113
|
-
frontendPorts.push(appConfig.port);
|
|
10114
|
-
const upperName = appName.toUpperCase();
|
|
10115
|
-
customs[`${upperName}_URL`] = `http://localhost:${appConfig.port}`;
|
|
10116
|
-
continue;
|
|
10117
|
-
}
|
|
10118
|
-
if (appConfig.type === "mobile") continue;
|
|
10119
|
-
const password = generateDbPassword();
|
|
10120
|
-
const upperName = appName.toUpperCase();
|
|
10121
|
-
customs[`${upperName}_DATABASE_URL`] = generateDbUrl(appName, password, workspace.name);
|
|
10122
|
-
customs[`${upperName}_DB_PASSWORD`] = password;
|
|
10077
|
+
for (const appConfig of Object.values(workspace.apps)) {
|
|
10078
|
+
if (appConfig.type === "web" || appConfig.type === "mobile") continue;
|
|
10123
10079
|
if (appConfig.framework === "better-auth") {
|
|
10124
10080
|
customs.AUTH_PORT = String(appConfig.port);
|
|
10125
|
-
customs.AUTH_URL = `http://localhost:${appConfig.port}`;
|
|
10126
10081
|
customs.BETTER_AUTH_SECRET = `better-auth-${Date.now()}-${generateSecurePassword(16)}`;
|
|
10127
10082
|
customs.BETTER_AUTH_URL = `http://localhost:${appConfig.port}`;
|
|
10128
10083
|
}
|
|
@@ -10130,25 +10085,6 @@ function generateFullstackCustomSecrets(workspace, containers = []) {
|
|
|
10130
10085
|
if (customs.BETTER_AUTH_SECRET) customs.BETTER_AUTH_TRUSTED_ORIGINS = Object.values(workspace.apps).map((a) => a.port).map((p) => `http://localhost:${p}`).join(",");
|
|
10131
10086
|
return customs;
|
|
10132
10087
|
}
|
|
10133
|
-
/**
|
|
10134
|
-
* Extract *_DB_PASSWORD keys from secrets and write docker/.env.
|
|
10135
|
-
*
|
|
10136
|
-
* The docker/.env file contains database passwords that the PostgreSQL
|
|
10137
|
-
* init script reads to create per-app database users.
|
|
10138
|
-
*/
|
|
10139
|
-
async function writeDockerEnvFromSecrets(secrets, workspaceRoot) {
|
|
10140
|
-
const dbPasswordEntries = Object.entries(secrets.custom).filter(([key]) => key.endsWith("_DB_PASSWORD"));
|
|
10141
|
-
if (secrets.services.pgboss && !dbPasswordEntries.some(([key]) => key === "PGBOSS_DB_PASSWORD")) dbPasswordEntries.push(["PGBOSS_DB_PASSWORD", secrets.services.pgboss.password]);
|
|
10142
|
-
if (dbPasswordEntries.length === 0) return;
|
|
10143
|
-
const envContent = `# Auto-generated docker environment file
|
|
10144
|
-
# Contains database passwords for docker-compose postgres init
|
|
10145
|
-
# This file is gitignored - do not commit to version control
|
|
10146
|
-
${dbPasswordEntries.map(([key, value]) => `${key}=${value}`).join("\n")}
|
|
10147
|
-
`;
|
|
10148
|
-
const envPath = join(workspaceRoot, "docker", ".env");
|
|
10149
|
-
await mkdir(dirname(envPath), { recursive: true });
|
|
10150
|
-
await writeFile(envPath, envContent);
|
|
10151
|
-
}
|
|
10152
10088
|
//#endregion
|
|
10153
10089
|
//#region src/secrets/index.ts
|
|
10154
10090
|
const logger$2 = console;
|
|
@@ -10235,6 +10171,47 @@ async function secretsSetCommand(key, value, options) {
|
|
|
10235
10171
|
await store.write(stage, withCustomSecret(secrets, key, secretValue));
|
|
10236
10172
|
logger$2.log(`\n✓ Secret "${key}" set for stage "${stage}" (${store.name})`);
|
|
10237
10173
|
}
|
|
10174
|
+
/** `gkm secrets:unset` for a key the stage does not hold. */
|
|
10175
|
+
var SecretNotSet = class extends Error {
|
|
10176
|
+
key;
|
|
10177
|
+
stage;
|
|
10178
|
+
constructor(key, stage) {
|
|
10179
|
+
super(`The stage '${stage}' holds no secret '${key}'. List what it holds with gkm secrets:show --stage ${stage}.`);
|
|
10180
|
+
this.key = key;
|
|
10181
|
+
this.stage = stage;
|
|
10182
|
+
this.name = "SecretNotSet";
|
|
10183
|
+
}
|
|
10184
|
+
};
|
|
10185
|
+
/** `gkm secrets:unset` on a stage that has no secrets at all. */
|
|
10186
|
+
var StageSecretsNotFound = class extends Error {
|
|
10187
|
+
stage;
|
|
10188
|
+
constructor(stage) {
|
|
10189
|
+
super(`The stage '${stage}' has no secrets, so there is nothing to remove.`);
|
|
10190
|
+
this.stage = stage;
|
|
10191
|
+
this.name = "StageSecretsNotFound";
|
|
10192
|
+
}
|
|
10193
|
+
};
|
|
10194
|
+
/**
|
|
10195
|
+
* Remove a custom secret from a stage, in the stage's own store — the file,
|
|
10196
|
+
* SSM or Secrets Manager. The rest of the stage is written back as it was.
|
|
10197
|
+
*
|
|
10198
|
+
* @throws {StageSecretsNotFound} when the stage holds no secrets
|
|
10199
|
+
* @throws {SecretNotSet} when it holds none by that key
|
|
10200
|
+
*/
|
|
10201
|
+
async function secretsUnsetCommand(key, options) {
|
|
10202
|
+
const { stage } = options;
|
|
10203
|
+
const store = await storeFor(stage);
|
|
10204
|
+
const secrets = await store.read(stage);
|
|
10205
|
+
if (!secrets) throw new StageSecretsNotFound(stage);
|
|
10206
|
+
if (!(key in secrets.custom)) throw new SecretNotSet(key, stage);
|
|
10207
|
+
const { [key]: _removed, ...custom } = secrets.custom;
|
|
10208
|
+
await store.write(stage, {
|
|
10209
|
+
...secrets,
|
|
10210
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
10211
|
+
custom
|
|
10212
|
+
});
|
|
10213
|
+
logger$2.log(`\n✓ Secret "${key}" removed from stage "${stage}" (${store.name})`);
|
|
10214
|
+
}
|
|
10238
10215
|
/**
|
|
10239
10216
|
* A third party's credentials, checked against the schema of the construct
|
|
10240
10217
|
* that reads them before they are stored — what the app would otherwise
|
|
@@ -10391,8 +10368,7 @@ const logger$1 = console;
|
|
|
10391
10368
|
* Orchestrates:
|
|
10392
10369
|
* 1. Load workspace config
|
|
10393
10370
|
* 2. Resolve secrets (local → the stage's store → generate fresh)
|
|
10394
|
-
* 3.
|
|
10395
|
-
* 4. Start Docker services
|
|
10371
|
+
* 3. Start Docker services
|
|
10396
10372
|
*/
|
|
10397
10373
|
async function setupCommand(options = {}) {
|
|
10398
10374
|
logger$1.log("\n🔧 Setting up the local environment...\n");
|
|
@@ -10405,20 +10381,13 @@ async function setupCommand(options = {}) {
|
|
|
10405
10381
|
}
|
|
10406
10382
|
const stage = options.stage ?? loadedConfig.workspace.stages.local;
|
|
10407
10383
|
const { workspace } = loadedConfig;
|
|
10408
|
-
const isMultiApp = Object.keys(workspace.apps).length > 1;
|
|
10409
10384
|
logger$1.log(`📦 Workspace: ${workspace.name}`);
|
|
10410
10385
|
logger$1.log(`📱 Apps: ${Object.keys(workspace.apps).join(", ")}`);
|
|
10411
10386
|
logger$1.log(`🔑 Stage: ${stage}\n`);
|
|
10412
|
-
|
|
10413
|
-
if (!secrets) {
|
|
10387
|
+
if (!await resolveSecrets(stage, workspace, options)) {
|
|
10414
10388
|
logger$1.error("❌ Failed to resolve secrets. Exiting.");
|
|
10415
10389
|
process.exit(1);
|
|
10416
10390
|
}
|
|
10417
|
-
const containers = await derivedContainers(workspace, stage);
|
|
10418
|
-
if (isMultiApp && containers.includes("postgres")) {
|
|
10419
|
-
await writeDockerEnvFromSecrets(secrets, workspace.root);
|
|
10420
|
-
logger$1.log("📄 Generated docker/.env with database passwords");
|
|
10421
|
-
}
|
|
10422
10391
|
if (!options.skipDocker) {
|
|
10423
10392
|
logger$1.log("");
|
|
10424
10393
|
await reconcileLocal(workspace, stage, options);
|
|
@@ -10515,24 +10484,6 @@ function reconcileSecrets(secrets, workspace, containers = []) {
|
|
|
10515
10484
|
logger$1.log(` 🔄 Adding missing service credentials: ${name}`);
|
|
10516
10485
|
changed = true;
|
|
10517
10486
|
}
|
|
10518
|
-
if (result.services.postgres && !result.services.pgboss) {
|
|
10519
|
-
result = {
|
|
10520
|
-
...result,
|
|
10521
|
-
services: {
|
|
10522
|
-
...result.services,
|
|
10523
|
-
pgboss: {
|
|
10524
|
-
host: result.services.postgres.host,
|
|
10525
|
-
port: result.services.postgres.port,
|
|
10526
|
-
username: "pgboss",
|
|
10527
|
-
password: generateSecurePassword(),
|
|
10528
|
-
database: result.services.postgres.database ?? "app"
|
|
10529
|
-
}
|
|
10530
|
-
}
|
|
10531
|
-
};
|
|
10532
|
-
result.urls = generateConnectionUrls(result.services);
|
|
10533
|
-
logger$1.log(" 🔄 Adding missing service credentials: pgboss");
|
|
10534
|
-
changed = true;
|
|
10535
|
-
}
|
|
10536
10487
|
if (Object.keys(workspace.apps).length > 1) {
|
|
10537
10488
|
const expected = generateFullstackCustomSecrets(workspace, containers);
|
|
10538
10489
|
const missing = {};
|
|
@@ -10791,7 +10742,7 @@ function testDatabases(reconciled) {
|
|
|
10791
10742
|
* starts without the reference data the app needs.
|
|
10792
10743
|
*/
|
|
10793
10744
|
async function migrateTestStage(workspace, env) {
|
|
10794
|
-
const { migrateAndSeed } = await import("./migrate-
|
|
10745
|
+
const { migrateAndSeed } = await import("./migrate-CNKaQl3K.mjs");
|
|
10795
10746
|
const { discover } = await import("./discover-BPelzeGW.mjs").then((n) => n.i);
|
|
10796
10747
|
const sources = {};
|
|
10797
10748
|
const manifest = await discover({
|
|
@@ -11224,7 +11175,7 @@ program.command("migrate").description("Apply each database construct's migratio
|
|
|
11224
11175
|
try {
|
|
11225
11176
|
const globalOptions = program.opts();
|
|
11226
11177
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11227
|
-
const { migrateCommand } = await import("./migrate-
|
|
11178
|
+
const { migrateCommand } = await import("./migrate-CNKaQl3K.mjs");
|
|
11228
11179
|
await migrateCommand({
|
|
11229
11180
|
...options,
|
|
11230
11181
|
...construct ? { construct } : {}
|
|
@@ -11238,7 +11189,7 @@ program.command("seed").description("Migrate, then run each database construct's
|
|
|
11238
11189
|
try {
|
|
11239
11190
|
const globalOptions = program.opts();
|
|
11240
11191
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11241
|
-
const { seedCommand } = await import("./migrate-
|
|
11192
|
+
const { seedCommand } = await import("./migrate-CNKaQl3K.mjs");
|
|
11242
11193
|
await seedCommand({
|
|
11243
11194
|
...options,
|
|
11244
11195
|
...construct ? { construct } : {}
|
|
@@ -11252,7 +11203,7 @@ program.command("migration").description("Write a construct's next migration: an
|
|
|
11252
11203
|
try {
|
|
11253
11204
|
const globalOptions = program.opts();
|
|
11254
11205
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11255
|
-
const { migrationCommand } = await import("./migrate-
|
|
11206
|
+
const { migrationCommand } = await import("./migrate-CNKaQl3K.mjs");
|
|
11256
11207
|
await migrationCommand({
|
|
11257
11208
|
construct,
|
|
11258
11209
|
...name ? { name } : {}
|
|
@@ -11342,11 +11293,21 @@ program.command("secrets:set").description("Set a custom secret for a stage").ar
|
|
|
11342
11293
|
process.exit(1);
|
|
11343
11294
|
}
|
|
11344
11295
|
});
|
|
11296
|
+
program.command("secrets:unset").description("Remove a custom secret from a stage").argument("<key>", "Secret key (e.g., API_KEY)").requiredOption("--stage <stage>", "Stage name").action(async (key, options) => {
|
|
11297
|
+
try {
|
|
11298
|
+
const globalOptions = program.opts();
|
|
11299
|
+
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11300
|
+
await secretsUnsetCommand(key, options);
|
|
11301
|
+
} catch (error) {
|
|
11302
|
+
console.error(formatError(error));
|
|
11303
|
+
process.exit(1);
|
|
11304
|
+
}
|
|
11305
|
+
});
|
|
11345
11306
|
program.command("secrets:add").description("Build the keys a stage must be given — buckets, mail, file servers, third parties' credentials — across every app").requiredOption("--stage <stage>", "Stage name").option("--missing", "Only the keys the stage has not set").option("--json", "Print the keys as JSON and ask nothing").action(async (options) => {
|
|
11346
11307
|
try {
|
|
11347
11308
|
const globalOptions = program.opts();
|
|
11348
11309
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11349
|
-
const { secretsAddCommand } = await import("./add-
|
|
11310
|
+
const { secretsAddCommand } = await import("./add-D2XKszYP.mjs");
|
|
11350
11311
|
await secretsAddCommand(options);
|
|
11351
11312
|
} catch (error) {
|
|
11352
11313
|
console.error(formatError(error));
|
|
@@ -11357,7 +11318,7 @@ program.command("encryption:rotate").description("Add a new current key to an En
|
|
|
11357
11318
|
try {
|
|
11358
11319
|
const globalOptions = program.opts();
|
|
11359
11320
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11360
|
-
const { encryptionRotateCommand } = await import("./encryption-
|
|
11321
|
+
const { encryptionRotateCommand } = await import("./encryption-De6MN0O5.mjs");
|
|
11361
11322
|
await encryptionRotateCommand(construct, options);
|
|
11362
11323
|
} catch (error) {
|
|
11363
11324
|
console.error(formatError(error));
|
|
@@ -11368,7 +11329,7 @@ program.command("encryption:retire").description("Remove an old key from an Encr
|
|
|
11368
11329
|
try {
|
|
11369
11330
|
const globalOptions = program.opts();
|
|
11370
11331
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11371
|
-
const { encryptionRetireCommand } = await import("./encryption-
|
|
11332
|
+
const { encryptionRetireCommand } = await import("./encryption-De6MN0O5.mjs");
|
|
11372
11333
|
await encryptionRetireCommand(construct, key, options);
|
|
11373
11334
|
} catch (error) {
|
|
11374
11335
|
console.error(formatError(error));
|
|
@@ -11411,7 +11372,7 @@ program.command("secrets:reconcile").description("Backfill missing custom secret
|
|
|
11411
11372
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11412
11373
|
const { loadWorkspaceConfig } = await import("./config.mjs");
|
|
11413
11374
|
const { reconcileMissingSecrets } = await import("./reconcile--I7V4Klj.mjs");
|
|
11414
|
-
const { secretsStoreFor } = await import("./
|
|
11375
|
+
const { secretsStoreFor } = await import("./stale-C5FqIVc8.mjs").then((n) => n.Jt);
|
|
11415
11376
|
const { workspace } = await loadWorkspaceConfig();
|
|
11416
11377
|
const stage = options.stage ?? workspace.stages.local;
|
|
11417
11378
|
const store = await secretsStoreFor(workspace, stage);
|
|
@@ -11420,7 +11381,7 @@ program.command("secrets:reconcile").description("Backfill missing custom secret
|
|
|
11420
11381
|
console.error(`No secrets found for stage "${stage}". Run "gkm secrets:init --stage ${stage}" first.`);
|
|
11421
11382
|
process.exit(1);
|
|
11422
11383
|
}
|
|
11423
|
-
const { derivedContainers } = await import("./
|
|
11384
|
+
const { derivedContainers } = await import("./stale-C5FqIVc8.mjs").then((n) => n.$);
|
|
11424
11385
|
const result = reconcileMissingSecrets(secrets, workspace, await derivedContainers(workspace, stage));
|
|
11425
11386
|
if (!result) {
|
|
11426
11387
|
console.log(`\n✓ Secrets for stage "${stage}" are up-to-date`);
|
|
@@ -11438,7 +11399,7 @@ program.command("secrets:migrate").description("Copy a deployed stage's secrets
|
|
|
11438
11399
|
try {
|
|
11439
11400
|
const globalOptions = program.opts();
|
|
11440
11401
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11441
|
-
const { secretsMigrateCommand } = await import("./migrate-
|
|
11402
|
+
const { secretsMigrateCommand } = await import("./migrate-BQ4wVKq_.mjs");
|
|
11442
11403
|
await secretsMigrateCommand(options);
|
|
11443
11404
|
} catch (error) {
|
|
11444
11405
|
console.error(formatError(error));
|
|
@@ -11446,7 +11407,7 @@ program.command("secrets:migrate").description("Copy a deployed stage's secrets
|
|
|
11446
11407
|
}
|
|
11447
11408
|
});
|
|
11448
11409
|
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 <list>", "Server targets: run MinIO and/or Mailpit (minio,mailpit) for mail and buckets the stage's secrets don't configure. Not production-grade").action(async (options) => {
|
|
11449
|
-
const { deployCli } = await import("./cli-
|
|
11410
|
+
const { deployCli } = await import("./cli-BgPyhx1i.mjs");
|
|
11450
11411
|
const globalOptions = program.opts();
|
|
11451
11412
|
const code = await deployCli({
|
|
11452
11413
|
cwd: resolve(globalOptions.cwd ?? process.cwd()),
|
|
@@ -11463,7 +11424,7 @@ program.command("deploy").description("Deploy a stage through its target").optio
|
|
|
11463
11424
|
});
|
|
11464
11425
|
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) => {
|
|
11465
11426
|
try {
|
|
11466
|
-
const { rollbackStage } = await import("./rollback-
|
|
11427
|
+
const { rollbackStage } = await import("./rollback-S2C-Y9pB.mjs").then((n) => n.a);
|
|
11467
11428
|
const { terminalCredentials } = await import("./terminal-BdvrmkaC.mjs");
|
|
11468
11429
|
const globalOptions = program.opts();
|
|
11469
11430
|
await rollbackStage({
|
|
@@ -11499,7 +11460,7 @@ program.command("deploy:github").description("Let GitHub Actions deploy a stage:
|
|
|
11499
11460
|
try {
|
|
11500
11461
|
const globalOptions = program.opts();
|
|
11501
11462
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11502
|
-
const { deployGithubCommand } = await import("./github-
|
|
11463
|
+
const { deployGithubCommand } = await import("./github-CwX9z89E.mjs");
|
|
11503
11464
|
await deployGithubCommand(options);
|
|
11504
11465
|
} catch (error) {
|
|
11505
11466
|
console.error(formatError(error));
|