@geekmidas/cli 1.10.10 → 1.10.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/{bundler-kk_XJTRp.mjs → bundler-BvByD6tt.mjs} +2 -2
- package/dist/{bundler-kk_XJTRp.mjs.map → bundler-BvByD6tt.mjs.map} +1 -1
- package/dist/{bundler-Bm3Az_sv.cjs → bundler-wY-XZDl9.cjs} +2 -2
- package/dist/{bundler-Bm3Az_sv.cjs.map → bundler-wY-XZDl9.cjs.map} +1 -1
- package/dist/{fullstack-secrets-BC9t9wWB.cjs → fullstack-secrets-AUkUyeW0.cjs} +9 -3
- package/dist/fullstack-secrets-AUkUyeW0.cjs.map +1 -0
- package/dist/{fullstack-secrets-DmUOfLeX.mjs → fullstack-secrets-Bnm_QeZr.mjs} +9 -3
- package/dist/fullstack-secrets-Bnm_QeZr.mjs.map +1 -0
- package/dist/index.cjs +45 -38
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +45 -38
- package/dist/index.mjs.map +1 -1
- package/dist/{reconcile-C0dsg-Gq.mjs → reconcile--yaWO052.mjs} +2 -2
- package/dist/{reconcile-C0dsg-Gq.mjs.map → reconcile--yaWO052.mjs.map} +1 -1
- package/dist/{reconcile-BZ8j_-0z.cjs → reconcile-oktp4i_4.cjs} +2 -2
- package/dist/{reconcile-BZ8j_-0z.cjs.map → reconcile-oktp4i_4.cjs.map} +1 -1
- package/dist/{storage-D6BGLgWf.cjs → storage-B3aXQBpI.cjs} +1 -1
- package/dist/{storage-Cs13jkJ9.cjs → storage-CEisMvif.cjs} +6 -6
- package/dist/{storage-B7H2PPCS.mjs.map → storage-CEisMvif.cjs.map} +1 -1
- package/dist/{storage-C1FNm2EP.mjs → storage-D3lh8Xpq.mjs} +1 -1
- package/dist/{storage-B7H2PPCS.mjs → storage-Df-NFMY9.mjs} +6 -6
- package/dist/{storage-Cs13jkJ9.cjs.map → storage-Df-NFMY9.mjs.map} +1 -1
- package/dist/{sync-CyGe5f1I.mjs → sync-CIzj1CQe.mjs} +1 -1
- package/dist/{sync-oCqELfeA.cjs → sync-CcDvBUu4.cjs} +2 -2
- package/dist/{sync-oCqELfeA.cjs.map → sync-CcDvBUu4.cjs.map} +1 -1
- package/dist/{sync-CzXruMzP.mjs → sync-D-7NTKvV.mjs} +2 -2
- package/dist/{sync-CzXruMzP.mjs.map → sync-D-7NTKvV.mjs.map} +1 -1
- package/dist/sync-QNXT8x13.cjs +4 -0
- package/package.json +3 -3
- package/src/dev/index.ts +6 -1
- package/src/docker/__tests__/compose.spec.ts +24 -11
- package/src/docker/compose.ts +25 -21
- package/src/secrets/__tests__/generator.spec.ts +5 -5
- package/src/secrets/__tests__/storage.spec.ts +7 -7
- package/src/secrets/generator.ts +10 -4
- package/src/secrets/index.ts +4 -4
- package/src/secrets/storage.ts +5 -5
- package/src/secrets/types.ts +1 -1
- package/src/setup/__tests__/reconcile-secrets.spec.ts +3 -3
- package/src/setup/index.ts +5 -0
- package/dist/fullstack-secrets-BC9t9wWB.cjs.map +0 -1
- package/dist/fullstack-secrets-DmUOfLeX.mjs.map +0 -1
- package/dist/sync-DLlwsrBs.cjs +0 -4
package/dist/index.mjs
CHANGED
|
@@ -4,13 +4,13 @@ import { getAppBuildOrder, getDependencyEnvVars, getDeployTargetError, isDeployT
|
|
|
4
4
|
import { getAppNameFromCwd, loadAppConfig, loadConfig, loadWorkspaceAppInfo, loadWorkspaceConfig, parseModuleConfig } from "./config-jsRYHOHU.mjs";
|
|
5
5
|
import { getCredentialsPath, getDokployCredentials, getDokployRegistryId, getDokployToken, removeDokployCredentials, storeDokployCredentials, storeDokployRegistryId } from "./credentials-s1kLcIzK.mjs";
|
|
6
6
|
import { ConstructGenerator, EndpointGenerator, OPENAPI_OUTPUT_PATH, copyAllClients, copyClientToFrontends, generateOpenApi, getBackendOpenApiPath, isPartitionedRoutes, normalizeRoutes, openapiCommand, resolveOpenApiConfig } from "./openapi-DenF-okj.mjs";
|
|
7
|
-
import { getKeyPath, maskPassword, readStageSecrets, secretsExist, setCustomSecret, toEmbeddableSecrets, writeStageSecrets } from "./storage-
|
|
7
|
+
import { getKeyPath, maskPassword, readStageSecrets, secretsExist, setCustomSecret, toEmbeddableSecrets, writeStageSecrets } from "./storage-Df-NFMY9.mjs";
|
|
8
8
|
import { DokployApi } from "./dokploy-api-2ldYoN3i.mjs";
|
|
9
9
|
import { encryptSecrets } from "./encryption-BOH5M-f-.mjs";
|
|
10
10
|
import { CachedStateProvider } from "./CachedStateProvider-BDq5WqSy.mjs";
|
|
11
|
-
import { createStageSecrets, generateConnectionUrls, generateDbPassword, generateDbUrl, generateFullstackCustomSecrets, generateServiceCredentials, rotateServicePassword, writeDockerEnvFromSecrets } from "./fullstack-secrets-
|
|
11
|
+
import { createStageSecrets, generateConnectionUrls, generateDbPassword, generateDbUrl, generateFullstackCustomSecrets, generateServiceCredentials, rotateServicePassword, writeDockerEnvFromSecrets } from "./fullstack-secrets-Bnm_QeZr.mjs";
|
|
12
12
|
import { generateReactQueryCommand } from "./openapi-react-query-C4UdILaI.mjs";
|
|
13
|
-
import { isSSMConfigured, pullSecrets, pushSecrets } from "./sync-
|
|
13
|
+
import { isSSMConfigured, pullSecrets, pushSecrets } from "./sync-D-7NTKvV.mjs";
|
|
14
14
|
import { createRequire } from "node:module";
|
|
15
15
|
import { copyFileSync, existsSync, readFileSync, unlinkSync } from "node:fs";
|
|
16
16
|
import { basename, dirname, join, parse, relative, resolve } from "node:path";
|
|
@@ -35,7 +35,7 @@ import prompts from "prompts";
|
|
|
35
35
|
|
|
36
36
|
//#region package.json
|
|
37
37
|
var name = "@geekmidas/cli";
|
|
38
|
-
var version = "1.10.
|
|
38
|
+
var version = "1.10.10";
|
|
39
39
|
var description = "CLI tools for building Lambda handlers, server applications, and generating OpenAPI specs";
|
|
40
40
|
var private$1 = false;
|
|
41
41
|
var type = "module";
|
|
@@ -838,7 +838,7 @@ function rewriteUrlsWithPorts(secrets, resolvedPorts) {
|
|
|
838
838
|
for (const { defaultPort, resolvedPort } of portReplacements) if (value === String(defaultPort)) result[key] = String(resolvedPort);
|
|
839
839
|
}
|
|
840
840
|
for (const [key, value] of Object.entries(result)) {
|
|
841
|
-
if (!key.endsWith("_URL") && key !== "DATABASE_URL") continue;
|
|
841
|
+
if (!key.endsWith("_URL") && !key.endsWith("_ENDPOINT") && key !== "DATABASE_URL") continue;
|
|
842
842
|
let rewritten = value;
|
|
843
843
|
for (const name$1 of serviceNames) rewritten = rewritten.replace(new RegExp(`@${name$1}:`, "g"), "@localhost:");
|
|
844
844
|
for (const { defaultPort, resolvedPort } of portReplacements) rewritten = replacePortInUrl(rewritten, defaultPort, resolvedPort);
|
|
@@ -2198,7 +2198,7 @@ async function buildForProvider(provider, context, rootOutputDir, endpointGenera
|
|
|
2198
2198
|
let masterKey;
|
|
2199
2199
|
if (context.production?.bundle && !skipBundle) {
|
|
2200
2200
|
logger$9.log(`\n📦 Bundling production server...`);
|
|
2201
|
-
const { bundleServer } = await import("./bundler-
|
|
2201
|
+
const { bundleServer } = await import("./bundler-BvByD6tt.mjs");
|
|
2202
2202
|
const allConstructs = [
|
|
2203
2203
|
...endpoints.map((e) => e.construct),
|
|
2204
2204
|
...functions.map((f) => f.construct),
|
|
@@ -2922,12 +2922,12 @@ services:
|
|
|
2922
2922
|
`;
|
|
2923
2923
|
if (serviceMap.has("rabbitmq")) yaml += ` - RABBITMQ_URL=\${RABBITMQ_URL:-amqp://rabbitmq:5672}
|
|
2924
2924
|
`;
|
|
2925
|
-
if (serviceMap.has("minio")) yaml += ` -
|
|
2926
|
-
-
|
|
2927
|
-
-
|
|
2928
|
-
-
|
|
2929
|
-
-
|
|
2930
|
-
-
|
|
2925
|
+
if (serviceMap.has("minio")) yaml += ` - STORAGE_ENDPOINT=\${STORAGE_ENDPOINT:-http://minio:9000}
|
|
2926
|
+
- STORAGE_ACCESS_KEY_ID=\${STORAGE_ACCESS_KEY_ID:-${imageName}}
|
|
2927
|
+
- STORAGE_SECRET_ACCESS_KEY=\${STORAGE_SECRET_ACCESS_KEY:-${imageName}}
|
|
2928
|
+
- STORAGE_BUCKET=\${STORAGE_BUCKET:-${imageName}}
|
|
2929
|
+
- STORAGE_REGION=\${STORAGE_REGION:-eu-west-1}
|
|
2930
|
+
- STORAGE_FORCE_PATH_STYLE=true
|
|
2931
2931
|
`;
|
|
2932
2932
|
yaml += ` healthcheck:
|
|
2933
2933
|
test: ["CMD", "wget", "-q", "--spider", "http://localhost:${port}${healthCheckPath}"]
|
|
@@ -3009,12 +3009,13 @@ services:
|
|
|
3009
3009
|
container_name: minio
|
|
3010
3010
|
restart: unless-stopped
|
|
3011
3011
|
entrypoint: sh
|
|
3012
|
-
command: -c 'mkdir -p /data/\${
|
|
3012
|
+
command: -c 'mkdir -p /data/\${STORAGE_BUCKET:-${imageName}} && /usr/bin/docker-entrypoint.sh server --console-address ":9001" /data'
|
|
3013
3013
|
environment:
|
|
3014
|
-
MINIO_ROOT_USER: \${
|
|
3015
|
-
MINIO_ROOT_PASSWORD: \${
|
|
3014
|
+
MINIO_ROOT_USER: \${STORAGE_ACCESS_KEY_ID:-${imageName}}
|
|
3015
|
+
MINIO_ROOT_PASSWORD: \${STORAGE_SECRET_ACCESS_KEY:-${imageName}}
|
|
3016
3016
|
ports:
|
|
3017
|
-
- "
|
|
3017
|
+
- "\${MINIO_API_PORT:-9000}:9000"
|
|
3018
|
+
- "\${MINIO_CONSOLE_PORT:-9001}:9001"
|
|
3018
3019
|
volumes:
|
|
3019
3020
|
- minio_data:/data
|
|
3020
3021
|
healthcheck:
|
|
@@ -3102,6 +3103,7 @@ services:
|
|
|
3102
3103
|
`;
|
|
3103
3104
|
for (const [appName, app] of apps) yaml += generateAppService(appName, app, apps, {
|
|
3104
3105
|
registry,
|
|
3106
|
+
projectName: workspace.name,
|
|
3105
3107
|
hasPostgres,
|
|
3106
3108
|
hasRedis,
|
|
3107
3109
|
hasMinio
|
|
@@ -3157,12 +3159,13 @@ services:
|
|
|
3157
3159
|
container_name: ${workspace.name}-minio
|
|
3158
3160
|
restart: unless-stopped
|
|
3159
3161
|
entrypoint: sh
|
|
3160
|
-
command: -c 'mkdir -p /data/\${
|
|
3162
|
+
command: -c 'mkdir -p /data/\${STORAGE_BUCKET:-${workspace.name}} && /usr/bin/docker-entrypoint.sh server --console-address ":9001" /data'
|
|
3161
3163
|
environment:
|
|
3162
|
-
MINIO_ROOT_USER: \${
|
|
3163
|
-
MINIO_ROOT_PASSWORD: \${
|
|
3164
|
+
MINIO_ROOT_USER: \${STORAGE_ACCESS_KEY_ID:-${workspace.name}}
|
|
3165
|
+
MINIO_ROOT_PASSWORD: \${STORAGE_SECRET_ACCESS_KEY:-${workspace.name}}
|
|
3164
3166
|
ports:
|
|
3165
|
-
- "
|
|
3167
|
+
- "\${MINIO_API_PORT:-9000}:9000"
|
|
3168
|
+
- "\${MINIO_CONSOLE_PORT:-9001}:9001"
|
|
3166
3169
|
volumes:
|
|
3167
3170
|
- minio_data:/data
|
|
3168
3171
|
healthcheck:
|
|
@@ -3216,7 +3219,7 @@ function getInfraServiceImage(serviceName, config$1) {
|
|
|
3216
3219
|
* Generate a service definition for an app.
|
|
3217
3220
|
*/
|
|
3218
3221
|
function generateAppService(appName, app, allApps, options) {
|
|
3219
|
-
const { registry, hasPostgres, hasRedis, hasMinio } = options;
|
|
3222
|
+
const { registry, projectName, hasPostgres, hasRedis, hasMinio } = options;
|
|
3220
3223
|
const imageRef = registry ? `\${REGISTRY:-${registry}}/` : "";
|
|
3221
3224
|
const healthCheckPath = app.type === "frontend" ? "/" : "/health";
|
|
3222
3225
|
const healthCheckCmd = app.type === "frontend" ? `["CMD", "wget", "-q", "--spider", "http://localhost:${app.port}/"]` : `["CMD", "wget", "-q", "--spider", "http://localhost:${app.port}${healthCheckPath}"]`;
|
|
@@ -3244,12 +3247,12 @@ function generateAppService(appName, app, allApps, options) {
|
|
|
3244
3247
|
`;
|
|
3245
3248
|
if (hasRedis) yaml += ` - REDIS_URL=\${REDIS_URL:-redis://redis:6379}
|
|
3246
3249
|
`;
|
|
3247
|
-
if (hasMinio) yaml += ` -
|
|
3248
|
-
-
|
|
3249
|
-
-
|
|
3250
|
-
-
|
|
3251
|
-
-
|
|
3252
|
-
-
|
|
3250
|
+
if (hasMinio) yaml += ` - STORAGE_ENDPOINT=\${STORAGE_ENDPOINT:-http://minio:9000}
|
|
3251
|
+
- STORAGE_ACCESS_KEY_ID=\${STORAGE_ACCESS_KEY_ID:-${projectName}}
|
|
3252
|
+
- STORAGE_SECRET_ACCESS_KEY=\${STORAGE_SECRET_ACCESS_KEY:-${projectName}}
|
|
3253
|
+
- STORAGE_BUCKET=\${STORAGE_BUCKET:-${projectName}}
|
|
3254
|
+
- STORAGE_REGION=\${STORAGE_REGION:-eu-west-1}
|
|
3255
|
+
- STORAGE_FORCE_PATH_STYLE=true
|
|
3253
3256
|
`;
|
|
3254
3257
|
}
|
|
3255
3258
|
yaml += ` healthcheck:
|
|
@@ -6307,7 +6310,7 @@ async function deployCommand(options) {
|
|
|
6307
6310
|
dokployConfig = setupResult.config;
|
|
6308
6311
|
finalRegistry = dokployConfig.registry ?? dockerConfig.registry;
|
|
6309
6312
|
if (setupResult.serviceUrls) {
|
|
6310
|
-
const { readStageSecrets: readStageSecrets$1, writeStageSecrets: writeStageSecrets$1, initStageSecrets } = await import("./storage-
|
|
6313
|
+
const { readStageSecrets: readStageSecrets$1, writeStageSecrets: writeStageSecrets$1, initStageSecrets } = await import("./storage-D3lh8Xpq.mjs");
|
|
6311
6314
|
let secrets = await readStageSecrets$1(stage);
|
|
6312
6315
|
if (!secrets) {
|
|
6313
6316
|
logger$3.log(` Creating secrets file for stage "${stage}"...`);
|
|
@@ -11131,7 +11134,7 @@ async function secretsInitCommand(options) {
|
|
|
11131
11134
|
if (secrets.urls.DATABASE_URL) logger$2.log(`\n DATABASE_URL: ${maskUrl(secrets.urls.DATABASE_URL)}`);
|
|
11132
11135
|
if (secrets.urls.REDIS_URL) logger$2.log(` REDIS_URL: ${maskUrl(secrets.urls.REDIS_URL)}`);
|
|
11133
11136
|
if (secrets.urls.RABBITMQ_URL) logger$2.log(` RABBITMQ_URL: ${maskUrl(secrets.urls.RABBITMQ_URL)}`);
|
|
11134
|
-
if (secrets.urls.
|
|
11137
|
+
if (secrets.urls.STORAGE_ENDPOINT) logger$2.log(` STORAGE_ENDPOINT: ${secrets.urls.STORAGE_ENDPOINT}`);
|
|
11135
11138
|
if (Object.keys(secrets.custom).length > 0) logger$2.log(`\n Custom secrets: ${Object.keys(secrets.custom).length}`);
|
|
11136
11139
|
logger$2.log(`\n Use "gkm secrets:show --stage ${stage}" to view secrets`);
|
|
11137
11140
|
logger$2.log(" Use \"gkm secrets:set <KEY> <VALUE> --stage " + stage + "\" to add custom secrets");
|
|
@@ -11199,7 +11202,7 @@ async function secretsShowCommand(options) {
|
|
|
11199
11202
|
if (secrets.urls.DATABASE_URL) logger$2.log(` DATABASE_URL: ${reveal ? secrets.urls.DATABASE_URL : maskUrl(secrets.urls.DATABASE_URL)}`);
|
|
11200
11203
|
if (secrets.urls.REDIS_URL) logger$2.log(` REDIS_URL: ${reveal ? secrets.urls.REDIS_URL : maskUrl(secrets.urls.REDIS_URL)}`);
|
|
11201
11204
|
if (secrets.urls.RABBITMQ_URL) logger$2.log(` RABBITMQ_URL: ${reveal ? secrets.urls.RABBITMQ_URL : maskUrl(secrets.urls.RABBITMQ_URL)}`);
|
|
11202
|
-
if (secrets.urls.
|
|
11205
|
+
if (secrets.urls.STORAGE_ENDPOINT) logger$2.log(` STORAGE_ENDPOINT: ${secrets.urls.STORAGE_ENDPOINT}`);
|
|
11203
11206
|
const customKeys = Object.keys(secrets.custom);
|
|
11204
11207
|
if (customKeys.length > 0) {
|
|
11205
11208
|
logger$2.log("\nCustom Secrets:");
|
|
@@ -11398,6 +11401,10 @@ function reconcileSecrets(secrets, workspace) {
|
|
|
11398
11401
|
];
|
|
11399
11402
|
for (const { key, name: name$1 } of serviceMap) if (workspace.services[key] && !result.services[name$1]) {
|
|
11400
11403
|
const creds = generateServiceCredentials(name$1);
|
|
11404
|
+
if (name$1 === "minio") {
|
|
11405
|
+
creds.bucket = workspace.name;
|
|
11406
|
+
creds.username = workspace.name;
|
|
11407
|
+
}
|
|
11401
11408
|
result = {
|
|
11402
11409
|
...result,
|
|
11403
11410
|
services: {
|
|
@@ -11983,9 +11990,9 @@ program.command("secrets:push").description("Push secrets to remote provider (SS
|
|
|
11983
11990
|
const globalOptions = program.opts();
|
|
11984
11991
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
11985
11992
|
const { loadWorkspaceConfig: loadWorkspaceConfig$1 } = await import("./config.mjs");
|
|
11986
|
-
const { pushSecrets: pushSecrets$1 } = await import("./sync-
|
|
11987
|
-
const { reconcileMissingSecrets } = await import("./reconcile
|
|
11988
|
-
const { readStageSecrets: readStageSecrets$1, writeStageSecrets: writeStageSecrets$1 } = await import("./storage-
|
|
11993
|
+
const { pushSecrets: pushSecrets$1 } = await import("./sync-CIzj1CQe.mjs");
|
|
11994
|
+
const { reconcileMissingSecrets } = await import("./reconcile--yaWO052.mjs");
|
|
11995
|
+
const { readStageSecrets: readStageSecrets$1, writeStageSecrets: writeStageSecrets$1 } = await import("./storage-D3lh8Xpq.mjs");
|
|
11989
11996
|
const { workspace } = await loadWorkspaceConfig$1();
|
|
11990
11997
|
const secrets = await readStageSecrets$1(options.stage, workspace.root);
|
|
11991
11998
|
if (secrets) {
|
|
@@ -12008,9 +12015,9 @@ program.command("secrets:pull").description("Pull secrets from remote provider (
|
|
|
12008
12015
|
const globalOptions = program.opts();
|
|
12009
12016
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
12010
12017
|
const { loadWorkspaceConfig: loadWorkspaceConfig$1 } = await import("./config.mjs");
|
|
12011
|
-
const { pullSecrets: pullSecrets$1 } = await import("./sync-
|
|
12012
|
-
const { writeStageSecrets: writeStageSecrets$1 } = await import("./storage-
|
|
12013
|
-
const { reconcileMissingSecrets } = await import("./reconcile
|
|
12018
|
+
const { pullSecrets: pullSecrets$1 } = await import("./sync-CIzj1CQe.mjs");
|
|
12019
|
+
const { writeStageSecrets: writeStageSecrets$1 } = await import("./storage-D3lh8Xpq.mjs");
|
|
12020
|
+
const { reconcileMissingSecrets } = await import("./reconcile--yaWO052.mjs");
|
|
12014
12021
|
const { workspace } = await loadWorkspaceConfig$1();
|
|
12015
12022
|
let secrets = await pullSecrets$1(options.stage, workspace);
|
|
12016
12023
|
if (!secrets) {
|
|
@@ -12035,8 +12042,8 @@ program.command("secrets:reconcile").description("Backfill missing custom secret
|
|
|
12035
12042
|
const globalOptions = program.opts();
|
|
12036
12043
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
12037
12044
|
const { loadWorkspaceConfig: loadWorkspaceConfig$1 } = await import("./config.mjs");
|
|
12038
|
-
const { reconcileMissingSecrets } = await import("./reconcile
|
|
12039
|
-
const { readStageSecrets: readStageSecrets$1, writeStageSecrets: writeStageSecrets$1 } = await import("./storage-
|
|
12045
|
+
const { reconcileMissingSecrets } = await import("./reconcile--yaWO052.mjs");
|
|
12046
|
+
const { readStageSecrets: readStageSecrets$1, writeStageSecrets: writeStageSecrets$1 } = await import("./storage-D3lh8Xpq.mjs");
|
|
12040
12047
|
const { workspace } = await loadWorkspaceConfig$1();
|
|
12041
12048
|
const secrets = await readStageSecrets$1(options.stage, workspace.root);
|
|
12042
12049
|
if (!secrets) {
|