@caelo-cms/provisioning 0.1.0 → 0.2.1
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/adapter.d.ts +95 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +3 -0
- package/dist/adapter.js.map +1 -0
- package/dist/bootstrap-token.d.ts +11 -0
- package/dist/bootstrap-token.d.ts.map +1 -0
- package/dist/bootstrap-token.js +9 -0
- package/dist/bootstrap-token.js.map +1 -0
- package/dist/caddy.d.ts +34 -0
- package/dist/caddy.d.ts.map +1 -0
- package/dist/caddy.js +53 -0
- package/dist/caddy.js.map +1 -0
- package/{src/cdn-copy.ts → dist/cdn-copy.d.ts} +11 -42
- package/dist/cdn-copy.d.ts.map +1 -0
- package/dist/cdn-copy.js +48 -0
- package/dist/cdn-copy.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +670 -0
- package/dist/cli.js.map +1 -0
- package/dist/compose.d.ts +27 -0
- package/dist/compose.d.ts.map +1 -0
- package/{src/compose.ts → dist/compose.js} +15 -35
- package/dist/compose.js.map +1 -0
- package/dist/dns/cloudflare.d.ts +9 -0
- package/dist/dns/cloudflare.d.ts.map +1 -0
- package/dist/dns/cloudflare.js +160 -0
- package/dist/dns/cloudflare.js.map +1 -0
- package/dist/dns/index.d.ts +12 -0
- package/dist/dns/index.d.ts.map +1 -0
- package/dist/dns/index.js +42 -0
- package/dist/dns/index.js.map +1 -0
- package/dist/dns/manual.d.ts +5 -0
- package/dist/dns/manual.d.ts.map +1 -0
- package/dist/dns/manual.js +96 -0
- package/dist/dns/manual.js.map +1 -0
- package/dist/dns/types.d.ts +23 -0
- package/dist/dns/types.d.ts.map +1 -0
- package/dist/dns/types.js +3 -0
- package/dist/dns/types.js.map +1 -0
- package/dist/gcloud.d.ts +42 -0
- package/dist/gcloud.d.ts.map +1 -0
- package/dist/gcloud.js +187 -0
- package/dist/gcloud.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/install-state.d.ts +54 -0
- package/dist/install-state.d.ts.map +1 -0
- package/dist/install-state.js +118 -0
- package/dist/install-state.js.map +1 -0
- package/dist/lifecycle.d.ts +19 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +589 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/migration-runner.d.ts +15 -0
- package/dist/migration-runner.d.ts.map +1 -0
- package/dist/migration-runner.js +174 -0
- package/dist/migration-runner.js.map +1 -0
- package/dist/redirects-emit.d.ts +65 -0
- package/dist/redirects-emit.d.ts.map +1 -0
- package/dist/redirects-emit.js +92 -0
- package/dist/redirects-emit.js.map +1 -0
- package/dist/wizard.d.ts +35 -0
- package/dist/wizard.d.ts.map +1 -0
- package/dist/wizard.js +160 -0
- package/dist/wizard.js.map +1 -0
- package/dist/wizards/gcp-cost.d.ts +27 -0
- package/dist/wizards/gcp-cost.d.ts.map +1 -0
- package/dist/wizards/gcp-cost.js +77 -0
- package/dist/wizards/gcp-cost.js.map +1 -0
- package/dist/wizards/gcp-pulumi.d.ts +37 -0
- package/dist/wizards/gcp-pulumi.d.ts.map +1 -0
- package/dist/wizards/gcp-pulumi.js +100 -0
- package/dist/wizards/gcp-pulumi.js.map +1 -0
- package/dist/wizards/gcp.d.ts +9 -0
- package/dist/wizards/gcp.d.ts.map +1 -0
- package/dist/wizards/gcp.js +895 -0
- package/dist/wizards/gcp.js.map +1 -0
- package/package.json +34 -7
- package/stacks/aws/index.ts +6 -7
- package/stacks/azure/index.ts +11 -11
- package/stacks/gcp/Pulumi.production.yaml +16 -0
- package/stacks/gcp/Pulumi.yaml +52 -6
- package/stacks/gcp/index.ts +569 -188
- package/stacks/self-hosted/index.ts +3 -3
- package/static/welcome.html +155 -0
- package/src/adapter.ts +0 -103
- package/src/bootstrap-token.ts +0 -20
- package/src/caddy.ts +0 -93
- package/src/cli.ts +0 -674
- package/src/index.test.ts +0 -246
- package/src/index.ts +0 -52
- package/src/redirects-emit.ts +0 -166
- package/tsconfig.json +0 -16
package/dist/gcloud.js
ADDED
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Thin gcloud shell-out wrapper. The wizard composes high-level
|
|
4
|
+
* "create the project + link billing + enable APIs + create SA +
|
|
5
|
+
* grant roles + mint key" flows on top of these primitives.
|
|
6
|
+
*
|
|
7
|
+
* Why shell out instead of using the GCP SDK directly:
|
|
8
|
+
* - the user's gcloud auth state IS the auth (no separate
|
|
9
|
+
* credentials handling — `gcloud` already knows the user)
|
|
10
|
+
* - project create + billing link must happen as the user, NOT as
|
|
11
|
+
* a service account (the SA doesn't exist yet at bootstrap time)
|
|
12
|
+
* - error messages from gcloud are operator-readable; the SDK's
|
|
13
|
+
* gRPC errors aren't
|
|
14
|
+
*/
|
|
15
|
+
import { spawn } from "node:child_process";
|
|
16
|
+
/**
|
|
17
|
+
* Run a gcloud command. Buffered stdout + stderr (max 4 MB each).
|
|
18
|
+
* Throws on spawn failure but NOT on non-zero exit — caller checks `ok`.
|
|
19
|
+
*/
|
|
20
|
+
export async function gcloud(args, opts = {}) {
|
|
21
|
+
return new Promise((resolveResult, reject) => {
|
|
22
|
+
const child = spawn("gcloud", args, { stdio: ["pipe", "pipe", "pipe"] });
|
|
23
|
+
const stdout = [];
|
|
24
|
+
const stderr = [];
|
|
25
|
+
child.stdout.on("data", (chunk) => stdout.push(chunk));
|
|
26
|
+
child.stderr.on("data", (chunk) => stderr.push(chunk));
|
|
27
|
+
child.on("error", (e) => reject(e));
|
|
28
|
+
child.on("close", (code) => resolveResult({
|
|
29
|
+
ok: code === 0,
|
|
30
|
+
stdout: Buffer.concat(stdout).toString("utf8"),
|
|
31
|
+
stderr: Buffer.concat(stderr).toString("utf8"),
|
|
32
|
+
exitCode: code ?? 1,
|
|
33
|
+
}));
|
|
34
|
+
if (opts.stdin !== undefined) {
|
|
35
|
+
child.stdin.write(opts.stdin);
|
|
36
|
+
child.stdin.end();
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Active gcloud account. Returns `null` when no account is logged in
|
|
42
|
+
* — caller prompts `gcloud auth login`.
|
|
43
|
+
*/
|
|
44
|
+
export async function activeAccount() {
|
|
45
|
+
const r = await gcloud(["auth", "list", "--format=value(account)", "--filter=status:ACTIVE"]);
|
|
46
|
+
if (!r.ok)
|
|
47
|
+
return null;
|
|
48
|
+
const value = r.stdout.trim();
|
|
49
|
+
return value.length > 0 ? value : null;
|
|
50
|
+
}
|
|
51
|
+
export async function listBillingAccounts() {
|
|
52
|
+
const r = await gcloud(["billing", "accounts", "list", "--format=json"]);
|
|
53
|
+
if (!r.ok)
|
|
54
|
+
return [];
|
|
55
|
+
try {
|
|
56
|
+
const rows = JSON.parse(r.stdout);
|
|
57
|
+
return rows.map((row) => ({
|
|
58
|
+
id: row.name.replace(/^billingAccounts\//, ""),
|
|
59
|
+
displayName: row.displayName,
|
|
60
|
+
open: row.open,
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export async function projectExists(projectId) {
|
|
68
|
+
const r = await gcloud(["projects", "describe", projectId, "--format=value(projectId)"]);
|
|
69
|
+
return r.ok && r.stdout.trim() === projectId;
|
|
70
|
+
}
|
|
71
|
+
export async function createProject(projectId, displayName) {
|
|
72
|
+
return gcloud(["projects", "create", projectId, "--name", displayName]);
|
|
73
|
+
}
|
|
74
|
+
export async function linkBilling(projectId, billingAccountId) {
|
|
75
|
+
return gcloud(["billing", "projects", "link", projectId, "--billing-account", billingAccountId]);
|
|
76
|
+
}
|
|
77
|
+
const REQUIRED_APIS = [
|
|
78
|
+
"compute.googleapis.com",
|
|
79
|
+
"sqladmin.googleapis.com",
|
|
80
|
+
"run.googleapis.com",
|
|
81
|
+
"secretmanager.googleapis.com",
|
|
82
|
+
"servicenetworking.googleapis.com",
|
|
83
|
+
"dns.googleapis.com",
|
|
84
|
+
"storage.googleapis.com",
|
|
85
|
+
"cloudresourcemanager.googleapis.com",
|
|
86
|
+
"iam.googleapis.com",
|
|
87
|
+
"cloudbuild.googleapis.com",
|
|
88
|
+
"artifactregistry.googleapis.com",
|
|
89
|
+
"bigquery.googleapis.com",
|
|
90
|
+
"iap.googleapis.com",
|
|
91
|
+
// Used by gcp.projects.ServiceIdentity to provision the IAP-managed
|
|
92
|
+
// service account that forwards authenticated requests to Cloud Run.
|
|
93
|
+
"serviceusage.googleapis.com",
|
|
94
|
+
];
|
|
95
|
+
export async function enableApis(projectId) {
|
|
96
|
+
return gcloud(["services", "enable", ...REQUIRED_APIS, "--project", projectId]);
|
|
97
|
+
}
|
|
98
|
+
export async function serviceAccountExists(projectId, saEmail) {
|
|
99
|
+
const r = await gcloud([
|
|
100
|
+
"iam",
|
|
101
|
+
"service-accounts",
|
|
102
|
+
"describe",
|
|
103
|
+
saEmail,
|
|
104
|
+
"--project",
|
|
105
|
+
projectId,
|
|
106
|
+
"--format=value(email)",
|
|
107
|
+
]);
|
|
108
|
+
return r.ok && r.stdout.trim() === saEmail;
|
|
109
|
+
}
|
|
110
|
+
export async function createServiceAccount(projectId, accountId, displayName) {
|
|
111
|
+
return gcloud([
|
|
112
|
+
"iam",
|
|
113
|
+
"service-accounts",
|
|
114
|
+
"create",
|
|
115
|
+
accountId,
|
|
116
|
+
"--display-name",
|
|
117
|
+
displayName,
|
|
118
|
+
"--project",
|
|
119
|
+
projectId,
|
|
120
|
+
]);
|
|
121
|
+
}
|
|
122
|
+
const PROVISIONER_ROLES = [
|
|
123
|
+
"roles/run.admin",
|
|
124
|
+
"roles/cloudsql.admin",
|
|
125
|
+
"roles/storage.admin",
|
|
126
|
+
"roles/secretmanager.admin",
|
|
127
|
+
"roles/iam.serviceAccountUser",
|
|
128
|
+
"roles/compute.networkAdmin",
|
|
129
|
+
"roles/dns.admin",
|
|
130
|
+
"roles/servicenetworking.networksAdmin",
|
|
131
|
+
"roles/iam.serviceAccountTokenCreator",
|
|
132
|
+
"roles/cloudbuild.builds.editor",
|
|
133
|
+
"roles/artifactregistry.admin",
|
|
134
|
+
"roles/compute.securityAdmin",
|
|
135
|
+
"roles/iam.serviceAccountAdmin",
|
|
136
|
+
"roles/bigquery.admin",
|
|
137
|
+
"roles/iap.admin",
|
|
138
|
+
// compute.admin includes RegionNetworkEndpointGroups + URL maps +
|
|
139
|
+
// BackendService variants the LB needs. compute.networkAdmin alone
|
|
140
|
+
// doesn't cover NEG create.
|
|
141
|
+
"roles/compute.admin",
|
|
142
|
+
// logging.configWriter creates ProjectSink (BigQuery edge logs).
|
|
143
|
+
"roles/logging.configWriter",
|
|
144
|
+
// serviceusage.serviceUsageAdmin lets us trigger the IAP managed
|
|
145
|
+
// service identity (gcp.projects.ServiceIdentity).
|
|
146
|
+
"roles/serviceusage.serviceUsageAdmin",
|
|
147
|
+
];
|
|
148
|
+
/**
|
|
149
|
+
* Bind every role the GCP stack provisioner SA needs. Idempotent —
|
|
150
|
+
* gcloud silently no-ops a binding that already exists.
|
|
151
|
+
*/
|
|
152
|
+
export async function grantProvisionerRoles(projectId, saEmail) {
|
|
153
|
+
let granted = 0;
|
|
154
|
+
const failed = [];
|
|
155
|
+
for (const role of PROVISIONER_ROLES) {
|
|
156
|
+
const r = await gcloud([
|
|
157
|
+
"projects",
|
|
158
|
+
"add-iam-policy-binding",
|
|
159
|
+
projectId,
|
|
160
|
+
"--member",
|
|
161
|
+
`serviceAccount:${saEmail}`,
|
|
162
|
+
"--role",
|
|
163
|
+
role,
|
|
164
|
+
"--condition=None",
|
|
165
|
+
"--quiet",
|
|
166
|
+
]);
|
|
167
|
+
if (r.ok)
|
|
168
|
+
granted++;
|
|
169
|
+
else
|
|
170
|
+
failed.push(role);
|
|
171
|
+
}
|
|
172
|
+
return { granted, failed };
|
|
173
|
+
}
|
|
174
|
+
export async function createServiceAccountKey(saEmail, outputPath) {
|
|
175
|
+
return gcloud([
|
|
176
|
+
"iam",
|
|
177
|
+
"service-accounts",
|
|
178
|
+
"keys",
|
|
179
|
+
"create",
|
|
180
|
+
outputPath,
|
|
181
|
+
"--iam-account",
|
|
182
|
+
saEmail,
|
|
183
|
+
]);
|
|
184
|
+
}
|
|
185
|
+
export const REQUIRED_API_LIST = REQUIRED_APIS;
|
|
186
|
+
export const PROVISIONER_ROLE_LIST = PROVISIONER_ROLES;
|
|
187
|
+
//# sourceMappingURL=gcloud.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gcloud.js","sourceRoot":"","sources":["../src/gcloud.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @caelo-cms/provisioning — P14.
|
|
3
|
+
*
|
|
4
|
+
* Pulumi-driven self-hosted stack + cms-provision CLI helpers.
|
|
5
|
+
*
|
|
6
|
+
* Public surface:
|
|
7
|
+
* - generateCaddyfile(spec) → string
|
|
8
|
+
* - generateDockerCompose(spec) → string
|
|
9
|
+
* - generateBootstrapToken() → { token, expiresAt }
|
|
10
|
+
*
|
|
11
|
+
* The CLI (cli.ts) wires these into init / up / regenerate-caddy /
|
|
12
|
+
* backup / restore / status sub-commands. The Pulumi stack files
|
|
13
|
+
* (stacks/self-hosted/*) are imported by the CLI's `up` path and
|
|
14
|
+
* declare the actual Docker resources.
|
|
15
|
+
*/
|
|
16
|
+
export type { CloudAdapterInputs, CloudAdapterOutputs, DnsRecord, Environment, LocaleConfig, LocaleStrategy, ProvisioningOutputsJson, SupportedProvider, } from "./adapter.js";
|
|
17
|
+
export { type BootstrapToken, generateBootstrapToken, } from "./bootstrap-token.js";
|
|
18
|
+
export { type CaddyDomainSpec, type CaddyfileSpec, generateCaddyfile, } from "./caddy.js";
|
|
19
|
+
export { type CdnCopyAdapter, loadCdnCopyAdapter, selfHostedCdnCopy, } from "./cdn-copy.js";
|
|
20
|
+
export { type ComposeSpec, generateDockerCompose } from "./compose.js";
|
|
21
|
+
export { type CloudFrontRedirectArtifact, emitRedirectsAzureFrontDoor, emitRedirectsCloudFront, emitRedirectsCloudflare, type FrontDoorRule, type RedirectRow, type RedirectStatusCode, } from "./redirects-emit.js";
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AAEH,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,SAAS,EACT,WAAW,EACX,YAAY,EACZ,cAAc,EACd,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,cAAc,EACnB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,KAAK,cAAc,EACnB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,WAAW,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EACL,KAAK,0BAA0B,EAC/B,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,EACvB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
2
|
+
export { generateBootstrapToken, } from "./bootstrap-token.js";
|
|
3
|
+
export { generateCaddyfile, } from "./caddy.js";
|
|
4
|
+
export { loadCdnCopyAdapter, selfHostedCdnCopy, } from "./cdn-copy.js";
|
|
5
|
+
export { generateDockerCompose } from "./compose.js";
|
|
6
|
+
export { emitRedirectsAzureFrontDoor, emitRedirectsCloudFront, emitRedirectsCloudflare, } from "./redirects-emit.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mCAAmC;AA4BnC,OAAO,EAEL,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAGL,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAEL,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAoB,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAEL,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,GAIxB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export type Provider = "self-hosted" | "gcp" | "aws" | "azure";
|
|
2
|
+
export interface InstallMetadata {
|
|
3
|
+
installId: string;
|
|
4
|
+
provider: Provider;
|
|
5
|
+
/** Cloud-side project / account / subscription id. NULL for self-hosted. */
|
|
6
|
+
projectId: string | null;
|
|
7
|
+
domain: string;
|
|
8
|
+
ownerEmail: string;
|
|
9
|
+
region: string | null;
|
|
10
|
+
createdAt: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ProgressCheckpoint {
|
|
13
|
+
/** Last completed wizard step. Used for resume-after-failure. */
|
|
14
|
+
lastCompletedStep: string | null;
|
|
15
|
+
/** Per-step state (e.g. createdProjectId, mintedSaKeyAt, etc.). */
|
|
16
|
+
steps: Record<string, unknown>;
|
|
17
|
+
/** ISO timestamp of last successful update. */
|
|
18
|
+
updatedAt: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function installRoot(installId: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* Stable install id from the (provider, projectId-or-domain) pair so a re-run
|
|
23
|
+
* with the same inputs always lands on the same `~/.caelo-<id>/` directory.
|
|
24
|
+
* The id is short + readable — `gcp-caelo-website` / `self-hosted-mysite-com`.
|
|
25
|
+
*/
|
|
26
|
+
export declare function deriveInstallId(provider: Provider, projectIdOrDomain: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Ensure the install directory exists with the right mode + sub-dirs.
|
|
29
|
+
* Idempotent.
|
|
30
|
+
*/
|
|
31
|
+
export declare function ensureInstallDir(installId: string): {
|
|
32
|
+
root: string;
|
|
33
|
+
secretsDir: string;
|
|
34
|
+
stateDir: string;
|
|
35
|
+
};
|
|
36
|
+
export declare function readMetadata(installId: string): InstallMetadata | null;
|
|
37
|
+
export declare function writeMetadata(installId: string, meta: InstallMetadata): void;
|
|
38
|
+
export declare function readProgress(installId: string): ProgressCheckpoint;
|
|
39
|
+
export declare function writeProgress(installId: string, checkpoint: ProgressCheckpoint): void;
|
|
40
|
+
/**
|
|
41
|
+
* Mark a step complete. Wizard re-runs check `isStepDone(installId, name)` to
|
|
42
|
+
* skip already-done steps.
|
|
43
|
+
*/
|
|
44
|
+
export declare function markStepDone(installId: string, stepName: string, payload?: unknown): void;
|
|
45
|
+
export declare function isStepDone(installId: string, stepName: string): boolean;
|
|
46
|
+
export declare function getStepPayload<T>(installId: string, stepName: string): T | null;
|
|
47
|
+
/**
|
|
48
|
+
* Read a secret file from the install's `secrets/` dir. Returns null if the
|
|
49
|
+
* file doesn't exist; throws if the file exists but has the wrong mode (a
|
|
50
|
+
* defence against the user copy-pasting a key into a 644 file by mistake).
|
|
51
|
+
*/
|
|
52
|
+
export declare function readSecret(installId: string, name: string): string | null;
|
|
53
|
+
export declare function writeSecret(installId: string, name: string, value: string): void;
|
|
54
|
+
//# sourceMappingURL=install-state.d.ts.map
|
|
@@ -0,0 +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;AAE/D,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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Per-install state — every Caelo install gets its own
|
|
4
|
+
* `~/.caelo-<install-id>/` directory with:
|
|
5
|
+
*
|
|
6
|
+
* secrets/ — mode-700 dir for the install's secrets
|
|
7
|
+
* anthropic-api-key (mode 600) — Anthropic API key (one-time prompt)
|
|
8
|
+
* pulumi-passphrase (mode 600) — Pulumi local-backend passphrase
|
|
9
|
+
* sa-key.json (mode 600) — GCP SA key (when local-deploy; absent
|
|
10
|
+
* when Workload Identity Federation
|
|
11
|
+
* deploys from CI)
|
|
12
|
+
* state/ — Pulumi local backend state (per-install isolated)
|
|
13
|
+
* progress.json — wizard checkpoint so re-runs resume cleanly
|
|
14
|
+
* install.json — install metadata (provider, project id, region,
|
|
15
|
+
* domain, owner email, install id, created_at)
|
|
16
|
+
*
|
|
17
|
+
* The CLAUDE.md §11.C contract: end-users never reach into this directory
|
|
18
|
+
* by hand. The wizard + lifecycle commands wrap every read + write.
|
|
19
|
+
*/
|
|
20
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
21
|
+
import { homedir } from "node:os";
|
|
22
|
+
import { join } from "node:path";
|
|
23
|
+
const ROOT_PREFIX = ".caelo-";
|
|
24
|
+
export function installRoot(installId) {
|
|
25
|
+
return join(homedir(), `${ROOT_PREFIX}${installId}`);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Stable install id from the (provider, projectId-or-domain) pair so a re-run
|
|
29
|
+
* with the same inputs always lands on the same `~/.caelo-<id>/` directory.
|
|
30
|
+
* The id is short + readable — `gcp-caelo-website` / `self-hosted-mysite-com`.
|
|
31
|
+
*/
|
|
32
|
+
export function deriveInstallId(provider, projectIdOrDomain) {
|
|
33
|
+
const slug = projectIdOrDomain
|
|
34
|
+
.toLowerCase()
|
|
35
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
36
|
+
.replace(/^-+|-+$/g, "")
|
|
37
|
+
.slice(0, 40);
|
|
38
|
+
return `${provider}-${slug}`;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Ensure the install directory exists with the right mode + sub-dirs.
|
|
42
|
+
* Idempotent.
|
|
43
|
+
*/
|
|
44
|
+
export function ensureInstallDir(installId) {
|
|
45
|
+
const root = installRoot(installId);
|
|
46
|
+
const secretsDir = join(root, "secrets");
|
|
47
|
+
const stateDir = join(root, "state");
|
|
48
|
+
if (!existsSync(root))
|
|
49
|
+
mkdirSync(root, { recursive: true, mode: 0o700 });
|
|
50
|
+
if (!existsSync(secretsDir))
|
|
51
|
+
mkdirSync(secretsDir, { recursive: true, mode: 0o700 });
|
|
52
|
+
if (!existsSync(stateDir))
|
|
53
|
+
mkdirSync(stateDir, { recursive: true, mode: 0o700 });
|
|
54
|
+
// chmod every time in case the dirs existed with looser perms.
|
|
55
|
+
chmodSync(root, 0o700);
|
|
56
|
+
chmodSync(secretsDir, 0o700);
|
|
57
|
+
chmodSync(stateDir, 0o700);
|
|
58
|
+
return { root, secretsDir, stateDir };
|
|
59
|
+
}
|
|
60
|
+
export function readMetadata(installId) {
|
|
61
|
+
const path = join(installRoot(installId), "install.json");
|
|
62
|
+
if (!existsSync(path))
|
|
63
|
+
return null;
|
|
64
|
+
return JSON.parse(readFileSync(path, "utf8"));
|
|
65
|
+
}
|
|
66
|
+
export function writeMetadata(installId, meta) {
|
|
67
|
+
const path = join(installRoot(installId), "install.json");
|
|
68
|
+
writeFileSync(path, `${JSON.stringify(meta, null, 2)}\n`, { mode: 0o600 });
|
|
69
|
+
}
|
|
70
|
+
export function readProgress(installId) {
|
|
71
|
+
const path = join(installRoot(installId), "progress.json");
|
|
72
|
+
if (!existsSync(path)) {
|
|
73
|
+
return { lastCompletedStep: null, steps: {}, updatedAt: new Date().toISOString() };
|
|
74
|
+
}
|
|
75
|
+
return JSON.parse(readFileSync(path, "utf8"));
|
|
76
|
+
}
|
|
77
|
+
export function writeProgress(installId, checkpoint) {
|
|
78
|
+
const path = join(installRoot(installId), "progress.json");
|
|
79
|
+
writeFileSync(path, `${JSON.stringify({ ...checkpoint, updatedAt: new Date().toISOString() }, null, 2)}\n`, { mode: 0o600 });
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Mark a step complete. Wizard re-runs check `isStepDone(installId, name)` to
|
|
83
|
+
* skip already-done steps.
|
|
84
|
+
*/
|
|
85
|
+
export function markStepDone(installId, stepName, payload) {
|
|
86
|
+
const cur = readProgress(installId);
|
|
87
|
+
cur.lastCompletedStep = stepName;
|
|
88
|
+
if (payload !== undefined)
|
|
89
|
+
cur.steps[stepName] = payload;
|
|
90
|
+
writeProgress(installId, cur);
|
|
91
|
+
}
|
|
92
|
+
export function isStepDone(installId, stepName) {
|
|
93
|
+
return readProgress(installId).steps[stepName] !== undefined;
|
|
94
|
+
}
|
|
95
|
+
export function getStepPayload(installId, stepName) {
|
|
96
|
+
const v = readProgress(installId).steps[stepName];
|
|
97
|
+
return (v ?? null);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Read a secret file from the install's `secrets/` dir. Returns null if the
|
|
101
|
+
* file doesn't exist; throws if the file exists but has the wrong mode (a
|
|
102
|
+
* defence against the user copy-pasting a key into a 644 file by mistake).
|
|
103
|
+
*/
|
|
104
|
+
export function readSecret(installId, name) {
|
|
105
|
+
const path = join(installRoot(installId), "secrets", name);
|
|
106
|
+
if (!existsSync(path))
|
|
107
|
+
return null;
|
|
108
|
+
const contents = readFileSync(path, "utf8").trim();
|
|
109
|
+
if (contents.length === 0)
|
|
110
|
+
return null;
|
|
111
|
+
return contents;
|
|
112
|
+
}
|
|
113
|
+
export function writeSecret(installId, name, value) {
|
|
114
|
+
ensureInstallDir(installId);
|
|
115
|
+
const path = join(installRoot(installId), "secrets", name);
|
|
116
|
+
writeFileSync(path, value.endsWith("\n") ? value : `${value}\n`, { mode: 0o600 });
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=install-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-state.js","sourceRoot":"","sources":["../src/install-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare function statusCommand(): Promise<void>;
|
|
2
|
+
interface UpgradeOpts {
|
|
3
|
+
/** Explicit semver to roll to (e.g. "0.5.3"). Defaults to "latest". */
|
|
4
|
+
readonly version?: string;
|
|
5
|
+
/** Pre-release channel: "stable" (default), "rc", "beta". */
|
|
6
|
+
readonly channel?: "stable" | "rc" | "beta";
|
|
7
|
+
/**
|
|
8
|
+
* P21 ship 4 — escape hatch for forks / staging environments using
|
|
9
|
+
* unsigned images. Default = verify with cosign; refuse to roll on
|
|
10
|
+
* mismatch.
|
|
11
|
+
*/
|
|
12
|
+
readonly skipVerify?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare function upgradeCommand(opts?: UpgradeOpts): Promise<void>;
|
|
15
|
+
export declare function backupCommand(): Promise<void>;
|
|
16
|
+
export declare function rotateSecretCommand(name: string | undefined): Promise<void>;
|
|
17
|
+
export declare function destroyCommand(): Promise<void>;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAyGA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAWnD;AA0GD,UAAU,WAAW;IACnB,uEAAuE;IACvE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,MAAM,CAAC;IAC5C;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B;AAqGD,wBAAsB,cAAc,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsL1E;AAwGD,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAmCnD;AAMD,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCjF;AAMD,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CA6CpD"}
|