quidproquo-cli 0.1.5
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/README.md +3 -0
- package/docker/cdk-deployer/Dockerfile +13 -0
- package/docker/dev-server/Dockerfile +48 -0
- package/lib/commonjs/bin/qpq.d.ts +2 -0
- package/lib/commonjs/bin/qpq.js +6 -0
- package/lib/commonjs/bin/qpq.js.map +1 -0
- package/lib/commonjs/bin/qpqCdkApp.d.ts +1 -0
- package/lib/commonjs/bin/qpqCdkApp.js +8 -0
- package/lib/commonjs/bin/qpqCdkApp.js.map +1 -0
- package/lib/commonjs/cli/index.d.ts +1 -0
- package/lib/commonjs/cli/index.js +18 -0
- package/lib/commonjs/cli/index.js.map +1 -0
- package/lib/commonjs/cli/runCli.d.ts +1 -0
- package/lib/commonjs/cli/runCli.js +80 -0
- package/lib/commonjs/cli/runCli.js.map +1 -0
- package/lib/commonjs/commands/go.d.ts +1 -0
- package/lib/commonjs/commands/go.js +28 -0
- package/lib/commonjs/commands/go.js.map +1 -0
- package/lib/commonjs/commands/goDev.d.ts +1 -0
- package/lib/commonjs/commands/goDev.js +143 -0
- package/lib/commonjs/commands/goDev.js.map +1 -0
- package/lib/commonjs/commands/goDevWeb.d.ts +1 -0
- package/lib/commonjs/commands/goDevWeb.js +122 -0
- package/lib/commonjs/commands/goDevWeb.js.map +1 -0
- package/lib/commonjs/commands/goDocker.d.ts +1 -0
- package/lib/commonjs/commands/goDocker.js +32 -0
- package/lib/commonjs/commands/goDocker.js.map +1 -0
- package/lib/commonjs/commands/hooks.d.ts +1 -0
- package/lib/commonjs/commands/hooks.js +26 -0
- package/lib/commonjs/commands/hooks.js.map +1 -0
- package/lib/commonjs/commands/prep.d.ts +1 -0
- package/lib/commonjs/commands/prep.js +28 -0
- package/lib/commonjs/commands/prep.js.map +1 -0
- package/lib/commonjs/commands/publish.d.ts +4 -0
- package/lib/commonjs/commands/publish.js +54 -0
- package/lib/commonjs/commands/publish.js.map +1 -0
- package/lib/commonjs/commands/synth.d.ts +1 -0
- package/lib/commonjs/commands/synth.js +79 -0
- package/lib/commonjs/commands/synth.js.map +1 -0
- package/lib/commonjs/commands/teardown.d.ts +1 -0
- package/lib/commonjs/commands/teardown.js +33 -0
- package/lib/commonjs/commands/teardown.js.map +1 -0
- package/lib/commonjs/index.d.ts +1 -0
- package/lib/commonjs/index.js +18 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/lib/args.d.ts +2 -0
- package/lib/commonjs/lib/args.js +21 -0
- package/lib/commonjs/lib/args.js.map +1 -0
- package/lib/commonjs/lib/deployEnv.d.ts +6 -0
- package/lib/commonjs/lib/deployEnv.js +76 -0
- package/lib/commonjs/lib/deployEnv.js.map +1 -0
- package/lib/commonjs/lib/deployPrompts.d.ts +25 -0
- package/lib/commonjs/lib/deployPrompts.js +83 -0
- package/lib/commonjs/lib/deployPrompts.js.map +1 -0
- package/lib/commonjs/lib/devServerEntry.d.ts +1 -0
- package/lib/commonjs/lib/devServerEntry.js +53 -0
- package/lib/commonjs/lib/devServerEntry.js.map +1 -0
- package/lib/commonjs/lib/discovery.d.ts +10 -0
- package/lib/commonjs/lib/discovery.js +56 -0
- package/lib/commonjs/lib/discovery.js.map +1 -0
- package/lib/commonjs/lib/hooks.d.ts +2 -0
- package/lib/commonjs/lib/hooks.js +45 -0
- package/lib/commonjs/lib/hooks.js.map +1 -0
- package/lib/commonjs/lib/packageRoot.d.ts +1 -0
- package/lib/commonjs/lib/packageRoot.js +21 -0
- package/lib/commonjs/lib/packageRoot.js.map +1 -0
- package/lib/commonjs/lib/prompts.d.ts +3 -0
- package/lib/commonjs/lib/prompts.js +64 -0
- package/lib/commonjs/lib/prompts.js.map +1 -0
- package/lib/commonjs/lib/qpqConfigs.d.ts +3 -0
- package/lib/commonjs/lib/qpqConfigs.js +19 -0
- package/lib/commonjs/lib/qpqConfigs.js.map +1 -0
- package/lib/commonjs/lib/resolveAppSelection.d.ts +6 -0
- package/lib/commonjs/lib/resolveAppSelection.js +58 -0
- package/lib/commonjs/lib/resolveAppSelection.js.map +1 -0
- package/lib/commonjs/lib/rspackRun.d.ts +2 -0
- package/lib/commonjs/lib/rspackRun.js +23 -0
- package/lib/commonjs/lib/rspackRun.js.map +1 -0
- package/lib/commonjs/lib/runCommand.d.ts +13 -0
- package/lib/commonjs/lib/runCommand.js +78 -0
- package/lib/commonjs/lib/runCommand.js.map +1 -0
- package/lib/commonjs/lib/runTasks.d.ts +10 -0
- package/lib/commonjs/lib/runTasks.js +42 -0
- package/lib/commonjs/lib/runTasks.js.map +1 -0
- package/lib/commonjs/lib/timing.d.ts +2 -0
- package/lib/commonjs/lib/timing.js +11 -0
- package/lib/commonjs/lib/timing.js.map +1 -0
- package/lib/commonjs/lib/views.d.ts +2 -0
- package/lib/commonjs/lib/views.js +32 -0
- package/lib/commonjs/lib/views.js.map +1 -0
- package/lib/commonjs/platforms/aws/awsCredentials.d.ts +1 -0
- package/lib/commonjs/platforms/aws/awsCredentials.js +28 -0
- package/lib/commonjs/platforms/aws/awsCredentials.js.map +1 -0
- package/lib/commonjs/platforms/aws/cdkApp.d.ts +2 -0
- package/lib/commonjs/platforms/aws/cdkApp.js +19 -0
- package/lib/commonjs/platforms/aws/cdkApp.js.map +1 -0
- package/lib/commonjs/platforms/aws/go.d.ts +2 -0
- package/lib/commonjs/platforms/aws/go.js +116 -0
- package/lib/commonjs/platforms/aws/go.js.map +1 -0
- package/lib/commonjs/platforms/aws/goDocker.d.ts +2 -0
- package/lib/commonjs/platforms/aws/goDocker.js +287 -0
- package/lib/commonjs/platforms/aws/goDocker.js.map +1 -0
- package/lib/commonjs/platforms/aws/identity.d.ts +2 -0
- package/lib/commonjs/platforms/aws/identity.js +26 -0
- package/lib/commonjs/platforms/aws/identity.js.map +1 -0
- package/lib/commonjs/platforms/aws/index.d.ts +2 -0
- package/lib/commonjs/platforms/aws/index.js +19 -0
- package/lib/commonjs/platforms/aws/index.js.map +1 -0
- package/lib/commonjs/platforms/aws/publish.d.ts +4 -0
- package/lib/commonjs/platforms/aws/publish.js +66 -0
- package/lib/commonjs/platforms/aws/publish.js.map +1 -0
- package/lib/commonjs/platforms/aws/remote.d.ts +11 -0
- package/lib/commonjs/platforms/aws/remote.js +106 -0
- package/lib/commonjs/platforms/aws/remote.js.map +1 -0
- package/lib/commonjs/platforms/aws/stacks.d.ts +7 -0
- package/lib/commonjs/platforms/aws/stacks.js +91 -0
- package/lib/commonjs/platforms/aws/stacks.js.map +1 -0
- package/lib/commonjs/platforms/aws/teardown.d.ts +2 -0
- package/lib/commonjs/platforms/aws/teardown.js +59 -0
- package/lib/commonjs/platforms/aws/teardown.js.map +1 -0
- package/lib/commonjs/platforms/aws/viewsSync.d.ts +2 -0
- package/lib/commonjs/platforms/aws/viewsSync.js +39 -0
- package/lib/commonjs/platforms/aws/viewsSync.js.map +1 -0
- package/lib/commonjs/platforms/docker/go.d.ts +2 -0
- package/lib/commonjs/platforms/docker/go.js +160 -0
- package/lib/commonjs/platforms/docker/go.js.map +1 -0
- package/lib/commonjs/platforms/docker/index.d.ts +2 -0
- package/lib/commonjs/platforms/docker/index.js +27 -0
- package/lib/commonjs/platforms/docker/index.js.map +1 -0
- package/lib/commonjs/platforms/index.d.ts +4 -0
- package/lib/commonjs/platforms/index.js +39 -0
- package/lib/commonjs/platforms/index.js.map +1 -0
- package/lib/commonjs/platforms/types.d.ts +16 -0
- package/lib/commonjs/platforms/types.js +9 -0
- package/lib/commonjs/platforms/types.js.map +1 -0
- package/lib/esm/bin/qpq.d.ts +2 -0
- package/lib/esm/bin/qpq.js +4 -0
- package/lib/esm/bin/qpq.js.map +1 -0
- package/lib/esm/bin/qpqCdkApp.d.ts +1 -0
- package/lib/esm/bin/qpqCdkApp.js +6 -0
- package/lib/esm/bin/qpqCdkApp.js.map +1 -0
- package/lib/esm/cli/index.d.ts +1 -0
- package/lib/esm/cli/index.js +2 -0
- package/lib/esm/cli/index.js.map +1 -0
- package/lib/esm/cli/runCli.d.ts +1 -0
- package/lib/esm/cli/runCli.js +67 -0
- package/lib/esm/cli/runCli.js.map +1 -0
- package/lib/esm/commands/go.d.ts +1 -0
- package/lib/esm/commands/go.js +15 -0
- package/lib/esm/commands/go.js.map +1 -0
- package/lib/esm/commands/goDev.d.ts +1 -0
- package/lib/esm/commands/goDev.js +127 -0
- package/lib/esm/commands/goDev.js.map +1 -0
- package/lib/esm/commands/goDevWeb.d.ts +1 -0
- package/lib/esm/commands/goDevWeb.js +107 -0
- package/lib/esm/commands/goDevWeb.js.map +1 -0
- package/lib/esm/commands/goDocker.d.ts +1 -0
- package/lib/esm/commands/goDocker.js +19 -0
- package/lib/esm/commands/goDocker.js.map +1 -0
- package/lib/esm/commands/hooks.d.ts +1 -0
- package/lib/esm/commands/hooks.js +13 -0
- package/lib/esm/commands/hooks.js.map +1 -0
- package/lib/esm/commands/prep.d.ts +1 -0
- package/lib/esm/commands/prep.js +15 -0
- package/lib/esm/commands/prep.js.map +1 -0
- package/lib/esm/commands/publish.d.ts +4 -0
- package/lib/esm/commands/publish.js +38 -0
- package/lib/esm/commands/publish.js.map +1 -0
- package/lib/esm/commands/synth.d.ts +1 -0
- package/lib/esm/commands/synth.js +63 -0
- package/lib/esm/commands/synth.js.map +1 -0
- package/lib/esm/commands/teardown.d.ts +1 -0
- package/lib/esm/commands/teardown.js +20 -0
- package/lib/esm/commands/teardown.js.map +1 -0
- package/lib/esm/index.d.ts +1 -0
- package/lib/esm/index.js +2 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/lib/args.d.ts +2 -0
- package/lib/esm/lib/args.js +16 -0
- package/lib/esm/lib/args.js.map +1 -0
- package/lib/esm/lib/deployEnv.d.ts +6 -0
- package/lib/esm/lib/deployEnv.js +60 -0
- package/lib/esm/lib/deployEnv.js.map +1 -0
- package/lib/esm/lib/deployPrompts.d.ts +25 -0
- package/lib/esm/lib/deployPrompts.js +69 -0
- package/lib/esm/lib/deployPrompts.js.map +1 -0
- package/lib/esm/lib/devServerEntry.d.ts +1 -0
- package/lib/esm/lib/devServerEntry.js +46 -0
- package/lib/esm/lib/devServerEntry.js.map +1 -0
- package/lib/esm/lib/discovery.d.ts +10 -0
- package/lib/esm/lib/discovery.js +40 -0
- package/lib/esm/lib/discovery.js.map +1 -0
- package/lib/esm/lib/hooks.d.ts +2 -0
- package/lib/esm/lib/hooks.js +27 -0
- package/lib/esm/lib/hooks.js.map +1 -0
- package/lib/esm/lib/packageRoot.d.ts +1 -0
- package/lib/esm/lib/packageRoot.js +14 -0
- package/lib/esm/lib/packageRoot.js.map +1 -0
- package/lib/esm/lib/prompts.d.ts +3 -0
- package/lib/esm/lib/prompts.js +16 -0
- package/lib/esm/lib/prompts.js.map +1 -0
- package/lib/esm/lib/qpqConfigs.d.ts +3 -0
- package/lib/esm/lib/qpqConfigs.js +14 -0
- package/lib/esm/lib/qpqConfigs.js.map +1 -0
- package/lib/esm/lib/resolveAppSelection.d.ts +6 -0
- package/lib/esm/lib/resolveAppSelection.js +45 -0
- package/lib/esm/lib/resolveAppSelection.js.map +1 -0
- package/lib/esm/lib/rspackRun.d.ts +2 -0
- package/lib/esm/lib/rspackRun.js +19 -0
- package/lib/esm/lib/rspackRun.js.map +1 -0
- package/lib/esm/lib/runCommand.d.ts +13 -0
- package/lib/esm/lib/runCommand.js +69 -0
- package/lib/esm/lib/runCommand.js.map +1 -0
- package/lib/esm/lib/runTasks.d.ts +10 -0
- package/lib/esm/lib/runTasks.js +28 -0
- package/lib/esm/lib/runTasks.js.map +1 -0
- package/lib/esm/lib/timing.d.ts +2 -0
- package/lib/esm/lib/timing.js +6 -0
- package/lib/esm/lib/timing.js.map +1 -0
- package/lib/esm/lib/views.d.ts +2 -0
- package/lib/esm/lib/views.js +15 -0
- package/lib/esm/lib/views.js.map +1 -0
- package/lib/esm/platforms/aws/awsCredentials.d.ts +1 -0
- package/lib/esm/platforms/aws/awsCredentials.js +15 -0
- package/lib/esm/platforms/aws/awsCredentials.js.map +1 -0
- package/lib/esm/platforms/aws/cdkApp.d.ts +2 -0
- package/lib/esm/platforms/aws/cdkApp.js +11 -0
- package/lib/esm/platforms/aws/cdkApp.js.map +1 -0
- package/lib/esm/platforms/aws/go.d.ts +2 -0
- package/lib/esm/platforms/aws/go.js +100 -0
- package/lib/esm/platforms/aws/go.js.map +1 -0
- package/lib/esm/platforms/aws/goDocker.d.ts +2 -0
- package/lib/esm/platforms/aws/goDocker.js +271 -0
- package/lib/esm/platforms/aws/goDocker.js.map +1 -0
- package/lib/esm/platforms/aws/identity.d.ts +2 -0
- package/lib/esm/platforms/aws/identity.js +22 -0
- package/lib/esm/platforms/aws/identity.js.map +1 -0
- package/lib/esm/platforms/aws/index.d.ts +2 -0
- package/lib/esm/platforms/aws/index.js +16 -0
- package/lib/esm/platforms/aws/index.js.map +1 -0
- package/lib/esm/platforms/aws/publish.d.ts +4 -0
- package/lib/esm/platforms/aws/publish.js +50 -0
- package/lib/esm/platforms/aws/publish.js.map +1 -0
- package/lib/esm/platforms/aws/remote.d.ts +11 -0
- package/lib/esm/platforms/aws/remote.js +90 -0
- package/lib/esm/platforms/aws/remote.js.map +1 -0
- package/lib/esm/platforms/aws/stacks.d.ts +7 -0
- package/lib/esm/platforms/aws/stacks.js +69 -0
- package/lib/esm/platforms/aws/stacks.js.map +1 -0
- package/lib/esm/platforms/aws/teardown.d.ts +2 -0
- package/lib/esm/platforms/aws/teardown.js +46 -0
- package/lib/esm/platforms/aws/teardown.js.map +1 -0
- package/lib/esm/platforms/aws/viewsSync.d.ts +2 -0
- package/lib/esm/platforms/aws/viewsSync.js +25 -0
- package/lib/esm/platforms/aws/viewsSync.js.map +1 -0
- package/lib/esm/platforms/docker/go.d.ts +2 -0
- package/lib/esm/platforms/docker/go.js +143 -0
- package/lib/esm/platforms/docker/go.js.map +1 -0
- package/lib/esm/platforms/docker/index.d.ts +2 -0
- package/lib/esm/platforms/docker/index.js +15 -0
- package/lib/esm/platforms/docker/index.js.map +1 -0
- package/lib/esm/platforms/index.d.ts +4 -0
- package/lib/esm/platforms/index.js +20 -0
- package/lib/esm/platforms/index.js.map +1 -0
- package/lib/esm/platforms/types.d.ts +16 -0
- package/lib/esm/platforms/types.js +6 -0
- package/lib/esm/platforms/types.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runTasks.js","sourceRoot":"","sources":["../../../src/lib/runTasks.ts"],"names":[],"mappings":";;;;;;;;;;;;AAGA,+EAA+E;AAC/E,mEAAmE;AAC5D,MAAM,QAAQ,GAAG,CAAO,KAAa,EAAE,KAAa,EAA0B,EAAE;IACrF,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,GAAS,EAAE;QAC7C,OAAO,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;YAC9B,SAAS,IAAI,CAAC,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;YACnB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;IACH,CAAC,CAAA,CAAC,CACH,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAA,CAAC;AApBW,QAAA,QAAQ,YAoBnB;AAEK,MAAM,gBAAgB,GAAG,CAAC,SAAiB,EAAE,QAAuB,EAAQ,EAAE;IACnF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAClC,OAAO,CAAC,KAAK,CAAC,KAAK,SAAS,cAAc,CAAC,CAAC;IAC5C,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7F,MAAM,IAAI,KAAK,CAAC,GAAG,SAAS,KAAK,QAAQ,CAAC,MAAM,iBAAiB,CAAC,CAAC;AACrE,CAAC,CAAC;AALW,QAAA,gBAAgB,oBAK3B","sourcesContent":["export type Task = { label: string; run: () => Promise<void> };\nexport type TaskFailure = { label: string; error: Error };\n\n// Run tasks with at most `limit` in flight; never rejects — failures come back\n// labelled so a whole wave can finish before we report what broke.\nexport const runTasks = async (tasks: Task[], limit: number): Promise<TaskFailure[]> => {\n const failures: TaskFailure[] = [];\n let nextIndex = 0;\n\n const workerCount = Math.max(1, Math.min(limit, tasks.length));\n await Promise.all(\n Array.from({ length: workerCount }, async () => {\n while (nextIndex < tasks.length) {\n const task = tasks[nextIndex];\n nextIndex += 1;\n try {\n await task.run();\n } catch (error) {\n failures.push({ label: task.label, error: error as Error });\n }\n }\n }),\n );\n\n return failures;\n};\n\nexport const assertNoFailures = (phaseName: string, failures: TaskFailure[]): void => {\n if (failures.length === 0) return;\n console.error(`\\n${phaseName} failed for:`);\n failures.forEach((failure) => console.error(` ${failure.label}: ${failure.error.message}`));\n throw new Error(`${phaseName}: ${failures.length} task(s) failed`);\n};\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.logTimeEnd = exports.logTimeStart = void 0;
|
|
4
|
+
const logTimeStart = (name) => console.time(name);
|
|
5
|
+
exports.logTimeStart = logTimeStart;
|
|
6
|
+
const logTimeEnd = (name) => {
|
|
7
|
+
console.log('When:', new Date().toLocaleTimeString());
|
|
8
|
+
console.timeEnd(name);
|
|
9
|
+
};
|
|
10
|
+
exports.logTimeEnd = logTimeEnd;
|
|
11
|
+
//# sourceMappingURL=timing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timing.js","sourceRoot":"","sources":["../../../src/lib/timing.ts"],"names":[],"mappings":";;;AAAO,MAAM,YAAY,GAAG,CAAC,IAAY,EAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAA1D,QAAA,YAAY,gBAA8C;AAEhE,MAAM,UAAU,GAAG,CAAC,IAAY,EAAQ,EAAE;IAC/C,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC,CAAC;AAHW,QAAA,UAAU,cAGrB","sourcesContent":["export const logTimeStart = (name: string): void => console.time(name);\n\nexport const logTimeEnd = (name: string): void => {\n console.log('When:', new Date().toLocaleTimeString());\n console.timeEnd(name);\n};\n"]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.getViewsDistDir = exports.bundleViews = void 0;
|
|
16
|
+
// Views build — programmatic (getViewsRspackConfig), platform-neutral. Where
|
|
17
|
+
// the built views get hosted is a platform driver concern (see
|
|
18
|
+
// platforms/<platform>/viewsSync).
|
|
19
|
+
const quidproquo_deploy_rspack_1 = require("quidproquo-deploy-rspack");
|
|
20
|
+
const path_1 = __importDefault(require("path"));
|
|
21
|
+
const discovery_1 = require("./discovery");
|
|
22
|
+
const rspackRun_1 = require("./rspackRun");
|
|
23
|
+
const bundleViews = (appName, serviceName) => __awaiter(void 0, void 0, void 0, function* () {
|
|
24
|
+
const viewsDir = path_1.default.join((0, discovery_1.getServiceDirectory)(appName, serviceName), 'views');
|
|
25
|
+
process.env.NODE_ENV = 'production';
|
|
26
|
+
delete process.env.LOCAL_DEV_SERVER;
|
|
27
|
+
yield (0, rspackRun_1.runRspack)((0, quidproquo_deploy_rspack_1.getViewsRspackConfig)(viewsDir));
|
|
28
|
+
});
|
|
29
|
+
exports.bundleViews = bundleViews;
|
|
30
|
+
const getViewsDistDir = (appName, serviceName) => path_1.default.join((0, discovery_1.getRoot)(), 'dist', 'apps', appName, 'services', serviceName, 'views');
|
|
31
|
+
exports.getViewsDistDir = getViewsDistDir;
|
|
32
|
+
//# sourceMappingURL=views.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"views.js","sourceRoot":"","sources":["../../../src/lib/views.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,6EAA6E;AAC7E,+DAA+D;AAC/D,mCAAmC;AACnC,uEAAgE;AAEhE,gDAAwB;AAExB,2CAA2D;AAC3D,2CAAwC;AAEjC,MAAM,WAAW,GAAG,CAAO,OAAe,EAAE,WAAmB,EAAiB,EAAE;IACvF,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,IAAA,+BAAmB,EAAC,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;IAE/E,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,YAAY,CAAC;IACpC,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAEpC,MAAM,IAAA,qBAAS,EAAC,IAAA,+CAAoB,EAAC,QAAQ,CAAC,CAAC,CAAC;AAClD,CAAC,CAAA,CAAC;AAPW,QAAA,WAAW,eAOtB;AAEK,MAAM,eAAe,GAAG,CAAC,OAAe,EAAE,WAAmB,EAAU,EAAE,CAC9E,cAAI,CAAC,IAAI,CAAC,IAAA,mBAAO,GAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AADrE,QAAA,eAAe,mBACsD","sourcesContent":["// Views build — programmatic (getViewsRspackConfig), platform-neutral. Where\n// the built views get hosted is a platform driver concern (see\n// platforms/<platform>/viewsSync).\nimport { getViewsRspackConfig } from 'quidproquo-deploy-rspack';\n\nimport path from 'path';\n\nimport { getRoot, getServiceDirectory } from './discovery';\nimport { runRspack } from './rspackRun';\n\nexport const bundleViews = async (appName: string, serviceName: string): Promise<void> => {\n const viewsDir = path.join(getServiceDirectory(appName, serviceName), 'views');\n\n process.env.NODE_ENV = 'production';\n delete process.env.LOCAL_DEV_SERVER;\n\n await runRspack(getViewsRspackConfig(viewsDir));\n};\n\nexport const getViewsDistDir = (appName: string, serviceName: string): string =>\n path.join(getRoot(), 'dist', 'apps', appName, 'services', serviceName, 'views');\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const isAwsCredentialsValid: () => Promise<boolean>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.isAwsCredentialsValid = void 0;
|
|
13
|
+
const client_sts_1 = require("@aws-sdk/client-sts");
|
|
14
|
+
const isAwsCredentialsValid = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
15
|
+
try {
|
|
16
|
+
const client = new client_sts_1.STSClient({
|
|
17
|
+
region: process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION || 'us-east-1',
|
|
18
|
+
});
|
|
19
|
+
yield client.send(new client_sts_1.GetCallerIdentityCommand({}));
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
console.log('Error validating AWS credentials:', error);
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
exports.isAwsCredentialsValid = isAwsCredentialsValid;
|
|
28
|
+
//# sourceMappingURL=awsCredentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"awsCredentials.js","sourceRoot":"","sources":["../../../../src/platforms/aws/awsCredentials.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA0E;AAEnE,MAAM,qBAAqB,GAAG,GAA2B,EAAE;IAChE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,sBAAS,CAAC;YAC3B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,WAAW;SAChF,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,qCAAwB,CAAC,EAAE,CAAC,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAA,CAAC;AAXW,QAAA,qBAAqB,yBAWhC","sourcesContent":["import { GetCallerIdentityCommand, STSClient } from '@aws-sdk/client-sts';\n\nexport const isAwsCredentialsValid = async (): Promise<boolean> => {\n try {\n const client = new STSClient({\n region: process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION || 'us-east-1',\n });\n await client.send(new GetCallerIdentityCommand({}));\n return true;\n } catch (error) {\n console.log('Error validating AWS credentials:', error);\n return false;\n }\n};\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getDockerDir = exports.getCdkAppCommand = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const packageRoot_1 = require("../../lib/packageRoot");
|
|
9
|
+
// The CDK app command (`cdk ... --app "<this>"`): quidproquo-deploy-awscdk's
|
|
10
|
+
// generic workspace app under ts-node hooks, with DEPLOY_* in the env.
|
|
11
|
+
const getCdkAppCommand = () => {
|
|
12
|
+
const cdkAppScript = path_1.default.join((0, packageRoot_1.getOwnPackageRoot)(), 'lib', 'commonjs', 'bin', 'qpqCdkApp.js');
|
|
13
|
+
return `node -r ts-node/register/transpile-only "${cdkAppScript}"`;
|
|
14
|
+
};
|
|
15
|
+
exports.getCdkAppCommand = getCdkAppCommand;
|
|
16
|
+
// The docker build context for the go:docker deployer image.
|
|
17
|
+
const getDockerDir = () => path_1.default.join((0, packageRoot_1.getOwnPackageRoot)(), 'docker', 'cdk-deployer');
|
|
18
|
+
exports.getDockerDir = getDockerDir;
|
|
19
|
+
//# sourceMappingURL=cdkApp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdkApp.js","sourceRoot":"","sources":["../../../../src/platforms/aws/cdkApp.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAExB,uDAA0D;AAE1D,6EAA6E;AAC7E,uEAAuE;AAChE,MAAM,gBAAgB,GAAG,GAAW,EAAE;IAC3C,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,IAAA,+BAAiB,GAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;IAC9F,OAAO,4CAA4C,YAAY,GAAG,CAAC;AACrE,CAAC,CAAC;AAHW,QAAA,gBAAgB,oBAG3B;AAEF,6DAA6D;AACtD,MAAM,YAAY,GAAG,GAAW,EAAE,CAAC,cAAI,CAAC,IAAI,CAAC,IAAA,+BAAiB,GAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;AAAtF,QAAA,YAAY,gBAA0E","sourcesContent":["import path from 'path';\n\nimport { getOwnPackageRoot } from '../../lib/packageRoot';\n\n// The CDK app command (`cdk ... --app \"<this>\"`): quidproquo-deploy-awscdk's\n// generic workspace app under ts-node hooks, with DEPLOY_* in the env.\nexport const getCdkAppCommand = (): string => {\n const cdkAppScript = path.join(getOwnPackageRoot(), 'lib', 'commonjs', 'bin', 'qpqCdkApp.js');\n return `node -r ts-node/register/transpile-only \"${cdkAppScript}\"`;\n};\n\n// The docker build context for the go:docker deployer image.\nexport const getDockerDir = (): string => path.join(getOwnPackageRoot(), 'docker', 'cdk-deployer');\n"]}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.awsGo = void 0;
|
|
16
|
+
// AWS sequential deploy (`qpq go`). Per service it: synths the QPQ config,
|
|
17
|
+
// rspack-bundles the backend (programmatic — no per-service rspack.config.ts),
|
|
18
|
+
// deploys the inf/api/web CDK stacks (cdk runs the generic workspace app via
|
|
19
|
+
// --app), bundles views (rspack, production) and syncs them to S3.
|
|
20
|
+
const quidproquo_deploy_awscdk_1 = require("quidproquo-deploy-awscdk");
|
|
21
|
+
const quidproquo_deploy_rspack_1 = require("quidproquo-deploy-rspack");
|
|
22
|
+
const path_1 = __importDefault(require("path"));
|
|
23
|
+
const synth_1 = require("../../commands/synth");
|
|
24
|
+
const discovery_1 = require("../../lib/discovery");
|
|
25
|
+
const hooks_1 = require("../../lib/hooks");
|
|
26
|
+
const qpqConfigs_1 = require("../../lib/qpqConfigs");
|
|
27
|
+
const rspackRun_1 = require("../../lib/rspackRun");
|
|
28
|
+
const runCommand_1 = require("../../lib/runCommand");
|
|
29
|
+
const timing_1 = require("../../lib/timing");
|
|
30
|
+
const views_1 = require("../../lib/views");
|
|
31
|
+
const awsCredentials_1 = require("./awsCredentials");
|
|
32
|
+
const stacks_1 = require("./stacks");
|
|
33
|
+
const viewsSync_1 = require("./viewsSync");
|
|
34
|
+
const buildAndDeploy = (serviceName, needsSynth, needsBuildApi, needsInfStack, needsApiStack, needsWebStack, needsViewStack, appName) => __awaiter(void 0, void 0, void 0, function* () {
|
|
35
|
+
if (needsSynth) {
|
|
36
|
+
console.log('Synth QPQ Configs');
|
|
37
|
+
yield (0, synth_1.synthCommand)([serviceName, '--app', appName]);
|
|
38
|
+
}
|
|
39
|
+
const qpqConfigForService = (0, qpqConfigs_1.loadServiceQpqConfig)(appName, serviceName);
|
|
40
|
+
if (needsBuildApi) {
|
|
41
|
+
console.log('Building Api: ', serviceName);
|
|
42
|
+
yield (0, rspackRun_1.runRspack)((0, quidproquo_deploy_rspack_1.getServiceRspackConfig)(qpqConfigForService, path_1.default.join((0, discovery_1.getServiceDirectory)(appName, serviceName), 'service')));
|
|
43
|
+
}
|
|
44
|
+
if (needsInfStack) {
|
|
45
|
+
console.log('Deploy Inf: ', serviceName);
|
|
46
|
+
yield (0, stacks_1.deployServiceStack)(serviceName, quidproquo_deploy_awscdk_1.qpqDeployAwsCdkUtils.getInfStackName(qpqConfigForService), appName);
|
|
47
|
+
}
|
|
48
|
+
if (needsApiStack) {
|
|
49
|
+
console.log('Deploy Api: ', serviceName);
|
|
50
|
+
yield (0, stacks_1.deployServiceStack)(serviceName, quidproquo_deploy_awscdk_1.qpqDeployAwsCdkUtils.getApiStackName(qpqConfigForService), appName);
|
|
51
|
+
}
|
|
52
|
+
if (needsWebStack) {
|
|
53
|
+
console.log('Deploy Web: ', serviceName);
|
|
54
|
+
yield (0, stacks_1.deployServiceStack)(serviceName, quidproquo_deploy_awscdk_1.qpqDeployAwsCdkUtils.getWebStackName(qpqConfigForService), appName);
|
|
55
|
+
}
|
|
56
|
+
if (needsViewStack && (0, discovery_1.getServiceNamesWithViews)(appName).includes(serviceName)) {
|
|
57
|
+
console.log('Building Views: ', serviceName);
|
|
58
|
+
yield (0, views_1.bundleViews)(appName, serviceName);
|
|
59
|
+
yield (0, viewsSync_1.syncViewsToS3)(appName, serviceName);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
const awsGo = (appName, plan) => __awaiter(void 0, void 0, void 0, function* () {
|
|
63
|
+
if (plan.kind === 'cancelled') {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
(0, timing_1.logTimeStart)('totalTime');
|
|
67
|
+
if (plan.kind === 'account') {
|
|
68
|
+
yield (0, stacks_1.deployAccountStack)(plan.appName);
|
|
69
|
+
(0, timing_1.logTimeEnd)('totalTime');
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (plan.kind === 'bootstrap') {
|
|
73
|
+
// Actor bootstraps deploy into a shared account — leave the account-level
|
|
74
|
+
// guardrails stack alone (deploy it explicitly via the 'account' option).
|
|
75
|
+
if (process.env.ACTOR_NAME) {
|
|
76
|
+
console.log('Skipping account stack for actor deploy');
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
yield (0, stacks_1.deployAccountStack)(plan.appName);
|
|
80
|
+
}
|
|
81
|
+
if (plan.includeDomain) {
|
|
82
|
+
yield (0, stacks_1.deployDomainStack)(plan.appName);
|
|
83
|
+
}
|
|
84
|
+
yield (0, stacks_1.deployBootstrapStack)(plan.appName);
|
|
85
|
+
(0, timing_1.logTimeEnd)('totalTime');
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const { services, stacks } = plan;
|
|
89
|
+
const shouldBuildApi = stacks !== 'views';
|
|
90
|
+
console.log('\n\nRunning automated deploy\n\n');
|
|
91
|
+
console.log('Executing for services');
|
|
92
|
+
console.log(services.join(', '));
|
|
93
|
+
if ((yield (0, awsCredentials_1.isAwsCredentialsValid)()) === false) {
|
|
94
|
+
console.log('Credentials are expired or invalid.');
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const allStacks = stacks === 'all';
|
|
98
|
+
yield (0, hooks_1.runAppHook)(appName, 'predeploy');
|
|
99
|
+
// Workspace packages resolve through their built dist/ (package.json main),
|
|
100
|
+
// so bundles would ship stale code unless every lib is tsc'd first.
|
|
101
|
+
console.log('Building workspace packages');
|
|
102
|
+
yield (0, runCommand_1.runCommand)('npm', ['run', 'build', '--workspaces', '--if-present']);
|
|
103
|
+
// Views uploads resolve bucket names from the shell service's config.
|
|
104
|
+
if (allStacks || stacks === 'views') {
|
|
105
|
+
yield (0, synth_1.synthCommand)(['shell', '--app', appName]);
|
|
106
|
+
}
|
|
107
|
+
for (let phase = 0; phase <= 5; phase += 1) {
|
|
108
|
+
yield services.reduce((cur, service) => __awaiter(void 0, void 0, void 0, function* () {
|
|
109
|
+
yield cur;
|
|
110
|
+
return buildAndDeploy(service, phase === 0, phase === 1 && shouldBuildApi, phase === 2 && (allStacks || stacks === 'inf'), phase === 3 && (allStacks || stacks === 'api'), phase === 4 && (allStacks || stacks === 'web'), phase === 5 && (allStacks || stacks === 'views'), appName);
|
|
111
|
+
}), Promise.resolve());
|
|
112
|
+
}
|
|
113
|
+
(0, timing_1.logTimeEnd)('totalTime');
|
|
114
|
+
});
|
|
115
|
+
exports.awsGo = awsGo;
|
|
116
|
+
//# sourceMappingURL=go.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"go.js","sourceRoot":"","sources":["../../../../src/platforms/aws/go.ts"],"names":[],"mappings":"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","sourcesContent":["// AWS sequential deploy (`qpq go`). Per service it: synths the QPQ config,\n// rspack-bundles the backend (programmatic — no per-service rspack.config.ts),\n// deploys the inf/api/web CDK stacks (cdk runs the generic workspace app via\n// --app), bundles views (rspack, production) and syncs them to S3.\nimport { qpqDeployAwsCdkUtils } from 'quidproquo-deploy-awscdk';\nimport { getServiceRspackConfig } from 'quidproquo-deploy-rspack';\n\nimport path from 'path';\n\nimport { synthCommand } from '../../commands/synth';\nimport { DeployPlan } from '../../lib/deployPrompts';\nimport { getServiceDirectory, getServiceNamesWithViews } from '../../lib/discovery';\nimport { runAppHook } from '../../lib/hooks';\nimport { loadServiceQpqConfig } from '../../lib/qpqConfigs';\nimport { runRspack } from '../../lib/rspackRun';\nimport { runCommand } from '../../lib/runCommand';\nimport { logTimeEnd, logTimeStart } from '../../lib/timing';\nimport { bundleViews } from '../../lib/views';\nimport { isAwsCredentialsValid } from './awsCredentials';\nimport { deployAccountStack, deployBootstrapStack, deployDomainStack, deployServiceStack } from './stacks';\nimport { syncViewsToS3 } from './viewsSync';\n\nconst buildAndDeploy = async (\n serviceName: string,\n needsSynth: boolean,\n needsBuildApi: boolean,\n needsInfStack: boolean,\n needsApiStack: boolean,\n needsWebStack: boolean,\n needsViewStack: boolean,\n appName: string,\n): Promise<void> => {\n if (needsSynth) {\n console.log('Synth QPQ Configs');\n await synthCommand([serviceName, '--app', appName]);\n }\n\n const qpqConfigForService = loadServiceQpqConfig(appName, serviceName);\n\n if (needsBuildApi) {\n console.log('Building Api: ', serviceName);\n await runRspack(getServiceRspackConfig(qpqConfigForService, path.join(getServiceDirectory(appName, serviceName), 'service')));\n }\n\n if (needsInfStack) {\n console.log('Deploy Inf: ', serviceName);\n await deployServiceStack(serviceName, qpqDeployAwsCdkUtils.getInfStackName(qpqConfigForService), appName);\n }\n\n if (needsApiStack) {\n console.log('Deploy Api: ', serviceName);\n await deployServiceStack(serviceName, qpqDeployAwsCdkUtils.getApiStackName(qpqConfigForService), appName);\n }\n\n if (needsWebStack) {\n console.log('Deploy Web: ', serviceName);\n await deployServiceStack(serviceName, qpqDeployAwsCdkUtils.getWebStackName(qpqConfigForService), appName);\n }\n\n if (needsViewStack && getServiceNamesWithViews(appName).includes(serviceName)) {\n console.log('Building Views: ', serviceName);\n await bundleViews(appName, serviceName);\n await syncViewsToS3(appName, serviceName);\n }\n};\n\nexport const awsGo = async (appName: string, plan: DeployPlan): Promise<void> => {\n if (plan.kind === 'cancelled') {\n return;\n }\n\n logTimeStart('totalTime');\n\n if (plan.kind === 'account') {\n await deployAccountStack(plan.appName);\n logTimeEnd('totalTime');\n return;\n }\n\n if (plan.kind === 'bootstrap') {\n // Actor bootstraps deploy into a shared account — leave the account-level\n // guardrails stack alone (deploy it explicitly via the 'account' option).\n if (process.env.ACTOR_NAME) {\n console.log('Skipping account stack for actor deploy');\n } else {\n await deployAccountStack(plan.appName);\n }\n if (plan.includeDomain) {\n await deployDomainStack(plan.appName);\n }\n await deployBootstrapStack(plan.appName);\n logTimeEnd('totalTime');\n return;\n }\n\n const { services, stacks } = plan;\n const shouldBuildApi = stacks !== 'views';\n\n console.log('\\n\\nRunning automated deploy\\n\\n');\n console.log('Executing for services');\n console.log(services.join(', '));\n\n if ((await isAwsCredentialsValid()) === false) {\n console.log('Credentials are expired or invalid.');\n return;\n }\n\n const allStacks = stacks === 'all';\n\n await runAppHook(appName, 'predeploy');\n\n // Workspace packages resolve through their built dist/ (package.json main),\n // so bundles would ship stale code unless every lib is tsc'd first.\n console.log('Building workspace packages');\n await runCommand('npm', ['run', 'build', '--workspaces', '--if-present']);\n\n // Views uploads resolve bucket names from the shell service's config.\n if (allStacks || stacks === 'views') {\n await synthCommand(['shell', '--app', appName]);\n }\n\n for (let phase = 0; phase <= 5; phase += 1) {\n await services.reduce(async (cur, service) => {\n await cur;\n return buildAndDeploy(\n service,\n phase === 0,\n phase === 1 && shouldBuildApi,\n phase === 2 && (allStacks || stacks === 'inf'),\n phase === 3 && (allStacks || stacks === 'api'),\n phase === 4 && (allStacks || stacks === 'web'),\n phase === 5 && (allStacks || stacks === 'views'),\n appName,\n );\n }, Promise.resolve());\n }\n\n logTimeEnd('totalTime');\n};\n"]}
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.awsGoDocker = void 0;
|
|
16
|
+
// `qpq go:docker` — asks the same questions as `qpq go`, then deploys in
|
|
17
|
+
// parallel via docker instead of sequentially:
|
|
18
|
+
//
|
|
19
|
+
// 1. Build everything locally first: QPQ config synth, rspack API bundles,
|
|
20
|
+
// rspack view bundles, and one self-contained CDK cloud assembly per
|
|
21
|
+
// service (`cdk synth --output dist/qpq/cdk-docker/<app>/<service>`).
|
|
22
|
+
// 2. Wave 1 (inf): one docker container per service deploys its inf stack,
|
|
23
|
+
// all concurrently. Containers run only the CDK CLI against the mounted
|
|
24
|
+
// pre-synthesized assembly — the workspace (and its npm-linked
|
|
25
|
+
// quidproquo packages) never needs to exist inside the image.
|
|
26
|
+
// 3. Wave 2 (api + web): once every inf stack is done, api and web stacks
|
|
27
|
+
// for all services deploy concurrently (they depend only on inf, not on
|
|
28
|
+
// each other).
|
|
29
|
+
// 4. Views: the already-built bundles are synced to S3, one aws-cli
|
|
30
|
+
// container per service, all concurrently.
|
|
31
|
+
//
|
|
32
|
+
// domain/bootstrap menu options deploy host-side exactly like `qpq go` —
|
|
33
|
+
// a single stack gains nothing from docker.
|
|
34
|
+
//
|
|
35
|
+
// Requires the same env as `go` plus a running docker daemon. Knobs:
|
|
36
|
+
// GO_DOCKER_BUILD_CONCURRENCY (default 4 — local builds are CPU-bound) and
|
|
37
|
+
// GO_DOCKER_DEPLOY_CONCURRENCY (default unlimited — deploys just wait on
|
|
38
|
+
// CloudFormation).
|
|
39
|
+
const quidproquo_deploy_awscdk_1 = require("quidproquo-deploy-awscdk");
|
|
40
|
+
const quidproquo_deploy_rspack_1 = require("quidproquo-deploy-rspack");
|
|
41
|
+
const fs_1 = __importDefault(require("fs"));
|
|
42
|
+
const path_1 = __importDefault(require("path"));
|
|
43
|
+
const synth_1 = require("../../commands/synth");
|
|
44
|
+
const discovery_1 = require("../../lib/discovery");
|
|
45
|
+
const hooks_1 = require("../../lib/hooks");
|
|
46
|
+
const qpqConfigs_1 = require("../../lib/qpqConfigs");
|
|
47
|
+
const rspackRun_1 = require("../../lib/rspackRun");
|
|
48
|
+
const runCommand_1 = require("../../lib/runCommand");
|
|
49
|
+
const runTasks_1 = require("../../lib/runTasks");
|
|
50
|
+
const timing_1 = require("../../lib/timing");
|
|
51
|
+
const views_1 = require("../../lib/views");
|
|
52
|
+
const awsCredentials_1 = require("./awsCredentials");
|
|
53
|
+
const cdkApp_1 = require("./cdkApp");
|
|
54
|
+
const stacks_1 = require("./stacks");
|
|
55
|
+
const viewsSync_1 = require("./viewsSync");
|
|
56
|
+
const IMAGE_TAG = 'qpq-cdk-deployer';
|
|
57
|
+
const AWS_CLI_IMAGE = 'amazon/aws-cli';
|
|
58
|
+
const BUILD_CONCURRENCY = Number(process.env.GO_DOCKER_BUILD_CONCURRENCY) || 4;
|
|
59
|
+
const DEPLOY_CONCURRENCY = Number(process.env.GO_DOCKER_DEPLOY_CONCURRENCY) || Infinity;
|
|
60
|
+
// Credentials/region reach the containers via `docker run -e NAME` (value
|
|
61
|
+
// inherited from this process's env, never on the docker command line).
|
|
62
|
+
const AWS_ENV_PASSTHROUGH = [
|
|
63
|
+
'AWS_ACCESS_KEY_ID',
|
|
64
|
+
'AWS_SECRET_ACCESS_KEY',
|
|
65
|
+
'AWS_SESSION_TOKEN',
|
|
66
|
+
'AWS_REGION',
|
|
67
|
+
'AWS_DEFAULT_REGION',
|
|
68
|
+
'AWS_DEFAULT_ACCOUNT',
|
|
69
|
+
];
|
|
70
|
+
const assemblyDir = (appName, serviceName) => path_1.default.join((0, discovery_1.getRoot)(), 'dist', 'qpq', 'cdk-docker', appName, serviceName);
|
|
71
|
+
const assertDockerRunning = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
72
|
+
try {
|
|
73
|
+
yield (0, runCommand_1.runCommand)('docker', ['info', '--format', '"docker daemon ok — server {{.ServerVersion}}"']);
|
|
74
|
+
}
|
|
75
|
+
catch (_a) {
|
|
76
|
+
throw new Error('Docker daemon is not running (start Docker Desktop and retry).');
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
const buildDeployerImage = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
80
|
+
// Pin the image's CDK CLI to the CLI's own aws-cdk version so it can always
|
|
81
|
+
// read the assembly schema the host synthesized.
|
|
82
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
83
|
+
const cdkVersion = require('aws-cdk/package.json').version;
|
|
84
|
+
console.log(`Building deployer image [${IMAGE_TAG}] (aws-cdk ${cdkVersion})`);
|
|
85
|
+
yield (0, runCommand_1.runCommand)('docker', ['build', '-t', IMAGE_TAG, '--build-arg', `CDK_VERSION=${cdkVersion}`, (0, cdkApp_1.getDockerDir)()]);
|
|
86
|
+
});
|
|
87
|
+
// Deploy one stack from a pre-synthesized assembly in a throwaway container
|
|
88
|
+
// named <service>-<stackType> (e.g. mini-web) so `docker ps` reads cleanly.
|
|
89
|
+
// The assembly mounts read-only and is copied container-local first — the CDK
|
|
90
|
+
// CLI writes lock files next to the assembly it reads, and the copy keeps
|
|
91
|
+
// parallel api/web deploys of the same service fully isolated.
|
|
92
|
+
const dockerDeployStack = (color, appName, serviceName, stackType, stackName) => {
|
|
93
|
+
const containerName = `${serviceName}-${stackType}`;
|
|
94
|
+
return (0, runCommand_1.runCommandPrefixed)(`${stackType}:${serviceName}`, 'docker', [
|
|
95
|
+
// A container left behind by an interrupted run would block reusing the
|
|
96
|
+
// name — clear it quietly first.
|
|
97
|
+
'rm',
|
|
98
|
+
'-f',
|
|
99
|
+
containerName,
|
|
100
|
+
'>/dev/null',
|
|
101
|
+
'2>&1',
|
|
102
|
+
';',
|
|
103
|
+
'docker',
|
|
104
|
+
'run',
|
|
105
|
+
'--rm',
|
|
106
|
+
'--name',
|
|
107
|
+
containerName,
|
|
108
|
+
'-v',
|
|
109
|
+
`"${assemblyDir(appName, serviceName)}:/assembly:ro"`,
|
|
110
|
+
...AWS_ENV_PASSTHROUGH.flatMap((name) => ['-e', name]),
|
|
111
|
+
IMAGE_TAG,
|
|
112
|
+
'bash',
|
|
113
|
+
'-c',
|
|
114
|
+
`"cp -r /assembly /work/assembly && cdk deploy ${stackName} --app /work/assembly --require-approval never --progress events"`,
|
|
115
|
+
], { color });
|
|
116
|
+
};
|
|
117
|
+
// Sync one service's pre-built views to S3 in a throwaway aws-cli container
|
|
118
|
+
// named <service>-views. The official image's entrypoint is `aws`. Multiple
|
|
119
|
+
// destinations (shell → website root + views prefix) run sequentially within
|
|
120
|
+
// the service, reusing the container name.
|
|
121
|
+
const dockerSyncViews = (color, appName, serviceName) => __awaiter(void 0, void 0, void 0, function* () {
|
|
122
|
+
const containerName = `${serviceName}-views`;
|
|
123
|
+
for (const destination of (0, viewsSync_1.getViewsS3Destinations)(appName, serviceName)) {
|
|
124
|
+
yield (0, runCommand_1.runCommandPrefixed)(`views:${serviceName}`, 'docker', [
|
|
125
|
+
'rm',
|
|
126
|
+
'-f',
|
|
127
|
+
containerName,
|
|
128
|
+
'>/dev/null',
|
|
129
|
+
'2>&1',
|
|
130
|
+
';',
|
|
131
|
+
'docker',
|
|
132
|
+
'run',
|
|
133
|
+
'--rm',
|
|
134
|
+
'--name',
|
|
135
|
+
containerName,
|
|
136
|
+
'-v',
|
|
137
|
+
`"${(0, views_1.getViewsDistDir)(appName, serviceName)}:/views:ro"`,
|
|
138
|
+
...AWS_ENV_PASSTHROUGH.flatMap((name) => ['-e', name]),
|
|
139
|
+
AWS_CLI_IMAGE,
|
|
140
|
+
's3',
|
|
141
|
+
'sync',
|
|
142
|
+
'/views',
|
|
143
|
+
destination,
|
|
144
|
+
], { color });
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
const awsGoDocker = (appName, plan) => __awaiter(void 0, void 0, void 0, function* () {
|
|
148
|
+
if (plan.kind === 'cancelled') {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
if ((yield (0, awsCredentials_1.isAwsCredentialsValid)()) === false) {
|
|
152
|
+
console.log('Credentials are expired or invalid.');
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
(0, timing_1.logTimeStart)('totalTime');
|
|
156
|
+
if (plan.kind === 'account') {
|
|
157
|
+
yield (0, stacks_1.deployAccountStack)(plan.appName);
|
|
158
|
+
(0, timing_1.logTimeEnd)('totalTime');
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (plan.kind === 'bootstrap') {
|
|
162
|
+
if (plan.includeDomain) {
|
|
163
|
+
yield (0, stacks_1.deployDomainStack)(plan.appName);
|
|
164
|
+
}
|
|
165
|
+
yield (0, stacks_1.deployBootstrapStack)(plan.appName);
|
|
166
|
+
(0, timing_1.logTimeEnd)('totalTime');
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
const { services, stacks } = plan;
|
|
170
|
+
const allStacks = stacks === 'all';
|
|
171
|
+
const needInf = allStacks || stacks === 'inf';
|
|
172
|
+
const needApi = allStacks || stacks === 'api';
|
|
173
|
+
const needWeb = allStacks || stacks === 'web';
|
|
174
|
+
const needViews = allStacks || stacks === 'views';
|
|
175
|
+
const needCdkDeploys = needInf || needApi || needWeb;
|
|
176
|
+
const viewServices = needViews ? services.filter((s) => (0, discovery_1.getServiceNamesWithViews)(appName).includes(s)) : [];
|
|
177
|
+
console.log('\n\nRunning dockerized deploy\n\n');
|
|
178
|
+
console.log('Executing for services');
|
|
179
|
+
console.log(services.join(', '));
|
|
180
|
+
if (needCdkDeploys || viewServices.length > 0) {
|
|
181
|
+
yield assertDockerRunning();
|
|
182
|
+
}
|
|
183
|
+
if (needCdkDeploys) {
|
|
184
|
+
yield buildDeployerImage();
|
|
185
|
+
}
|
|
186
|
+
if (viewServices.length > 0) {
|
|
187
|
+
// Pull up front so the views wave doesn't race N containers into pulling
|
|
188
|
+
// the same image.
|
|
189
|
+
yield (0, runCommand_1.runCommand)('docker', ['pull', AWS_CLI_IMAGE]);
|
|
190
|
+
}
|
|
191
|
+
// ---- Phase 1: build everything locally ----
|
|
192
|
+
console.log('\n=== Phase 1: local builds ===\n');
|
|
193
|
+
yield (0, hooks_1.runAppHook)(appName, 'predeploy');
|
|
194
|
+
// Workspace packages resolve through their built dist/ (package.json main),
|
|
195
|
+
// so bundles would ship stale code unless every lib is tsc'd first. npm runs
|
|
196
|
+
// the workspaces in topological order; tsc -b is incremental, so this is
|
|
197
|
+
// seconds when nothing changed.
|
|
198
|
+
console.log('Building workspace packages');
|
|
199
|
+
yield (0, runCommand_1.runCommand)('npm', ['run', 'build', '--workspaces', '--if-present']);
|
|
200
|
+
// Synth QPQ configs (shell's config resolves the view bucket names).
|
|
201
|
+
// In-process (no subprocess per service) — it's just config loads + JSON writes.
|
|
202
|
+
const qpqSynthServices = [...new Set([...services, ...(needViews ? ['shell'] : [])])];
|
|
203
|
+
for (const service of qpqSynthServices) {
|
|
204
|
+
yield (0, synth_1.synthCommand)([service, '--app', appName]);
|
|
205
|
+
}
|
|
206
|
+
if (stacks !== 'views') {
|
|
207
|
+
(0, runTasks_1.assertNoFailures)('API bundling', yield (0, runTasks_1.runTasks)(services.map((service) => ({
|
|
208
|
+
label: `bundle-api:${service}`,
|
|
209
|
+
run: () => __awaiter(void 0, void 0, void 0, function* () {
|
|
210
|
+
console.log(`Bundling api: [${service}]`);
|
|
211
|
+
const qpqConfig = (0, qpqConfigs_1.loadServiceQpqConfig)(appName, service);
|
|
212
|
+
yield (0, rspackRun_1.runRspack)((0, quidproquo_deploy_rspack_1.getServiceRspackConfig)(qpqConfig, path_1.default.join((0, discovery_1.getServiceDirectory)(appName, service), 'service')));
|
|
213
|
+
}),
|
|
214
|
+
})), BUILD_CONCURRENCY));
|
|
215
|
+
}
|
|
216
|
+
(0, runTasks_1.assertNoFailures)('Views bundling', yield (0, runTasks_1.runTasks)(viewServices.map((service) => ({
|
|
217
|
+
label: `bundle-views:${service}`,
|
|
218
|
+
run: () => __awaiter(void 0, void 0, void 0, function* () {
|
|
219
|
+
console.log(`Bundling views: [${service}]`);
|
|
220
|
+
yield (0, views_1.bundleViews)(appName, service);
|
|
221
|
+
}),
|
|
222
|
+
})), BUILD_CONCURRENCY));
|
|
223
|
+
if (needCdkDeploys) {
|
|
224
|
+
// One self-contained cloud assembly per service (all its stacks + staged
|
|
225
|
+
// assets) — separate --output dirs so synths can run in parallel and
|
|
226
|
+
// containers never share mutable state.
|
|
227
|
+
(0, runTasks_1.assertNoFailures)('CDK synth', yield (0, runTasks_1.runTasks)(services.map((service) => ({
|
|
228
|
+
label: `cdk-synth:${service}`,
|
|
229
|
+
run: () => __awaiter(void 0, void 0, void 0, function* () {
|
|
230
|
+
const outputDir = assemblyDir(appName, service);
|
|
231
|
+
fs_1.default.rmSync(outputDir, { recursive: true, force: true });
|
|
232
|
+
yield (0, runCommand_1.runCommandPrefixed)(`cdk-synth:${service}`, 'npx', ['cdk', 'synth', '--all', '--quiet', '--app', `'${(0, cdkApp_1.getCdkAppCommand)()}'`, '--output', `"${outputDir}"`], {
|
|
233
|
+
cwd: (0, discovery_1.getRoot)(),
|
|
234
|
+
env: { DEPLOY_SERVICE_NAME: service, DEPLOY_APP_NAME: appName },
|
|
235
|
+
color: (0, runCommand_1.nextPrefixColor)(),
|
|
236
|
+
});
|
|
237
|
+
}),
|
|
238
|
+
})), BUILD_CONCURRENCY));
|
|
239
|
+
}
|
|
240
|
+
// Stack names come from each service's live config, resolved once up front.
|
|
241
|
+
const stackNames = new Map(services.map((service) => {
|
|
242
|
+
const qpqConfig = (0, qpqConfigs_1.loadServiceQpqConfig)(appName, service);
|
|
243
|
+
return [
|
|
244
|
+
service,
|
|
245
|
+
{
|
|
246
|
+
inf: quidproquo_deploy_awscdk_1.qpqDeployAwsCdkUtils.getInfStackName(qpqConfig),
|
|
247
|
+
api: quidproquo_deploy_awscdk_1.qpqDeployAwsCdkUtils.getApiStackName(qpqConfig),
|
|
248
|
+
web: quidproquo_deploy_awscdk_1.qpqDeployAwsCdkUtils.getWebStackName(qpqConfig),
|
|
249
|
+
},
|
|
250
|
+
];
|
|
251
|
+
}));
|
|
252
|
+
// ---- Phase 2: inf stacks, one container per service, all concurrent ----
|
|
253
|
+
if (needInf) {
|
|
254
|
+
console.log('\n=== Phase 2: deploy inf stacks (docker) ===\n');
|
|
255
|
+
(0, timing_1.logTimeStart)('infWave');
|
|
256
|
+
(0, runTasks_1.assertNoFailures)('Inf deploy', yield (0, runTasks_1.runTasks)(services.map((service) => ({
|
|
257
|
+
label: `inf:${service}`,
|
|
258
|
+
run: () => dockerDeployStack((0, runCommand_1.nextPrefixColor)(), appName, service, 'inf', stackNames.get(service).inf),
|
|
259
|
+
})), DEPLOY_CONCURRENCY));
|
|
260
|
+
(0, timing_1.logTimeEnd)('infWave');
|
|
261
|
+
}
|
|
262
|
+
// ---- Phase 3: api + web stacks, all concurrent ----
|
|
263
|
+
if (needApi || needWeb) {
|
|
264
|
+
console.log('\n=== Phase 3: deploy api + web stacks (docker) ===\n');
|
|
265
|
+
(0, timing_1.logTimeStart)('apiWebWave');
|
|
266
|
+
(0, runTasks_1.assertNoFailures)('Api/Web deploy', yield (0, runTasks_1.runTasks)(['api', 'web']
|
|
267
|
+
.filter((stackType) => (stackType === 'api' ? needApi : needWeb))
|
|
268
|
+
.flatMap((stackType) => services.map((service) => ({
|
|
269
|
+
label: `${stackType}:${service}`,
|
|
270
|
+
run: () => dockerDeployStack((0, runCommand_1.nextPrefixColor)(), appName, service, stackType, stackNames.get(service)[stackType]),
|
|
271
|
+
}))), DEPLOY_CONCURRENCY));
|
|
272
|
+
(0, timing_1.logTimeEnd)('apiWebWave');
|
|
273
|
+
}
|
|
274
|
+
// ---- Phase 4: sync the pre-built views to S3, all concurrent ----
|
|
275
|
+
if (viewServices.length > 0) {
|
|
276
|
+
console.log('\n=== Phase 4: sync views to S3 (docker) ===\n');
|
|
277
|
+
(0, timing_1.logTimeStart)('viewsWave');
|
|
278
|
+
(0, runTasks_1.assertNoFailures)('Views sync', yield (0, runTasks_1.runTasks)(viewServices.map((service) => ({
|
|
279
|
+
label: `views:${service}`,
|
|
280
|
+
run: () => dockerSyncViews((0, runCommand_1.nextPrefixColor)(), appName, service),
|
|
281
|
+
})), DEPLOY_CONCURRENCY));
|
|
282
|
+
(0, timing_1.logTimeEnd)('viewsWave');
|
|
283
|
+
}
|
|
284
|
+
(0, timing_1.logTimeEnd)('totalTime');
|
|
285
|
+
});
|
|
286
|
+
exports.awsGoDocker = awsGoDocker;
|
|
287
|
+
//# sourceMappingURL=goDocker.js.map
|