@actuate-media/cli 0.4.0 → 0.4.2
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 +21 -10
- package/CHANGELOG.md +34 -0
- package/dist/__tests__/deployment-diagnostics.test.js +40 -0
- package/dist/__tests__/deployment-diagnostics.test.js.map +1 -1
- package/dist/__tests__/init.test.js.map +1 -1
- package/dist/__tests__/schema-fragment.test.js +1 -1
- package/dist/__tests__/schema-fragment.test.js.map +1 -1
- package/dist/__tests__/seed.test.js.map +1 -1
- package/dist/commands/db-init.d.ts +2 -2
- package/dist/commands/db-init.d.ts.map +1 -1
- package/dist/commands/db-init.js +32 -32
- package/dist/commands/db-init.js.map +1 -1
- package/dist/commands/db-status.d.ts +1 -1
- package/dist/commands/db-status.d.ts.map +1 -1
- package/dist/commands/db-status.js +33 -33
- package/dist/commands/db-status.js.map +1 -1
- package/dist/commands/doctor.d.ts +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +55 -38
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/export.d.ts +1 -1
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +32 -32
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/generate.d.ts +1 -1
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +8 -8
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/import.d.ts +1 -1
- package/dist/commands/import.d.ts.map +1 -1
- package/dist/commands/import.js +55 -58
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/migrate.d.ts +1 -1
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +18 -24
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/seed.d.ts +1 -1
- package/dist/commands/seed.d.ts.map +1 -1
- package/dist/commands/seed.js +156 -157
- package/dist/commands/seed.js.map +1 -1
- package/dist/commands/update-check.d.ts +1 -1
- package/dist/commands/update-check.d.ts.map +1 -1
- package/dist/commands/update-check.js +34 -27
- package/dist/commands/update-check.js.map +1 -1
- package/dist/commands/upgrade.d.ts +1 -1
- package/dist/commands/upgrade.d.ts.map +1 -1
- package/dist/commands/upgrade.js +41 -34
- package/dist/commands/upgrade.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 +50 -1
- package/dist/deployment/diagnostics.js.map +1 -1
- package/dist/index.js +15 -15
- package/dist/index.js.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +5 -5
- package/dist/utils/logger.js.map +1 -1
- package/package.json +3 -3
- package/src/__tests__/deployment-diagnostics.test.ts +100 -50
- package/src/__tests__/init.test.ts +17 -17
- package/src/__tests__/schema-fragment.test.ts +29 -25
- package/src/__tests__/seed.test.ts +25 -25
- package/src/commands/db-init.ts +59 -59
- package/src/commands/db-status.ts +70 -68
- package/src/commands/doctor.ts +110 -86
- package/src/commands/export.ts +65 -75
- package/src/commands/generate.ts +14 -16
- package/src/commands/import.ts +125 -140
- package/src/commands/init.ts +14 -14
- package/src/commands/migrate.ts +29 -35
- package/src/commands/seed.ts +294 -300
- package/src/commands/update-check.ts +77 -72
- package/src/commands/upgrade.ts +92 -85
- package/src/deployment/diagnostics.ts +124 -61
- package/src/index.ts +30 -30
- package/src/utils/logger.ts +10 -10
package/.turbo/turbo-build.log
CHANGED
package/.turbo/turbo-test.log
CHANGED
|
@@ -1,24 +1,35 @@
|
|
|
1
1
|
|
|
2
|
-
> @actuate-media/cli@0.4.
|
|
2
|
+
> @actuate-media/cli@0.4.2 test /home/runner/work/actuatecms/actuatecms/packages/cli
|
|
3
3
|
> vitest run
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
[1m[46m RUN [49m[22m [
|
|
6
|
+
[1m[30m[46m RUN [49m[39m[22m [36mv4.1.8 [39m[90m/home/runner/work/actuatecms/actuatecms/packages/cli[39m
|
|
7
7
|
|
|
8
|
-
[32m✓[39m
|
|
9
|
-
[32m✓[39m src/__tests__/deployment-diagnostics.test.ts [2m([22m[
|
|
8
|
+
[32m✓[39m dist/__tests__/deployment-diagnostics.test.js [2m([22m[2m5 tests[22m[2m)[22m[32m 57[2mms[22m[39m
|
|
9
|
+
[32m✓[39m src/__tests__/deployment-diagnostics.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 59[2mms[22m[39m
|
|
10
|
+
[32m✓[39m dist/__tests__/seed.test.js [2m([22m[2m4 tests[22m[2m)[22m[32m 38[2mms[22m[39m
|
|
11
|
+
[32m✓[39m src/__tests__/seed.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 48[2mms[22m[39m
|
|
10
12
|
- Reading Prisma schema...
|
|
13
|
+
[90mstdout[2m | dist/__tests__/schema-fragment.test.js[2m > [22m[2mdb:init schema fragment[2m > [22m[2minjects all deploy-critical Actuate models
|
|
11
14
|
✔ Actuate CMS models added to schema.
|
|
15
|
+
[22m[39m✔ Prisma client generated.
|
|
12
16
|
- Running prisma generate...
|
|
17
|
+
ℹ Run `npx prisma migrate dev --name actuate-cms` to create the migration.
|
|
18
|
+
|
|
19
|
+
[32m✓[39m dist/__tests__/schema-fragment.test.js [2m([22m[2m1 test[22m[2m)[22m[32m 152[2mms[22m[39m
|
|
20
|
+
- Reading Prisma schema...
|
|
21
|
+
✔ Actuate CMS models added to schema.
|
|
13
22
|
[90mstdout[2m | src/__tests__/schema-fragment.test.ts[2m > [22m[2mdb:init schema fragment[2m > [22m[2minjects all deploy-critical Actuate models
|
|
14
23
|
[22m[39m✔ Prisma client generated.
|
|
15
24
|
ℹ Run `npx prisma migrate dev --name actuate-cms` to create the migration.
|
|
16
25
|
|
|
17
|
-
|
|
18
|
-
[32m✓[39m src/__tests__/
|
|
26
|
+
- Running prisma generate...
|
|
27
|
+
[32m✓[39m src/__tests__/schema-fragment.test.ts [2m([22m[2m1 test[22m[2m)[22m[32m 72[2mms[22m[39m
|
|
28
|
+
[32m✓[39m dist/__tests__/init.test.js [2m([22m[2m2 tests[22m[2m)[22m[32m 20[2mms[22m[39m
|
|
29
|
+
[32m✓[39m src/__tests__/init.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 33[2mms[22m[39m
|
|
19
30
|
|
|
20
|
-
[2m Test Files [22m [1m[
|
|
21
|
-
[2m Tests [22m [1m[
|
|
22
|
-
[2m Start at [22m
|
|
23
|
-
[2m Duration [22m
|
|
31
|
+
[2m Test Files [22m [1m[32m8 passed[39m[22m[90m (8)[39m
|
|
32
|
+
[2m Tests [22m [1m[32m24 passed[39m[22m[90m (24)[39m
|
|
33
|
+
[2m Start at [22m 17:56:33
|
|
34
|
+
[2m Duration [22m 11.31s[2m (transform 1.35s, setup 0ms, import 2.91s, tests 479ms, environment 13ms)[22m
|
|
24
35
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,39 @@
|
|
|
1
1
|
# @actuate-media/cli
|
|
2
2
|
|
|
3
|
+
## 0.4.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 7d11b8d: Production-ready Settings → Updates tab with real release intelligence.
|
|
8
|
+
- **cms-core**: Fix a critical permission bug where `GET/PUT /updates/config` and
|
|
9
|
+
`POST /updates/apply` rejected real admins (they compared `session.role` to the
|
|
10
|
+
lowercase `'admin'` while roles are stored uppercase). They now use
|
|
11
|
+
`requireAdminScope`, so OWNER/ADMIN sessions (and admin-scoped API keys) can
|
|
12
|
+
manage updates. `GET /updates/check` no longer leaks the GitHub repo to
|
|
13
|
+
non-admins and reports a `canManage` flag. Update checks now run through a new
|
|
14
|
+
hybrid resolver `getUpdateStatus()` that queries the Actuate update server
|
|
15
|
+
first (rich, real changelog/severity/migration/breaking-change data derived
|
|
16
|
+
from the published CHANGELOG) and transparently falls back to a direct npm
|
|
17
|
+
registry check. New exports: `getUpdateStatus`, `checkForUpdatesViaServer`, and
|
|
18
|
+
the `ChangeType` / `ChangelogItem` / `PluginCompatibilityInfo` types; richer
|
|
19
|
+
`VersionInfo`. `fetchChangelog()` now targets the real `/api/changelog`
|
|
20
|
+
endpoint (overridable via `ACTUATE_UPDATE_SERVER_URL`).
|
|
21
|
+
- **cms-admin**: Rebuild the Updates tab as a dedicated `UpdatesTab` + `useUpdates`
|
|
22
|
+
hook (extracted from `Settings.tsx`). The GitHub integration now uses the shared
|
|
23
|
+
`SettingsControlRow` + sticky `SettingsSaveBar` dirty-state pattern, and the tab
|
|
24
|
+
surfaces real release notes (categorized changelog), a security-update badge,
|
|
25
|
+
"migrations required" and breaking-change callouts, and plugin compatibility.
|
|
26
|
+
Write actions are permission-aware (hidden for non-admins).
|
|
27
|
+
- **cli**: `update-check` / `upgrade` now resolve the update-server base URL from
|
|
28
|
+
`ACTUATE_UPDATE_SERVER_URL` (defaulting to the production host), so the
|
|
29
|
+
`/api/versions` endpoint is configurable for self-hosted update servers.
|
|
30
|
+
|
|
31
|
+
## 0.4.1
|
|
32
|
+
|
|
33
|
+
### Patch Changes
|
|
34
|
+
|
|
35
|
+
- 58bf2e6: Warn during deployment diagnostics when designed marketing pages appear to be modeled as flat fields instead of page-builder content.
|
|
36
|
+
|
|
3
37
|
## 0.4.0
|
|
4
38
|
|
|
5
39
|
### Minor Changes
|
|
@@ -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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,
|
|
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":"init.test.js","sourceRoot":"","sources":["../../src/__tests__/init.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"init.test.js","sourceRoot":"","sources":["../../src/__tests__/init.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAEjF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;QAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAA;QAE5B,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,CAAA;QAEjF,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;QAC7B,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC,CAAA;QAC1E,MAAM,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC;YACrD,QAAQ;YACR,oBAAoB;YACpB,cAAc;SACf,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAA;QACnF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAqC,CAAA;QAE/D,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QAC9C,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IACxD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -3,7 +3,7 @@ import { mkdtemp, readFile, rm, writeFile } from 'node:fs/promises';
|
|
|
3
3
|
import { tmpdir } from 'node:os';
|
|
4
4
|
import path from 'node:path';
|
|
5
5
|
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
6
|
-
import { registerDbInitCommand, resetDbInitCommandRunner, setDbInitCommandRunner } from '../commands/db-init.js';
|
|
6
|
+
import { registerDbInitCommand, resetDbInitCommandRunner, setDbInitCommandRunner, } from '../commands/db-init.js';
|
|
7
7
|
import { REQUIRED_CMS_MODELS } from '../deployment/diagnostics.js';
|
|
8
8
|
function baseSchema() {
|
|
9
9
|
return `generator client {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-fragment.test.js","sourceRoot":"","sources":["../../src/__tests__/schema-fragment.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"schema-fragment.test.js","sourceRoot":"","sources":["../../src/__tests__/schema-fragment.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE5D,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAElE,SAAS,UAAU;IACjB,OAAO;;;;;;;;CAQR,CAAA;AACD,CAAC;AAED,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,SAAS,CAAC,GAAG,EAAE;QACb,wBAAwB,EAAE,CAAA;QAC1B,EAAE,CAAC,eAAe,EAAE,CAAA;IACtB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAA;QACvE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;QACvD,MAAM,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,CAAA;QAEzC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QAClD,sBAAsB,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QACvC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;QAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAA;QAE9B,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAA;QAErF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QAClD,KAAK,MAAM,KAAK,IAAI,mBAAmB,EAAE,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,SAAS,KAAK,GAAG,CAAC,CAAA;QAC7C,CAAC;QAED,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seed.test.js","sourceRoot":"","sources":["../../src/__tests__/seed.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"seed.test.js","sourceRoot":"","sources":["../../src/__tests__/seed.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Command } from
|
|
2
|
-
import { type ExecSyncOptions } from
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { type ExecSyncOptions } from 'node:child_process';
|
|
3
3
|
export declare let runDbInitCommand: (command: string, options: ExecSyncOptions) => void;
|
|
4
4
|
export declare function setDbInitCommandRunner(runner: typeof runDbInitCommand): void;
|
|
5
5
|
export declare function resetDbInitCommandRunner(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-init.d.ts","sourceRoot":"","sources":["../../src/commands/db-init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"db-init.d.ts","sourceRoot":"","sources":["../../src/commands/db-init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGnC,OAAO,EAAY,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAMnE,eAAO,IAAI,gBAAgB,GAAI,SAAS,MAAM,EAAE,SAAS,eAAe,KAAG,IAE1E,CAAA;AAID,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,gBAAgB,GAAG,IAAI,CAE5E;AAED,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C;AA8RD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4E5D"}
|
package/dist/commands/db-init.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { readFile, writeFile, access } from
|
|
2
|
-
import { resolve } from
|
|
3
|
-
import { execSync } from
|
|
4
|
-
import ora from
|
|
5
|
-
import { logger } from
|
|
6
|
-
const CMS_SCHEMA_MARKER =
|
|
1
|
+
import { readFile, writeFile, access } from 'node:fs/promises';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { execSync } from 'node:child_process';
|
|
4
|
+
import ora from 'ora';
|
|
5
|
+
import { logger } from '../utils/logger.js';
|
|
6
|
+
const CMS_SCHEMA_MARKER = '// ── Actuate CMS models';
|
|
7
7
|
export let runDbInitCommand = (command, options) => {
|
|
8
8
|
execSync(command, options);
|
|
9
9
|
};
|
|
@@ -299,74 +299,74 @@ model SavedSection {
|
|
|
299
299
|
}
|
|
300
300
|
export function registerDbInitCommand(program) {
|
|
301
301
|
program
|
|
302
|
-
.command(
|
|
303
|
-
.description(
|
|
304
|
-
.option(
|
|
305
|
-
.option(
|
|
306
|
-
.option(
|
|
302
|
+
.command('db:init')
|
|
303
|
+
.description('Add Actuate CMS models to your Prisma schema and generate the client')
|
|
304
|
+
.option('--schema <path>', 'Path to schema.prisma', 'prisma/schema.prisma')
|
|
305
|
+
.option('--migrate', 'Run prisma migrate dev after adding models')
|
|
306
|
+
.option('--force', 'Overwrite existing CMS models if present')
|
|
307
307
|
.action(async (opts) => {
|
|
308
308
|
const schemaPath = resolve(process.cwd(), opts.schema);
|
|
309
309
|
if (!(await fileExists(schemaPath))) {
|
|
310
310
|
logger.error(`Schema file not found at ${schemaPath}`);
|
|
311
|
-
logger.info(
|
|
311
|
+
logger.info('Run `npx prisma init` first, or specify --schema <path>.');
|
|
312
312
|
process.exitCode = 1;
|
|
313
313
|
return;
|
|
314
314
|
}
|
|
315
|
-
const spinner = ora(
|
|
315
|
+
const spinner = ora('Reading Prisma schema...').start();
|
|
316
316
|
let content;
|
|
317
317
|
try {
|
|
318
|
-
content = await readFile(schemaPath,
|
|
318
|
+
content = await readFile(schemaPath, 'utf-8');
|
|
319
319
|
}
|
|
320
320
|
catch (err) {
|
|
321
|
-
spinner.fail(
|
|
321
|
+
spinner.fail('Failed to read schema file.');
|
|
322
322
|
logger.error(err instanceof Error ? err.message : String(err));
|
|
323
323
|
process.exitCode = 1;
|
|
324
324
|
return;
|
|
325
325
|
}
|
|
326
326
|
if (content.includes(CMS_SCHEMA_MARKER)) {
|
|
327
327
|
if (!opts.force) {
|
|
328
|
-
spinner.info(
|
|
328
|
+
spinner.info('Actuate CMS models already present in schema. Use --force to overwrite.');
|
|
329
329
|
return;
|
|
330
330
|
}
|
|
331
|
-
spinner.text =
|
|
331
|
+
spinner.text = 'Removing existing CMS models...';
|
|
332
332
|
const markerIndex = content.indexOf(CMS_SCHEMA_MARKER);
|
|
333
|
-
content = content.substring(0, markerIndex).trimEnd() +
|
|
333
|
+
content = content.substring(0, markerIndex).trimEnd() + '\n';
|
|
334
334
|
}
|
|
335
|
-
spinner.text =
|
|
336
|
-
const updatedContent = content.trimEnd() +
|
|
335
|
+
spinner.text = 'Adding Actuate CMS models...';
|
|
336
|
+
const updatedContent = content.trimEnd() + '\n' + getCmsSchemaFragment();
|
|
337
337
|
try {
|
|
338
338
|
await writeFile(schemaPath, updatedContent);
|
|
339
|
-
spinner.succeed(
|
|
339
|
+
spinner.succeed('Actuate CMS models added to schema.');
|
|
340
340
|
}
|
|
341
341
|
catch (err) {
|
|
342
|
-
spinner.fail(
|
|
342
|
+
spinner.fail('Failed to write schema file.');
|
|
343
343
|
logger.error(err instanceof Error ? err.message : String(err));
|
|
344
344
|
process.exitCode = 1;
|
|
345
345
|
return;
|
|
346
346
|
}
|
|
347
|
-
const execOpts = { stdio:
|
|
348
|
-
const genSpinner = ora(
|
|
347
|
+
const execOpts = { stdio: 'inherit', cwd: process.cwd() };
|
|
348
|
+
const genSpinner = ora('Running prisma generate...').start();
|
|
349
349
|
try {
|
|
350
350
|
genSpinner.stop();
|
|
351
|
-
runDbInitCommand(
|
|
352
|
-
logger.success(
|
|
351
|
+
runDbInitCommand('npx prisma generate', execOpts);
|
|
352
|
+
logger.success('Prisma client generated.');
|
|
353
353
|
}
|
|
354
354
|
catch {
|
|
355
|
-
logger.warn(
|
|
355
|
+
logger.warn('prisma generate failed. You may need to set DATABASE_URL first.');
|
|
356
356
|
}
|
|
357
357
|
if (opts.migrate) {
|
|
358
|
-
const migSpinner = ora(
|
|
358
|
+
const migSpinner = ora('Running prisma migrate dev...').start();
|
|
359
359
|
try {
|
|
360
360
|
migSpinner.stop();
|
|
361
|
-
runDbInitCommand(
|
|
362
|
-
logger.success(
|
|
361
|
+
runDbInitCommand('npx prisma migrate dev --name actuate-cms-init', execOpts);
|
|
362
|
+
logger.success('Migration created and applied.');
|
|
363
363
|
}
|
|
364
364
|
catch {
|
|
365
|
-
logger.warn(
|
|
365
|
+
logger.warn('prisma migrate dev failed. Run it manually after setting DATABASE_URL.');
|
|
366
366
|
}
|
|
367
367
|
}
|
|
368
368
|
else {
|
|
369
|
-
logger.info(
|
|
369
|
+
logger.info('Run `npx prisma migrate dev --name actuate-cms` to create the migration.');
|
|
370
370
|
}
|
|
371
371
|
});
|
|
372
372
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-init.js","sourceRoot":"","sources":["../../src/commands/db-init.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"db-init.js","sourceRoot":"","sources":["../../src/commands/db-init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-status.d.ts","sourceRoot":"","sources":["../../src/commands/db-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"db-status.d.ts","sourceRoot":"","sources":["../../src/commands/db-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAoBnC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqG9D"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { execSync } from
|
|
2
|
-
import { readFile, access } from
|
|
3
|
-
import { resolve } from
|
|
4
|
-
import ora from
|
|
5
|
-
import chalk from
|
|
6
|
-
import { logger } from
|
|
7
|
-
import { REQUIRED_CMS_MODELS } from
|
|
8
|
-
const CMS_SCHEMA_MARKER =
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
import { readFile, access } from 'node:fs/promises';
|
|
3
|
+
import { resolve } from 'node:path';
|
|
4
|
+
import ora from 'ora';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import { logger } from '../utils/logger.js';
|
|
7
|
+
import { REQUIRED_CMS_MODELS } from '../deployment/diagnostics.js';
|
|
8
|
+
const CMS_SCHEMA_MARKER = '// ── Actuate CMS models';
|
|
9
9
|
async function fileExists(filePath) {
|
|
10
10
|
try {
|
|
11
11
|
await access(filePath);
|
|
@@ -17,24 +17,24 @@ async function fileExists(filePath) {
|
|
|
17
17
|
}
|
|
18
18
|
export function registerDbStatusCommand(program) {
|
|
19
19
|
program
|
|
20
|
-
.command(
|
|
21
|
-
.description(
|
|
22
|
-
.option(
|
|
20
|
+
.command('db:status')
|
|
21
|
+
.description('Check which Actuate CMS models are present in your Prisma schema')
|
|
22
|
+
.option('--schema <path>', 'Path to schema.prisma', 'prisma/schema.prisma')
|
|
23
23
|
.action(async (opts) => {
|
|
24
24
|
const schemaPath = resolve(process.cwd(), opts.schema);
|
|
25
25
|
if (!(await fileExists(schemaPath))) {
|
|
26
26
|
logger.error(`Schema file not found at ${schemaPath}`);
|
|
27
|
-
logger.info(
|
|
27
|
+
logger.info('Run `npx prisma init` first, or specify --schema <path>.');
|
|
28
28
|
process.exitCode = 1;
|
|
29
29
|
return;
|
|
30
30
|
}
|
|
31
|
-
const spinner = ora(
|
|
31
|
+
const spinner = ora('Checking schema...').start();
|
|
32
32
|
let content;
|
|
33
33
|
try {
|
|
34
|
-
content = await readFile(schemaPath,
|
|
34
|
+
content = await readFile(schemaPath, 'utf-8');
|
|
35
35
|
}
|
|
36
36
|
catch (err) {
|
|
37
|
-
spinner.fail(
|
|
37
|
+
spinner.fail('Failed to read schema file.');
|
|
38
38
|
logger.error(err instanceof Error ? err.message : String(err));
|
|
39
39
|
process.exitCode = 1;
|
|
40
40
|
return;
|
|
@@ -48,58 +48,58 @@ export function registerDbStatusCommand(program) {
|
|
|
48
48
|
schemaModels.add(match[1]);
|
|
49
49
|
}
|
|
50
50
|
console.log();
|
|
51
|
-
console.log(chalk.bold(
|
|
52
|
-
console.log(chalk.dim(
|
|
51
|
+
console.log(chalk.bold(' Actuate CMS Model Status'));
|
|
52
|
+
console.log(chalk.dim(' ─────────────────────────────────'));
|
|
53
53
|
console.log();
|
|
54
54
|
let present = 0;
|
|
55
55
|
let missing = 0;
|
|
56
56
|
for (const model of REQUIRED_CMS_MODELS) {
|
|
57
57
|
if (schemaModels.has(model)) {
|
|
58
|
-
console.log(` ${chalk.green(
|
|
58
|
+
console.log(` ${chalk.green('✓')} ${model}`);
|
|
59
59
|
present++;
|
|
60
60
|
}
|
|
61
61
|
else {
|
|
62
|
-
console.log(` ${chalk.red(
|
|
62
|
+
console.log(` ${chalk.red('✗')} ${model} ${chalk.dim('— missing')}`);
|
|
63
63
|
missing++;
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
console.log();
|
|
67
|
-
console.log(chalk.dim(
|
|
67
|
+
console.log(chalk.dim(' ─────────────────────────────────'));
|
|
68
68
|
console.log(` ${chalk.green(present)} present, ${missing > 0 ? chalk.red(missing) : chalk.green(missing)} missing`);
|
|
69
69
|
if (!hasMarker) {
|
|
70
70
|
console.log();
|
|
71
|
-
logger.warn(
|
|
72
|
-
logger.info(
|
|
71
|
+
logger.warn('CMS schema marker not found. Models may have been added manually.');
|
|
72
|
+
logger.info('Run `actuate db:init` to add CMS models with proper markers.');
|
|
73
73
|
}
|
|
74
74
|
if (missing > 0) {
|
|
75
75
|
console.log();
|
|
76
|
-
logger.info(
|
|
76
|
+
logger.info('Run `actuate db:init` to add missing models.');
|
|
77
77
|
}
|
|
78
78
|
let dbConnected = false;
|
|
79
79
|
try {
|
|
80
|
-
spinner.start(
|
|
81
|
-
execSync(
|
|
82
|
-
input:
|
|
83
|
-
stdio: [
|
|
80
|
+
spinner.start('Checking database connection...');
|
|
81
|
+
execSync('npx prisma db execute --stdin --schema ' + JSON.stringify(schemaPath), {
|
|
82
|
+
input: 'SELECT 1;',
|
|
83
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
84
84
|
cwd: process.cwd(),
|
|
85
85
|
});
|
|
86
|
-
spinner.succeed(
|
|
86
|
+
spinner.succeed('Database connection OK.');
|
|
87
87
|
dbConnected = true;
|
|
88
88
|
}
|
|
89
89
|
catch {
|
|
90
|
-
spinner.warn(
|
|
90
|
+
spinner.warn('Could not connect to database. Check DATABASE_URL.');
|
|
91
91
|
}
|
|
92
92
|
if (dbConnected && missing === 0) {
|
|
93
93
|
try {
|
|
94
|
-
spinner.start(
|
|
94
|
+
spinner.start('Checking migration status...');
|
|
95
95
|
spinner.stop();
|
|
96
|
-
execSync(
|
|
97
|
-
stdio:
|
|
96
|
+
execSync('npx prisma migrate status', {
|
|
97
|
+
stdio: 'inherit',
|
|
98
98
|
cwd: process.cwd(),
|
|
99
99
|
});
|
|
100
100
|
}
|
|
101
101
|
catch {
|
|
102
|
-
logger.warn(
|
|
102
|
+
logger.warn('Could not check migration status.');
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
105
|
console.log();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-status.js","sourceRoot":"","sources":["../../src/commands/db-status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"db-status.js","sourceRoot":"","sources":["../../src/commands/db-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Command } from
|
|
1
|
+
import { Command } from 'commander';
|
|
2
2
|
export declare function registerDoctorCommand(program: Command): void;
|
|
3
3
|
export declare function registerDeployCheckCommand(program: Command): void;
|
|
4
4
|
export declare function registerVerifyCommand(program: Command): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA4FnC,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,CAqD5D"}
|