@actuate-media/cli 0.4.0 → 0.4.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/.turbo/turbo-build.log +1 -1
- package/.turbo/turbo-test.log +9 -9
- package/CHANGELOG.md +6 -0
- package/dist/__tests__/deployment-diagnostics.test.js +40 -0
- package/dist/__tests__/deployment-diagnostics.test.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +14 -4
- package/dist/commands/doctor.js.map +1 -1
- package/dist/deployment/diagnostics.d.ts +2 -0
- package/dist/deployment/diagnostics.d.ts.map +1 -1
- package/dist/deployment/diagnostics.js +44 -0
- package/dist/deployment/diagnostics.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/deployment-diagnostics.test.ts +42 -0
- package/src/commands/doctor.ts +16 -6
- package/src/deployment/diagnostics.ts +49 -0
package/.turbo/turbo-build.log
CHANGED
package/.turbo/turbo-test.log
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
|
|
2
|
-
> @actuate-media/cli@0.4.
|
|
2
|
+
> @actuate-media/cli@0.4.1 test /home/runner/work/actuatecms/actuatecms/packages/cli
|
|
3
3
|
> vitest run
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
[1m[46m RUN [49m[22m [36mv3.2.4 [39m[90m/home/runner/work/actuatecms/actuatecms/packages/cli[39m
|
|
7
7
|
|
|
8
|
-
[32m✓[39m src/__tests__/
|
|
9
|
-
[32m✓[39m src/__tests__/
|
|
8
|
+
[32m✓[39m src/__tests__/deployment-diagnostics.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 73[2mms[22m[39m
|
|
9
|
+
[32m✓[39m src/__tests__/seed.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 89[2mms[22m[39m
|
|
10
10
|
- Reading Prisma schema...
|
|
11
11
|
✔ Actuate CMS models added to schema.
|
|
12
|
-
- Running prisma generate...
|
|
13
12
|
[90mstdout[2m | src/__tests__/schema-fragment.test.ts[2m > [22m[2mdb:init schema fragment[2m > [22m[2minjects all deploy-critical Actuate models
|
|
14
13
|
[22m[39m✔ Prisma client generated.
|
|
15
14
|
ℹ Run `npx prisma migrate dev --name actuate-cms` to create the migration.
|
|
16
15
|
|
|
17
|
-
|
|
18
|
-
[32m✓[39m src/__tests__/
|
|
16
|
+
- Running prisma generate...
|
|
17
|
+
[32m✓[39m src/__tests__/schema-fragment.test.ts [2m([22m[2m1 test[22m[2m)[22m[32m 129[2mms[22m[39m
|
|
18
|
+
[32m✓[39m src/__tests__/init.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 58[2mms[22m[39m
|
|
19
19
|
|
|
20
20
|
[2m Test Files [22m [1m[32m4 passed[39m[22m[90m (4)[39m
|
|
21
|
-
[2m Tests [22m [1m[
|
|
22
|
-
[2m Start at [22m
|
|
23
|
-
[2m Duration [22m
|
|
21
|
+
[2m Tests [22m [1m[32m12 passed[39m[22m[90m (12)[39m
|
|
22
|
+
[2m Start at [22m 12:55:07
|
|
23
|
+
[2m Duration [22m 8.20s[2m (transform 862ms, setup 0ms, collect 1.68s, tests 349ms, environment 1ms, prepare 1.99s)[22m
|
|
24
24
|
|
package/CHANGELOG.md
CHANGED
|
@@ -65,6 +65,46 @@ describe('deployment diagnostics', () => {
|
|
|
65
65
|
}),
|
|
66
66
|
]));
|
|
67
67
|
});
|
|
68
|
+
it('warns when designed marketing pages appear to use flat fields instead of page-builder content', () => {
|
|
69
|
+
const report = createDiagnosticReport({
|
|
70
|
+
schemaModels: new Set(REQUIRED_CMS_MODELS),
|
|
71
|
+
schemaContent: '',
|
|
72
|
+
configContent: `
|
|
73
|
+
export default defineConfig({
|
|
74
|
+
collections: {
|
|
75
|
+
pages: {
|
|
76
|
+
slug: 'pages',
|
|
77
|
+
fields: {
|
|
78
|
+
title: { type: 'text' },
|
|
79
|
+
slug: { type: 'slug' },
|
|
80
|
+
heroHeadline: { type: 'text' },
|
|
81
|
+
heroSubheadline: { type: 'text' },
|
|
82
|
+
heroImage: { type: 'media' },
|
|
83
|
+
bodyContent: { type: 'richText' },
|
|
84
|
+
ctaButtonText: { type: 'text' }
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
})
|
|
89
|
+
`,
|
|
90
|
+
env: {
|
|
91
|
+
DATABASE_URL: 'postgresql://example',
|
|
92
|
+
CMS_SECRET: 'secret',
|
|
93
|
+
CMS_ENCRYPTION_KEY: 'a'.repeat(64),
|
|
94
|
+
NEXT_PUBLIC_SITE_URL: 'https://example.com',
|
|
95
|
+
},
|
|
96
|
+
packageManager: 'pnpm',
|
|
97
|
+
schemaPath: 'prisma/schema.prisma',
|
|
98
|
+
});
|
|
99
|
+
expect(report.status).toBe('warn');
|
|
100
|
+
expect(report.checks).toEqual(expect.arrayContaining([
|
|
101
|
+
expect.objectContaining({
|
|
102
|
+
id: 'design-first-page-builder',
|
|
103
|
+
status: 'warn',
|
|
104
|
+
docs: 'https://actuatecms.dev/docs/design-first-page-builder',
|
|
105
|
+
}),
|
|
106
|
+
]));
|
|
107
|
+
});
|
|
68
108
|
it('exposes machine-readable deployment metadata', () => {
|
|
69
109
|
const manifest = buildDeploymentManifest();
|
|
70
110
|
expect(manifest.requiredModels).toEqual(REQUIRED_CMS_MODELS);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deployment-diagnostics.test.js","sourceRoot":"","sources":["../../src/__tests__/deployment-diagnostics.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"deployment-diagnostics.test.js","sourceRoot":"","sources":["../../src/__tests__/deployment-diagnostics.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmFpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgB5D;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiBjE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgD5D"}
|
package/dist/commands/doctor.js
CHANGED
|
@@ -28,6 +28,11 @@ async function readSchemaContent(schemaPath) {
|
|
|
28
28
|
return "";
|
|
29
29
|
return readFile(schemaPath, "utf-8");
|
|
30
30
|
}
|
|
31
|
+
async function readOptionalFile(path) {
|
|
32
|
+
if (!(await fileExists(path)))
|
|
33
|
+
return "";
|
|
34
|
+
return readFile(path, "utf-8");
|
|
35
|
+
}
|
|
31
36
|
async function detectProjectPackageManager() {
|
|
32
37
|
const entries = new Set(await readdir(process.cwd()));
|
|
33
38
|
return detectPackageManager(entries);
|
|
@@ -48,16 +53,19 @@ function printReport(title, report) {
|
|
|
48
53
|
console.log(`Status: ${report.status.toUpperCase()}`);
|
|
49
54
|
console.log();
|
|
50
55
|
}
|
|
51
|
-
async function buildReport(schemaPath, mode = "doctor") {
|
|
56
|
+
async function buildReport(schemaPath, configPath, mode = "doctor") {
|
|
52
57
|
const resolvedSchema = resolve(process.cwd(), schemaPath);
|
|
53
|
-
const
|
|
58
|
+
const resolvedConfig = resolve(process.cwd(), configPath);
|
|
59
|
+
const [schemaModels, schemaContent, configContent, packageManager] = await Promise.all([
|
|
54
60
|
readSchemaModels(resolvedSchema),
|
|
55
61
|
readSchemaContent(resolvedSchema),
|
|
62
|
+
readOptionalFile(resolvedConfig),
|
|
56
63
|
detectProjectPackageManager(),
|
|
57
64
|
]);
|
|
58
65
|
return createDiagnosticReport({
|
|
59
66
|
schemaModels,
|
|
60
67
|
schemaContent,
|
|
68
|
+
configContent,
|
|
61
69
|
env: process.env,
|
|
62
70
|
packageManager,
|
|
63
71
|
schemaPath,
|
|
@@ -69,9 +77,10 @@ export function registerDoctorCommand(program) {
|
|
|
69
77
|
.command("doctor")
|
|
70
78
|
.description("Run AI-friendly preflight checks for an Actuate CMS project")
|
|
71
79
|
.option("--schema <path>", "Path to schema.prisma", "prisma/schema.prisma")
|
|
80
|
+
.option("--config <path>", "Path to actuate.config.ts", "actuate.config.ts")
|
|
72
81
|
.option("--json", "Print machine-readable JSON")
|
|
73
82
|
.action(async (opts) => {
|
|
74
|
-
const report = await buildReport(opts.schema, "doctor");
|
|
83
|
+
const report = await buildReport(opts.schema, opts.config, "doctor");
|
|
75
84
|
if (opts.json) {
|
|
76
85
|
console.log(JSON.stringify(report, null, 2));
|
|
77
86
|
}
|
|
@@ -87,9 +96,10 @@ export function registerDeployCheckCommand(program) {
|
|
|
87
96
|
.command("deploy:check")
|
|
88
97
|
.description("Check production deployment readiness for Actuate CMS")
|
|
89
98
|
.option("--schema <path>", "Path to schema.prisma", "prisma/schema.prisma")
|
|
99
|
+
.option("--config <path>", "Path to actuate.config.ts", "actuate.config.ts")
|
|
90
100
|
.option("--json", "Print machine-readable JSON")
|
|
91
101
|
.action(async (opts) => {
|
|
92
|
-
const report = await buildReport(opts.schema, "deploy");
|
|
102
|
+
const report = await buildReport(opts.schema, opts.config, "deploy");
|
|
93
103
|
if (opts.json) {
|
|
94
104
|
console.log(JSON.stringify({ ...report, manifest: buildDeploymentManifest() }, null, 2));
|
|
95
105
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,7 @@ export declare const REQUIRED_ENV_VARS: readonly ["DATABASE_URL", "CMS_SECRET",
|
|
|
16
16
|
export interface DiagnosticInput {
|
|
17
17
|
schemaModels: Set<string>;
|
|
18
18
|
schemaContent?: string;
|
|
19
|
+
configContent?: string;
|
|
19
20
|
env: Record<string, string | undefined>;
|
|
20
21
|
packageManager: string;
|
|
21
22
|
schemaPath: string;
|
|
@@ -55,4 +56,5 @@ export declare function buildDeploymentManifest(): {
|
|
|
55
56
|
};
|
|
56
57
|
};
|
|
57
58
|
export declare function missingCriticalFields(schemaContent: string): string[];
|
|
59
|
+
export declare function detectsFlatMarketingPageModel(configContent: string): boolean;
|
|
58
60
|
//# sourceMappingURL=diagnostics.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/deployment/diagnostics.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,mBAAmB,mMAetB,CAAC;AAEX,eAAO,MAAM,iBAAiB,uFAKpB,CAAC;AAEX,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC5B;AAED,wBAAgB,aAAa,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAEjE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,EAAE,CAEhF;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAKnE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/deployment/diagnostics.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,mBAAmB,mMAetB,CAAC;AAEX,eAAO,MAAM,iBAAiB,uFAKpB,CAAC;AAEX,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC5B;AAED,wBAAgB,aAAa,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAEjE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,EAAE,CAEhF;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAKnE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CA2E/E;AAED,wBAAgB,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCtC;AAED,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CAqBrE;AAED,wBAAgB,6BAA6B,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAgC5E"}
|
|
@@ -42,6 +42,7 @@ export function createDiagnosticReport(input) {
|
|
|
42
42
|
? [...missingEnvVars(input.env), ...(!input.env.DIRECT_DATABASE_URL ? ['DIRECT_DATABASE_URL'] : [])]
|
|
43
43
|
: missingEnvVars(input.env);
|
|
44
44
|
const fieldProblems = input.schemaContent ? missingCriticalFields(input.schemaContent) : [];
|
|
45
|
+
const pageBuilderRisk = input.configContent ? detectsFlatMarketingPageModel(input.configContent) : false;
|
|
45
46
|
checks.push({
|
|
46
47
|
id: 'schema-models',
|
|
47
48
|
label: 'Prisma schema models',
|
|
@@ -84,6 +85,18 @@ export function createDiagnosticReport(input) {
|
|
|
84
85
|
status: 'pass',
|
|
85
86
|
message: `Detected ${input.packageManager}. Use the same package manager for install, build, and deploy checks.`,
|
|
86
87
|
});
|
|
88
|
+
checks.push({
|
|
89
|
+
id: 'design-first-page-builder',
|
|
90
|
+
label: 'Design-first page builder fit',
|
|
91
|
+
status: pageBuilderRisk ? 'warn' : 'pass',
|
|
92
|
+
message: pageBuilderRisk
|
|
93
|
+
? 'A pages collection appears to model a designed marketing page as flat hero/body/CTA fields. For marketing, service, location, landing, and homepage routes, prefer a page-builder template with blocks, saved sections, forms, media, and seeded layout content unless field-mapped mode was explicitly approved.'
|
|
94
|
+
: 'No obvious flat marketing-page model detected in the Actuate config.',
|
|
95
|
+
fix: pageBuilderRisk
|
|
96
|
+
? 'Create a design inventory and block coverage plan, then model section-based pages with page-builder content or document why field-mapped mode is intentional.'
|
|
97
|
+
: undefined,
|
|
98
|
+
docs: pageBuilderRisk ? 'https://actuatecms.dev/docs/design-first-page-builder' : undefined,
|
|
99
|
+
});
|
|
87
100
|
const status = checks.some((check) => check.status === 'fail')
|
|
88
101
|
? 'fail'
|
|
89
102
|
: checks.some((check) => check.status === 'warn')
|
|
@@ -151,4 +164,35 @@ export function missingCriticalFields(schemaContent) {
|
|
|
151
164
|
}
|
|
152
165
|
return missing;
|
|
153
166
|
}
|
|
167
|
+
export function detectsFlatMarketingPageModel(configContent) {
|
|
168
|
+
const normalized = configContent.toLowerCase();
|
|
169
|
+
const hasPagesCollection = /\bpages\b/.test(normalized) || /slug\s*:\s*['"]pages['"]/.test(normalized);
|
|
170
|
+
if (!hasPagesCollection)
|
|
171
|
+
return false;
|
|
172
|
+
const hasPageBuilderSignals = [
|
|
173
|
+
'pagebuilder',
|
|
174
|
+
'page-builder',
|
|
175
|
+
"type: 'blocks'",
|
|
176
|
+
'type: "blocks"',
|
|
177
|
+
'layout:',
|
|
178
|
+
'savedsections',
|
|
179
|
+
'pagetemplate',
|
|
180
|
+
].some((signal) => normalized.includes(signal.toLowerCase()));
|
|
181
|
+
if (hasPageBuilderSignals)
|
|
182
|
+
return false;
|
|
183
|
+
const flatMarketingSignals = [
|
|
184
|
+
'heroheadline',
|
|
185
|
+
'herosubheadline',
|
|
186
|
+
'herotitle',
|
|
187
|
+
'heroimage',
|
|
188
|
+
'bodycontent',
|
|
189
|
+
'ctabuttontext',
|
|
190
|
+
'ctabuttonurl',
|
|
191
|
+
'servicecards',
|
|
192
|
+
'testimonial',
|
|
193
|
+
'reviews',
|
|
194
|
+
];
|
|
195
|
+
const signalCount = flatMarketingSignals.filter((signal) => normalized.includes(signal)).length;
|
|
196
|
+
return signalCount >= 3;
|
|
197
|
+
}
|
|
154
198
|
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/deployment/diagnostics.ts"],"names":[],"mappings":"AAgBA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,MAAM;IACN,SAAS;IACT,UAAU;IACV,OAAO;IACP,SAAS;IACT,QAAQ;IACR,UAAU;IACV,gBAAgB;IAChB,UAAU;IACV,oBAAoB;IACpB,YAAY;IACZ,WAAW;IACX,cAAc;IACd,cAAc;CACN,CAAC;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,cAAc;IACd,YAAY;IACZ,oBAAoB;IACpB,sBAAsB;CACd,CAAC;
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/deployment/diagnostics.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@actuate-media/cli",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "CLI for Actuate CMS — migrations, codegen, imports, exports, and upgrades",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"typescript": "^5.7.0",
|
|
30
30
|
"vitest": "^3.0.0",
|
|
31
|
-
"@actuate-media/cms-core": "0.10.
|
|
31
|
+
"@actuate-media/cms-core": "0.10.4"
|
|
32
32
|
},
|
|
33
33
|
"scripts": {
|
|
34
34
|
"build": "tsc",
|
|
@@ -77,6 +77,48 @@ describe('deployment diagnostics', () => {
|
|
|
77
77
|
]));
|
|
78
78
|
});
|
|
79
79
|
|
|
80
|
+
it('warns when designed marketing pages appear to use flat fields instead of page-builder content', () => {
|
|
81
|
+
const report = createDiagnosticReport({
|
|
82
|
+
schemaModels: new Set(REQUIRED_CMS_MODELS),
|
|
83
|
+
schemaContent: '',
|
|
84
|
+
configContent: `
|
|
85
|
+
export default defineConfig({
|
|
86
|
+
collections: {
|
|
87
|
+
pages: {
|
|
88
|
+
slug: 'pages',
|
|
89
|
+
fields: {
|
|
90
|
+
title: { type: 'text' },
|
|
91
|
+
slug: { type: 'slug' },
|
|
92
|
+
heroHeadline: { type: 'text' },
|
|
93
|
+
heroSubheadline: { type: 'text' },
|
|
94
|
+
heroImage: { type: 'media' },
|
|
95
|
+
bodyContent: { type: 'richText' },
|
|
96
|
+
ctaButtonText: { type: 'text' }
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
})
|
|
101
|
+
`,
|
|
102
|
+
env: {
|
|
103
|
+
DATABASE_URL: 'postgresql://example',
|
|
104
|
+
CMS_SECRET: 'secret',
|
|
105
|
+
CMS_ENCRYPTION_KEY: 'a'.repeat(64),
|
|
106
|
+
NEXT_PUBLIC_SITE_URL: 'https://example.com',
|
|
107
|
+
},
|
|
108
|
+
packageManager: 'pnpm',
|
|
109
|
+
schemaPath: 'prisma/schema.prisma',
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
expect(report.status).toBe('warn');
|
|
113
|
+
expect(report.checks).toEqual(expect.arrayContaining([
|
|
114
|
+
expect.objectContaining({
|
|
115
|
+
id: 'design-first-page-builder',
|
|
116
|
+
status: 'warn',
|
|
117
|
+
docs: 'https://actuatecms.dev/docs/design-first-page-builder',
|
|
118
|
+
}),
|
|
119
|
+
]));
|
|
120
|
+
});
|
|
121
|
+
|
|
80
122
|
it('exposes machine-readable deployment metadata', () => {
|
|
81
123
|
const manifest = buildDeploymentManifest();
|
|
82
124
|
|
package/src/commands/doctor.ts
CHANGED
|
@@ -35,6 +35,11 @@ async function readSchemaContent(schemaPath: string): Promise<string> {
|
|
|
35
35
|
return readFile(schemaPath, "utf-8");
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
+
async function readOptionalFile(path: string): Promise<string> {
|
|
39
|
+
if (!(await fileExists(path))) return "";
|
|
40
|
+
return readFile(path, "utf-8");
|
|
41
|
+
}
|
|
42
|
+
|
|
38
43
|
async function detectProjectPackageManager(): Promise<string> {
|
|
39
44
|
const entries = new Set(await readdir(process.cwd()));
|
|
40
45
|
return detectPackageManager(entries);
|
|
@@ -55,17 +60,20 @@ function printReport(title: string, report: DiagnosticReport): void {
|
|
|
55
60
|
console.log();
|
|
56
61
|
}
|
|
57
62
|
|
|
58
|
-
async function buildReport(schemaPath: string, mode: "doctor" | "deploy" = "doctor") {
|
|
63
|
+
async function buildReport(schemaPath: string, configPath: string, mode: "doctor" | "deploy" = "doctor") {
|
|
59
64
|
const resolvedSchema = resolve(process.cwd(), schemaPath);
|
|
60
|
-
const
|
|
65
|
+
const resolvedConfig = resolve(process.cwd(), configPath);
|
|
66
|
+
const [schemaModels, schemaContent, configContent, packageManager] = await Promise.all([
|
|
61
67
|
readSchemaModels(resolvedSchema),
|
|
62
68
|
readSchemaContent(resolvedSchema),
|
|
69
|
+
readOptionalFile(resolvedConfig),
|
|
63
70
|
detectProjectPackageManager(),
|
|
64
71
|
]);
|
|
65
72
|
|
|
66
73
|
return createDiagnosticReport({
|
|
67
74
|
schemaModels,
|
|
68
75
|
schemaContent,
|
|
76
|
+
configContent,
|
|
69
77
|
env: process.env,
|
|
70
78
|
packageManager,
|
|
71
79
|
schemaPath,
|
|
@@ -78,9 +86,10 @@ export function registerDoctorCommand(program: Command): void {
|
|
|
78
86
|
.command("doctor")
|
|
79
87
|
.description("Run AI-friendly preflight checks for an Actuate CMS project")
|
|
80
88
|
.option("--schema <path>", "Path to schema.prisma", "prisma/schema.prisma")
|
|
89
|
+
.option("--config <path>", "Path to actuate.config.ts", "actuate.config.ts")
|
|
81
90
|
.option("--json", "Print machine-readable JSON")
|
|
82
|
-
.action(async (opts: { schema: string; json?: boolean }) => {
|
|
83
|
-
const report = await buildReport(opts.schema, "doctor");
|
|
91
|
+
.action(async (opts: { schema: string; config: string; json?: boolean }) => {
|
|
92
|
+
const report = await buildReport(opts.schema, opts.config, "doctor");
|
|
84
93
|
if (opts.json) {
|
|
85
94
|
console.log(JSON.stringify(report, null, 2));
|
|
86
95
|
} else {
|
|
@@ -95,9 +104,10 @@ export function registerDeployCheckCommand(program: Command): void {
|
|
|
95
104
|
.command("deploy:check")
|
|
96
105
|
.description("Check production deployment readiness for Actuate CMS")
|
|
97
106
|
.option("--schema <path>", "Path to schema.prisma", "prisma/schema.prisma")
|
|
107
|
+
.option("--config <path>", "Path to actuate.config.ts", "actuate.config.ts")
|
|
98
108
|
.option("--json", "Print machine-readable JSON")
|
|
99
|
-
.action(async (opts: { schema: string; json?: boolean }) => {
|
|
100
|
-
const report = await buildReport(opts.schema, "deploy");
|
|
109
|
+
.action(async (opts: { schema: string; config: string; json?: boolean }) => {
|
|
110
|
+
const report = await buildReport(opts.schema, opts.config, "deploy");
|
|
101
111
|
if (opts.json) {
|
|
102
112
|
console.log(JSON.stringify({ ...report, manifest: buildDeploymentManifest() }, null, 2));
|
|
103
113
|
} else {
|
|
@@ -41,6 +41,7 @@ export const REQUIRED_ENV_VARS = [
|
|
|
41
41
|
export interface DiagnosticInput {
|
|
42
42
|
schemaModels: Set<string>;
|
|
43
43
|
schemaContent?: string;
|
|
44
|
+
configContent?: string;
|
|
44
45
|
env: Record<string, string | undefined>;
|
|
45
46
|
packageManager: string;
|
|
46
47
|
schemaPath: string;
|
|
@@ -69,6 +70,7 @@ export function createDiagnosticReport(input: DiagnosticInput): DiagnosticReport
|
|
|
69
70
|
? [...missingEnvVars(input.env), ...(!input.env.DIRECT_DATABASE_URL ? ['DIRECT_DATABASE_URL'] : [])]
|
|
70
71
|
: missingEnvVars(input.env);
|
|
71
72
|
const fieldProblems = input.schemaContent ? missingCriticalFields(input.schemaContent) : [];
|
|
73
|
+
const pageBuilderRisk = input.configContent ? detectsFlatMarketingPageModel(input.configContent) : false;
|
|
72
74
|
|
|
73
75
|
checks.push({
|
|
74
76
|
id: 'schema-models',
|
|
@@ -116,6 +118,19 @@ export function createDiagnosticReport(input: DiagnosticInput): DiagnosticReport
|
|
|
116
118
|
message: `Detected ${input.packageManager}. Use the same package manager for install, build, and deploy checks.`,
|
|
117
119
|
});
|
|
118
120
|
|
|
121
|
+
checks.push({
|
|
122
|
+
id: 'design-first-page-builder',
|
|
123
|
+
label: 'Design-first page builder fit',
|
|
124
|
+
status: pageBuilderRisk ? 'warn' : 'pass',
|
|
125
|
+
message: pageBuilderRisk
|
|
126
|
+
? 'A pages collection appears to model a designed marketing page as flat hero/body/CTA fields. For marketing, service, location, landing, and homepage routes, prefer a page-builder template with blocks, saved sections, forms, media, and seeded layout content unless field-mapped mode was explicitly approved.'
|
|
127
|
+
: 'No obvious flat marketing-page model detected in the Actuate config.',
|
|
128
|
+
fix: pageBuilderRisk
|
|
129
|
+
? 'Create a design inventory and block coverage plan, then model section-based pages with page-builder content or document why field-mapped mode is intentional.'
|
|
130
|
+
: undefined,
|
|
131
|
+
docs: pageBuilderRisk ? 'https://actuatecms.dev/docs/design-first-page-builder' : undefined,
|
|
132
|
+
});
|
|
133
|
+
|
|
119
134
|
const status: DiagnosticStatus = checks.some((check) => check.status === 'fail')
|
|
120
135
|
? 'fail'
|
|
121
136
|
: checks.some((check) => check.status === 'warn')
|
|
@@ -187,3 +202,37 @@ export function missingCriticalFields(schemaContent: string): string[] {
|
|
|
187
202
|
|
|
188
203
|
return missing;
|
|
189
204
|
}
|
|
205
|
+
|
|
206
|
+
export function detectsFlatMarketingPageModel(configContent: string): boolean {
|
|
207
|
+
const normalized = configContent.toLowerCase();
|
|
208
|
+
const hasPagesCollection = /\bpages\b/.test(normalized) || /slug\s*:\s*['"]pages['"]/.test(normalized);
|
|
209
|
+
if (!hasPagesCollection) return false;
|
|
210
|
+
|
|
211
|
+
const hasPageBuilderSignals = [
|
|
212
|
+
'pagebuilder',
|
|
213
|
+
'page-builder',
|
|
214
|
+
"type: 'blocks'",
|
|
215
|
+
'type: "blocks"',
|
|
216
|
+
'layout:',
|
|
217
|
+
'savedsections',
|
|
218
|
+
'pagetemplate',
|
|
219
|
+
].some((signal) => normalized.includes(signal.toLowerCase()));
|
|
220
|
+
|
|
221
|
+
if (hasPageBuilderSignals) return false;
|
|
222
|
+
|
|
223
|
+
const flatMarketingSignals = [
|
|
224
|
+
'heroheadline',
|
|
225
|
+
'herosubheadline',
|
|
226
|
+
'herotitle',
|
|
227
|
+
'heroimage',
|
|
228
|
+
'bodycontent',
|
|
229
|
+
'ctabuttontext',
|
|
230
|
+
'ctabuttonurl',
|
|
231
|
+
'servicecards',
|
|
232
|
+
'testimonial',
|
|
233
|
+
'reviews',
|
|
234
|
+
];
|
|
235
|
+
|
|
236
|
+
const signalCount = flatMarketingSignals.filter((signal) => normalized.includes(signal)).length;
|
|
237
|
+
return signalCount >= 3;
|
|
238
|
+
}
|