@geekmidas/cli 10.0.0-alpha.76 → 10.0.0-alpha.77
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/{add-j2yI3cbS.cjs → add-DCsgtvDk.cjs} +7 -7
- package/dist/{add-j2yI3cbS.cjs.map → add-DCsgtvDk.cjs.map} +1 -1
- package/dist/{add-B7IMXzou.mjs → add-EPQO-_dt.mjs} +2 -2
- package/dist/{add-B7IMXzou.mjs.map → add-EPQO-_dt.mjs.map} +1 -1
- package/dist/{bundler-Cf6OgaOe.cjs → bundler-5spPyduN.cjs} +3 -3
- package/dist/{bundler-Cf6OgaOe.cjs.map → bundler-5spPyduN.cjs.map} +1 -1
- package/dist/{bundler-DO6bHhnb.mjs → bundler-DgO_EMVs.mjs} +3 -3
- package/dist/{bundler-DO6bHhnb.mjs.map → bundler-DgO_EMVs.mjs.map} +1 -1
- package/dist/{cli-BCPOHmg9.mjs → cli-B74Ru-V1.mjs} +3 -3
- package/dist/{cli-BCPOHmg9.mjs.map → cli-B74Ru-V1.mjs.map} +1 -1
- package/dist/{cli-CNanUB7a.cjs → cli-ZpFTMbGw.cjs} +4 -4
- package/dist/{cli-CNanUB7a.cjs.map → cli-ZpFTMbGw.cjs.map} +1 -1
- package/dist/{compose-h_6oNnHC.cjs → compose-CePlrbUw.cjs} +66 -59
- package/dist/{compose-h_6oNnHC.cjs.map → compose-CePlrbUw.cjs.map} +1 -1
- package/dist/{compose-Dq4VCtu5.mjs → compose-IUuxRW0J.mjs} +16 -9
- package/dist/{compose-Dq4VCtu5.mjs.map → compose-IUuxRW0J.mjs.map} +1 -1
- package/dist/{config-CqAvPP-f.d.mts → config-Ckmoj56i.d.mts} +3 -3
- package/dist/{config-CWyhLSY1.d.cts.map → config-Ckmoj56i.d.mts.map} +1 -1
- package/dist/{config-CWyhLSY1.d.cts → config-aAeLXH86.d.cts} +3 -3
- package/dist/{config-CqAvPP-f.d.mts.map → config-aAeLXH86.d.cts.map} +1 -1
- package/dist/config.d.cts +3 -3
- package/dist/config.d.mts +3 -3
- package/dist/deploy/public.cjs +11 -11
- 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 +5 -5
- package/dist/{deploy-CVXEx7Nm.mjs → deploy-Q6X6RXRG.mjs} +3 -3
- package/dist/{deploy-CVXEx7Nm.mjs.map → deploy-Q6X6RXRG.mjs.map} +1 -1
- package/dist/{deploy-CT3R9de9.cjs → deploy-XHXi-_tL.cjs} +9 -9
- package/dist/{deploy-CT3R9de9.cjs.map → deploy-XHXi-_tL.cjs.map} +1 -1
- package/dist/{dokploy-CYm2ozFs.mjs → dokploy-BtP5XSrS.mjs} +2 -2
- package/dist/{dokploy-CYm2ozFs.mjs.map → dokploy-BtP5XSrS.mjs.map} +1 -1
- package/dist/{dokploy-eSGmlhhj.cjs → dokploy-MSsPBO-t.cjs} +2 -2
- package/dist/{dokploy-eSGmlhhj.cjs.map → dokploy-MSsPBO-t.cjs.map} +1 -1
- package/dist/{encryption-DC0rsR1W.mjs → encryption-D4Ykywfr.mjs} +2 -2
- package/dist/{encryption-DC0rsR1W.mjs.map → encryption-D4Ykywfr.mjs.map} +1 -1
- package/dist/{encryption-vS3Qzw73.cjs → encryption-DY0na43R.cjs} +5 -5
- package/dist/{encryption-vS3Qzw73.cjs.map → encryption-DY0na43R.cjs.map} +1 -1
- package/dist/{engine-BOO5TWZd.mjs → engine-BI2xjCKt.mjs} +7 -2
- package/dist/{engine-BOO5TWZd.mjs.map → engine-BI2xjCKt.mjs.map} +1 -1
- package/dist/{engine-C0N2d1i5.cjs → engine-y53kE_3H.cjs} +71 -66
- package/dist/{engine-C0N2d1i5.cjs.map → engine-y53kE_3H.cjs.map} +1 -1
- package/dist/{github-CEaFDL6t.mjs → github-BBIqk1Jv.mjs} +2 -2
- package/dist/{github-CEaFDL6t.mjs.map → github-BBIqk1Jv.mjs.map} +1 -1
- package/dist/{github-ClkdCOL9.cjs → github-Bmb45xUQ.cjs} +6 -6
- package/dist/{github-ClkdCOL9.cjs.map → github-Bmb45xUQ.cjs.map} +1 -1
- package/dist/{index-DOxmDKqv.d.mts → index-C7Tma2m1.d.cts} +2 -2
- package/dist/{index-Ccu0f_2m.d.cts.map → index-C7Tma2m1.d.cts.map} +1 -1
- package/dist/{index-Ccu0f_2m.d.cts → index-CNdSRwar.d.mts} +2 -2
- package/dist/{index-DOxmDKqv.d.mts.map → index-CNdSRwar.d.mts.map} +1 -1
- package/dist/index.cjs +175 -215
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +103 -143
- package/dist/index.mjs.map +1 -1
- package/dist/{migrate-BRbYtFXG.cjs → migrate-31JXUOaG.cjs} +4 -4
- package/dist/{migrate-BRbYtFXG.cjs.map → migrate-31JXUOaG.cjs.map} +1 -1
- package/dist/{migrate-DrO2p9Rl.mjs → migrate-BUBsUiM3.mjs} +2 -2
- package/dist/{migrate-DrO2p9Rl.mjs.map → migrate-BUBsUiM3.mjs.map} +1 -1
- package/dist/{migrate-D3NAT7Ns.mjs → migrate-DWVl5PQK.mjs} +2 -2
- package/dist/{migrate-D3NAT7Ns.mjs.map → migrate-DWVl5PQK.mjs.map} +1 -1
- package/dist/{migrate-D5_-ylI1.cjs → migrate-sny0NjKe.cjs} +7 -7
- package/dist/{migrate-D5_-ylI1.cjs.map → migrate-sny0NjKe.cjs.map} +1 -1
- package/dist/openapi.d.cts +1 -1
- package/dist/openapi.d.mts +1 -1
- package/dist/reconcile/public.d.cts +1 -1
- package/dist/reconcile/public.d.mts +1 -1
- package/dist/{resolve-C1muFos5.mjs → resolve-BF1ICosS.mjs} +3 -3
- package/dist/{resolve-C1muFos5.mjs.map → resolve-BF1ICosS.mjs.map} +1 -1
- package/dist/{resolve-Fa1Ii0BK.cjs → resolve-DokLtTUb.cjs} +3 -3
- package/dist/{resolve-Fa1Ii0BK.cjs.map → resolve-DokLtTUb.cjs.map} +1 -1
- package/dist/{rollback-C9N5lKVf.cjs → rollback-CpOWRR9H.cjs} +5 -5
- package/dist/{rollback-C9N5lKVf.cjs.map → rollback-CpOWRR9H.cjs.map} +1 -1
- package/dist/{rollback-DeQzbRqM.mjs → rollback-sg0ZhKGG.mjs} +3 -3
- package/dist/{rollback-DeQzbRqM.mjs.map → rollback-sg0ZhKGG.mjs.map} +1 -1
- package/dist/{runtime-BSvzPqXW.d.mts → runtime-B5bYom9w.d.mts} +2 -2
- package/dist/{runtime-BSvzPqXW.d.mts.map → runtime-B5bYom9w.d.mts.map} +1 -1
- package/dist/{runtime-Cm7QA53H.d.cts → runtime-BozOkPtG.d.cts} +2 -2
- package/dist/{runtime-Cm7QA53H.d.cts.map → runtime-BozOkPtG.d.cts.map} +1 -1
- package/dist/{state-CUecOCNJ.mjs → stale-DGzpiN5S.mjs} +103 -23
- package/dist/stale-DGzpiN5S.mjs.map +1 -0
- package/dist/{state-C2qi0iQw.cjs → stale-yu2FkH3G.cjs} +108 -22
- package/dist/stale-yu2FkH3G.cjs.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-OxE0OAn2.d.mts → types-B9yWJAis.d.mts} +1 -3
- package/dist/types-B9yWJAis.d.mts.map +1 -0
- package/dist/{types-BdptGBFS.d.cts → types-ct7pdQRf.d.cts} +1 -3
- package/dist/types-ct7pdQRf.d.cts.map +1 -0
- package/dist/workspace/index.d.cts +2 -2
- package/dist/workspace/index.d.mts +2 -2
- package/package.json +15 -15
- 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/index.mjs
CHANGED
|
@@ -6,7 +6,7 @@ import { l as withOwningTsconfigJsx, r as discover, u as ConstructGenerator } fr
|
|
|
6
6
|
import { t as appKey } from "./derive-B4vDpzgP.mjs";
|
|
7
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-QUTqYmVy.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-DGzpiN5S.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";
|
|
@@ -14,8 +14,8 @@ import { a as describeHolder, i as assignAppPorts, o as holderOf, r as appTag, s
|
|
|
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
16
|
import { g as createStateStore, n as sniffAppEnvironment, o as DokployApi, x as keyFingerprint } from "./sniffer-DR8AlRCk.mjs";
|
|
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 dockerCompose } from "./compose-
|
|
17
|
+
import { t as deploy$1 } from "./deploy-Q6X6RXRG.mjs";
|
|
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 dockerCompose } from "./compose-IUuxRW0J.mjs";
|
|
19
19
|
import { o as loadCredentialSchemas, t as CredentialsInvalid } from "./credentialSchemas-BJqRJNK4.mjs";
|
|
20
20
|
import { t as LocalStateStore } from "./LocalStateStore-DLxCCatI.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";
|
|
@@ -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.77";
|
|
51
51
|
//#endregion
|
|
52
52
|
//#region src/prompt.ts
|
|
53
53
|
/**
|
|
@@ -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-BUBsUiM3.mjs");
|
|
2057
2057
|
await prepareDevDatabases(workspace, reconciled.env, { seed: !!options.seed });
|
|
2058
|
-
} else await import("./migrate-
|
|
2058
|
+
} else await import("./migrate-BUBsUiM3.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-DgO_EMVs.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-DgO_EMVs.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-DgO_EMVs.mjs");
|
|
3261
3261
|
const allConstructs = [
|
|
3262
3262
|
...endpoints.map((e) => e.construct),
|
|
3263
3263
|
...functions.map((f) => f.construct),
|
|
@@ -4027,13 +4027,6 @@ const SERVICE_DEFAULTS = {
|
|
|
4027
4027
|
region: "us-east-1"
|
|
4028
4028
|
}
|
|
4029
4029
|
};
|
|
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
4030
|
/**
|
|
4038
4031
|
* Generate credentials for a specific service.
|
|
4039
4032
|
*/
|
|
@@ -4073,14 +4066,6 @@ function generateMinioEndpoint(creds) {
|
|
|
4073
4066
|
return `http://${host}:${port}`;
|
|
4074
4067
|
}
|
|
4075
4068
|
/**
|
|
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
4069
|
* Generate connection URLs from service credentials.
|
|
4085
4070
|
*/
|
|
4086
4071
|
function generateConnectionUrls(services) {
|
|
@@ -4088,7 +4073,6 @@ function generateConnectionUrls(services) {
|
|
|
4088
4073
|
if (services.postgres) urls.DATABASE_URL = generatePostgresUrl(services.postgres);
|
|
4089
4074
|
if (services.redis) urls.REDIS_URL = generateRedisUrl(services.redis);
|
|
4090
4075
|
if (services.minio) urls.STORAGE_ENDPOINT = generateMinioEndpoint(services.minio);
|
|
4091
|
-
if (services.pgboss) urls.EVENT_PUBLISHER_CONNECTION_STRING = generatePgBossUrl(services.pgboss);
|
|
4092
4076
|
if (services.mailpit) {
|
|
4093
4077
|
urls.SMTP_HOST = services.mailpit.host;
|
|
4094
4078
|
urls.SMTP_PORT = String(services.mailpit.port);
|
|
@@ -4112,13 +4096,6 @@ function createStageSecrets(stage, services, options) {
|
|
|
4112
4096
|
serviceCredentials.minio.username = options.projectName;
|
|
4113
4097
|
}
|
|
4114
4098
|
}
|
|
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
4099
|
return {
|
|
4123
4100
|
stage,
|
|
4124
4101
|
createdAt: now,
|
|
@@ -4981,25 +4958,25 @@ function loadPackageJson() {
|
|
|
4981
4958
|
* Run: pnpm --filter @geekmidas/cli sync-versions
|
|
4982
4959
|
*/
|
|
4983
4960
|
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.
|
|
4961
|
+
"@geekmidas/audit": "~10.0.0-alpha.77",
|
|
4962
|
+
"@geekmidas/auth": "~10.0.0-alpha.77",
|
|
4963
|
+
"@geekmidas/cache": "~10.0.0-alpha.77",
|
|
4964
|
+
"@geekmidas/client": "~10.0.0-alpha.77",
|
|
4965
|
+
"@geekmidas/cloud": "~10.0.0-alpha.77",
|
|
4966
|
+
"@geekmidas/constructs": "~10.0.0-alpha.77",
|
|
4967
|
+
"@geekmidas/db": "~10.0.0-alpha.77",
|
|
4968
|
+
"@geekmidas/emailkit": "~10.0.0-alpha.77",
|
|
4969
|
+
"@geekmidas/envkit": "~10.0.0-alpha.77",
|
|
4970
|
+
"@geekmidas/errors": "~10.0.0-alpha.77",
|
|
4971
|
+
"@geekmidas/events": "~10.0.0-alpha.77",
|
|
4972
|
+
"@geekmidas/logger": "~10.0.0-alpha.77",
|
|
4973
|
+
"@geekmidas/manifest": "~10.0.0-alpha.77",
|
|
4974
|
+
"@geekmidas/rate-limit": "~10.0.0-alpha.77",
|
|
4975
|
+
"@geekmidas/schema": "~10.0.0-alpha.77",
|
|
4976
|
+
"@geekmidas/services": "~10.0.0-alpha.77",
|
|
4977
|
+
"@geekmidas/storage": "~10.0.0-alpha.77",
|
|
4978
|
+
"@geekmidas/telescope": "~10.0.0-alpha.77",
|
|
4979
|
+
"@geekmidas/testkit": "~10.0.0-alpha.77",
|
|
5003
4980
|
"@geekmidas/cli": `~${loadPackageJson().version}`
|
|
5004
4981
|
};
|
|
5005
4982
|
//#endregion
|
|
@@ -6844,7 +6821,6 @@ docker-compose.constructs.yml
|
|
|
6844
6821
|
.env
|
|
6845
6822
|
.env.local
|
|
6846
6823
|
.env.*.local
|
|
6847
|
-
docker/.env
|
|
6848
6824
|
|
|
6849
6825
|
# IDE
|
|
6850
6826
|
.idea/
|
|
@@ -9913,7 +9889,6 @@ async function initCommand(projectName, options = {}) {
|
|
|
9913
9889
|
};
|
|
9914
9890
|
if (isFullstack) {
|
|
9915
9891
|
customSecrets.AUTH_PORT = "3002";
|
|
9916
|
-
customSecrets.AUTH_URL = "http://localhost:3002";
|
|
9917
9892
|
customSecrets.BETTER_AUTH_SECRET = `better-auth-${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
|
9918
9893
|
customSecrets.BETTER_AUTH_URL = "http://localhost:3002";
|
|
9919
9894
|
customSecrets.BETTER_AUTH_TRUSTED_ORIGINS = "http://localhost:3000,http://localhost:3001";
|
|
@@ -10077,27 +10052,18 @@ var NotAnAwsRegion = class extends Error {
|
|
|
10077
10052
|
//#endregion
|
|
10078
10053
|
//#region src/setup/fullstack-secrets.ts
|
|
10079
10054
|
/**
|
|
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
10055
|
* Generate fullstack-aware custom secrets for a workspace.
|
|
10095
10056
|
*
|
|
10096
10057
|
* Generates:
|
|
10097
10058
|
* - Common secrets: PORT, LOG_LEVEL, JWT_SECRET (no `NODE_ENV` — the command
|
|
10098
10059
|
* decides that; see `gkm init`)
|
|
10099
|
-
* - Per-app database passwords and URLs for backend apps with db service
|
|
10100
10060
|
* - Better-auth secrets for apps using the better-auth framework
|
|
10061
|
+
*
|
|
10062
|
+
* No address of anything a construct declares — a database's or a tenant's
|
|
10063
|
+
* URL, a surface's or a site's. Those are derived from the construct, with
|
|
10064
|
+
* passwords from the stage, and one stored here would be a value set by hand,
|
|
10065
|
+
* which wins over the derived one: a `localhost` URL handed to a container,
|
|
10066
|
+
* with a password no role has.
|
|
10101
10067
|
*/
|
|
10102
10068
|
function generateFullstackCustomSecrets(workspace, containers = []) {
|
|
10103
10069
|
const hasDb = containers.includes("postgres");
|
|
@@ -10107,22 +10073,10 @@ function generateFullstackCustomSecrets(workspace, containers = []) {
|
|
|
10107
10073
|
JWT_SECRET: `dev-${Date.now()}-${Math.random().toString(36).slice(2)}`
|
|
10108
10074
|
};
|
|
10109
10075
|
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;
|
|
10076
|
+
for (const appConfig of Object.values(workspace.apps)) {
|
|
10077
|
+
if (appConfig.type === "web" || appConfig.type === "mobile") continue;
|
|
10123
10078
|
if (appConfig.framework === "better-auth") {
|
|
10124
10079
|
customs.AUTH_PORT = String(appConfig.port);
|
|
10125
|
-
customs.AUTH_URL = `http://localhost:${appConfig.port}`;
|
|
10126
10080
|
customs.BETTER_AUTH_SECRET = `better-auth-${Date.now()}-${generateSecurePassword(16)}`;
|
|
10127
10081
|
customs.BETTER_AUTH_URL = `http://localhost:${appConfig.port}`;
|
|
10128
10082
|
}
|
|
@@ -10130,25 +10084,6 @@ function generateFullstackCustomSecrets(workspace, containers = []) {
|
|
|
10130
10084
|
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
10085
|
return customs;
|
|
10132
10086
|
}
|
|
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
10087
|
//#endregion
|
|
10153
10088
|
//#region src/secrets/index.ts
|
|
10154
10089
|
const logger$2 = console;
|
|
@@ -10235,6 +10170,47 @@ async function secretsSetCommand(key, value, options) {
|
|
|
10235
10170
|
await store.write(stage, withCustomSecret(secrets, key, secretValue));
|
|
10236
10171
|
logger$2.log(`\n✓ Secret "${key}" set for stage "${stage}" (${store.name})`);
|
|
10237
10172
|
}
|
|
10173
|
+
/** `gkm secrets:unset` for a key the stage does not hold. */
|
|
10174
|
+
var SecretNotSet = class extends Error {
|
|
10175
|
+
key;
|
|
10176
|
+
stage;
|
|
10177
|
+
constructor(key, stage) {
|
|
10178
|
+
super(`The stage '${stage}' holds no secret '${key}'. List what it holds with gkm secrets:show --stage ${stage}.`);
|
|
10179
|
+
this.key = key;
|
|
10180
|
+
this.stage = stage;
|
|
10181
|
+
this.name = "SecretNotSet";
|
|
10182
|
+
}
|
|
10183
|
+
};
|
|
10184
|
+
/** `gkm secrets:unset` on a stage that has no secrets at all. */
|
|
10185
|
+
var StageSecretsNotFound = class extends Error {
|
|
10186
|
+
stage;
|
|
10187
|
+
constructor(stage) {
|
|
10188
|
+
super(`The stage '${stage}' has no secrets, so there is nothing to remove.`);
|
|
10189
|
+
this.stage = stage;
|
|
10190
|
+
this.name = "StageSecretsNotFound";
|
|
10191
|
+
}
|
|
10192
|
+
};
|
|
10193
|
+
/**
|
|
10194
|
+
* Remove a custom secret from a stage, in the stage's own store — the file,
|
|
10195
|
+
* SSM or Secrets Manager. The rest of the stage is written back as it was.
|
|
10196
|
+
*
|
|
10197
|
+
* @throws {StageSecretsNotFound} when the stage holds no secrets
|
|
10198
|
+
* @throws {SecretNotSet} when it holds none by that key
|
|
10199
|
+
*/
|
|
10200
|
+
async function secretsUnsetCommand(key, options) {
|
|
10201
|
+
const { stage } = options;
|
|
10202
|
+
const store = await storeFor(stage);
|
|
10203
|
+
const secrets = await store.read(stage);
|
|
10204
|
+
if (!secrets) throw new StageSecretsNotFound(stage);
|
|
10205
|
+
if (!(key in secrets.custom)) throw new SecretNotSet(key, stage);
|
|
10206
|
+
const { [key]: _removed, ...custom } = secrets.custom;
|
|
10207
|
+
await store.write(stage, {
|
|
10208
|
+
...secrets,
|
|
10209
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
10210
|
+
custom
|
|
10211
|
+
});
|
|
10212
|
+
logger$2.log(`\n✓ Secret "${key}" removed from stage "${stage}" (${store.name})`);
|
|
10213
|
+
}
|
|
10238
10214
|
/**
|
|
10239
10215
|
* A third party's credentials, checked against the schema of the construct
|
|
10240
10216
|
* that reads them before they are stored — what the app would otherwise
|
|
@@ -10391,8 +10367,7 @@ const logger$1 = console;
|
|
|
10391
10367
|
* Orchestrates:
|
|
10392
10368
|
* 1. Load workspace config
|
|
10393
10369
|
* 2. Resolve secrets (local → the stage's store → generate fresh)
|
|
10394
|
-
* 3.
|
|
10395
|
-
* 4. Start Docker services
|
|
10370
|
+
* 3. Start Docker services
|
|
10396
10371
|
*/
|
|
10397
10372
|
async function setupCommand(options = {}) {
|
|
10398
10373
|
logger$1.log("\n🔧 Setting up the local environment...\n");
|
|
@@ -10405,20 +10380,13 @@ async function setupCommand(options = {}) {
|
|
|
10405
10380
|
}
|
|
10406
10381
|
const stage = options.stage ?? loadedConfig.workspace.stages.local;
|
|
10407
10382
|
const { workspace } = loadedConfig;
|
|
10408
|
-
const isMultiApp = Object.keys(workspace.apps).length > 1;
|
|
10409
10383
|
logger$1.log(`📦 Workspace: ${workspace.name}`);
|
|
10410
10384
|
logger$1.log(`📱 Apps: ${Object.keys(workspace.apps).join(", ")}`);
|
|
10411
10385
|
logger$1.log(`🔑 Stage: ${stage}\n`);
|
|
10412
|
-
|
|
10413
|
-
if (!secrets) {
|
|
10386
|
+
if (!await resolveSecrets(stage, workspace, options)) {
|
|
10414
10387
|
logger$1.error("❌ Failed to resolve secrets. Exiting.");
|
|
10415
10388
|
process.exit(1);
|
|
10416
10389
|
}
|
|
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
10390
|
if (!options.skipDocker) {
|
|
10423
10391
|
logger$1.log("");
|
|
10424
10392
|
await reconcileLocal(workspace, stage, options);
|
|
@@ -10515,24 +10483,6 @@ function reconcileSecrets(secrets, workspace, containers = []) {
|
|
|
10515
10483
|
logger$1.log(` 🔄 Adding missing service credentials: ${name}`);
|
|
10516
10484
|
changed = true;
|
|
10517
10485
|
}
|
|
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
10486
|
if (Object.keys(workspace.apps).length > 1) {
|
|
10537
10487
|
const expected = generateFullstackCustomSecrets(workspace, containers);
|
|
10538
10488
|
const missing = {};
|
|
@@ -10791,7 +10741,7 @@ function testDatabases(reconciled) {
|
|
|
10791
10741
|
* starts without the reference data the app needs.
|
|
10792
10742
|
*/
|
|
10793
10743
|
async function migrateTestStage(workspace, env) {
|
|
10794
|
-
const { migrateAndSeed } = await import("./migrate-
|
|
10744
|
+
const { migrateAndSeed } = await import("./migrate-BUBsUiM3.mjs");
|
|
10795
10745
|
const { discover } = await import("./discover-BPelzeGW.mjs").then((n) => n.i);
|
|
10796
10746
|
const sources = {};
|
|
10797
10747
|
const manifest = await discover({
|
|
@@ -11224,7 +11174,7 @@ program.command("migrate").description("Apply each database construct's migratio
|
|
|
11224
11174
|
try {
|
|
11225
11175
|
const globalOptions = program.opts();
|
|
11226
11176
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11227
|
-
const { migrateCommand } = await import("./migrate-
|
|
11177
|
+
const { migrateCommand } = await import("./migrate-BUBsUiM3.mjs");
|
|
11228
11178
|
await migrateCommand({
|
|
11229
11179
|
...options,
|
|
11230
11180
|
...construct ? { construct } : {}
|
|
@@ -11238,7 +11188,7 @@ program.command("seed").description("Migrate, then run each database construct's
|
|
|
11238
11188
|
try {
|
|
11239
11189
|
const globalOptions = program.opts();
|
|
11240
11190
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11241
|
-
const { seedCommand } = await import("./migrate-
|
|
11191
|
+
const { seedCommand } = await import("./migrate-BUBsUiM3.mjs");
|
|
11242
11192
|
await seedCommand({
|
|
11243
11193
|
...options,
|
|
11244
11194
|
...construct ? { construct } : {}
|
|
@@ -11252,7 +11202,7 @@ program.command("migration").description("Write a construct's next migration: an
|
|
|
11252
11202
|
try {
|
|
11253
11203
|
const globalOptions = program.opts();
|
|
11254
11204
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11255
|
-
const { migrationCommand } = await import("./migrate-
|
|
11205
|
+
const { migrationCommand } = await import("./migrate-BUBsUiM3.mjs");
|
|
11256
11206
|
await migrationCommand({
|
|
11257
11207
|
construct,
|
|
11258
11208
|
...name ? { name } : {}
|
|
@@ -11342,11 +11292,21 @@ program.command("secrets:set").description("Set a custom secret for a stage").ar
|
|
|
11342
11292
|
process.exit(1);
|
|
11343
11293
|
}
|
|
11344
11294
|
});
|
|
11295
|
+
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) => {
|
|
11296
|
+
try {
|
|
11297
|
+
const globalOptions = program.opts();
|
|
11298
|
+
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11299
|
+
await secretsUnsetCommand(key, options);
|
|
11300
|
+
} catch (error) {
|
|
11301
|
+
console.error(formatError(error));
|
|
11302
|
+
process.exit(1);
|
|
11303
|
+
}
|
|
11304
|
+
});
|
|
11345
11305
|
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
11306
|
try {
|
|
11347
11307
|
const globalOptions = program.opts();
|
|
11348
11308
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11349
|
-
const { secretsAddCommand } = await import("./add-
|
|
11309
|
+
const { secretsAddCommand } = await import("./add-EPQO-_dt.mjs");
|
|
11350
11310
|
await secretsAddCommand(options);
|
|
11351
11311
|
} catch (error) {
|
|
11352
11312
|
console.error(formatError(error));
|
|
@@ -11357,7 +11317,7 @@ program.command("encryption:rotate").description("Add a new current key to an En
|
|
|
11357
11317
|
try {
|
|
11358
11318
|
const globalOptions = program.opts();
|
|
11359
11319
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11360
|
-
const { encryptionRotateCommand } = await import("./encryption-
|
|
11320
|
+
const { encryptionRotateCommand } = await import("./encryption-D4Ykywfr.mjs");
|
|
11361
11321
|
await encryptionRotateCommand(construct, options);
|
|
11362
11322
|
} catch (error) {
|
|
11363
11323
|
console.error(formatError(error));
|
|
@@ -11368,7 +11328,7 @@ program.command("encryption:retire").description("Remove an old key from an Encr
|
|
|
11368
11328
|
try {
|
|
11369
11329
|
const globalOptions = program.opts();
|
|
11370
11330
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11371
|
-
const { encryptionRetireCommand } = await import("./encryption-
|
|
11331
|
+
const { encryptionRetireCommand } = await import("./encryption-D4Ykywfr.mjs");
|
|
11372
11332
|
await encryptionRetireCommand(construct, key, options);
|
|
11373
11333
|
} catch (error) {
|
|
11374
11334
|
console.error(formatError(error));
|
|
@@ -11411,7 +11371,7 @@ program.command("secrets:reconcile").description("Backfill missing custom secret
|
|
|
11411
11371
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11412
11372
|
const { loadWorkspaceConfig } = await import("./config.mjs");
|
|
11413
11373
|
const { reconcileMissingSecrets } = await import("./reconcile--I7V4Klj.mjs");
|
|
11414
|
-
const { secretsStoreFor } = await import("./
|
|
11374
|
+
const { secretsStoreFor } = await import("./stale-DGzpiN5S.mjs").then((n) => n.Jt);
|
|
11415
11375
|
const { workspace } = await loadWorkspaceConfig();
|
|
11416
11376
|
const stage = options.stage ?? workspace.stages.local;
|
|
11417
11377
|
const store = await secretsStoreFor(workspace, stage);
|
|
@@ -11420,7 +11380,7 @@ program.command("secrets:reconcile").description("Backfill missing custom secret
|
|
|
11420
11380
|
console.error(`No secrets found for stage "${stage}". Run "gkm secrets:init --stage ${stage}" first.`);
|
|
11421
11381
|
process.exit(1);
|
|
11422
11382
|
}
|
|
11423
|
-
const { derivedContainers } = await import("./
|
|
11383
|
+
const { derivedContainers } = await import("./stale-DGzpiN5S.mjs").then((n) => n.$);
|
|
11424
11384
|
const result = reconcileMissingSecrets(secrets, workspace, await derivedContainers(workspace, stage));
|
|
11425
11385
|
if (!result) {
|
|
11426
11386
|
console.log(`\n✓ Secrets for stage "${stage}" are up-to-date`);
|
|
@@ -11438,7 +11398,7 @@ program.command("secrets:migrate").description("Copy a deployed stage's secrets
|
|
|
11438
11398
|
try {
|
|
11439
11399
|
const globalOptions = program.opts();
|
|
11440
11400
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11441
|
-
const { secretsMigrateCommand } = await import("./migrate-
|
|
11401
|
+
const { secretsMigrateCommand } = await import("./migrate-DWVl5PQK.mjs");
|
|
11442
11402
|
await secretsMigrateCommand(options);
|
|
11443
11403
|
} catch (error) {
|
|
11444
11404
|
console.error(formatError(error));
|
|
@@ -11446,7 +11406,7 @@ program.command("secrets:migrate").description("Copy a deployed stage's secrets
|
|
|
11446
11406
|
}
|
|
11447
11407
|
});
|
|
11448
11408
|
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-
|
|
11409
|
+
const { deployCli } = await import("./cli-B74Ru-V1.mjs");
|
|
11450
11410
|
const globalOptions = program.opts();
|
|
11451
11411
|
const code = await deployCli({
|
|
11452
11412
|
cwd: resolve(globalOptions.cwd ?? process.cwd()),
|
|
@@ -11463,7 +11423,7 @@ program.command("deploy").description("Deploy a stage through its target").optio
|
|
|
11463
11423
|
});
|
|
11464
11424
|
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
11425
|
try {
|
|
11466
|
-
const { rollbackStage } = await import("./rollback-
|
|
11426
|
+
const { rollbackStage } = await import("./rollback-sg0ZhKGG.mjs").then((n) => n.a);
|
|
11467
11427
|
const { terminalCredentials } = await import("./terminal-BdvrmkaC.mjs");
|
|
11468
11428
|
const globalOptions = program.opts();
|
|
11469
11429
|
await rollbackStage({
|
|
@@ -11499,7 +11459,7 @@ program.command("deploy:github").description("Let GitHub Actions deploy a stage:
|
|
|
11499
11459
|
try {
|
|
11500
11460
|
const globalOptions = program.opts();
|
|
11501
11461
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11502
|
-
const { deployGithubCommand } = await import("./github-
|
|
11462
|
+
const { deployGithubCommand } = await import("./github-BBIqk1Jv.mjs");
|
|
11503
11463
|
await deployGithubCommand(options);
|
|
11504
11464
|
} catch (error) {
|
|
11505
11465
|
console.error(formatError(error));
|