@caelo-cms/provisioning 0.2.85 → 0.3.0
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/cdn-copy.d.ts.map +1 -1
- package/dist/cdn-copy.js +8 -1
- package/dist/cdn-copy.js.map +1 -1
- package/dist/cli.js +3 -3
- package/dist/cli.js.map +1 -1
- package/dist/install-state.d.ts +1 -1
- package/dist/install-state.d.ts.map +1 -1
- package/dist/wizard.d.ts.map +1 -1
- package/dist/wizard.js +16 -1
- package/dist/wizard.js.map +1 -1
- package/dist/wizards/gcp-firebase.d.ts +9 -0
- package/dist/wizards/gcp-firebase.d.ts.map +1 -0
- package/dist/wizards/gcp-firebase.js +63 -0
- package/dist/wizards/gcp-firebase.js.map +1 -0
- package/package.json +2 -2
- package/stacks/gcp-firebase/Pulumi.yaml +90 -0
- package/stacks/gcp-firebase/index.ts +513 -0
package/dist/cdn-copy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdn-copy.d.ts","sourceRoot":"","sources":["../src/cdn-copy.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,0CAA0C;IAC1C,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,cAO/B,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"cdn-copy.d.ts","sourceRoot":"","sources":["../src/cdn-copy.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,0CAA0C;IAC1C,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,cAO/B,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA2BnF"}
|
package/dist/cdn-copy.js
CHANGED
|
@@ -31,6 +31,13 @@ export async function loadCdnCopyAdapter(provider) {
|
|
|
31
31
|
case "gcp":
|
|
32
32
|
// biome-ignore lint/suspicious/noExplicitAny: opt-in dynamic import
|
|
33
33
|
return (await import("./cdn-copy-gcs.js")).gcsCloudCdnPin;
|
|
34
|
+
case "gcp-firebase":
|
|
35
|
+
// v0.3.0 — Firebase Hosting manages CDN caching natively (each
|
|
36
|
+
// deploy creates an immutable version + the CDN's freshness is
|
|
37
|
+
// dictated by Firebase Hosting headers). There's no per-asset
|
|
38
|
+
// "pin to edge" API; this adapter is effectively a no-op that
|
|
39
|
+
// returns the same shape as self-hosted.
|
|
40
|
+
return selfHostedCdnCopy;
|
|
34
41
|
case "aws":
|
|
35
42
|
// biome-ignore lint/suspicious/noExplicitAny: opt-in dynamic import
|
|
36
43
|
return (await import("./cdn-copy-aws.js")).s3CloudfrontPrewarm;
|
|
@@ -42,7 +49,7 @@ export async function loadCdnCopyAdapter(provider) {
|
|
|
42
49
|
case "self-hosted":
|
|
43
50
|
return selfHostedCdnCopy;
|
|
44
51
|
default:
|
|
45
|
-
throw new Error(`loadCdnCopyAdapter: unknown CAELO_PROVIDER='${provider}'. Expected one of: self-hosted | gcp | aws | azure.`);
|
|
52
|
+
throw new Error(`loadCdnCopyAdapter: unknown CAELO_PROVIDER='${provider}'. Expected one of: self-hosted | gcp | gcp-firebase | aws | azure.`);
|
|
46
53
|
}
|
|
47
54
|
}
|
|
48
55
|
//# sourceMappingURL=cdn-copy.js.map
|
package/dist/cdn-copy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdn-copy.js","sourceRoot":"","sources":["../src/cdn-copy.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAmCnC;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAmB;IAC/C,KAAK,CAAC,GAAG,CAAC,QAAQ;QAChB,OAAO,UAAU,QAAQ,EAAE,CAAC;IAC9B,CAAC;IACD,KAAK,CAAC,KAAK;QACT,QAAQ;IACV,CAAC;CACF,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,QAAiB;IACxD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,KAAK;YACR,oEAAoE;YACpE,OAAQ,CAAC,MAAM,MAAM,CAAC,mBAA6B,CAAC,CAAS,CAAC,cAAc,CAAC;QAC/E,KAAK,KAAK;YACR,oEAAoE;YACpE,OAAQ,CAAC,MAAM,MAAM,CAAC,mBAA6B,CAAC,CAAS,CAAC,mBAAmB,CAAC;QACpF,KAAK,OAAO;YACV,oEAAoE;YACpE,OAAQ,CAAC,MAAM,MAAM,CAAC,qBAA+B,CAAC,CAAS,CAAC,oBAAoB,CAAC;QACvF,KAAK,SAAS,CAAC;QACf,KAAK,EAAE,CAAC;QACR,KAAK,aAAa;YAChB,OAAO,iBAAiB,CAAC;QAC3B;YACE,MAAM,IAAI,KAAK,CACb,+CAA+C,QAAQ,
|
|
1
|
+
{"version":3,"file":"cdn-copy.js","sourceRoot":"","sources":["../src/cdn-copy.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAmCnC;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAmB;IAC/C,KAAK,CAAC,GAAG,CAAC,QAAQ;QAChB,OAAO,UAAU,QAAQ,EAAE,CAAC;IAC9B,CAAC;IACD,KAAK,CAAC,KAAK;QACT,QAAQ;IACV,CAAC;CACF,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,QAAiB;IACxD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,KAAK;YACR,oEAAoE;YACpE,OAAQ,CAAC,MAAM,MAAM,CAAC,mBAA6B,CAAC,CAAS,CAAC,cAAc,CAAC;QAC/E,KAAK,cAAc;YACjB,+DAA+D;YAC/D,+DAA+D;YAC/D,8DAA8D;YAC9D,8DAA8D;YAC9D,yCAAyC;YACzC,OAAO,iBAAiB,CAAC;QAC3B,KAAK,KAAK;YACR,oEAAoE;YACpE,OAAQ,CAAC,MAAM,MAAM,CAAC,mBAA6B,CAAC,CAAS,CAAC,mBAAmB,CAAC;QACpF,KAAK,OAAO;YACV,oEAAoE;YACpE,OAAQ,CAAC,MAAM,MAAM,CAAC,qBAA+B,CAAC,CAAS,CAAC,oBAAoB,CAAC;QACvF,KAAK,SAAS,CAAC;QACf,KAAK,EAAE,CAAC;QACR,KAAK,aAAa;YAChB,OAAO,iBAAiB,CAAC;QAC3B;YACE,MAAM,IAAI,KAAK,CACb,+CAA+C,QAAQ,qEAAqE,CAC7H,CAAC;IACN,CAAC;AACH,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -148,12 +148,12 @@ async function init() {
|
|
|
148
148
|
const domain = arg("domain");
|
|
149
149
|
const ownerEmail = arg("owner-email");
|
|
150
150
|
const providerArg = (arg("provider") ?? "self-hosted");
|
|
151
|
-
if (!["self-hosted", "gcp", "aws", "azure"].includes(providerArg)) {
|
|
152
|
-
console.error(`Unknown --provider ${providerArg}. Choose self-hosted | gcp | aws | azure.`);
|
|
151
|
+
if (!["self-hosted", "gcp", "gcp-firebase", "aws", "azure"].includes(providerArg)) {
|
|
152
|
+
console.error(`Unknown --provider ${providerArg}. Choose self-hosted | gcp | gcp-firebase | aws | azure.`);
|
|
153
153
|
process.exit(2);
|
|
154
154
|
}
|
|
155
155
|
if (!domain || !ownerEmail) {
|
|
156
|
-
console.error("Usage: cms-provision init [--provider gcp|aws|azure|self-hosted] --domain example.com --owner-email me@example.com");
|
|
156
|
+
console.error("Usage: cms-provision init [--provider gcp|gcp-firebase|aws|azure|self-hosted] --domain example.com --owner-email me@example.com");
|
|
157
157
|
process.exit(2);
|
|
158
158
|
}
|
|
159
159
|
if (existsSync(CONFIG_PATH)) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/install-state.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-state.d.ts","sourceRoot":"","sources":["../src/install-state.ts"],"names":[],"mappings":"AAyBA,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"install-state.d.ts","sourceRoot":"","sources":["../src/install-state.ts"],"names":[],"mappings":"AAyBA,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,KAAK,GAAG,cAAc,GAAG,KAAK,GAAG,OAAO,CAAC;AAEhF,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,4EAA4E;IAC5E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,iEAAiE;IACjE,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAOrF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAeA;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAItE;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,IAAI,CAG5E;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,CAMlE;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,GAAG,IAAI,CAOrF;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAKzF;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEvE;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAG/E;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMzE;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIhF"}
|
package/dist/wizard.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../src/wizard.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAmD,OAAO,EAAQ,MAAM,gBAAgB,CAAC;AAEhG,OAAO,EAGL,KAAK,QAAQ,EAGd,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../src/wizard.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAmD,OAAO,EAAQ,MAAM,gBAAgB,CAAC;AAEhG,OAAO,EAGL,KAAK,QAAQ,EAGd,MAAM,oBAAoB,CAAC;AAI5B,MAAM,WAAW,aAAa;IAC5B,+DAA+D;IAC/D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,SAAS,CAAC,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkFvE;AA+ED,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
package/dist/wizard.js
CHANGED
|
@@ -21,6 +21,7 @@ import { cancel, confirm, intro, isCancel, outro, select, spinner, text } from "
|
|
|
21
21
|
import { bold, cyan, dim } from "kleur/colors";
|
|
22
22
|
import { deriveInstallId, ensureInstallDir, readMetadata, writeMetadata, } from "./install-state.js";
|
|
23
23
|
import { runGcpWizard } from "./wizards/gcp.js";
|
|
24
|
+
import { runGcpFirebaseWizard } from "./wizards/gcp-firebase.js";
|
|
24
25
|
export async function runWizard(opts = {}) {
|
|
25
26
|
intro(bold(cyan("Caelo CMS provisioner")) + dim(" — one-command deploy"));
|
|
26
27
|
// 1. Provider — pre-supplied via flag OR picker.
|
|
@@ -74,6 +75,15 @@ export async function runWizard(opts = {}) {
|
|
|
74
75
|
nonInteractive: opts.nonInteractive ?? false,
|
|
75
76
|
});
|
|
76
77
|
break;
|
|
78
|
+
case "gcp-firebase":
|
|
79
|
+
await runGcpFirebaseWizard({
|
|
80
|
+
installId,
|
|
81
|
+
domain,
|
|
82
|
+
ownerEmail,
|
|
83
|
+
projectId: opts.projectId ?? null,
|
|
84
|
+
nonInteractive: opts.nonInteractive ?? false,
|
|
85
|
+
});
|
|
86
|
+
break;
|
|
77
87
|
case "self-hosted":
|
|
78
88
|
cancel("Self-hosted wizard is the existing `cms-provision init` flow. Run `bunx @caelo-cms/provisioning init --domain ... --owner-email ...` for now; wizard polish lands in a follow-up commit.");
|
|
79
89
|
process.exit(0);
|
|
@@ -93,7 +103,12 @@ async function pickProvider() {
|
|
|
93
103
|
{
|
|
94
104
|
value: "gcp",
|
|
95
105
|
label: "Google Cloud Platform",
|
|
96
|
-
hint: "Cloud Run + Cloud SQL + Cloud Storage + Cloud CDN.
|
|
106
|
+
hint: "Cloud Run + Cloud SQL + Cloud Storage + Cloud CDN. Single LB serves admin + gateway + static.",
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
value: "gcp-firebase",
|
|
110
|
+
label: "Google Cloud Platform (Firebase Hosting)",
|
|
111
|
+
hint: "Cloud Run + Cloud SQL + Firebase Hosting (no LB). Lower fixed cost, native clean URLs + preview channels. Gateway via Firebase rewrites (no Cloud Armor).",
|
|
97
112
|
},
|
|
98
113
|
{
|
|
99
114
|
value: "self-hosted",
|
package/dist/wizard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wizard.js","sourceRoot":"","sources":["../src/wizard.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAChG,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EACL,eAAe,EACf,gBAAgB,EAEhB,YAAY,EACZ,aAAa,GACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"wizard.js","sourceRoot":"","sources":["../src/wizard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface GcpFirebaseWizardOpts {
|
|
2
|
+
installId: string;
|
|
3
|
+
domain: string;
|
|
4
|
+
ownerEmail: string;
|
|
5
|
+
projectId: string | null;
|
|
6
|
+
nonInteractive: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function runGcpFirebaseWizard(opts: GcpFirebaseWizardOpts): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=gcp-firebase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gcp-firebase.d.ts","sourceRoot":"","sources":["../../src/wizards/gcp-firebase.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4CrF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
2
|
+
/**
|
|
3
|
+
* v0.3.0 — GCP Firebase Hosting provider wizard.
|
|
4
|
+
*
|
|
5
|
+
* Architectural differences from the `gcp` wizard:
|
|
6
|
+
* - No load balancer / url-map / TLS cert / BackendBucket
|
|
7
|
+
* - Static site → Firebase Hosting (apex domain)
|
|
8
|
+
* - admin.<domain> → Cloud Run direct + IAP-on-Cloud-Run
|
|
9
|
+
* - <domain>/api/* → Firebase Hosting `rewrites` → Cloud Run gateway
|
|
10
|
+
*
|
|
11
|
+
* The Pulumi stack at packages/provisioning/stacks/gcp-firebase/
|
|
12
|
+
* provisions all of the above. The wizard's pre-Pulumi work
|
|
13
|
+
* (gcloud auth, project, billing, APIs, SA, secrets, anthropic-api-key
|
|
14
|
+
* capture) is structurally identical to the `gcp` wizard — same
|
|
15
|
+
* helpers, same flow — only the final Pulumi invocation differs.
|
|
16
|
+
*
|
|
17
|
+
* For v0.3.0 the wizard delegates to the same gcp pre-Pulumi steps
|
|
18
|
+
* via the shared `runGcpWizard` flow and only swaps the Pulumi
|
|
19
|
+
* runtime target. If `runGcpWizard`'s flow needs to diverge further
|
|
20
|
+
* (e.g. Firebase API enablement, Firebase project initialization),
|
|
21
|
+
* we'll split it. Until then the duplication is one fn call.
|
|
22
|
+
*/
|
|
23
|
+
import { log, note } from "@clack/prompts";
|
|
24
|
+
import { bold, cyan } from "kleur/colors";
|
|
25
|
+
export async function runGcpFirebaseWizard(opts) {
|
|
26
|
+
log.step(bold("GCP Firebase Hosting provider"));
|
|
27
|
+
note([
|
|
28
|
+
"This provider variant uses:",
|
|
29
|
+
` ${cyan("Firebase Hosting")} for the static site (clean URLs + native preview channels)`,
|
|
30
|
+
` ${cyan("Cloud Run direct")} for admin (admin.<domain>, IAP-on-Cloud-Run)`,
|
|
31
|
+
` ${cyan("Firebase rewrites")} for the gateway (no LB, no Cloud Armor)`,
|
|
32
|
+
"",
|
|
33
|
+
"Lower fixed cost than the `gcp` provider (no LB ~$18/mo savings).",
|
|
34
|
+
"Trade-off: no Cloud Armor on the gateway — in-app rate limits + Firebase Edge DDoS only.",
|
|
35
|
+
].join("\n"));
|
|
36
|
+
// For v0.3.0 the wizard delegates the gcloud pre-Pulumi steps to
|
|
37
|
+
// the shared `runGcpWizard` since they're structurally identical
|
|
38
|
+
// (project, billing, APIs, SA, secrets capture). The Pulumi stack
|
|
39
|
+
// differs but the wizard arguments stay the same.
|
|
40
|
+
//
|
|
41
|
+
// The shared wizard knows to use the gcp-firebase stack folder
|
|
42
|
+
// via the `provider` config the operator set earlier in
|
|
43
|
+
// saveProvider().
|
|
44
|
+
const { runGcpWizard } = await import("./gcp.js");
|
|
45
|
+
await runGcpWizard({
|
|
46
|
+
installId: opts.installId,
|
|
47
|
+
domain: opts.domain,
|
|
48
|
+
ownerEmail: opts.ownerEmail,
|
|
49
|
+
projectId: opts.projectId,
|
|
50
|
+
nonInteractive: opts.nonInteractive,
|
|
51
|
+
});
|
|
52
|
+
note([
|
|
53
|
+
`Next: run \`pulumi up\` against the gcp-firebase stack:`,
|
|
54
|
+
` cd packages/provisioning/stacks/gcp-firebase`,
|
|
55
|
+
` pulumi stack init prod`,
|
|
56
|
+
` pulumi config set caelo-gcp-firebase:domain ${opts.domain}`,
|
|
57
|
+
` pulumi config set caelo-gcp-firebase:ownerEmail ${opts.ownerEmail}`,
|
|
58
|
+
` pulumi up`,
|
|
59
|
+
"",
|
|
60
|
+
`Once Pulumi finishes, DNS instructions for the apex (${opts.domain}) and admin (admin.${opts.domain}) print to the console.`,
|
|
61
|
+
].join("\n"), "Pulumi (gcp-firebase stack)");
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=gcp-firebase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gcp-firebase.js","sourceRoot":"","sources":["../../src/wizards/gcp-firebase.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAU1C,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAA2B;IACpE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;IAChD,IAAI,CACF;QACE,6BAA6B;QAC7B,KAAK,IAAI,CAAC,kBAAkB,CAAC,6DAA6D;QAC1F,KAAK,IAAI,CAAC,kBAAkB,CAAC,+CAA+C;QAC5E,KAAK,IAAI,CAAC,mBAAmB,CAAC,0CAA0C;QACxE,EAAE;QACF,mEAAmE;QACnE,0FAA0F;KAC3F,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IAEF,iEAAiE;IACjE,iEAAiE;IACjE,kEAAkE;IAClE,kDAAkD;IAClD,EAAE;IACF,+DAA+D;IAC/D,wDAAwD;IACxD,kBAAkB;IAClB,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,YAAY,CAAC;QACjB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,cAAc,EAAE,IAAI,CAAC,cAAc;KACpC,CAAC,CAAC;IAEH,IAAI,CACF;QACE,yDAAyD;QACzD,gDAAgD;QAChD,0BAA0B;QAC1B,iDAAiD,IAAI,CAAC,MAAM,EAAE;QAC9D,qDAAqD,IAAI,CAAC,UAAU,EAAE;QACtE,aAAa;QACb,EAAE;QACF,wDAAwD,IAAI,CAAC,MAAM,sBAAsB,IAAI,CAAC,MAAM,yBAAyB;KAC9H,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,6BAA6B,CAC9B,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@caelo-cms/provisioning",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"license": "MPL-2.0",
|
|
6
6
|
"description": "Pulumi-driven provisioning for Caelo CMS — `bunx @caelo-cms/provisioning --provider <self-hosted|gcp|aws|azure>` brings up a TLS-served install with Postgres + storage + secrets manager + the admin + the API gateway.",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"prepublishOnly": "tsc -b --force"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@caelo-cms/shared": "^0.
|
|
41
|
+
"@caelo-cms/shared": "^0.3.0",
|
|
42
42
|
"@clack/prompts": "1.3.0",
|
|
43
43
|
"@pulumi/aws": "^7",
|
|
44
44
|
"@pulumi/awsx": "^3",
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MPL-2.0
|
|
2
|
+
#
|
|
3
|
+
# Caelo GCP Firebase Hosting provider stack (v0.3.0).
|
|
4
|
+
#
|
|
5
|
+
# Differences from the `gcp` stack:
|
|
6
|
+
# - Static site: Firebase Hosting (no LB, no BackendBucket, no Cloud CDN)
|
|
7
|
+
# - Admin: Cloud Run domain mapping + IAP-on-Cloud-Run (no LB)
|
|
8
|
+
# - Gateway: Cloud Run + Firebase Hosting rewrites for /api/* (no LB, no Cloud Armor)
|
|
9
|
+
# - Postgres + Cloud Run + Secret Manager: unchanged
|
|
10
|
+
#
|
|
11
|
+
# Operator trade-off (accepted): no Cloud Armor on the gateway.
|
|
12
|
+
# Mitigation: Firebase Edge DDoS protection + Cloud Run rate limits +
|
|
13
|
+
# Caelo's in-app rate-limit middleware + form CAPTCHA/PoW.
|
|
14
|
+
name: caelo-gcp-firebase
|
|
15
|
+
runtime:
|
|
16
|
+
name: nodejs
|
|
17
|
+
options:
|
|
18
|
+
typescript: true
|
|
19
|
+
packagemanager: bun
|
|
20
|
+
main: ./index.ts
|
|
21
|
+
description: Caelo GCP Firebase Hosting stack — Cloud SQL + Cloud Run + Firebase Hosting + Secret Manager.
|
|
22
|
+
config:
|
|
23
|
+
# Required
|
|
24
|
+
caelo-gcp-firebase:domain:
|
|
25
|
+
type: string
|
|
26
|
+
description: Primary domain (e.g. example.com).
|
|
27
|
+
caelo-gcp-firebase:ownerEmail:
|
|
28
|
+
type: string
|
|
29
|
+
description: Operator email for the default IAP allowlist.
|
|
30
|
+
caelo-gcp-firebase:project:
|
|
31
|
+
type: string
|
|
32
|
+
description: GCP project id (also the Firebase project — Firebase Hosting requires the Firebase Management API to be enabled on the same project).
|
|
33
|
+
caelo-gcp-firebase:anthropicApiKey:
|
|
34
|
+
type: string
|
|
35
|
+
secret: true
|
|
36
|
+
default: ""
|
|
37
|
+
description: OPTIONAL backwards-compat. Operators configure AI provider keys via /security/ai after first login.
|
|
38
|
+
# The 7 cross-provider knobs (subset of gcp's 8 — no Cloud Armor adaptive protection here)
|
|
39
|
+
caelo-gcp-firebase:region:
|
|
40
|
+
type: string
|
|
41
|
+
default: us-central1
|
|
42
|
+
description: Primary GCP region (Cloud SQL, Cloud Run).
|
|
43
|
+
caelo-gcp-firebase:cloudSqlTier:
|
|
44
|
+
type: string
|
|
45
|
+
default: db-f1-micro
|
|
46
|
+
description: Cloud SQL machine tier. Default ~$10/mo (ENTERPRISE).
|
|
47
|
+
caelo-gcp-firebase:cloudSqlEdition:
|
|
48
|
+
type: string
|
|
49
|
+
default: ENTERPRISE
|
|
50
|
+
description: Cloud SQL edition.
|
|
51
|
+
caelo-gcp-firebase:cloudSqlHa:
|
|
52
|
+
type: boolean
|
|
53
|
+
default: false
|
|
54
|
+
description: HA failover. +~$20/mo.
|
|
55
|
+
caelo-gcp-firebase:adminMinInstances:
|
|
56
|
+
type: string
|
|
57
|
+
default: "0"
|
|
58
|
+
description: Admin Cloud Run min instances.
|
|
59
|
+
caelo-gcp-firebase:adminMaxInstances:
|
|
60
|
+
type: string
|
|
61
|
+
default: "5"
|
|
62
|
+
description: Admin Cloud Run max instances.
|
|
63
|
+
caelo-gcp-firebase:maxConnections:
|
|
64
|
+
type: string
|
|
65
|
+
default: "100"
|
|
66
|
+
description: Postgres max_connections.
|
|
67
|
+
caelo-gcp-firebase:gatewayMinInstances:
|
|
68
|
+
type: string
|
|
69
|
+
default: "0"
|
|
70
|
+
description: Gateway Cloud Run min instances.
|
|
71
|
+
caelo-gcp-firebase:iapAllowlist:
|
|
72
|
+
type: string
|
|
73
|
+
default: ""
|
|
74
|
+
description: Comma-list of IAP principals on the admin Cloud Run service.
|
|
75
|
+
caelo-gcp-firebase:backupRetentionDays:
|
|
76
|
+
type: string
|
|
77
|
+
default: "7"
|
|
78
|
+
description: Cloud SQL backup retention.
|
|
79
|
+
caelo-gcp-firebase:deletionProtection:
|
|
80
|
+
type: boolean
|
|
81
|
+
default: false
|
|
82
|
+
description: Block `pulumi destroy`.
|
|
83
|
+
caelo-gcp-firebase:firebaseSiteId:
|
|
84
|
+
type: string
|
|
85
|
+
default: ""
|
|
86
|
+
description: |
|
|
87
|
+
Optional Firebase Hosting site ID. Defaults to `caelo-<env>-site`.
|
|
88
|
+
Note Firebase site IDs are GLOBALLY UNIQUE; if the default collides
|
|
89
|
+
with another project's site, set this to something distinct
|
|
90
|
+
(e.g. `caelo-mycompany-site`).
|
|
@@ -0,0 +1,513 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Caelo GCP Firebase Hosting stack (v0.3.0).
|
|
5
|
+
*
|
|
6
|
+
* Architecture (differs from `gcp/` stack):
|
|
7
|
+
* - Static site: Firebase Hosting site (no LB, no BackendBucket)
|
|
8
|
+
* - Admin: Cloud Run + custom domain mapping (admin.<domain>)
|
|
9
|
+
* + IAP-on-Cloud-Run (no LB IAP)
|
|
10
|
+
* - Gateway: Cloud Run + Firebase Hosting `rewrites` (no LB,
|
|
11
|
+
* no Cloud Armor)
|
|
12
|
+
* - Database: Cloud SQL Postgres on private VPC IP only (same
|
|
13
|
+
* as `gcp/`)
|
|
14
|
+
* - Workers: share admin Cloud Run (same as `gcp/`)
|
|
15
|
+
*
|
|
16
|
+
* The trade-off (no Cloud Armor on the gateway) was explicitly
|
|
17
|
+
* accepted by the operator. Mitigation: Firebase Edge DDoS shield,
|
|
18
|
+
* Cloud Run max-instance caps, Caelo's in-app rate-limit
|
|
19
|
+
* middleware, form CAPTCHA/PoW.
|
|
20
|
+
*
|
|
21
|
+
* Code structure mirrors `packages/provisioning/stacks/gcp/index.ts`
|
|
22
|
+
* for the shared blocks (VPC, Secrets, Cloud SQL, run SA, Cloud Run
|
|
23
|
+
* services); the divergent blocks (Firebase Hosting site, Cloud Run
|
|
24
|
+
* domain mapping, Cloud Run IAP) live at the bottom of this file.
|
|
25
|
+
* Shared code lives in `packages/provisioning/src/` (imported here).
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
import * as gcp from "@pulumi/gcp";
|
|
29
|
+
import * as pulumi from "@pulumi/pulumi";
|
|
30
|
+
import * as random from "@pulumi/random";
|
|
31
|
+
import type { CloudAdapterOutputs, DnsRecord } from "../../dist/adapter.js";
|
|
32
|
+
import { generateBootstrapToken } from "../../dist/bootstrap-token.js";
|
|
33
|
+
|
|
34
|
+
const cfg = new pulumi.Config();
|
|
35
|
+
const domain = cfg.require("domain");
|
|
36
|
+
const ownerEmail = cfg.require("ownerEmail");
|
|
37
|
+
const project = cfg.require("project");
|
|
38
|
+
const region = cfg.get("region") ?? "us-central1";
|
|
39
|
+
|
|
40
|
+
// === Operator-tunable knobs ===
|
|
41
|
+
const cloudSqlTier = cfg.get("cloudSqlTier") ?? "db-f1-micro";
|
|
42
|
+
const cloudSqlHa = cfg.getBoolean("cloudSqlHa") ?? false;
|
|
43
|
+
const cloudSqlEdition = cfg.get("cloudSqlEdition") ?? "ENTERPRISE";
|
|
44
|
+
const deletionProtection = cfg.getBoolean("deletionProtection") ?? false;
|
|
45
|
+
const adminMinInstances = Number.parseInt(cfg.get("adminMinInstances") ?? "0", 10);
|
|
46
|
+
const adminMaxInstances = Number.parseInt(cfg.get("adminMaxInstances") ?? "5", 10);
|
|
47
|
+
const gatewayMinInstances = Number.parseInt(cfg.get("gatewayMinInstances") ?? "0", 10);
|
|
48
|
+
const maxConnections = Number.parseInt(cfg.get("maxConnections") ?? "100", 10);
|
|
49
|
+
const backupRetentionDays = Number.parseInt(cfg.get("backupRetentionDays") ?? "7", 10);
|
|
50
|
+
const iapAllowlistRaw = cfg.get("iapAllowlist");
|
|
51
|
+
const iapAllowlist =
|
|
52
|
+
iapAllowlistRaw && iapAllowlistRaw.trim().length > 0
|
|
53
|
+
? iapAllowlistRaw
|
|
54
|
+
.split(",")
|
|
55
|
+
.map((s) => s.trim())
|
|
56
|
+
.filter(Boolean)
|
|
57
|
+
: [`user:${ownerEmail}`];
|
|
58
|
+
|
|
59
|
+
const env = pulumi.getStack() as "dev" | "staging" | "production";
|
|
60
|
+
const namePrefix = `caelo-${env}`;
|
|
61
|
+
const adminDomain = `admin.${domain}`;
|
|
62
|
+
// Firebase site IDs are GLOBALLY unique across all Firebase projects.
|
|
63
|
+
// Default uses the namePrefix; operator can override if the default
|
|
64
|
+
// collides with another project's site.
|
|
65
|
+
const firebaseSiteId = cfg.get("firebaseSiteId") || `${namePrefix}-site`;
|
|
66
|
+
|
|
67
|
+
const gcpProvider = new gcp.Provider(`${namePrefix}-gcp`, { project, region });
|
|
68
|
+
const opts = { provider: gcpProvider };
|
|
69
|
+
|
|
70
|
+
// =========================================================================
|
|
71
|
+
// VPC for private Cloud SQL — Cloud Run reaches Postgres via private IP only
|
|
72
|
+
// =========================================================================
|
|
73
|
+
|
|
74
|
+
const network = new gcp.compute.Network(
|
|
75
|
+
`${namePrefix}-vpc`,
|
|
76
|
+
{ autoCreateSubnetworks: false, description: `Caelo ${env} VPC` },
|
|
77
|
+
opts,
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
const subnet = new gcp.compute.Subnetwork(
|
|
81
|
+
`${namePrefix}-subnet`,
|
|
82
|
+
{
|
|
83
|
+
region,
|
|
84
|
+
ipCidrRange: "10.20.0.0/20",
|
|
85
|
+
network: network.id,
|
|
86
|
+
privateIpGoogleAccess: true,
|
|
87
|
+
},
|
|
88
|
+
opts,
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
const privateIpAlloc = new gcp.compute.GlobalAddress(
|
|
92
|
+
`${namePrefix}-pg-private-ip`,
|
|
93
|
+
{
|
|
94
|
+
purpose: "VPC_PEERING",
|
|
95
|
+
addressType: "INTERNAL",
|
|
96
|
+
prefixLength: 16,
|
|
97
|
+
network: network.id,
|
|
98
|
+
},
|
|
99
|
+
opts,
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
const sqlPeering = new gcp.servicenetworking.Connection(
|
|
103
|
+
`${namePrefix}-pg-peering`,
|
|
104
|
+
{
|
|
105
|
+
network: network.id,
|
|
106
|
+
service: "servicenetworking.googleapis.com",
|
|
107
|
+
reservedPeeringRanges: [privateIpAlloc.name],
|
|
108
|
+
},
|
|
109
|
+
opts,
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
// =========================================================================
|
|
113
|
+
// Secret Manager — random.RandomBytes for stable values across `pulumi up`
|
|
114
|
+
// (v0.2.81 fix: pre-v0.2.81 every up rotated secrets, breaking the KEK).
|
|
115
|
+
// =========================================================================
|
|
116
|
+
|
|
117
|
+
const pgPasswordBytes = new random.RandomBytes(`${namePrefix}-pg-password-bytes`, { length: 32 });
|
|
118
|
+
const csrfSecretBytes = new random.RandomBytes(`${namePrefix}-csrf-secret-bytes`, { length: 32 });
|
|
119
|
+
const cookieSecretBytes = new random.RandomBytes(`${namePrefix}-cookie-secret-bytes`, {
|
|
120
|
+
length: 32,
|
|
121
|
+
});
|
|
122
|
+
const kekBytes = new random.RandomBytes(`${namePrefix}-secret-kek-bytes`, { length: 32 });
|
|
123
|
+
|
|
124
|
+
const postgresPassword = pulumi.secret(pgPasswordBytes.hex);
|
|
125
|
+
const csrfSecret = pulumi.secret(csrfSecretBytes.hex);
|
|
126
|
+
const cookieSecret = pulumi.secret(cookieSecretBytes.hex);
|
|
127
|
+
const caeloSecretKek = pulumi.secret(kekBytes.hex);
|
|
128
|
+
const anthropicApiKeyConfig = cfg.getSecret("anthropicApiKey");
|
|
129
|
+
const resendApiKeyConfig = cfg.getSecret("resendApiKey");
|
|
130
|
+
|
|
131
|
+
interface MadeSecret {
|
|
132
|
+
resource: gcp.secretmanager.Secret;
|
|
133
|
+
version: gcp.secretmanager.SecretVersion | null;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function makeSecret(name: string, value: pulumi.Output<string> | null): MadeSecret {
|
|
137
|
+
const resource = new gcp.secretmanager.Secret(
|
|
138
|
+
`${namePrefix}-${name}`,
|
|
139
|
+
{ secretId: `${namePrefix}-${name}`, replication: { auto: {} } },
|
|
140
|
+
opts,
|
|
141
|
+
);
|
|
142
|
+
if (value === null) return { resource, version: null };
|
|
143
|
+
const version = new gcp.secretmanager.SecretVersion(
|
|
144
|
+
`${namePrefix}-${name}-v1`,
|
|
145
|
+
{ secret: resource.name, secretData: value },
|
|
146
|
+
{ ...opts, dependsOn: [resource] },
|
|
147
|
+
);
|
|
148
|
+
return { resource, version };
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const pgSecret = makeSecret("postgres-password", postgresPassword);
|
|
152
|
+
const csrfSecretRes = makeSecret("csrf-secret", csrfSecret);
|
|
153
|
+
const cookieSecretRes = makeSecret("cookie-secret", cookieSecret);
|
|
154
|
+
const kekSecret = makeSecret("secret-kek", caeloSecretKek);
|
|
155
|
+
const anthropicSecretRes = makeSecret("anthropic-api-key", anthropicApiKeyConfig ?? null);
|
|
156
|
+
const resendSecretRes = makeSecret("resend-api-key", resendApiKeyConfig ?? null);
|
|
157
|
+
|
|
158
|
+
// =========================================================================
|
|
159
|
+
// Tier 4 — Cloud SQL Postgres (private IP only; HA configurable)
|
|
160
|
+
// =========================================================================
|
|
161
|
+
|
|
162
|
+
const sqlInstance = new gcp.sql.DatabaseInstance(
|
|
163
|
+
`${namePrefix}-pg`,
|
|
164
|
+
{
|
|
165
|
+
databaseVersion: "POSTGRES_16",
|
|
166
|
+
region,
|
|
167
|
+
settings: {
|
|
168
|
+
tier: cloudSqlTier,
|
|
169
|
+
edition: cloudSqlEdition,
|
|
170
|
+
availabilityType: cloudSqlHa ? "REGIONAL" : "ZONAL",
|
|
171
|
+
diskSize: 20,
|
|
172
|
+
diskType: "PD_SSD",
|
|
173
|
+
diskAutoresize: true,
|
|
174
|
+
backupConfiguration: {
|
|
175
|
+
enabled: true,
|
|
176
|
+
startTime: "03:00",
|
|
177
|
+
backupRetentionSettings: { retainedBackups: backupRetentionDays },
|
|
178
|
+
pointInTimeRecoveryEnabled: true,
|
|
179
|
+
transactionLogRetentionDays: 7,
|
|
180
|
+
},
|
|
181
|
+
ipConfiguration: {
|
|
182
|
+
ipv4Enabled: false,
|
|
183
|
+
privateNetwork: network.id,
|
|
184
|
+
enablePrivatePathForGoogleCloudServices: true,
|
|
185
|
+
},
|
|
186
|
+
databaseFlags: [{ name: "max_connections", value: maxConnections.toString() }],
|
|
187
|
+
},
|
|
188
|
+
deletionProtection,
|
|
189
|
+
},
|
|
190
|
+
{ ...opts, dependsOn: [sqlPeering] },
|
|
191
|
+
);
|
|
192
|
+
|
|
193
|
+
const cmsAdminDb = new gcp.sql.Database(
|
|
194
|
+
`${namePrefix}-cms-admin`,
|
|
195
|
+
{ instance: sqlInstance.name, name: "cms_admin" },
|
|
196
|
+
opts,
|
|
197
|
+
);
|
|
198
|
+
const cmsPublicDb = new gcp.sql.Database(
|
|
199
|
+
`${namePrefix}-cms-public`,
|
|
200
|
+
{ instance: sqlInstance.name, name: "cms_public" },
|
|
201
|
+
opts,
|
|
202
|
+
);
|
|
203
|
+
|
|
204
|
+
const pgAdminUser = new gcp.sql.User(
|
|
205
|
+
`${namePrefix}-admin-user`,
|
|
206
|
+
{ instance: sqlInstance.name, name: "admin_role", password: postgresPassword },
|
|
207
|
+
opts,
|
|
208
|
+
);
|
|
209
|
+
new gcp.sql.User(
|
|
210
|
+
`${namePrefix}-public-user`,
|
|
211
|
+
{ instance: sqlInstance.name, name: "public_role", password: postgresPassword },
|
|
212
|
+
opts,
|
|
213
|
+
);
|
|
214
|
+
|
|
215
|
+
const adminDatabaseUrl = pulumi.interpolate`postgres://admin_role:${postgresPassword}@${sqlInstance.privateIpAddress}:5432/cms_admin?sslmode=require`;
|
|
216
|
+
const publicAdminDatabaseUrl = pulumi.interpolate`postgres://admin_role:${postgresPassword}@${sqlInstance.privateIpAddress}:5432/cms_public?sslmode=require`;
|
|
217
|
+
const publicDatabaseUrl = pulumi.interpolate`postgres://public_role:${postgresPassword}@${sqlInstance.privateIpAddress}:5432/cms_public?sslmode=require`;
|
|
218
|
+
|
|
219
|
+
// =========================================================================
|
|
220
|
+
// Media bucket — private, signed-URL access only (same as `gcp` stack)
|
|
221
|
+
// =========================================================================
|
|
222
|
+
|
|
223
|
+
const mediaBucket = new gcp.storage.Bucket(
|
|
224
|
+
`${namePrefix}-media`,
|
|
225
|
+
{
|
|
226
|
+
name: `${project}-${namePrefix}-media`,
|
|
227
|
+
location: region.toUpperCase(),
|
|
228
|
+
uniformBucketLevelAccess: true,
|
|
229
|
+
forceDestroy: env !== "production",
|
|
230
|
+
versioning: { enabled: env === "production" },
|
|
231
|
+
},
|
|
232
|
+
opts,
|
|
233
|
+
);
|
|
234
|
+
|
|
235
|
+
// =========================================================================
|
|
236
|
+
// Cloud Run service account + IAM roles
|
|
237
|
+
// =========================================================================
|
|
238
|
+
|
|
239
|
+
const runSa = new gcp.serviceaccount.Account(
|
|
240
|
+
`${namePrefix}-run-sa`,
|
|
241
|
+
{
|
|
242
|
+
accountId: `${namePrefix}-run-sa`,
|
|
243
|
+
displayName: `Caelo ${env} Cloud Run service account`,
|
|
244
|
+
},
|
|
245
|
+
opts,
|
|
246
|
+
);
|
|
247
|
+
|
|
248
|
+
for (const made of [
|
|
249
|
+
{ name: "postgres-password", made: pgSecret },
|
|
250
|
+
{ name: "csrf-secret", made: csrfSecretRes },
|
|
251
|
+
{ name: "cookie-secret", made: cookieSecretRes },
|
|
252
|
+
{ name: "secret-kek", made: kekSecret },
|
|
253
|
+
{ name: "anthropic-api-key", made: anthropicSecretRes },
|
|
254
|
+
{ name: "resend-api-key", made: resendSecretRes },
|
|
255
|
+
]) {
|
|
256
|
+
new gcp.secretmanager.SecretIamMember(
|
|
257
|
+
`${namePrefix}-${made.name}-binding`,
|
|
258
|
+
{
|
|
259
|
+
secretId: made.made.resource.secretId,
|
|
260
|
+
role: "roles/secretmanager.secretAccessor",
|
|
261
|
+
member: pulumi.interpolate`serviceAccount:${runSa.email}`,
|
|
262
|
+
},
|
|
263
|
+
{ ...opts, dependsOn: [made.made.resource] },
|
|
264
|
+
);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
new gcp.storage.BucketIAMMember(
|
|
268
|
+
`${namePrefix}-media-rw`,
|
|
269
|
+
{
|
|
270
|
+
bucket: mediaBucket.name,
|
|
271
|
+
role: "roles/storage.objectAdmin",
|
|
272
|
+
member: pulumi.interpolate`serviceAccount:${runSa.email}`,
|
|
273
|
+
},
|
|
274
|
+
opts,
|
|
275
|
+
);
|
|
276
|
+
|
|
277
|
+
// v0.3.0 — Firebase Hosting admin role for the static-publisher path.
|
|
278
|
+
// The admin Cloud Run service calls the Firebase Hosting REST API to
|
|
279
|
+
// create versions, populateFiles, finalize, and create channels.
|
|
280
|
+
new gcp.projects.IAMMember(
|
|
281
|
+
`${namePrefix}-run-firebase-hosting`,
|
|
282
|
+
{
|
|
283
|
+
project,
|
|
284
|
+
role: "roles/firebasehosting.admin",
|
|
285
|
+
member: pulumi.interpolate`serviceAccount:${runSa.email}`,
|
|
286
|
+
},
|
|
287
|
+
opts,
|
|
288
|
+
);
|
|
289
|
+
|
|
290
|
+
// =========================================================================
|
|
291
|
+
// Tier 1 — Firebase Hosting site
|
|
292
|
+
// =========================================================================
|
|
293
|
+
|
|
294
|
+
const firebaseSite = new gcp.firebase.HostingSite(
|
|
295
|
+
`${namePrefix}-firebase-site`,
|
|
296
|
+
{
|
|
297
|
+
project,
|
|
298
|
+
siteId: firebaseSiteId,
|
|
299
|
+
},
|
|
300
|
+
opts,
|
|
301
|
+
);
|
|
302
|
+
|
|
303
|
+
// Custom domain on the Firebase site for the apex. The operator wires
|
|
304
|
+
// DNS by following the records printed in the stack outputs.
|
|
305
|
+
const firebaseCustomDomain = new gcp.firebase.HostingCustomDomain(
|
|
306
|
+
`${namePrefix}-firebase-apex`,
|
|
307
|
+
{
|
|
308
|
+
project,
|
|
309
|
+
siteId: firebaseSite.siteId,
|
|
310
|
+
customDomain: domain,
|
|
311
|
+
waitDnsVerification: false,
|
|
312
|
+
},
|
|
313
|
+
{ ...opts, dependsOn: [firebaseSite] },
|
|
314
|
+
);
|
|
315
|
+
|
|
316
|
+
// =========================================================================
|
|
317
|
+
// Cloud Run services — admin + gateway
|
|
318
|
+
// =========================================================================
|
|
319
|
+
|
|
320
|
+
interface CloudRunArgs {
|
|
321
|
+
readonly serviceName: string;
|
|
322
|
+
readonly minInstances: number;
|
|
323
|
+
readonly maxInstances: number;
|
|
324
|
+
readonly memory: string;
|
|
325
|
+
readonly timeout: string;
|
|
326
|
+
readonly extraEnv?: ReadonlyArray<{ name: string; value: pulumi.Input<string> }>;
|
|
327
|
+
readonly ingressAll?: boolean;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
function cloudRunService(args: CloudRunArgs): gcp.cloudrunv2.Service {
|
|
331
|
+
return new gcp.cloudrunv2.Service(
|
|
332
|
+
`${namePrefix}-${args.serviceName}`,
|
|
333
|
+
{
|
|
334
|
+
location: region,
|
|
335
|
+
// Admin needs INGRESS_TRAFFIC_ALL so visitors hit IAP first;
|
|
336
|
+
// gateway is reached via Firebase Hosting rewrites (server-side
|
|
337
|
+
// proxy), so INGRESS_TRAFFIC_INTERNAL_LOAD_BALANCER also works —
|
|
338
|
+
// but for v0.3.0 we set both to ALL to keep the topology simple
|
|
339
|
+
// (Firebase Hosting rewrites use Google-internal traffic).
|
|
340
|
+
ingress: args.ingressAll ? "INGRESS_TRAFFIC_ALL" : "INGRESS_TRAFFIC_ALL",
|
|
341
|
+
deletionProtection,
|
|
342
|
+
template: {
|
|
343
|
+
serviceAccount: runSa.email,
|
|
344
|
+
scaling: {
|
|
345
|
+
minInstanceCount: args.minInstances,
|
|
346
|
+
maxInstanceCount: args.maxInstances,
|
|
347
|
+
},
|
|
348
|
+
timeout: args.timeout,
|
|
349
|
+
containers: [
|
|
350
|
+
{
|
|
351
|
+
image: `europe-west1-docker.pkg.dev/caelo-website/caelo-cms-images/${args.serviceName}:main`,
|
|
352
|
+
envs: [
|
|
353
|
+
{ name: "CAELO_PROVIDER", value: "gcp-firebase" },
|
|
354
|
+
{ name: "CAELO_ENV", value: env },
|
|
355
|
+
{ name: "ADMIN_DATABASE_URL", value: adminDatabaseUrl },
|
|
356
|
+
{ name: "MEDIA_STORAGE_URL", value: pulumi.interpolate`gs://${mediaBucket.name}` },
|
|
357
|
+
{
|
|
358
|
+
name: "CAELO_SECRET_KEK",
|
|
359
|
+
valueSource: {
|
|
360
|
+
secretKeyRef: { secret: kekSecret.resource.secretId, version: "latest" },
|
|
361
|
+
},
|
|
362
|
+
},
|
|
363
|
+
...(args.extraEnv ?? []),
|
|
364
|
+
],
|
|
365
|
+
resources: { limits: { cpu: "1", memory: args.memory } },
|
|
366
|
+
},
|
|
367
|
+
],
|
|
368
|
+
vpcAccess: {
|
|
369
|
+
networkInterfaces: [{ network: network.name, subnetwork: subnet.name }],
|
|
370
|
+
egress: "PRIVATE_RANGES_ONLY",
|
|
371
|
+
},
|
|
372
|
+
},
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
...opts,
|
|
376
|
+
dependsOn: [
|
|
377
|
+
pgAdminUser,
|
|
378
|
+
cmsAdminDb,
|
|
379
|
+
cmsPublicDb,
|
|
380
|
+
...(pgSecret.version ? [pgSecret.version] : []),
|
|
381
|
+
...(kekSecret.version ? [kekSecret.version] : []),
|
|
382
|
+
],
|
|
383
|
+
},
|
|
384
|
+
);
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
const adminSvc = cloudRunService({
|
|
388
|
+
serviceName: "admin",
|
|
389
|
+
minInstances: adminMinInstances,
|
|
390
|
+
maxInstances: adminMaxInstances,
|
|
391
|
+
memory: "1Gi",
|
|
392
|
+
timeout: "3600s",
|
|
393
|
+
extraEnv: [
|
|
394
|
+
{ name: "PUBLIC_ADMIN_DATABASE_URL", value: publicAdminDatabaseUrl },
|
|
395
|
+
{ name: "CAELO_FIREBASE_SITE", value: firebaseSite.siteId },
|
|
396
|
+
{ name: "CAELO_GENERATOR_CLI", value: "/app/apps/static-generator/src/cli.ts" },
|
|
397
|
+
],
|
|
398
|
+
});
|
|
399
|
+
|
|
400
|
+
const gatewaySvc = cloudRunService({
|
|
401
|
+
serviceName: "gateway",
|
|
402
|
+
minInstances: gatewayMinInstances,
|
|
403
|
+
maxInstances: 100,
|
|
404
|
+
memory: "512Mi",
|
|
405
|
+
timeout: "60s",
|
|
406
|
+
extraEnv: [{ name: "PUBLIC_DATABASE_URL", value: publicDatabaseUrl }],
|
|
407
|
+
});
|
|
408
|
+
|
|
409
|
+
// =========================================================================
|
|
410
|
+
// Admin custom domain — Cloud Run domain mapping
|
|
411
|
+
// =========================================================================
|
|
412
|
+
|
|
413
|
+
const adminDomainMapping = new gcp.cloudrun.DomainMapping(
|
|
414
|
+
`${namePrefix}-admin-domain`,
|
|
415
|
+
{
|
|
416
|
+
location: region,
|
|
417
|
+
name: adminDomain,
|
|
418
|
+
metadata: { namespace: project },
|
|
419
|
+
spec: {
|
|
420
|
+
routeName: adminSvc.name,
|
|
421
|
+
},
|
|
422
|
+
},
|
|
423
|
+
{ ...opts, dependsOn: [adminSvc] },
|
|
424
|
+
);
|
|
425
|
+
|
|
426
|
+
// =========================================================================
|
|
427
|
+
// IAP on the admin Cloud Run service (no LB)
|
|
428
|
+
// =========================================================================
|
|
429
|
+
|
|
430
|
+
// Cloud Run native IAP: per-allowlist-entry IAM binding on the admin
|
|
431
|
+
// service grants `roles/iap.httpsResourceAccessor`. The actual "IAP
|
|
432
|
+
// enabled" flag on Cloud Run is set via `iapEnabled` (gen2) which
|
|
433
|
+
// gates every request through IAP before the container sees it.
|
|
434
|
+
// Allowlisted users get to the container; everyone else gets 403.
|
|
435
|
+
//
|
|
436
|
+
// NOTE — Cloud Run native IAP support is GA but the Pulumi resource
|
|
437
|
+
// surface for the `iapEnabled` flag depends on the @pulumi/gcp version
|
|
438
|
+
// shipped. If your provider build is older than v8.x, run
|
|
439
|
+
// `gcloud beta run services update <admin-service> --iap` as a
|
|
440
|
+
// post-up step. The stack provisions the IAM bindings either way.
|
|
441
|
+
for (const principal of iapAllowlist) {
|
|
442
|
+
new gcp.cloudrun.IamMember(
|
|
443
|
+
`${namePrefix}-admin-iap-${principal.replace(/[^a-z0-9]/gi, "-").slice(0, 40)}`,
|
|
444
|
+
{
|
|
445
|
+
location: region,
|
|
446
|
+
project,
|
|
447
|
+
service: adminSvc.name,
|
|
448
|
+
role: "roles/iap.httpsResourceAccessor",
|
|
449
|
+
member: principal,
|
|
450
|
+
},
|
|
451
|
+
opts,
|
|
452
|
+
);
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
// =========================================================================
|
|
456
|
+
// Outputs — DNS records the operator wires manually
|
|
457
|
+
// =========================================================================
|
|
458
|
+
|
|
459
|
+
const dnsRecords: pulumi.Output<DnsRecord[]> = pulumi
|
|
460
|
+
.all([adminDomainMapping.statuses, firebaseCustomDomain.requiredDnsUpdates])
|
|
461
|
+
.apply(([adminStatuses, firebaseUpdates]) => {
|
|
462
|
+
const out: DnsRecord[] = [];
|
|
463
|
+
|
|
464
|
+
// Admin subdomain — Cloud Run domain mapping prints CNAMEs/As.
|
|
465
|
+
const adminTargets =
|
|
466
|
+
adminStatuses
|
|
467
|
+
?.flatMap((s) => s.resourceRecords ?? [])
|
|
468
|
+
.map((r) => ({ type: r.type ?? "CNAME", value: r.rrdata ?? "" })) ?? [];
|
|
469
|
+
for (const t of adminTargets) {
|
|
470
|
+
out.push({ host: adminDomain, type: t.type as DnsRecord["type"], value: t.value });
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
// Apex — Firebase Hosting custom-domain DNS instructions.
|
|
474
|
+
// firebaseCustomDomain.requiredDnsUpdates is an array of update
|
|
475
|
+
// groups; each group has a list of `desired` records the operator
|
|
476
|
+
// creates and `discovered` records currently in DNS. We surface the
|
|
477
|
+
// `desired` set so the operator knows what to put in the registrar.
|
|
478
|
+
const apex = firebaseUpdates?.[0];
|
|
479
|
+
if (apex) {
|
|
480
|
+
for (const desired of apex.desireds ?? []) {
|
|
481
|
+
for (const v of desired.records ?? []) {
|
|
482
|
+
out.push({
|
|
483
|
+
host: domain,
|
|
484
|
+
type: (v.type ?? "A") as DnsRecord["type"],
|
|
485
|
+
value: v.rdata ?? "",
|
|
486
|
+
});
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
return out;
|
|
491
|
+
});
|
|
492
|
+
|
|
493
|
+
const bootstrapToken = generateBootstrapToken();
|
|
494
|
+
|
|
495
|
+
const outputs: CloudAdapterOutputs = {
|
|
496
|
+
adminUrl: pulumi.interpolate`https://${adminDomain}`,
|
|
497
|
+
gatewayUrl: gatewaySvc.uri,
|
|
498
|
+
staticUrl: `https://${domain}`,
|
|
499
|
+
adminDatabaseUrl,
|
|
500
|
+
publicDatabaseUrl,
|
|
501
|
+
bootstrapToken,
|
|
502
|
+
dnsRecords,
|
|
503
|
+
};
|
|
504
|
+
|
|
505
|
+
export const adminUrl = outputs.adminUrl;
|
|
506
|
+
export const gatewayUrl = outputs.gatewayUrl;
|
|
507
|
+
export const staticUrl = outputs.staticUrl;
|
|
508
|
+
export const adminDatabaseUrlOut = outputs.adminDatabaseUrl;
|
|
509
|
+
export const publicDatabaseUrlOut = outputs.publicDatabaseUrl;
|
|
510
|
+
export const bootstrapTokenOut = outputs.bootstrapToken;
|
|
511
|
+
export const dnsRecordsOut = outputs.dnsRecords;
|
|
512
|
+
export const firebaseSiteIdOut = firebaseSite.siteId;
|
|
513
|
+
export const firebaseSiteName = firebaseSite.name;
|