@caelo-cms/provisioning 0.10.43 → 0.10.46
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 +1 -1
- package/dist/adc-impersonation.d.ts +28 -0
- package/dist/adc-impersonation.d.ts.map +1 -0
- package/dist/adc-impersonation.js +126 -0
- package/dist/adc-impersonation.js.map +1 -0
- package/dist/caddy.js +1 -1
- package/dist/checkpoint-secrets.d.ts.map +1 -1
- package/dist/checkpoint-secrets.js +2 -1
- package/dist/checkpoint-secrets.js.map +1 -1
- package/dist/cli.js +208 -43
- package/dist/cli.js.map +1 -1
- package/dist/compose.d.ts +45 -0
- package/dist/compose.d.ts.map +1 -1
- package/dist/compose.js +112 -29
- package/dist/compose.js.map +1 -1
- package/dist/gcloud-retry.d.ts +5 -1
- package/dist/gcloud-retry.d.ts.map +1 -1
- package/dist/gcloud-retry.js.map +1 -1
- package/dist/gcloud.d.ts +2 -1
- package/dist/gcloud.d.ts.map +1 -1
- package/dist/gcloud.js +11 -13
- package/dist/gcloud.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/infra-contract.d.ts +24 -0
- package/dist/infra-contract.d.ts.map +1 -0
- package/dist/infra-contract.js +25 -0
- package/dist/infra-contract.js.map +1 -0
- package/dist/install-state.d.ts +68 -2
- package/dist/install-state.d.ts.map +1 -1
- package/dist/install-state.js +166 -22
- package/dist/install-state.js.map +1 -1
- package/dist/lifecycle.d.ts +6 -0
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/lifecycle.js +185 -819
- package/dist/lifecycle.js.map +1 -1
- package/dist/mcp-iap.js +1 -1
- package/dist/migration-runner.d.ts +3 -0
- package/dist/migration-runner.d.ts.map +1 -1
- package/dist/migration-runner.js +7 -5
- package/dist/migration-runner.js.map +1 -1
- package/dist/ops-backend.d.ts +46 -0
- package/dist/ops-backend.d.ts.map +1 -0
- package/dist/ops-backend.js +370 -0
- package/dist/ops-backend.js.map +1 -0
- package/dist/provisioner-identity.d.ts +103 -0
- package/dist/provisioner-identity.d.ts.map +1 -0
- package/dist/provisioner-identity.js +323 -0
- package/dist/provisioner-identity.js.map +1 -0
- package/dist/regions.d.ts.map +1 -1
- package/dist/regions.js +2 -1
- package/dist/regions.js.map +1 -1
- package/dist/release-contract.d.ts +37 -0
- package/dist/release-contract.d.ts.map +1 -0
- package/dist/release-contract.js +55 -0
- package/dist/release-contract.js.map +1 -0
- package/dist/release-manifest.d.ts +140 -0
- package/dist/release-manifest.d.ts.map +1 -0
- package/dist/release-manifest.js +319 -0
- package/dist/release-manifest.js.map +1 -0
- package/dist/self-command.d.ts +16 -0
- package/dist/self-command.d.ts.map +1 -0
- package/dist/self-command.js +20 -0
- package/dist/self-command.js.map +1 -0
- package/dist/self-hosted-release.d.ts +81 -0
- package/dist/self-hosted-release.d.ts.map +1 -0
- package/dist/self-hosted-release.js +148 -0
- package/dist/self-hosted-release.js.map +1 -0
- package/dist/self-hosted-upgrade.d.ts +91 -0
- package/dist/self-hosted-upgrade.d.ts.map +1 -0
- package/dist/self-hosted-upgrade.js +355 -0
- package/dist/self-hosted-upgrade.js.map +1 -0
- package/dist/stack-contract.js +2 -2
- package/dist/stack-converge.d.ts.map +1 -1
- package/dist/stack-converge.js +2 -1
- package/dist/stack-converge.js.map +1 -1
- package/dist/staging-admin.js +3 -3
- package/dist/state-backend.d.ts +103 -0
- package/dist/state-backend.d.ts.map +1 -0
- package/dist/state-backend.js +180 -0
- package/dist/state-backend.js.map +1 -0
- package/dist/state-store.d.ts +55 -0
- package/dist/state-store.d.ts.map +1 -0
- package/dist/state-store.js +140 -0
- package/dist/state-store.js.map +1 -0
- package/dist/upgrade/app-roll.d.ts +164 -0
- package/dist/upgrade/app-roll.d.ts.map +1 -0
- package/dist/upgrade/app-roll.js +270 -0
- package/dist/upgrade/app-roll.js.map +1 -0
- package/dist/upgrade/backup.d.ts +48 -0
- package/dist/upgrade/backup.d.ts.map +1 -0
- package/dist/upgrade/backup.js +71 -0
- package/dist/upgrade/backup.js.map +1 -0
- package/dist/upgrade/converge.d.ts +45 -0
- package/dist/upgrade/converge.d.ts.map +1 -0
- package/dist/upgrade/converge.js +287 -0
- package/dist/upgrade/converge.js.map +1 -0
- package/dist/upgrade/gcp-lookup.d.ts +23 -0
- package/dist/upgrade/gcp-lookup.d.ts.map +1 -0
- package/dist/upgrade/gcp-lookup.js +95 -0
- package/dist/upgrade/gcp-lookup.js.map +1 -0
- package/dist/upgrade/health.d.ts +99 -0
- package/dist/upgrade/health.d.ts.map +1 -0
- package/dist/upgrade/health.js +214 -0
- package/dist/upgrade/health.js.map +1 -0
- package/dist/upgrade/release-images.d.ts +125 -0
- package/dist/upgrade/release-images.d.ts.map +1 -0
- package/dist/upgrade/release-images.js +315 -0
- package/dist/upgrade/release-images.js.map +1 -0
- package/dist/upgrade/reporter.d.ts +17 -0
- package/dist/upgrade/reporter.d.ts.map +1 -0
- package/dist/upgrade/reporter.js +28 -0
- package/dist/upgrade/reporter.js.map +1 -0
- package/dist/upgrade/upgrade.d.ts +79 -0
- package/dist/upgrade/upgrade.d.ts.map +1 -0
- package/dist/upgrade/upgrade.js +105 -0
- package/dist/upgrade/upgrade.js.map +1 -0
- package/dist/wizard.d.ts.map +1 -1
- package/dist/wizard.js +7 -3
- package/dist/wizard.js.map +1 -1
- package/dist/wizards/gcp-cost.d.ts.map +1 -1
- package/dist/wizards/gcp-cost.js +7 -1
- package/dist/wizards/gcp-cost.js.map +1 -1
- package/dist/wizards/gcp-pulumi.d.ts +99 -8
- package/dist/wizards/gcp-pulumi.d.ts.map +1 -1
- package/dist/wizards/gcp-pulumi.js +157 -50
- package/dist/wizards/gcp-pulumi.js.map +1 -1
- package/dist/wizards/gcp.d.ts.map +1 -1
- package/dist/wizards/gcp.js +185 -61
- package/dist/wizards/gcp.js.map +1 -1
- package/package.json +4 -3
- package/stacks/aws/README.md +1 -1
- package/stacks/gcp/Pulumi.yaml +1 -1
- package/stacks/gcp/README.md +1 -1
- package/stacks/gcp/index.ts +1 -1
- package/stacks/gcp-firebase/Pulumi.yaml +1 -1
- package/stacks/gcp-firebase/index.ts +2 -2
- package/stacks/self-hosted/README.md +4 -0
- package/stacks/self-hosted/index.ts +10 -2
package/dist/compose.js
CHANGED
|
@@ -3,12 +3,57 @@
|
|
|
3
3
|
* P14 — production docker-compose.yml generator.
|
|
4
4
|
*
|
|
5
5
|
* Emits the production stack: Postgres + pgBackRest sidecar + Caddy +
|
|
6
|
-
* MinIO +
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
6
|
+
* MinIO + the two Caelo services (admin, gateway). Idempotent: same input →
|
|
7
|
+
* byte-identical output. The CLI's `init` / `up` / `upgrade` sub-commands
|
|
8
|
+
* write this to `.caelo/docker-compose.yml`.
|
|
9
|
+
*
|
|
10
|
+
* #696 — the admin and gateway run the PREBUILT, cosign-verified release
|
|
11
|
+
* images, pinned by digest (CLAUDE.md §11.C: "a PR that requires the user to
|
|
12
|
+
* run docker build is a regression"). Nothing of a Caelo source checkout is
|
|
13
|
+
* mounted. The digest pin is what `upgrade` moves; a tag would let a
|
|
14
|
+
* `docker compose pull` change the running release behind the operator's
|
|
15
|
+
* back. Contributors who want their working tree in the containers ask for
|
|
16
|
+
* {@link DevImages} explicitly (`init --dev`) — never the default.
|
|
10
17
|
*/
|
|
11
18
|
import { ADMIN_MEMORY_DEFAULT, memoryQuantityMiB, publicSiteUrl } from "./stack-contract.js";
|
|
19
|
+
import { ghcrRepository, isImageDigest } from "./upgrade/release-images.js";
|
|
20
|
+
/** The admin's HTTP port inside the Compose network (the Caddyfile proxies to it). */
|
|
21
|
+
export const COMPOSE_ADMIN_PORT = 5173;
|
|
22
|
+
/** `.caelo/<this>/` holds the pending Owner-bootstrap token the admin consumes. */
|
|
23
|
+
export const BOOTSTRAP_DIR = "bootstrap";
|
|
24
|
+
/**
|
|
25
|
+
* Where the host's `.caelo/output/` appears in the admin (read-write, the
|
|
26
|
+
* generator's output root) and in Caddy (read-only). The seeded deploy
|
|
27
|
+
* targets' `out_dir` (`output/<env>`) resolves below it, which is where the
|
|
28
|
+
* Caddyfile's site roots point (`/srv/caelo/output/<env>/current`).
|
|
29
|
+
*/
|
|
30
|
+
export const SITE_OUTPUT_ROOT = "/srv/caelo";
|
|
31
|
+
/** `.caelo/<this>/` holds the uploaded media (the admin's local media adapter root). */
|
|
32
|
+
export const MEDIA_DIR = "media";
|
|
33
|
+
/** Where {@link MEDIA_DIR} appears in the admin container (its `MEDIA_ROOT_DIR`). */
|
|
34
|
+
export const MEDIA_ROOT = "/data/media";
|
|
35
|
+
/** The gateway's HTTP port inside the Compose network. */
|
|
36
|
+
export const COMPOSE_GATEWAY_PORT = 8090;
|
|
37
|
+
/**
|
|
38
|
+
* `ghcr.io/caelo-cms/<service>@<digest>` — the only image reference shape a
|
|
39
|
+
* release-mode Compose file accepts.
|
|
40
|
+
*/
|
|
41
|
+
export function ghcrImageRef(service, digest) {
|
|
42
|
+
if (!isImageDigest(digest))
|
|
43
|
+
throw new Error(`not an image digest: ${JSON.stringify(digest)}`);
|
|
44
|
+
return `${ghcrRepository(service)}@${digest}`;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The digest of a release image reference, or null when `ref` is not a
|
|
48
|
+
* digest-pinned reference to that service's Caelo repository.
|
|
49
|
+
*/
|
|
50
|
+
export function ghcrImageDigest(service, ref) {
|
|
51
|
+
const prefix = `${ghcrRepository(service)}@`;
|
|
52
|
+
if (!ref.startsWith(prefix))
|
|
53
|
+
return null;
|
|
54
|
+
const digest = ref.slice(prefix.length);
|
|
55
|
+
return isImageDigest(digest) ? digest : null;
|
|
56
|
+
}
|
|
12
57
|
export function generateDockerCompose(spec) {
|
|
13
58
|
const adminMemory = spec.adminMemory ?? ADMIN_MEMORY_DEFAULT;
|
|
14
59
|
const adminMemoryMiB = memoryQuantityMiB(adminMemory);
|
|
@@ -70,52 +115,90 @@ services:
|
|
|
70
115
|
- ./Caddyfile:/etc/caddy/Caddyfile:ro
|
|
71
116
|
- caelo-caddy-data:/data
|
|
72
117
|
- caelo-caddy-config:/config
|
|
73
|
-
- ./output
|
|
118
|
+
- ./output:${SITE_OUTPUT_ROOT}:ro
|
|
119
|
+
|
|
120
|
+
${adminService(spec, adminMemoryMiB, env)}
|
|
74
121
|
|
|
75
|
-
|
|
76
|
-
|
|
122
|
+
${gatewayService(spec)}
|
|
123
|
+
|
|
124
|
+
volumes:
|
|
125
|
+
caelo-pg:
|
|
126
|
+
caelo-pg-backups:
|
|
127
|
+
caelo-minio:
|
|
128
|
+
caelo-caddy-data:
|
|
129
|
+
caelo-caddy-config:
|
|
130
|
+
`;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* How a Caelo service's container starts: its image and, in dev mode, the
|
|
134
|
+
* checkout. `mounts` are extra bind mounts the service needs in both modes.
|
|
135
|
+
*/
|
|
136
|
+
function serviceRuntime(images, service, devCommand, mounts = []) {
|
|
137
|
+
const volumes = (list) => list.length === 0 ? [] : [" volumes:", ...list.map((m) => ` - ${m}`)];
|
|
138
|
+
if (images.mode === "dev") {
|
|
139
|
+
return [
|
|
140
|
+
" # DEV MODE (cms-provision init --dev): runs the Caelo checkout this",
|
|
141
|
+
" # .caelo/ dir lives in. Contributors only — never an end-user install.",
|
|
142
|
+
" image: oven/bun:1.4.2",
|
|
143
|
+
" working_dir: /app",
|
|
144
|
+
` command: ${devCommand}`,
|
|
145
|
+
...volumes(["../..:/app", ...mounts]),
|
|
146
|
+
].join("\n");
|
|
147
|
+
}
|
|
148
|
+
const digest = ghcrImageDigest(service, images[service]);
|
|
149
|
+
if (!digest) {
|
|
150
|
+
throw new Error(`${service} image ${JSON.stringify(images[service])} is not ${ghcrRepository(service)}@sha256:<digest>`);
|
|
151
|
+
}
|
|
152
|
+
// The image's own CMD starts the service; no source is mounted.
|
|
153
|
+
return [` image: ${ghcrImageRef(service, digest)}`, ...volumes(mounts)].join("\n");
|
|
154
|
+
}
|
|
155
|
+
function adminService(spec, adminMemoryMiB, env) {
|
|
156
|
+
return ` caelo-admin:
|
|
157
|
+
${serviceRuntime(spec.images, "admin", `sh -c "cd apps/admin && bunx svelte-kit sync && bun --bun vite dev --host 0.0.0.0 --port ${COMPOSE_ADMIN_PORT}"`,
|
|
158
|
+
// The Owner-bootstrap token handoff: `init` writes the token to
|
|
159
|
+
// `.caelo/bootstrap/pending-token.json`; the admin reads (and deletes) it
|
|
160
|
+
// from `/app/.caelo/` on first boot (hooks.server.ts). Only that dir is
|
|
161
|
+
// mounted — never `.caelo/` itself, which holds config.json's superuser
|
|
162
|
+
// and MinIO passwords. Without the token /setup accepts any first Owner.
|
|
163
|
+
// The static site: the admin builds into it (CAELO_OUTPUT_ROOT below),
|
|
164
|
+
// Caddy serves it read-only from the same host dir. On the host, so a
|
|
165
|
+
// recreated admin (upgrade) keeps the published site.
|
|
166
|
+
// Uploaded media (MEDIA_ROOT_DIR below) likewise lives on the host.
|
|
167
|
+
[
|
|
168
|
+
`./${BOOTSTRAP_DIR}:/app/.caelo`,
|
|
169
|
+
`./output:${SITE_OUTPUT_ROOT}`,
|
|
170
|
+
`./${MEDIA_DIR}:${MEDIA_ROOT}`,
|
|
171
|
+
])}
|
|
77
172
|
container_name: caelo-admin
|
|
78
173
|
restart: unless-stopped
|
|
79
174
|
depends_on:
|
|
80
175
|
postgres: { condition: service_healthy }
|
|
81
|
-
working_dir: /app
|
|
82
|
-
volumes:
|
|
83
|
-
- ../..:/app
|
|
84
|
-
command: bun run --filter @caelo-cms/admin start
|
|
85
176
|
mem_reservation: ${adminMemoryMiB}m
|
|
86
177
|
environment:
|
|
87
178
|
ADMIN_DATABASE_URL: "${dbUrl("admin_role", spec.rolePasswords.admin, "cms_admin")}"
|
|
88
179
|
PUBLIC_ADMIN_DATABASE_URL: "${dbUrl("admin_role", spec.rolePasswords.admin, "cms_public")}"
|
|
89
180
|
CAELO_SECRET_KEK: "${escapeYaml(spec.caeloSecretKek)}"
|
|
90
181
|
CAELO_SITE_URL: "${escapeYaml(publicSiteUrl(spec.domain))}"
|
|
182
|
+
PORT: "${COMPOSE_ADMIN_PORT}"
|
|
183
|
+
CAELO_OUTPUT_ROOT: "${SITE_OUTPUT_ROOT}"
|
|
184
|
+
MEDIA_ROOT_DIR: "${MEDIA_ROOT}"
|
|
91
185
|
NODE_ENV: production
|
|
92
186
|
${env("ANTHROPIC_API_KEY", spec.anthropicApiKey)}
|
|
93
|
-
${env("RESEND_API_KEY", spec.resendApiKey)}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
187
|
+
${env("RESEND_API_KEY", spec.resendApiKey)}`;
|
|
188
|
+
}
|
|
189
|
+
function gatewayService(spec) {
|
|
190
|
+
return ` caelo-gateway:
|
|
191
|
+
${serviceRuntime(spec.images, "gateway", "bun run apps/api-gateway/src/server.ts")}
|
|
97
192
|
container_name: caelo-gateway
|
|
98
193
|
restart: unless-stopped
|
|
99
194
|
depends_on:
|
|
100
195
|
postgres: { condition: service_healthy }
|
|
101
|
-
working_dir: /app
|
|
102
|
-
volumes:
|
|
103
|
-
- ../..:/app
|
|
104
|
-
command: bun run apps/api-gateway/src/server.ts
|
|
105
196
|
environment:
|
|
106
197
|
# Its own two logins only — no authoring credential (#613, CLAUDE.md §2).
|
|
107
198
|
GATEWAY_DATABASE_URL: "${dbUrl("gateway_role", spec.rolePasswords.gateway, "cms_admin")}"
|
|
108
199
|
PUBLIC_DATABASE_URL: "${dbUrl("public_role", spec.rolePasswords.public, "cms_public")}"
|
|
109
|
-
GATEWAY_PORT: "
|
|
110
|
-
NODE_ENV: production
|
|
111
|
-
|
|
112
|
-
volumes:
|
|
113
|
-
caelo-pg:
|
|
114
|
-
caelo-pg-backups:
|
|
115
|
-
caelo-minio:
|
|
116
|
-
caelo-caddy-data:
|
|
117
|
-
caelo-caddy-config:
|
|
118
|
-
`;
|
|
200
|
+
GATEWAY_PORT: "${COMPOSE_GATEWAY_PORT}"
|
|
201
|
+
NODE_ENV: production`;
|
|
119
202
|
}
|
|
120
203
|
/** A compose-network database URL, password URL-encoded and YAML-escaped. */
|
|
121
204
|
function dbUrl(role, password, database) {
|
package/dist/compose.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose.js","sourceRoot":"","sources":["../src/compose.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC
|
|
1
|
+
{"version":3,"file":"compose.js","sourceRoot":"","sources":["../src/compose.ts"],"names":[],"mappings":"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"}
|
package/dist/gcloud-retry.d.ts
CHANGED
|
@@ -5,9 +5,13 @@
|
|
|
5
5
|
* PERMISSION_DENIED does not get better by waiting.
|
|
6
6
|
*/
|
|
7
7
|
import type { GcloudResult } from "./gcloud.js";
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* Runs one gcloud command; `stdin` feeds secret payloads (`--data-file=-`),
|
|
10
|
+
* `env` replaces the base environment (default: this process's).
|
|
11
|
+
*/
|
|
9
12
|
export type GcloudRunner = (args: string[], opts?: {
|
|
10
13
|
readonly stdin?: string;
|
|
14
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
11
15
|
}) => Promise<GcloudResult>;
|
|
12
16
|
export type Sleep = (ms: number) => Promise<void>;
|
|
13
17
|
export declare const realSleep: Sleep;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gcloud-retry.d.ts","sourceRoot":"","sources":["../src/gcloud-retry.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD
|
|
1
|
+
{"version":3,"file":"gcloud-retry.d.ts","sourceRoot":"","sources":["../src/gcloud-retry.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,KACjE,OAAO,CAAC,YAAY,CAAC,CAAC;AAC3B,MAAM,MAAM,KAAK,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAMlD,eAAO,MAAM,SAAS,EAAE,KAA2D,CAAC;AAEpF,2EAA2E;AAC3E,wBAAsB,YAAY,CAChC,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAAC,YAAY,CAAC,CAQvB"}
|
package/dist/gcloud-retry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gcloud-retry.js","sourceRoot":"","sources":["../src/gcloud-retry.ts"],"names":[],"mappings":"AAAA,mCAAmC;
|
|
1
|
+
{"version":3,"file":"gcloud-retry.js","sourceRoot":"","sources":["../src/gcloud-retry.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAqBnC,uEAAuE;AACvE,MAAM,SAAS,GAAG,iEAAiE,CAAC;AACpF,MAAM,eAAe,GAAsB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAEzE,MAAM,CAAC,MAAM,SAAS,GAAU,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAEpF,2EAA2E;AAC3E,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAiB,EACjB,KAAY,EACZ,IAAc;IAEd,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;IACxB,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QACpC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;YAAE,MAAM;QAC7C,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
|
package/dist/gcloud.d.ts
CHANGED
|
@@ -21,9 +21,11 @@ export declare function gcloudEnv(base?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
|
21
21
|
* Run a gcloud command. Buffered stdout + stderr (max 4 MB each).
|
|
22
22
|
* Throws on spawn failure but NOT on non-zero exit — caller checks `ok`.
|
|
23
23
|
* stdin is always ended (after `opts.stdin`, if given), so nothing can wait on it.
|
|
24
|
+
* `opts.env` replaces this process's environment as the base (prompts stay off).
|
|
24
25
|
*/
|
|
25
26
|
export declare function gcloud(args: string[], opts?: {
|
|
26
27
|
stdin?: string;
|
|
28
|
+
env?: NodeJS.ProcessEnv;
|
|
27
29
|
}): Promise<GcloudResult>;
|
|
28
30
|
/**
|
|
29
31
|
* Active gcloud account. Returns `null` when no account is logged in
|
|
@@ -60,7 +62,6 @@ export declare function grantProvisionerRoles(projectId: string, saEmail: string
|
|
|
60
62
|
granted: number;
|
|
61
63
|
failed: RoleGrantFailure[];
|
|
62
64
|
}>;
|
|
63
|
-
export declare function createServiceAccountKey(saEmail: string, outputPath: string): Promise<GcloudResult>;
|
|
64
65
|
export declare const REQUIRED_API_LIST: readonly string[];
|
|
65
66
|
export declare const GCP_FIREBASE_EXTRA_API_LIST: readonly string[];
|
|
66
67
|
export declare const PROVISIONER_ROLE_LIST: readonly string[];
|
package/dist/gcloud.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gcloud.d.ts","sourceRoot":"","sources":["../src/gcloud.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gcloud.d.ts","sourceRoot":"","sources":["../src/gcloud.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,IAAI,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,UAAU,CAElF;AAED;;;;;GAKG;AACH,wBAAsB,MAAM,CAC1B,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAO,GACrD,OAAO,CAAC,YAAY,CAAC,CAqBvB;AAED;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAK5D;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAiBrE;AAED,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGvE;AAED,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAEjG;AAED,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,YAAY,CAAC,CAEvB;AAqCD,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,KAAK,GAAG,cAAsB,GACvC,OAAO,CAAC,YAAY,CAAC,CAIvB;AAED,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAW/F;AAED,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CAWvB;AA4DD,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;IACJ,GAAG,CAAC,EAAE,OAAO,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9B,GACL,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,gBAAgB,EAAE,CAAA;CAAE,CAAC,CA4B1D;AAED,eAAO,MAAM,iBAAiB,mBAAgB,CAAC;AAC/C,eAAO,MAAM,2BAA2B,mBAA0B,CAAC;AACnE,eAAO,MAAM,qBAAqB,mBAAoB,CAAC"}
|
package/dist/gcloud.js
CHANGED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Thin gcloud shell-out wrapper. The wizard composes high-level
|
|
4
4
|
* "create the project + link billing + enable APIs + create SA +
|
|
5
|
-
* grant roles
|
|
5
|
+
* grant roles" flows on top of these primitives. No key is ever minted
|
|
6
|
+
* for the provisioner SA: the operator impersonates it
|
|
7
|
+
* (provisioner-identity.ts, #696).
|
|
6
8
|
*
|
|
7
9
|
* Why shell out instead of using the GCP SDK directly:
|
|
8
10
|
* - the user's gcloud auth state IS the auth (no separate
|
|
@@ -32,10 +34,14 @@ export function gcloudEnv(base = process.env) {
|
|
|
32
34
|
* Run a gcloud command. Buffered stdout + stderr (max 4 MB each).
|
|
33
35
|
* Throws on spawn failure but NOT on non-zero exit — caller checks `ok`.
|
|
34
36
|
* stdin is always ended (after `opts.stdin`, if given), so nothing can wait on it.
|
|
37
|
+
* `opts.env` replaces this process's environment as the base (prompts stay off).
|
|
35
38
|
*/
|
|
36
39
|
export async function gcloud(args, opts = {}) {
|
|
37
40
|
return new Promise((resolveResult, reject) => {
|
|
38
|
-
const child = spawn("gcloud", args, {
|
|
41
|
+
const child = spawn("gcloud", args, {
|
|
42
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
43
|
+
env: gcloudEnv(opts.env ?? process.env),
|
|
44
|
+
});
|
|
39
45
|
const stdout = [];
|
|
40
46
|
const stderr = [];
|
|
41
47
|
child.stdout.on("data", (chunk) => stdout.push(chunk));
|
|
@@ -109,6 +115,9 @@ const REQUIRED_APIS = [
|
|
|
109
115
|
// signJwt as caelo-mcp: how `staging-domain enable` passes the admin's
|
|
110
116
|
// IAP (staging-admin.ts, #678) — the same path the MCP shim takes.
|
|
111
117
|
"iamcredentials.googleapis.com",
|
|
118
|
+
// #696 — the KMS key Pulumi encrypts the stack's secrets with
|
|
119
|
+
// (ops-backend.ts; also enabled there for installs that predate this).
|
|
120
|
+
"cloudkms.googleapis.com",
|
|
112
121
|
];
|
|
113
122
|
// v0.3.1 — gcp-firebase provider needs the Firebase Management +
|
|
114
123
|
// Firebase Hosting APIs on top of the gcp baseline. Without these
|
|
@@ -236,17 +245,6 @@ export async function grantProvisionerRoles(projectId, saEmail, opts = {}) {
|
|
|
236
245
|
}
|
|
237
246
|
return { granted, failed };
|
|
238
247
|
}
|
|
239
|
-
export async function createServiceAccountKey(saEmail, outputPath) {
|
|
240
|
-
return gcloud([
|
|
241
|
-
"iam",
|
|
242
|
-
"service-accounts",
|
|
243
|
-
"keys",
|
|
244
|
-
"create",
|
|
245
|
-
outputPath,
|
|
246
|
-
"--iam-account",
|
|
247
|
-
saEmail,
|
|
248
|
-
]);
|
|
249
|
-
}
|
|
250
248
|
export const REQUIRED_API_LIST = REQUIRED_APIS;
|
|
251
249
|
export const GCP_FIREBASE_EXTRA_API_LIST = GCP_FIREBASE_EXTRA_APIS;
|
|
252
250
|
export const PROVISIONER_ROLE_LIST = PROVISIONER_ROLES;
|
package/dist/gcloud.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gcloud.js","sourceRoot":"","sources":["../src/gcloud.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC
|
|
1
|
+
{"version":3,"file":"gcloud.js","sourceRoot":"","sources":["../src/gcloud.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -18,5 +18,8 @@ export { type BootstrapToken, generateBootstrapToken, } from "./bootstrap-token.
|
|
|
18
18
|
export { type CaddyDomainSpec, type CaddyfileSpec, generateCaddyfile, } from "./caddy.js";
|
|
19
19
|
export { type CdnCopyAdapter, loadCdnCopyAdapter, selfHostedCdnCopy, } from "./cdn-copy.js";
|
|
20
20
|
export { type ComposeSpec, generateDockerCompose, type RolePasswords } from "./compose.js";
|
|
21
|
+
export { INFRA_CONTRACT_VERSION } from "./infra-contract.js";
|
|
21
22
|
export { type CloudFrontRedirectArtifact, emitRedirectsAzureFrontDoor, emitRedirectsCloudFront, emitRedirectsCloudflare, type FrontDoorRule, type RedirectRow, type RedirectStatusCode, } from "./redirects-emit.js";
|
|
23
|
+
export { INFRA_CONTRACT_PATHS, isInfraContractPath, RELEASE_MIN_FROM_VERSION, } from "./release-contract.js";
|
|
24
|
+
export { assessAutoInstall, channelForVersion, compareImageDigests, compareSemver, type DigestMismatch, fetchVerifiedReleaseManifest, type InstallAssessment, type InstalledRelease, type InstallMode, RELEASE_CHANNELS, RELEASE_IMAGES, RELEASE_MANIFEST_ARTIFACT_TYPE, RELEASE_MANIFEST_MEDIA_TYPE, RELEASE_MANIFEST_REGISTRY, RELEASE_MANIFEST_REPOSITORY, RELEASE_OIDC_ISSUER, type ReleaseChannel, type ReleaseImage, type ReleaseManifest, type ReleaseManifestDeps, type ReleaseManifestError, type ReleaseManifestErrorCode, type ReleaseManifestResult, ReleaseManifestSchema, releaseManifestSignerIdentity, SIGSTORE_BUNDLE_MEDIA_TYPE, } from "./release-manifest.js";
|
|
22
25
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +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,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,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAC3F,OAAO,EACL,KAAK,0BAA0B,EAC/B,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,EACvB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAC"}
|
|
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,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,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,KAAK,0BAA0B,EAC/B,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,EACvB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,KAAK,cAAc,EACnB,4BAA4B,EAC5B,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,gBAAgB,EAChB,cAAc,EACd,8BAA8B,EAC9B,2BAA2B,EAC3B,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,qBAAqB,EACrB,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,5 +3,8 @@ export { generateBootstrapToken, } from "./bootstrap-token.js";
|
|
|
3
3
|
export { generateCaddyfile, } from "./caddy.js";
|
|
4
4
|
export { loadCdnCopyAdapter, selfHostedCdnCopy, } from "./cdn-copy.js";
|
|
5
5
|
export { generateDockerCompose } from "./compose.js";
|
|
6
|
+
export { INFRA_CONTRACT_VERSION } from "./infra-contract.js";
|
|
6
7
|
export { emitRedirectsAzureFrontDoor, emitRedirectsCloudFront, emitRedirectsCloudflare, } from "./redirects-emit.js";
|
|
8
|
+
export { INFRA_CONTRACT_PATHS, isInfraContractPath, RELEASE_MIN_FROM_VERSION, } from "./release-contract.js";
|
|
9
|
+
export { assessAutoInstall, channelForVersion, compareImageDigests, compareSemver, fetchVerifiedReleaseManifest, RELEASE_CHANNELS, RELEASE_IMAGES, RELEASE_MANIFEST_ARTIFACT_TYPE, RELEASE_MANIFEST_MEDIA_TYPE, RELEASE_MANIFEST_REGISTRY, RELEASE_MANIFEST_REPOSITORY, RELEASE_OIDC_ISSUER, ReleaseManifestSchema, releaseManifestSignerIdentity, SIGSTORE_BUNDLE_MEDIA_TYPE, } from "./release-manifest.js";
|
|
7
10
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mCAAmC;AA0BnC,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,EAAsB,MAAM,cAAc,CAAC;AAC3F,OAAO,EAEL,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,GAIxB,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mCAAmC;AA0BnC,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,EAAsB,MAAM,cAAc,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAEL,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,GAIxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EAEb,4BAA4B,EAI5B,gBAAgB,EAChB,cAAc,EACd,8BAA8B,EAC9B,2BAA2B,EAC3B,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,EAQnB,qBAAqB,EACrB,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The infrastructure contract version (epic #696).
|
|
3
|
+
*
|
|
4
|
+
* An upgrade has two halves (packages/provisioning/src/upgrade/): the
|
|
5
|
+
* *converge* half changes IAM, service accounts, secrets and other cloud
|
|
6
|
+
* resources the stacks declare; the *app-roll* half only runs migrations and
|
|
7
|
+
* moves the two Cloud Run services onto new images. The app-roll half can run
|
|
8
|
+
* under an identity without IAM-write or secret-create rights (the in-cloud
|
|
9
|
+
* upgrader job), but only while the install's infrastructure already is what
|
|
10
|
+
* the release expects.
|
|
11
|
+
*
|
|
12
|
+
* This number names that expectation. A release that needs a converge step
|
|
13
|
+
* the installs out there have not had yet (a new secret, a new IAM binding, a
|
|
14
|
+
* new service account) bumps it; `cms-provision upgrade` records the version
|
|
15
|
+
* it converged to in install.json, and the upgrader job refuses an app-roll
|
|
16
|
+
* while the recorded version is lower (`needsConverge` in upgrade/converge.ts),
|
|
17
|
+
* sending the operator to the converge path instead.
|
|
18
|
+
*
|
|
19
|
+
* Bump it in the same PR that adds the converge step, never later: a release
|
|
20
|
+
* whose app-roll references infrastructure an install does not have yet fails
|
|
21
|
+
* at roll time, after migrations ran.
|
|
22
|
+
*/
|
|
23
|
+
export declare const INFRA_CONTRACT_VERSION = 1;
|
|
24
|
+
//# sourceMappingURL=infra-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infra-contract.d.ts","sourceRoot":"","sources":["../src/infra-contract.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,sBAAsB,IAAI,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
2
|
+
/**
|
|
3
|
+
* The infrastructure contract version (epic #696).
|
|
4
|
+
*
|
|
5
|
+
* An upgrade has two halves (packages/provisioning/src/upgrade/): the
|
|
6
|
+
* *converge* half changes IAM, service accounts, secrets and other cloud
|
|
7
|
+
* resources the stacks declare; the *app-roll* half only runs migrations and
|
|
8
|
+
* moves the two Cloud Run services onto new images. The app-roll half can run
|
|
9
|
+
* under an identity without IAM-write or secret-create rights (the in-cloud
|
|
10
|
+
* upgrader job), but only while the install's infrastructure already is what
|
|
11
|
+
* the release expects.
|
|
12
|
+
*
|
|
13
|
+
* This number names that expectation. A release that needs a converge step
|
|
14
|
+
* the installs out there have not had yet (a new secret, a new IAM binding, a
|
|
15
|
+
* new service account) bumps it; `cms-provision upgrade` records the version
|
|
16
|
+
* it converged to in install.json, and the upgrader job refuses an app-roll
|
|
17
|
+
* while the recorded version is lower (`needsConverge` in upgrade/converge.ts),
|
|
18
|
+
* sending the operator to the converge path instead.
|
|
19
|
+
*
|
|
20
|
+
* Bump it in the same PR that adds the converge step, never later: a release
|
|
21
|
+
* whose app-roll references infrastructure an install does not have yet fails
|
|
22
|
+
* at roll time, after migrations ran.
|
|
23
|
+
*/
|
|
24
|
+
export const INFRA_CONTRACT_VERSION = 1;
|
|
25
|
+
//# sourceMappingURL=infra-contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infra-contract.js","sourceRoot":"","sources":["../src/infra-contract.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC"}
|
package/dist/install-state.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { type StateBackendRecord } from "./state-backend.js";
|
|
2
|
+
import { type StateStore, type SyncGcloud } from "./state-store.js";
|
|
1
3
|
export type Provider = "self-hosted" | "gcp" | "gcp-firebase" | "aws" | "azure";
|
|
2
4
|
export interface InstallMetadata {
|
|
3
5
|
installId: string;
|
|
@@ -22,9 +24,32 @@ export interface InstallMetadata {
|
|
|
22
24
|
* `upgrade` records the default ({@link installStagingHost}).
|
|
23
25
|
*/
|
|
24
26
|
stagingDomain?: string;
|
|
27
|
+
/**
|
|
28
|
+
* #696 — where Pulumi's state and this metadata live (state-backend.ts).
|
|
29
|
+
* Absent on installs that predate it: those are `local`.
|
|
30
|
+
*/
|
|
31
|
+
stateBackend?: StateBackendRecord;
|
|
32
|
+
/**
|
|
33
|
+
* #696 — the infrastructure contract version (infra-contract.ts) the last
|
|
34
|
+
* successful converge brought this install to. Absent until the first
|
|
35
|
+
* `upgrade` that converged completely; an app-roll-only upgrade refuses to
|
|
36
|
+
* run while it is lower than the release's (upgrade/converge.ts).
|
|
37
|
+
*/
|
|
38
|
+
infraContractVersion?: number;
|
|
25
39
|
}
|
|
26
40
|
/** The install's staging host: its recorded setting, else the default. */
|
|
27
41
|
export declare function installStagingHost(meta: Pick<InstallMetadata, "domain" | "stagingDomain">): string;
|
|
42
|
+
/**
|
|
43
|
+
* The staging host exactly as install.json may record it, or null when
|
|
44
|
+
* `host` is anything but a bare host name. The host can come from the
|
|
45
|
+
* admin's HTTP answer (`staging-domain enable` reads the stored host), so
|
|
46
|
+
* only a value that passes this allow-list is written to disk — never a
|
|
47
|
+
* URL, path, port, whitespace or other payload.
|
|
48
|
+
*
|
|
49
|
+
* @example recordableStagingHost("staging.example.com") // → "staging.example.com"
|
|
50
|
+
* @example recordableStagingHost("https://x.example.com/") // → null
|
|
51
|
+
*/
|
|
52
|
+
export declare function recordableStagingHost(host: string): string | null;
|
|
28
53
|
/** Release image digest per Cloud Run service. */
|
|
29
54
|
export interface ImageDigests {
|
|
30
55
|
readonly admin: string;
|
|
@@ -48,10 +73,15 @@ export declare function resumedMetadata(existing: InstallMetadata, inputs: {
|
|
|
48
73
|
}): InstallMetadata;
|
|
49
74
|
/** Record the image digests an install now runs (see {@link InstallMetadata.imageDigests}). */
|
|
50
75
|
export declare function recordImageDigests(installId: string, digests: ImageDigests): void;
|
|
76
|
+
/**
|
|
77
|
+
* Record the infrastructure contract version a converge just brought the
|
|
78
|
+
* install to (see {@link InstallMetadata.infraContractVersion}).
|
|
79
|
+
*/
|
|
80
|
+
export declare function recordInfraContractVersion(installId: string, version: number): void;
|
|
51
81
|
export interface ProgressCheckpoint {
|
|
52
82
|
/** Last completed wizard step. Used for resume-after-failure. */
|
|
53
83
|
lastCompletedStep: string | null;
|
|
54
|
-
/** Per-step state (e.g. createdProjectId,
|
|
84
|
+
/** Per-step state (e.g. createdProjectId, billingAccountId, etc.). */
|
|
55
85
|
steps: Record<string, unknown>;
|
|
56
86
|
/** ISO timestamp of last successful update. */
|
|
57
87
|
updatedAt: string;
|
|
@@ -73,7 +103,8 @@ export declare function ensureInstallDir(installId: string): {
|
|
|
73
103
|
stateDir: string;
|
|
74
104
|
};
|
|
75
105
|
/**
|
|
76
|
-
* Scan `~/.caelo-*` for every install with a readable `install.json
|
|
106
|
+
* Scan `~/.caelo-*` for every install with a readable `install.json` (the
|
|
107
|
+
* local copy; see {@link currentMetadata}).
|
|
77
108
|
* Used by the wizard to offer "resume X" before prompting for the
|
|
78
109
|
* domain / owner / project again. Silently skips dirs that fail to
|
|
79
110
|
* parse — partial / orphaned dirs don't block the new-install flow.
|
|
@@ -106,8 +137,43 @@ export type InstallSelection = {
|
|
|
106
137
|
* @param wanted the `--install` value, if given
|
|
107
138
|
*/
|
|
108
139
|
export declare function selectInstall(installs: readonly InstallMetadata[], wanted: string | undefined): InstallSelection;
|
|
140
|
+
/**
|
|
141
|
+
* Replace the gcloud runner bucket-backed stores use. Test seam only: the
|
|
142
|
+
* CLI always uses the real `gcloud`.
|
|
143
|
+
*/
|
|
144
|
+
export declare function setStateStoreGcloud(run: SyncGcloud): void;
|
|
145
|
+
/**
|
|
146
|
+
* The install.json copy in `~/.caelo-<id>/`, without consulting the bucket.
|
|
147
|
+
* For listing installs and for deciding which store to use.
|
|
148
|
+
*/
|
|
149
|
+
export declare function readLocalMetadata(installId: string): InstallMetadata | null;
|
|
150
|
+
/**
|
|
151
|
+
* The store holding the install's metadata: its ops bucket when the local
|
|
152
|
+
* install.json says the install's state lives there, else `~/.caelo-<id>/`.
|
|
153
|
+
* One bucket store per install and process, so a run reads each document
|
|
154
|
+
* from the bucket once.
|
|
155
|
+
*/
|
|
156
|
+
export declare function stateStoreFor(installId: string): StateStore;
|
|
157
|
+
/**
|
|
158
|
+
* The authoritative metadata of an install picked from {@link listInstalls}:
|
|
159
|
+
* for an install whose state lives in its ops bucket, the bucket's copy
|
|
160
|
+
* (another machine may have upgraded it since). Throws when that copy can't
|
|
161
|
+
* be read — acting on a stale mirror could roll an install back.
|
|
162
|
+
*/
|
|
163
|
+
export declare function currentMetadata(meta: InstallMetadata): InstallMetadata;
|
|
109
164
|
export declare function readMetadata(installId: string): InstallMetadata | null;
|
|
110
165
|
export declare function writeMetadata(installId: string, meta: InstallMetadata): void;
|
|
166
|
+
/**
|
|
167
|
+
* Move the install's metadata to `backend`'s store and record the backend
|
|
168
|
+
* in install.json (#696). progress.json is written first and install.json
|
|
169
|
+
* last: install.json naming the new backend is the commit point, so an
|
|
170
|
+
* interrupted switch leaves the install on its old store. When the install
|
|
171
|
+
* leaves the bucket, the bucket's install.json is updated too, so a machine
|
|
172
|
+
* that attaches later learns where the state went.
|
|
173
|
+
*
|
|
174
|
+
* @returns the metadata as now recorded
|
|
175
|
+
*/
|
|
176
|
+
export declare function adoptStateBackend(installId: string, backend: StateBackendRecord): InstallMetadata;
|
|
111
177
|
export declare function readProgress(installId: string): ProgressCheckpoint;
|
|
112
178
|
export declare function writeProgress(installId: string, checkpoint: ProgressCheckpoint): void;
|
|
113
179
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-state.d.ts","sourceRoot":"","sources":["../src/install-state.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"install-state.d.ts","sourceRoot":"","sources":["../src/install-state.ts"],"names":[],"mappings":"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"}
|