@caelo-cms/provisioning 0.10.48 → 0.10.49
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/caddy/Caddyfile.production +1 -1
- package/caddy/Caddyfile.staging +1 -1
- package/dist/agent-db.js +98 -58
- package/dist/release-manifest.d.ts +2 -41
- package/dist/release-manifest.d.ts.map +1 -1
- package/dist/release-manifest.js +18 -121
- package/dist/release-manifest.js.map +1 -1
- package/dist/upgrade/release-images.d.ts +14 -2
- package/dist/upgrade/release-images.d.ts.map +1 -1
- package/dist/upgrade/release-images.js +4 -2
- package/dist/upgrade/release-images.js.map +1 -1
- package/dist/upgrader-assess.d.ts +4 -1
- package/dist/upgrader-assess.d.ts.map +1 -1
- package/dist/upgrader-assess.js +6 -0
- package/dist/upgrader-assess.js.map +1 -1
- package/dist/upgrader-job.d.ts +3 -1
- package/dist/upgrader-job.d.ts.map +1 -1
- package/dist/upgrader-job.js.map +1 -1
- package/package.json +2 -2
- package/src/agent/run.test.ts +55 -0
- package/src/release-manifest.test.ts +8 -1
- package/src/release-manifest.ts +37 -157
- package/src/upgrade/release-images.ts +4 -2
- package/src/upgrader-assess.test.ts +42 -1
- package/src/upgrader-assess.ts +18 -1
- package/src/upgrader-job.test.ts +3 -0
- package/src/upgrader-job.ts +3 -0
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
# `file` gates the header on the file existing: a 404 for a hashed
|
|
19
19
|
# URL (old page after a deploy switch) must not be cached for a year.
|
|
20
20
|
@content_hashed {
|
|
21
|
-
path_regexp content_hashed ^/(?:_app/immutable/.+|_assets/fonts/[^/]+/[0-9a-f]{16
|
|
21
|
+
path_regexp content_hashed ^/(?:_app/immutable/.+|_assets/fonts/[^/]+/[0-9a-f]{16}\.woff2|_assets/fonts/pinned/[0-9a-f]{64}\.[a-z]+(?:-[a-z]+)?\.[0-9a-f]{12}\.woff2|_assets/[a-z0-9][a-z0-9-]*(?:/[a-z][a-z0-9-]*)?\.[0-9a-f]{16}\.[a-z0-9]{2,5}|_caelo/plugin/[^/]+/[^/]+\.[0-9a-f]{12}\.(?:js|css))$
|
|
22
22
|
file
|
|
23
23
|
}
|
|
24
24
|
header @content_hashed Cache-Control "public, max-age=31536000, immutable"
|
package/caddy/Caddyfile.staging
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
# `file` gates the header on the file existing: a 404 for a hashed
|
|
23
23
|
# URL (old page after a deploy switch) must not be cached for a year.
|
|
24
24
|
@content_hashed {
|
|
25
|
-
path_regexp content_hashed ^/(?:_app/immutable/.+|_assets/fonts/[^/]+/[0-9a-f]{16
|
|
25
|
+
path_regexp content_hashed ^/(?:_app/immutable/.+|_assets/fonts/[^/]+/[0-9a-f]{16}\.woff2|_assets/fonts/pinned/[0-9a-f]{64}\.[a-z]+(?:-[a-z]+)?\.[0-9a-f]{12}\.woff2|_assets/[a-z0-9][a-z0-9-]*(?:/[a-z][a-z0-9-]*)?\.[0-9a-f]{16}\.[a-z0-9]{2,5}|_caelo/plugin/[^/]+/[^/]+\.[0-9a-f]{12}\.(?:js|css))$
|
|
26
26
|
file
|
|
27
27
|
}
|
|
28
28
|
header @content_hashed Cache-Control "public, max-age=31536000, immutable"
|
package/dist/agent-db.js
CHANGED
|
@@ -6808,7 +6808,7 @@ var setPageSeoToolInput = object({
|
|
|
6808
6808
|
}).strict();
|
|
6809
6809
|
var autofillPageSeoToolInput = object({
|
|
6810
6810
|
pageId: string2().uuid(),
|
|
6811
|
-
metaDescription: string2().min(1).max(320),
|
|
6811
|
+
metaDescription: string2().trim().min(1).max(320),
|
|
6812
6812
|
ogImageAssetId: string2().uuid().nullable().optional()
|
|
6813
6813
|
}).strict();
|
|
6814
6814
|
var optimizePageSeoToolInput = object({
|
|
@@ -6897,6 +6897,61 @@ var loginFormSchema = object({
|
|
|
6897
6897
|
email: string2().email("must be a valid email").max(254),
|
|
6898
6898
|
password: string2().min(1, "required").max(256)
|
|
6899
6899
|
}).strict();
|
|
6900
|
+
// ../shared/src/platform-updates.ts
|
|
6901
|
+
var PLATFORM_UPDATE_PHASES = [
|
|
6902
|
+
"queued",
|
|
6903
|
+
"start",
|
|
6904
|
+
"verify",
|
|
6905
|
+
"assess",
|
|
6906
|
+
"backup",
|
|
6907
|
+
"health-baseline",
|
|
6908
|
+
"migrations",
|
|
6909
|
+
"roll",
|
|
6910
|
+
"health",
|
|
6911
|
+
"rollback",
|
|
6912
|
+
"record",
|
|
6913
|
+
"self-update",
|
|
6914
|
+
"finish"
|
|
6915
|
+
];
|
|
6916
|
+
var PLATFORM_UPDATE_EVENT_LEVELS = ["info", "success", "warn", "error"];
|
|
6917
|
+
var PLATFORM_UPDATE_TRIGGERS = ["manual", "auto"];
|
|
6918
|
+
var PLATFORM_UPDATE_STALE_MINUTES = 90;
|
|
6919
|
+
var PLATFORM_UPDATE_STALE_REASON = "The upgrader stopped before it finished (its run timed out or crashed). The previous release may still serve, or the new one may be partly rolled out: open the site, and if it misbehaves run the upgrade by hand once \u2014 Settings \u2192 Updates shows how for this install.";
|
|
6920
|
+
var PLATFORM_UPDATE_EVENT_MAX = 4000;
|
|
6921
|
+
var SEMVER = /^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/;
|
|
6922
|
+
var releaseVersionSchema = string2().regex(SEMVER, "expected a release version like 0.11.0 (no leading v)");
|
|
6923
|
+
var UPDATE_POLICY_MODES = ["off", "notify", "auto"];
|
|
6924
|
+
var UPDATE_POLICY_CHANNELS = ["stable", "rc", "beta", "alpha"];
|
|
6925
|
+
var WALL_CLOCK = /^([01]\d|2[0-3]):[0-5]\d$/;
|
|
6926
|
+
function isKnownTimeZone(tz) {
|
|
6927
|
+
try {
|
|
6928
|
+
new Intl.DateTimeFormat("en-US", { timeZone: tz });
|
|
6929
|
+
return true;
|
|
6930
|
+
} catch {
|
|
6931
|
+
return false;
|
|
6932
|
+
}
|
|
6933
|
+
}
|
|
6934
|
+
var updatePolicySchema = object({
|
|
6935
|
+
mode: _enum(UPDATE_POLICY_MODES),
|
|
6936
|
+
autoSecurity: boolean2(),
|
|
6937
|
+
autoPatch: boolean2(),
|
|
6938
|
+
autoMinor: boolean2(),
|
|
6939
|
+
channel: _enum(UPDATE_POLICY_CHANNELS),
|
|
6940
|
+
windowStart: string2().regex(WALL_CLOCK, "expected HH:MM").nullable(),
|
|
6941
|
+
windowEnd: string2().regex(WALL_CLOCK, "expected HH:MM").nullable(),
|
|
6942
|
+
windowTimezone: string2().min(1).max(64).refine(isKnownTimeZone, "unknown time zone"),
|
|
6943
|
+
soakHours: number2().int().min(0).max(720),
|
|
6944
|
+
securitySoakHours: number2().int().min(0).max(720)
|
|
6945
|
+
}).strict().refine((p) => p.windowStart === null === (p.windowEnd === null), {
|
|
6946
|
+
message: "set both ends of the maintenance window, or neither"
|
|
6947
|
+
}).refine((p) => p.mode !== "auto" || p.channel === "stable", {
|
|
6948
|
+
message: "automatic installs follow the stable channel only"
|
|
6949
|
+
}).refine((p) => p.securitySoakHours <= p.soakHours, {
|
|
6950
|
+
message: "security fixes cannot wait longer than other releases"
|
|
6951
|
+
});
|
|
6952
|
+
|
|
6953
|
+
// ../shared/src/auto-update.ts
|
|
6954
|
+
var AUTO_UPDATE_BASES = ["security", "patch", "minor"];
|
|
6900
6955
|
// ../shared/src/base-css.ts
|
|
6901
6956
|
var BASE_TECHNICAL_CSS = "*,*::before,*::after{box-sizing:border-box}" + "body{margin:0}" + "img,picture,video,canvas,svg{display:block;max-width:100%}" + "input,button,textarea,select{font:inherit}" + "body{font-family:var(--font-body,system-ui,sans-serif)}";
|
|
6902
6957
|
// ../shared/src/build-page.ts
|
|
@@ -8025,58 +8080,34 @@ var pageLogEntrySchema = object({
|
|
|
8025
8080
|
detail: pageLogDetailSchema.nullable(),
|
|
8026
8081
|
createdAt: string2().datetime()
|
|
8027
8082
|
}).strict();
|
|
8028
|
-
// ../shared/src/platform-updates.ts
|
|
8029
|
-
var PLATFORM_UPDATE_PHASES = [
|
|
8030
|
-
"queued",
|
|
8031
|
-
"start",
|
|
8032
|
-
"verify",
|
|
8033
|
-
"assess",
|
|
8034
|
-
"backup",
|
|
8035
|
-
"health-baseline",
|
|
8036
|
-
"migrations",
|
|
8037
|
-
"roll",
|
|
8038
|
-
"health",
|
|
8039
|
-
"rollback",
|
|
8040
|
-
"record",
|
|
8041
|
-
"self-update",
|
|
8042
|
-
"finish"
|
|
8043
|
-
];
|
|
8044
|
-
var PLATFORM_UPDATE_EVENT_LEVELS = ["info", "success", "warn", "error"];
|
|
8045
|
-
var PLATFORM_UPDATE_TRIGGERS = ["manual", "auto"];
|
|
8046
|
-
var PLATFORM_UPDATE_STALE_MINUTES = 90;
|
|
8047
|
-
var PLATFORM_UPDATE_STALE_REASON = "The upgrader stopped before it finished (its run timed out or crashed). The previous release may still serve, or the new one may be partly rolled out: open the site, and if it misbehaves run the upgrade by hand once \u2014 Settings \u2192 Updates shows how for this install.";
|
|
8048
|
-
var PLATFORM_UPDATE_EVENT_MAX = 4000;
|
|
8049
|
-
var SEMVER = /^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/;
|
|
8050
|
-
var releaseVersionSchema = string2().regex(SEMVER, "expected a release version like 0.11.0 (no leading v)");
|
|
8051
|
-
var UPDATE_POLICY_MODES = ["off", "notify", "auto"];
|
|
8052
|
-
var UPDATE_POLICY_CHANNELS = ["stable", "rc", "beta", "alpha"];
|
|
8053
|
-
var WALL_CLOCK = /^([01]\d|2[0-3]):[0-5]\d$/;
|
|
8054
|
-
function isKnownTimeZone(tz) {
|
|
8055
|
-
try {
|
|
8056
|
-
new Intl.DateTimeFormat("en-US", { timeZone: tz });
|
|
8057
|
-
return true;
|
|
8058
|
-
} catch {
|
|
8059
|
-
return false;
|
|
8060
|
-
}
|
|
8061
|
-
}
|
|
8062
|
-
var updatePolicySchema = object({
|
|
8063
|
-
mode: _enum(UPDATE_POLICY_MODES),
|
|
8064
|
-
autoSecurity: boolean2(),
|
|
8065
|
-
autoPatch: boolean2(),
|
|
8066
|
-
autoMinor: boolean2(),
|
|
8067
|
-
channel: _enum(UPDATE_POLICY_CHANNELS),
|
|
8068
|
-
windowStart: string2().regex(WALL_CLOCK, "expected HH:MM").nullable(),
|
|
8069
|
-
windowEnd: string2().regex(WALL_CLOCK, "expected HH:MM").nullable(),
|
|
8070
|
-
windowTimezone: string2().min(1).max(64).refine(isKnownTimeZone, "unknown time zone"),
|
|
8071
|
-
soakHours: number2().int().min(0).max(720)
|
|
8072
|
-
}).strict().refine((p) => p.windowStart === null === (p.windowEnd === null), {
|
|
8073
|
-
message: "set both ends of the maintenance window, or neither"
|
|
8074
|
-
}).refine((p) => p.mode !== "auto" || p.channel === "stable", {
|
|
8075
|
-
message: "automatic installs follow the stable channel only"
|
|
8076
|
-
});
|
|
8077
8083
|
// ../shared/src/proposal-status.ts
|
|
8078
8084
|
var PROPOSAL_STATUSES = ["pending", "applied", "rejected", "superseded"];
|
|
8079
8085
|
var proposalStatus = _enum(PROPOSAL_STATUSES);
|
|
8086
|
+
// ../shared/src/release-manifest.ts
|
|
8087
|
+
var RELEASE_CHANNELS = ["stable", "rc", "beta", "alpha"];
|
|
8088
|
+
var IMAGE_DIGEST = /^sha256:[0-9a-f]{64}$/;
|
|
8089
|
+
var SEMVER2 = /^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/;
|
|
8090
|
+
var GHSA_ID = /^GHSA(-[23456789cfghjmpqrvwx]{4}){3}$/;
|
|
8091
|
+
var digest = string2().regex(IMAGE_DIGEST, "expected sha256:<64 hex>");
|
|
8092
|
+
var ReleaseManifestSchema = object({
|
|
8093
|
+
manifestVersion: literal(1),
|
|
8094
|
+
version: string2().regex(SEMVER2, "expected a SemVer version without a leading v"),
|
|
8095
|
+
channel: _enum(RELEASE_CHANNELS),
|
|
8096
|
+
digests: object({ admin: digest, gateway: digest, ops: digest }),
|
|
8097
|
+
minFromVersion: string2().regex(SEMVER2),
|
|
8098
|
+
infraContractVersion: number2().int().positive(),
|
|
8099
|
+
migrations: object({
|
|
8100
|
+
contract: boolean2(),
|
|
8101
|
+
lastContractVersion: string2().regex(SEMVER2).nullable(),
|
|
8102
|
+
head: string2().min(1)
|
|
8103
|
+
}),
|
|
8104
|
+
security: boolean2(),
|
|
8105
|
+
advisories: array(string2().regex(GHSA_ID, "expected a GHSA id"))
|
|
8106
|
+
});
|
|
8107
|
+
var OciManifestSchema = object({
|
|
8108
|
+
artifactType: string2().optional(),
|
|
8109
|
+
layers: array(object({ mediaType: string2(), digest: string2().regex(IMAGE_DIGEST) }))
|
|
8110
|
+
});
|
|
8080
8111
|
// ../shared/src/responsive-images.ts
|
|
8081
8112
|
var LADDER_REPLACEABLE_ORIG_FORMATS = new Set([
|
|
8082
8113
|
"png",
|
|
@@ -8118,7 +8149,7 @@ var seoSetInputSchema = object({
|
|
|
8118
8149
|
}).strict();
|
|
8119
8150
|
var seoAutofillInputSchema = object({
|
|
8120
8151
|
pageId: string2().uuid(),
|
|
8121
|
-
metaDescription: string2().min(1).max(SEO_DESCRIPTION_HARD_MAX),
|
|
8152
|
+
metaDescription: string2().trim().min(1).max(SEO_DESCRIPTION_HARD_MAX),
|
|
8122
8153
|
ogImageAssetId: string2().uuid().nullable().optional()
|
|
8123
8154
|
}).strict();
|
|
8124
8155
|
var seoOptimizeInputSchema = object({
|
|
@@ -8184,7 +8215,7 @@ var revertPageInput = object({
|
|
|
8184
8215
|
var STAGING_SESSION_TTL_SECONDS = 12 * 60 * 60;
|
|
8185
8216
|
var ENCODER = new TextEncoder;
|
|
8186
8217
|
// ../shared/src/static-cache-policy.ts
|
|
8187
|
-
var CONTENT_HASHED_PATH_PATTERN = "^/(?:_app/immutable/.+|_assets/fonts/[^/]+/[0-9a-f]{16
|
|
8218
|
+
var CONTENT_HASHED_PATH_PATTERN = "^/(?:_app/immutable/.+|_assets/fonts/[^/]+/[0-9a-f]{16}\\.woff2|_assets/fonts/pinned/[0-9a-f]{64}\\.[a-z]+(?:-[a-z]+)?\\.[0-9a-f]{12}\\.woff2|_assets/[a-z0-9][a-z0-9-]*(?:/[a-z][a-z0-9-]*)?\\.[0-9a-f]{16}\\.[a-z0-9]{2,5}|_caelo/plugin/[^/]+/[^/]+\\.[0-9a-f]{12}\\.(?:js|css))$";
|
|
8188
8219
|
var CONTENT_HASHED_PATH_RE = new RegExp(CONTENT_HASHED_PATH_PATTERN);
|
|
8189
8220
|
// ../shared/src/structured-sets.ts
|
|
8190
8221
|
var navMenuItem = lazy(() => object({
|
|
@@ -18073,9 +18104,12 @@ var policySchema = object({
|
|
|
18073
18104
|
windowEnd: string2().nullable(),
|
|
18074
18105
|
windowTimezone: string2(),
|
|
18075
18106
|
soakHours: number2(),
|
|
18107
|
+
securitySoakHours: number2(),
|
|
18076
18108
|
paused: boolean2(),
|
|
18077
18109
|
pausedReason: string2().nullable(),
|
|
18078
18110
|
pausedAt: string2().nullable(),
|
|
18111
|
+
pausedUntil: string2().nullable(),
|
|
18112
|
+
pausedByOwner: boolean2(),
|
|
18079
18113
|
updatedAt: string2()
|
|
18080
18114
|
});
|
|
18081
18115
|
var claimOutput = object({
|
|
@@ -18084,6 +18118,7 @@ var claimOutput = object({
|
|
|
18084
18118
|
id: string2(),
|
|
18085
18119
|
targetVersion: string2(),
|
|
18086
18120
|
trigger: _enum(PLATFORM_UPDATE_TRIGGERS),
|
|
18121
|
+
autoBasis: _enum(AUTO_UPDATE_BASES).nullable(),
|
|
18087
18122
|
policy: policySchema
|
|
18088
18123
|
}).nullable()
|
|
18089
18124
|
});
|
|
@@ -18127,7 +18162,7 @@ var jobClaimOp = defineOperation({
|
|
|
18127
18162
|
LIMIT 1
|
|
18128
18163
|
FOR UPDATE SKIP LOCKED
|
|
18129
18164
|
)
|
|
18130
|
-
RETURNING id::text AS id, target_version, trigger
|
|
18165
|
+
RETURNING id::text AS id, target_version, trigger, auto_basis
|
|
18131
18166
|
`);
|
|
18132
18167
|
const row = claimed[0];
|
|
18133
18168
|
if (!row)
|
|
@@ -18136,7 +18171,8 @@ var jobClaimOp = defineOperation({
|
|
|
18136
18171
|
SELECT mode, auto_security, auto_patch, auto_minor, channel,
|
|
18137
18172
|
to_char(window_start, 'HH24:MI') AS window_start,
|
|
18138
18173
|
to_char(window_end, 'HH24:MI') AS window_end,
|
|
18139
|
-
window_timezone, soak_hours, paused, paused_reason,
|
|
18174
|
+
window_timezone, soak_hours, security_soak_hours, paused, paused_reason,
|
|
18175
|
+
paused_at, paused_until, paused_by IS NOT NULL AS paused_by_owner, updated_at
|
|
18140
18176
|
FROM platform_update_policy WHERE id = 1
|
|
18141
18177
|
`);
|
|
18142
18178
|
const p = policies[0];
|
|
@@ -18149,6 +18185,7 @@ var jobClaimOp = defineOperation({
|
|
|
18149
18185
|
id: row.id,
|
|
18150
18186
|
targetVersion: row.target_version,
|
|
18151
18187
|
trigger: row.trigger,
|
|
18188
|
+
autoBasis: row.auto_basis,
|
|
18152
18189
|
policy: {
|
|
18153
18190
|
mode: p.mode,
|
|
18154
18191
|
autoSecurity: p.auto_security,
|
|
@@ -18159,9 +18196,12 @@ var jobClaimOp = defineOperation({
|
|
|
18159
18196
|
windowEnd: p.window_end,
|
|
18160
18197
|
windowTimezone: p.window_timezone,
|
|
18161
18198
|
soakHours: p.soak_hours,
|
|
18199
|
+
securitySoakHours: p.security_soak_hours,
|
|
18162
18200
|
paused: p.paused,
|
|
18163
18201
|
pausedReason: p.paused_reason,
|
|
18164
18202
|
pausedAt: p.paused_at === null ? null : new Date(p.paused_at).toISOString(),
|
|
18203
|
+
pausedUntil: p.paused_until === null ? null : new Date(p.paused_until).toISOString(),
|
|
18204
|
+
pausedByOwner: p.paused_by_owner,
|
|
18165
18205
|
updatedAt: new Date(p.updated_at).toISOString()
|
|
18166
18206
|
}
|
|
18167
18207
|
}
|
|
@@ -18187,7 +18227,7 @@ var jobEventOp = defineOperation({
|
|
|
18187
18227
|
return ok({});
|
|
18188
18228
|
}
|
|
18189
18229
|
});
|
|
18190
|
-
var
|
|
18230
|
+
var digest2 = string2().regex(/^sha256:[0-9a-f]{64}$/);
|
|
18191
18231
|
var jobRecordOp = defineOperation({
|
|
18192
18232
|
name: "platform_updates.job_record",
|
|
18193
18233
|
actorScope: ["system"],
|
|
@@ -18199,9 +18239,9 @@ var jobRecordOp = defineOperation({
|
|
|
18199
18239
|
contractMigrations: boolean2().optional(),
|
|
18200
18240
|
infraContractRequired: number2().int().optional(),
|
|
18201
18241
|
infraContractInstalled: number2().int().optional(),
|
|
18202
|
-
adminDigest:
|
|
18203
|
-
gatewayDigest:
|
|
18204
|
-
opsDigest:
|
|
18242
|
+
adminDigest: digest2.optional(),
|
|
18243
|
+
gatewayDigest: digest2.optional(),
|
|
18244
|
+
opsDigest: digest2.optional(),
|
|
18205
18245
|
backupId: string2().min(1).max(200).optional()
|
|
18206
18246
|
}).strict()
|
|
18207
18247
|
}).strict(),
|
|
@@ -1,45 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type ReleaseChannel, type ReleaseImage, type ReleaseManifest } from "@caelo-cms/shared";
|
|
2
2
|
import { RELEASE_OIDC_ISSUER } from "./upgrade/release-images.js";
|
|
3
|
-
|
|
4
|
-
export declare const RELEASE_CHANNELS: readonly ["stable", "rc", "beta", "alpha"];
|
|
5
|
-
export type ReleaseChannel = (typeof RELEASE_CHANNELS)[number];
|
|
6
|
-
/** The services a release ships images for. */
|
|
7
|
-
export declare const RELEASE_IMAGES: readonly ["admin", "gateway", "ops"];
|
|
8
|
-
export type ReleaseImage = (typeof RELEASE_IMAGES)[number];
|
|
9
|
-
/** Zod schema of `release-manifest.json` (manifestVersion 1). */
|
|
10
|
-
export declare const ReleaseManifestSchema: z.ZodObject<{
|
|
11
|
-
manifestVersion: z.ZodLiteral<1>;
|
|
12
|
-
version: z.ZodString;
|
|
13
|
-
channel: z.ZodEnum<{
|
|
14
|
-
beta: "beta";
|
|
15
|
-
stable: "stable";
|
|
16
|
-
rc: "rc";
|
|
17
|
-
alpha: "alpha";
|
|
18
|
-
}>;
|
|
19
|
-
digests: z.ZodObject<{
|
|
20
|
-
admin: z.ZodString;
|
|
21
|
-
gateway: z.ZodString;
|
|
22
|
-
ops: z.ZodString;
|
|
23
|
-
}, z.core.$strip>;
|
|
24
|
-
minFromVersion: z.ZodString;
|
|
25
|
-
infraContractVersion: z.ZodNumber;
|
|
26
|
-
migrations: z.ZodObject<{
|
|
27
|
-
contract: z.ZodBoolean;
|
|
28
|
-
lastContractVersion: z.ZodNullable<z.ZodString>;
|
|
29
|
-
head: z.ZodString;
|
|
30
|
-
}, z.core.$strip>;
|
|
31
|
-
security: z.ZodBoolean;
|
|
32
|
-
advisories: z.ZodArray<z.ZodString>;
|
|
33
|
-
}, z.core.$strip>;
|
|
34
|
-
export type ReleaseManifest = z.infer<typeof ReleaseManifestSchema>;
|
|
35
|
-
/** Registry the upgrader reads manifests from — the public AR mirror Cloud Run pulls from. */
|
|
36
|
-
export declare const RELEASE_MANIFEST_REGISTRY = "europe-west1-docker.pkg.dev";
|
|
37
|
-
/** Repository path of the manifest artifact inside {@link RELEASE_MANIFEST_REGISTRY}. */
|
|
38
|
-
export declare const RELEASE_MANIFEST_REPOSITORY = "caelo-website/caelo-cms-images/release-manifest";
|
|
39
|
-
/** OCI artifact type + layer media types of the pushed manifest. */
|
|
40
|
-
export declare const RELEASE_MANIFEST_ARTIFACT_TYPE = "application/vnd.caelo.release-manifest.v1";
|
|
41
|
-
export declare const RELEASE_MANIFEST_MEDIA_TYPE = "application/vnd.caelo.release-manifest.v1+json";
|
|
42
|
-
export declare const SIGSTORE_BUNDLE_MEDIA_TYPE = "application/vnd.dev.sigstore.bundle.v0.3+json";
|
|
3
|
+
export { RELEASE_CHANNELS, RELEASE_IMAGES, RELEASE_MANIFEST_ARTIFACT_TYPE, RELEASE_MANIFEST_MEDIA_TYPE, RELEASE_MANIFEST_REGISTRY, RELEASE_MANIFEST_REPOSITORY, type ReleaseChannel, type ReleaseImage, type ReleaseManifest, ReleaseManifestSchema, SIGSTORE_BUNDLE_MEDIA_TYPE, } from "@caelo-cms/shared";
|
|
43
4
|
export { RELEASE_OIDC_ISSUER };
|
|
44
5
|
/**
|
|
45
6
|
* The only identity allowed to sign the manifest of `version`: release.yml
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-manifest.d.ts","sourceRoot":"","sources":["../src/release-manifest.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"release-manifest.d.ts","sourceRoot":"","sources":["../src/release-manifest.ts"],"names":[],"mappings":"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"}
|
package/dist/release-manifest.js
CHANGED
|
@@ -19,52 +19,16 @@
|
|
|
19
19
|
* Errors are values: every failure carries a code plus a message that
|
|
20
20
|
* says what to check next.
|
|
21
21
|
*/
|
|
22
|
-
import { createHash } from "node:crypto";
|
|
23
22
|
import { mkdtemp, rm, writeFile } from "node:fs/promises";
|
|
24
23
|
import { tmpdir } from "node:os";
|
|
25
24
|
import { join } from "node:path";
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
import { fetchReleaseArtifact, isSecurityRelease, parseReleaseManifest, RELEASE_CHANNELS, RELEASE_IMAGES, } from "@caelo-cms/shared";
|
|
26
|
+
import { RELEASE_OIDC_ISSUER, RELEASE_WORKFLOWS_URL } from "./upgrade/release-images.js";
|
|
27
|
+
// The manifest's shape and location live in @caelo-cms/shared (the admin's
|
|
28
|
+
// auto-update scheduler reads them too); re-exported so this module stays
|
|
29
|
+
// the CLI's one import for release manifests.
|
|
30
|
+
export { RELEASE_CHANNELS, RELEASE_IMAGES, RELEASE_MANIFEST_ARTIFACT_TYPE, RELEASE_MANIFEST_MEDIA_TYPE, RELEASE_MANIFEST_REGISTRY, RELEASE_MANIFEST_REPOSITORY, ReleaseManifestSchema, SIGSTORE_BUNDLE_MEDIA_TYPE, } from "@caelo-cms/shared";
|
|
30
31
|
const SEMVER = /^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/;
|
|
31
|
-
const GHSA_ID = /^GHSA(-[23456789cfghjmpqrvwx]{4}){3}$/;
|
|
32
|
-
/** The services a release ships images for. */
|
|
33
|
-
export const RELEASE_IMAGES = ["admin", "gateway", "ops"];
|
|
34
|
-
const digest = z.string().regex(IMAGE_DIGEST, "expected sha256:<64 hex>");
|
|
35
|
-
/** Zod schema of `release-manifest.json` (manifestVersion 1). */
|
|
36
|
-
export const ReleaseManifestSchema = z.object({
|
|
37
|
-
manifestVersion: z.literal(1),
|
|
38
|
-
version: z.string().regex(SEMVER, "expected a SemVer version without a leading v"),
|
|
39
|
-
channel: z.enum(RELEASE_CHANNELS),
|
|
40
|
-
digests: z.object({ admin: digest, gateway: digest, ops: digest }),
|
|
41
|
-
minFromVersion: z.string().regex(SEMVER),
|
|
42
|
-
infraContractVersion: z.number().int().positive(),
|
|
43
|
-
migrations: z.object({
|
|
44
|
-
/** True when the release carries destructive (contract) migrations. */
|
|
45
|
-
contract: z.boolean(),
|
|
46
|
-
/**
|
|
47
|
-
* Newest release up to and including this one that carried contract
|
|
48
|
-
* migrations (null: none known). An install below it that jumps
|
|
49
|
-
* straight here would run those destructive steps while its old image
|
|
50
|
-
* still serves — so it is manual too, even when `contract` is false.
|
|
51
|
-
*/
|
|
52
|
-
lastContractVersion: z.string().regex(SEMVER).nullable(),
|
|
53
|
-
/** Newest cms_admin migration in the release, e.g. `0262_tool_approval_branch`. */
|
|
54
|
-
head: z.string().min(1),
|
|
55
|
-
}),
|
|
56
|
-
/** Set only via the release-cut input, backed by published GitHub Security Advisories. */
|
|
57
|
-
security: z.boolean(),
|
|
58
|
-
advisories: z.array(z.string().regex(GHSA_ID, "expected a GHSA id")),
|
|
59
|
-
});
|
|
60
|
-
/** Registry the upgrader reads manifests from — the public AR mirror Cloud Run pulls from. */
|
|
61
|
-
export const RELEASE_MANIFEST_REGISTRY = "europe-west1-docker.pkg.dev";
|
|
62
|
-
/** Repository path of the manifest artifact inside {@link RELEASE_MANIFEST_REGISTRY}. */
|
|
63
|
-
export const RELEASE_MANIFEST_REPOSITORY = "caelo-website/caelo-cms-images/release-manifest";
|
|
64
|
-
/** OCI artifact type + layer media types of the pushed manifest. */
|
|
65
|
-
export const RELEASE_MANIFEST_ARTIFACT_TYPE = "application/vnd.caelo.release-manifest.v1";
|
|
66
|
-
export const RELEASE_MANIFEST_MEDIA_TYPE = "application/vnd.caelo.release-manifest.v1+json";
|
|
67
|
-
export const SIGSTORE_BUNDLE_MEDIA_TYPE = "application/vnd.dev.sigstore.bundle.v0.3+json";
|
|
68
32
|
// The signer constants are shared with the image verification (one source).
|
|
69
33
|
export { RELEASE_OIDC_ISSUER };
|
|
70
34
|
/**
|
|
@@ -149,28 +113,9 @@ const defaultDeps = {
|
|
|
149
113
|
fetch: (url, init) => fetch(url, init),
|
|
150
114
|
cosign: runCosign,
|
|
151
115
|
};
|
|
152
|
-
const OciManifestSchema = z.object({
|
|
153
|
-
artifactType: z.string().optional(),
|
|
154
|
-
layers: z.array(z.object({ mediaType: z.string(), digest: z.string().regex(IMAGE_DIGEST) })),
|
|
155
|
-
});
|
|
156
116
|
function fail(code, message) {
|
|
157
117
|
return { ok: false, error: { code, message } };
|
|
158
118
|
}
|
|
159
|
-
async function fetchBlob(deps, base, layer) {
|
|
160
|
-
const res = await deps.fetch(`${base}/blobs/${layer.digest}`);
|
|
161
|
-
if (!res.ok) {
|
|
162
|
-
return { code: "registry", message: `blob ${layer.digest}: HTTP ${res.status}` };
|
|
163
|
-
}
|
|
164
|
-
const bytes = new Uint8Array(await res.arrayBuffer());
|
|
165
|
-
const actual = `sha256:${createHash("sha256").update(bytes).digest("hex")}`;
|
|
166
|
-
if (actual !== layer.digest) {
|
|
167
|
-
return {
|
|
168
|
-
code: "blob-digest",
|
|
169
|
-
message: `blob content does not match its digest (${layer.digest} expected, ${actual} served) — the registry or a proxy altered it`,
|
|
170
|
-
};
|
|
171
|
-
}
|
|
172
|
-
return bytes;
|
|
173
|
-
}
|
|
174
119
|
/**
|
|
175
120
|
* Fetch the manifest of `version` from the fixed registry, verify its
|
|
176
121
|
* Sigstore bundle against the release workflow identity for that exact
|
|
@@ -182,55 +127,16 @@ async function fetchBlob(deps, base, layer) {
|
|
|
182
127
|
export async function fetchVerifiedReleaseManifest(version, deps = defaultDeps) {
|
|
183
128
|
if (!SEMVER.test(version))
|
|
184
129
|
return fail("schema", `"${version}" is not a SemVer version`);
|
|
185
|
-
const
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
const res = await deps.fetch(`${base}/manifests/${version}`, {
|
|
189
|
-
headers: { Accept: "application/vnd.oci.image.manifest.v1+json" },
|
|
190
|
-
});
|
|
191
|
-
if (!res.ok) {
|
|
192
|
-
return fail("registry", `no release manifest for v${version} at ${base} (HTTP ${res.status}). Releases before the signed manifest (epic #696) have none; otherwise check the version exists.`);
|
|
193
|
-
}
|
|
194
|
-
const parsed = OciManifestSchema.safeParse(await res.json());
|
|
195
|
-
if (!parsed.success)
|
|
196
|
-
return fail("artifact-shape", `not an OCI manifest: ${parsed.error.message}`);
|
|
197
|
-
artifact = parsed.data;
|
|
198
|
-
}
|
|
199
|
-
catch (e) {
|
|
200
|
-
return fail("registry", `registry unreachable: ${e instanceof Error ? e.message : String(e)}`);
|
|
201
|
-
}
|
|
202
|
-
if (artifact.artifactType !== RELEASE_MANIFEST_ARTIFACT_TYPE) {
|
|
203
|
-
return fail("artifact-shape", `artifactType is ${artifact.artifactType ?? "(none)"}, expected ${RELEASE_MANIFEST_ARTIFACT_TYPE}`);
|
|
204
|
-
}
|
|
205
|
-
const manifestLayers = artifact.layers.filter((l) => l.mediaType === RELEASE_MANIFEST_MEDIA_TYPE);
|
|
206
|
-
const bundleLayers = artifact.layers.filter((l) => l.mediaType === SIGSTORE_BUNDLE_MEDIA_TYPE);
|
|
207
|
-
const [manifestLayer] = manifestLayers;
|
|
208
|
-
const [bundleLayer] = bundleLayers;
|
|
209
|
-
if (manifestLayers.length !== 1 || bundleLayers.length !== 1 || !manifestLayer || !bundleLayer) {
|
|
210
|
-
return fail("artifact-shape", "the artifact must hold exactly one release-manifest layer and one Sigstore bundle layer");
|
|
211
|
-
}
|
|
212
|
-
let manifestBytes;
|
|
213
|
-
let bundleBytes;
|
|
214
|
-
try {
|
|
215
|
-
const m = await fetchBlob(deps, base, manifestLayer);
|
|
216
|
-
if (!(m instanceof Uint8Array))
|
|
217
|
-
return { ok: false, error: m };
|
|
218
|
-
const b = await fetchBlob(deps, base, bundleLayer);
|
|
219
|
-
if (!(b instanceof Uint8Array))
|
|
220
|
-
return { ok: false, error: b };
|
|
221
|
-
manifestBytes = m;
|
|
222
|
-
bundleBytes = b;
|
|
223
|
-
}
|
|
224
|
-
catch (e) {
|
|
225
|
-
return fail("registry", `registry unreachable: ${e instanceof Error ? e.message : String(e)}`);
|
|
226
|
-
}
|
|
130
|
+
const artifact = await fetchReleaseArtifact(version, deps);
|
|
131
|
+
if (!artifact.ok)
|
|
132
|
+
return { ok: false, error: artifact.error };
|
|
227
133
|
// cosign verifies files, so the exact bytes go to a private temp dir.
|
|
228
134
|
const dir = await mkdtemp(join(tmpdir(), "caelo-release-manifest-"));
|
|
229
135
|
try {
|
|
230
136
|
const manifestPath = join(dir, "release-manifest.json");
|
|
231
137
|
const bundlePath = join(dir, "release-manifest.json.sigstore.json");
|
|
232
|
-
await writeFile(manifestPath, manifestBytes, { mode: 0o600 });
|
|
233
|
-
await writeFile(bundlePath, bundleBytes, { mode: 0o600 });
|
|
138
|
+
await writeFile(manifestPath, artifact.manifestBytes, { mode: 0o600 });
|
|
139
|
+
await writeFile(bundlePath, artifact.bundleBytes, { mode: 0o600 });
|
|
234
140
|
const verify = await deps.cosign([
|
|
235
141
|
"verify-blob",
|
|
236
142
|
"--bundle",
|
|
@@ -248,21 +154,10 @@ export async function fetchVerifiedReleaseManifest(version, deps = defaultDeps)
|
|
|
248
154
|
finally {
|
|
249
155
|
await rm(dir, { recursive: true, force: true });
|
|
250
156
|
}
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
}
|
|
255
|
-
catch {
|
|
256
|
-
return fail("schema", "the signed manifest is not valid JSON");
|
|
257
|
-
}
|
|
258
|
-
const parsed = ReleaseManifestSchema.safeParse(json);
|
|
259
|
-
if (!parsed.success) {
|
|
260
|
-
return fail("schema", `the signed manifest does not match manifestVersion 1 — this CLI may be too old to read it: ${parsed.error.message}`);
|
|
261
|
-
}
|
|
262
|
-
if (parsed.data.version !== version) {
|
|
263
|
-
return fail("version-mismatch", `asked for v${version} but the signed manifest describes v${parsed.data.version}`);
|
|
264
|
-
}
|
|
265
|
-
return { ok: true, manifest: parsed.data };
|
|
157
|
+
const parsed = parseReleaseManifest(artifact.manifestBytes, version);
|
|
158
|
+
if (!parsed.ok)
|
|
159
|
+
return fail(parsed.code, `signed manifest: ${parsed.message}`);
|
|
160
|
+
return { ok: true, manifest: parsed.manifest };
|
|
266
161
|
}
|
|
267
162
|
/**
|
|
268
163
|
* Compare the digests a registry resolved for the release's tags with the
|
|
@@ -314,6 +209,8 @@ export function assessAutoInstall(manifest, installed) {
|
|
|
314
209
|
}
|
|
315
210
|
if (manual.length > 0)
|
|
316
211
|
return { mode: "manual", kind: "normal", reasons: manual };
|
|
317
|
-
|
|
212
|
+
// Security counts only with a published advisory behind it (#696
|
|
213
|
+
// decision 2); the release workflow already refuses the flag without one.
|
|
214
|
+
return { mode: "auto", kind: isSecurityRelease(manifest) ? "security" : "normal", reasons: [] };
|
|
318
215
|
}
|
|
319
216
|
//# sourceMappingURL=release-manifest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-manifest.js","sourceRoot":"","sources":["../src/release-manifest.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"release-manifest.js","sourceRoot":"","sources":["../src/release-manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Caelo release images — where they live, how a tag becomes a digest, and
|
|
3
|
+
* which signer identity cosign must see. The ONE module for this, shared by
|
|
4
|
+
* every install path that runs the prebuilt images (CLAUDE.md §11.C):
|
|
5
|
+
* - the GCP `upgrade` (Artifact Registry mirror, {@link RELEASE_REGISTRY});
|
|
6
|
+
* - the self-hosted Compose install + upgrade (GHCR, the canonical
|
|
7
|
+
* registry, {@link ghcrRepository}).
|
|
8
|
+
* Both registries carry the SAME digests: release-images.yml pushes to GHCR,
|
|
9
|
+
* signs, then `oras copy -r`s image + signature to the mirror. So one
|
|
10
|
+
* resolver and one cosign identity serve both. The in-cloud upgrader job
|
|
11
|
+
* (epic #696) takes the digests from the signed release manifest instead.
|
|
12
|
+
*/
|
|
13
|
+
import { IMAGE_DIGEST } from "@caelo-cms/shared";
|
|
1
14
|
/** The two Caelo services shipped as release images. */
|
|
2
15
|
export type ReleaseService = "admin" | "gateway";
|
|
3
16
|
/** The services every install runs, in roll order (admin first, then gateway). */
|
|
@@ -24,8 +37,7 @@ export declare const RELEASE_OIDC_ISSUER = "https://token.actions.githubusercont
|
|
|
24
37
|
* @example cosignVerifyArgv("ghcr.io/caelo-cms/admin@sha256:…")
|
|
25
38
|
*/
|
|
26
39
|
export declare function cosignVerifyArgv(imageRef: string): string[];
|
|
27
|
-
|
|
28
|
-
export declare const IMAGE_DIGEST: RegExp;
|
|
40
|
+
export { IMAGE_DIGEST };
|
|
29
41
|
/** Whether `s` is a well-formed `sha256:<64 hex>` digest. */
|
|
30
42
|
export declare function isImageDigest(s: string): boolean;
|
|
31
43
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-images.d.ts","sourceRoot":"","sources":["../../src/upgrade/release-images.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"release-images.d.ts","sourceRoot":"","sources":["../../src/upgrade/release-images.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* resolver and one cosign identity serve both. The in-cloud upgrader job
|
|
12
12
|
* (epic #696) takes the digests from the signed release manifest instead.
|
|
13
13
|
*/
|
|
14
|
+
import { IMAGE_DIGEST } from "@caelo-cms/shared";
|
|
14
15
|
import { confirm, isCancel, log, spinner } from "@clack/prompts";
|
|
15
16
|
import { green, red } from "kleur/colors";
|
|
16
17
|
/** The services every install runs, in roll order (admin first, then gateway). */
|
|
@@ -49,8 +50,9 @@ export function cosignVerifyArgv(imageRef) {
|
|
|
49
50
|
RELEASE_OIDC_ISSUER,
|
|
50
51
|
];
|
|
51
52
|
}
|
|
52
|
-
|
|
53
|
-
|
|
53
|
+
// A `sha256:<64 hex>` image / blob digest — one definition, shared with
|
|
54
|
+
// the release manifest schema.
|
|
55
|
+
export { IMAGE_DIGEST };
|
|
54
56
|
/** Whether `s` is a well-formed `sha256:<64 hex>` digest. */
|
|
55
57
|
export function isImageDigest(s) {
|
|
56
58
|
return IMAGE_DIGEST.test(s);
|