directus-deploy-cli 0.18.0 → 0.20.0
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/README.md +31 -1
- package/dist/cli.js +69 -1
- package/dist/cli.js.map +1 -1
- package/dist/extensions.js +96 -19
- package/dist/extensions.js.map +1 -1
- package/dist/gcloud.js +91 -0
- package/dist/gcloud.js.map +1 -0
- package/dist/mcp-server.js +182 -1
- package/dist/mcp-server.js.map +1 -1
- package/dist/overview.js +525 -0
- package/dist/overview.js.map +1 -0
- package/dist/targets.js +10 -0
- package/dist/targets.js.map +1 -0
- package/dist/vm.js +109 -0
- package/dist/vm.js.map +1 -0
- package/package.json +1 -1
package/dist/gcloud.js
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { createSign } from "node:crypto";
|
|
2
|
+
const TOKEN_ENDPOINT = "https://oauth2.googleapis.com/token";
|
|
3
|
+
function b64url(data) {
|
|
4
|
+
return Buffer.from(data).toString("base64url");
|
|
5
|
+
}
|
|
6
|
+
function signAssertion(key, claims) {
|
|
7
|
+
const header = b64url(JSON.stringify({ alg: "RS256", typ: "JWT" }));
|
|
8
|
+
const payload = b64url(JSON.stringify(claims));
|
|
9
|
+
const unsigned = `${header}.${payload}`;
|
|
10
|
+
const signature = createSign("RSA-SHA256").update(unsigned).sign(key.private_key);
|
|
11
|
+
return `${unsigned}.${b64url(signature)}`;
|
|
12
|
+
}
|
|
13
|
+
// Pure builders — exported for tests.
|
|
14
|
+
export function buildIdTokenAssertion(key, audience, nowSeconds) {
|
|
15
|
+
return signAssertion(key, {
|
|
16
|
+
iss: key.client_email,
|
|
17
|
+
sub: key.client_email,
|
|
18
|
+
aud: TOKEN_ENDPOINT,
|
|
19
|
+
target_audience: audience,
|
|
20
|
+
iat: nowSeconds,
|
|
21
|
+
exp: nowSeconds + 3600,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
export function buildAccessTokenAssertion(key, scope, nowSeconds) {
|
|
25
|
+
return signAssertion(key, {
|
|
26
|
+
iss: key.client_email,
|
|
27
|
+
aud: TOKEN_ENDPOINT,
|
|
28
|
+
scope,
|
|
29
|
+
iat: nowSeconds,
|
|
30
|
+
exp: nowSeconds + 3600,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
async function exchange(assertion, want, who) {
|
|
34
|
+
const r = await fetch(TOKEN_ENDPOINT, {
|
|
35
|
+
method: "POST",
|
|
36
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
37
|
+
body: new URLSearchParams({
|
|
38
|
+
grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer",
|
|
39
|
+
assertion,
|
|
40
|
+
}),
|
|
41
|
+
});
|
|
42
|
+
const body = (await r.json().catch(() => ({})));
|
|
43
|
+
const token = body[want];
|
|
44
|
+
if (!r.ok || !token) {
|
|
45
|
+
throw new Error(`could not mint ${want} for ${who}: ${body.error_description ?? `HTTP ${r.status}`}`);
|
|
46
|
+
}
|
|
47
|
+
return token;
|
|
48
|
+
}
|
|
49
|
+
export async function mintIdToken(key, audience) {
|
|
50
|
+
return exchange(buildIdTokenAssertion(key, audience, Math.floor(Date.now() / 1000)), "id_token", key.client_email);
|
|
51
|
+
}
|
|
52
|
+
const GCS_SCOPE = "https://www.googleapis.com/auth/devstorage.read_write";
|
|
53
|
+
export async function mintGcsToken(key) {
|
|
54
|
+
return exchange(buildAccessTokenAssertion(key, GCS_SCOPE, Math.floor(Date.now() / 1000)), "access_token", key.client_email);
|
|
55
|
+
}
|
|
56
|
+
// -------------------- GCS REST --------------------
|
|
57
|
+
// gs://bucket/some/prefix → { bucket, prefix } (prefix without trailing slash)
|
|
58
|
+
export function parseGsUri(uri) {
|
|
59
|
+
const m = uri.match(/^gs:\/\/([^/]+)\/?(.*?)\/?$/);
|
|
60
|
+
if (!m)
|
|
61
|
+
throw new Error(`not a gs:// URI: ${uri}`);
|
|
62
|
+
return { bucket: m[1], prefix: m[2] ?? "" };
|
|
63
|
+
}
|
|
64
|
+
export async function gcsObjectExists(bucket, object, token) {
|
|
65
|
+
const r = await fetch(`https://storage.googleapis.com/storage/v1/b/${encodeURIComponent(bucket)}/o/${encodeURIComponent(object)}`, { headers: { Authorization: `Bearer ${token}` } });
|
|
66
|
+
if (r.status === 404)
|
|
67
|
+
return false;
|
|
68
|
+
if (!r.ok)
|
|
69
|
+
throw new Error(`GCS stat ${bucket}/${object} failed: HTTP ${r.status}`);
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
export async function gcsDownload(bucket, object, token) {
|
|
73
|
+
const r = await fetch(`https://storage.googleapis.com/storage/v1/b/${encodeURIComponent(bucket)}/o/${encodeURIComponent(object)}?alt=media`, { headers: { Authorization: `Bearer ${token}` } });
|
|
74
|
+
if (r.status === 404)
|
|
75
|
+
return null;
|
|
76
|
+
if (!r.ok)
|
|
77
|
+
throw new Error(`GCS download ${bucket}/${object} failed: HTTP ${r.status}`);
|
|
78
|
+
return Buffer.from(await r.arrayBuffer());
|
|
79
|
+
}
|
|
80
|
+
export async function gcsUpload(bucket, object, data, token, contentType = "application/octet-stream") {
|
|
81
|
+
const r = await fetch(`https://storage.googleapis.com/upload/storage/v1/b/${encodeURIComponent(bucket)}/o?uploadType=media&name=${encodeURIComponent(object)}`, {
|
|
82
|
+
method: "POST",
|
|
83
|
+
headers: { Authorization: `Bearer ${token}`, "Content-Type": contentType },
|
|
84
|
+
body: new Uint8Array(data),
|
|
85
|
+
});
|
|
86
|
+
if (!r.ok) {
|
|
87
|
+
const body = await r.text().catch(() => "");
|
|
88
|
+
throw new Error(`GCS upload ${bucket}/${object} failed: HTTP ${r.status} ${body.slice(0, 200)}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=gcloud.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gcloud.js","sourceRoot":"","sources":["../src/gcloud.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp-server.js
CHANGED
|
@@ -21,7 +21,20 @@
|
|
|
21
21
|
// - directus_apply(...same shape...) — reconcile.
|
|
22
22
|
// - directus_verify(...same shape...) — drift check; error result when drift found.
|
|
23
23
|
//
|
|
24
|
-
//
|
|
24
|
+
// Read-only inspection tools (never write to any target):
|
|
25
|
+
// - directus_overview(repo_root?, targets_file?, targets?, from?, to?) — the full
|
|
26
|
+
// deployment matrix: every target vs its git ref + the promotion queue.
|
|
27
|
+
// - directus_migrations_status(target | url+token, ...) — applied vs pending SQL.
|
|
28
|
+
// - directus_extensions_status(target, ...) — deployed sourceCommit per extension.
|
|
29
|
+
// - directus_extensions_diff(reference?, targets?, ...) — deployed source tree vs ref.
|
|
30
|
+
//
|
|
31
|
+
// The targets-file tools resolve admin tokens by convention
|
|
32
|
+
// (DIRECTUS_<TARGET>_TOKEN, or the target's token_env) — pass those through the
|
|
33
|
+
// MCP server's env block. Each tool returns its JSON report.
|
|
34
|
+
// Auto-load .env from cwd (same convenience as the CLI): MCP clients often
|
|
35
|
+
// launch the server with a minimal env block, and the backend repo's .env
|
|
36
|
+
// already holds the DIRECTUS_<TARGET>_TOKEN vars. Never overrides real env.
|
|
37
|
+
import "dotenv/config";
|
|
25
38
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
26
39
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
27
40
|
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
@@ -135,6 +148,101 @@ async function handleVerify(args) {
|
|
|
135
148
|
const drift = report.counts.created + report.counts.updated;
|
|
136
149
|
return { report, drift };
|
|
137
150
|
}
|
|
151
|
+
// -------------------- read-only inspection tools --------------------
|
|
152
|
+
const DEFAULT_TARGETS_FILE = "./directus-deploy.targets.json";
|
|
153
|
+
function repoRoot(args) {
|
|
154
|
+
return args.repo_root ?? process.cwd();
|
|
155
|
+
}
|
|
156
|
+
function targetsFile(args) {
|
|
157
|
+
if (args.targets_file)
|
|
158
|
+
return args.targets_file;
|
|
159
|
+
if (args.repo_root)
|
|
160
|
+
return toDefaultDir(args.repo_root, "directus-deploy.targets.json");
|
|
161
|
+
return DEFAULT_TARGETS_FILE;
|
|
162
|
+
}
|
|
163
|
+
// Resolve {url, token} for a named target from the targets file, using the
|
|
164
|
+
// same convention as the CLI: token_env field, else DIRECTUS_<UPPER>_TOKEN.
|
|
165
|
+
async function resolveTargetConnection(name, file) {
|
|
166
|
+
const { loadTargets } = await import("./extensions.js");
|
|
167
|
+
const cfg = await loadTargets(file);
|
|
168
|
+
const t = cfg.targets[name];
|
|
169
|
+
if (!t) {
|
|
170
|
+
throw new Error(`unknown target '${name}' — known: ${Object.keys(cfg.targets).join(", ") || "(none)"}`);
|
|
171
|
+
}
|
|
172
|
+
const tokenEnv = t.token_env ?? `DIRECTUS_${name.toUpperCase()}_TOKEN`;
|
|
173
|
+
const token = process.env[tokenEnv];
|
|
174
|
+
if (!token)
|
|
175
|
+
throw new Error(`target '${name}': $${tokenEnv} is not set in the MCP server env`);
|
|
176
|
+
return { url: t.base_url, token };
|
|
177
|
+
}
|
|
178
|
+
async function handleOverview(args) {
|
|
179
|
+
const { runOverview } = await import("./overview.js");
|
|
180
|
+
return runOverview({
|
|
181
|
+
targetsFile: targetsFile(args),
|
|
182
|
+
repoRoot: repoRoot(args),
|
|
183
|
+
targets: args.targets,
|
|
184
|
+
from: args.from,
|
|
185
|
+
to: args.to,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
async function handleMigrationsStatus(args) {
|
|
189
|
+
let url;
|
|
190
|
+
let token;
|
|
191
|
+
if (args.target) {
|
|
192
|
+
({ url, token } = await resolveTargetConnection(args.target, targetsFile(args)));
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
url = requireEnv(args.url, "DIRECTUS_URL", "url");
|
|
196
|
+
token = requireEnv(args.token, "DIRECTUS_TOKEN", "token");
|
|
197
|
+
}
|
|
198
|
+
const root = repoRoot(args);
|
|
199
|
+
const client = createDirectusClient({ baseUrl: url, token });
|
|
200
|
+
const { reconcileMigrations } = await import("./reconcilers/migrations.js");
|
|
201
|
+
const results = await reconcileMigrations({
|
|
202
|
+
migrationsDir: args.migrations_dir ?? toDefaultDir(root, "migrations"),
|
|
203
|
+
extensionsDir: args.extensions_dir ?? toDefaultDir(root, "extensions"),
|
|
204
|
+
includeExtensions: true,
|
|
205
|
+
client,
|
|
206
|
+
opts: { dryRun: true },
|
|
207
|
+
});
|
|
208
|
+
if (results.length === 1 && results[0]?.label === "migrations") {
|
|
209
|
+
return { target: args.target ?? url, unreachable: true, reason: results[0].reason ?? "target unreachable" };
|
|
210
|
+
}
|
|
211
|
+
const applied = [];
|
|
212
|
+
const pending = [];
|
|
213
|
+
const mutated = [];
|
|
214
|
+
for (const r of results) {
|
|
215
|
+
const file = r.label.replace(/^migrations\//, "");
|
|
216
|
+
if (r.action === "unchanged")
|
|
217
|
+
applied.push(file);
|
|
218
|
+
else if (r.action === "created")
|
|
219
|
+
pending.push(file);
|
|
220
|
+
else if (r.action === "failed")
|
|
221
|
+
mutated.push({ file, reason: r.reason ?? "unknown" });
|
|
222
|
+
}
|
|
223
|
+
return { target: args.target ?? url, applied, pending, mutated };
|
|
224
|
+
}
|
|
225
|
+
async function handleExtensionsStatus(args) {
|
|
226
|
+
if (!args.target)
|
|
227
|
+
throw new Error("missing required argument: target");
|
|
228
|
+
const { statusExtensions } = await import("./extensions.js");
|
|
229
|
+
return statusExtensions({
|
|
230
|
+
target: args.target,
|
|
231
|
+
targetsFile: targetsFile(args),
|
|
232
|
+
extensions: args.extensions?.length ? args.extensions : undefined,
|
|
233
|
+
repoRoot: repoRoot(args),
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
async function handleExtensionsDiff(args) {
|
|
237
|
+
const { diffExtensions } = await import("./extensions.js");
|
|
238
|
+
return diffExtensions({
|
|
239
|
+
targetsFile: targetsFile(args),
|
|
240
|
+
reference: args.reference ?? "origin/develop",
|
|
241
|
+
repoRoot: repoRoot(args),
|
|
242
|
+
extensions: args.extensions?.length ? args.extensions : undefined,
|
|
243
|
+
targets: args.targets?.length ? args.targets : undefined,
|
|
244
|
+
});
|
|
245
|
+
}
|
|
138
246
|
async function main() {
|
|
139
247
|
const server = new Server({ name: "directus-deploy", version: "0.1.0" }, { capabilities: { tools: {} } });
|
|
140
248
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
@@ -154,6 +262,67 @@ async function main() {
|
|
|
154
262
|
description: "Post-apply drift check: dry-run then fail if any entity would be created or updated. Returns { report, drift } — drift > 0 means the target has diverged from git.",
|
|
155
263
|
inputSchema: COMMON_INPUT_SCHEMA,
|
|
156
264
|
},
|
|
265
|
+
{
|
|
266
|
+
name: "directus_overview",
|
|
267
|
+
description: "READ-ONLY deployment matrix: every target compared against the git ref it deploys from (targets file `ref` field) across migrations/extensions/config/seeds, plus the promotion queue between refs (what's on develop but not master). The single best first call to understand deployment state. Requires DIRECTUS_<TARGET>_TOKEN env vars for the config/seed checks.",
|
|
268
|
+
inputSchema: {
|
|
269
|
+
type: "object",
|
|
270
|
+
properties: {
|
|
271
|
+
repo_root: { type: "string", description: "Backend repo root (default: cwd). Must be a git checkout with the canonical layout." },
|
|
272
|
+
targets_file: { type: "string", description: "Path to targets JSON (default: <repo_root>/directus-deploy.targets.json)." },
|
|
273
|
+
targets: { type: "array", items: { type: "string" }, description: "Restrict to these targets (default: all in the file)." },
|
|
274
|
+
from: { type: "string", description: "Promotion queue source ref (default: inferred from target refs)." },
|
|
275
|
+
to: { type: "string", description: "Promotion queue destination ref (default: inferred)." },
|
|
276
|
+
},
|
|
277
|
+
required: [],
|
|
278
|
+
},
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
name: "directus_migrations_status",
|
|
282
|
+
description: "READ-ONLY: which migrations/*.sql are applied on the target vs pending vs mutated. Pass `target` (targets-file name, token from $DIRECTUS_<TARGET>_TOKEN) or url+token.",
|
|
283
|
+
inputSchema: {
|
|
284
|
+
type: "object",
|
|
285
|
+
properties: {
|
|
286
|
+
target: { type: "string", description: "Target name from the targets file (e.g. 'test', 'prod')." },
|
|
287
|
+
url: { type: "string", description: "Directus base URL (alternative to target)." },
|
|
288
|
+
token: { type: "string", description: "Admin token (alternative to target)." },
|
|
289
|
+
repo_root: { type: "string", description: "Backend repo root (default: cwd)." },
|
|
290
|
+
targets_file: { type: "string", description: "Path to targets JSON." },
|
|
291
|
+
migrations_dir: { type: "string", description: "Path to migrations/ (default: <repo_root>/migrations)." },
|
|
292
|
+
extensions_dir: { type: "string", description: "Root scanned for <name>/migrations/*.sql (default: <repo_root>/extensions)." },
|
|
293
|
+
},
|
|
294
|
+
required: [],
|
|
295
|
+
},
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
name: "directus_extensions_status",
|
|
299
|
+
description: "READ-ONLY: the deployed sourceCommit + buildTime per extension on a target (from each extension's /_meta endpoint). No token needed.",
|
|
300
|
+
inputSchema: {
|
|
301
|
+
type: "object",
|
|
302
|
+
properties: {
|
|
303
|
+
target: { type: "string", description: "Target name from the targets file." },
|
|
304
|
+
extensions: { type: "array", items: { type: "string" }, description: "Restrict to these extensions (default: all under <repo_root>/extensions)." },
|
|
305
|
+
repo_root: { type: "string", description: "Backend repo root (default: cwd)." },
|
|
306
|
+
targets_file: { type: "string", description: "Path to targets JSON." },
|
|
307
|
+
},
|
|
308
|
+
required: ["target"],
|
|
309
|
+
},
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
name: "directus_extensions_diff",
|
|
313
|
+
description: "READ-ONLY cross-env matrix: compares each extension's deployed source tree hash against a git ref (default origin/develop). Immune to squash-merge SHA orphaning. No token needed.",
|
|
314
|
+
inputSchema: {
|
|
315
|
+
type: "object",
|
|
316
|
+
properties: {
|
|
317
|
+
reference: { type: "string", description: "Git ref to compare against (default: origin/develop)." },
|
|
318
|
+
targets: { type: "array", items: { type: "string" }, description: "Restrict to these targets (default: all)." },
|
|
319
|
+
extensions: { type: "array", items: { type: "string" }, description: "Restrict to these extensions (default: all)." },
|
|
320
|
+
repo_root: { type: "string", description: "Backend repo root (default: cwd)." },
|
|
321
|
+
targets_file: { type: "string", description: "Path to targets JSON." },
|
|
322
|
+
},
|
|
323
|
+
required: [],
|
|
324
|
+
},
|
|
325
|
+
},
|
|
157
326
|
],
|
|
158
327
|
}));
|
|
159
328
|
server.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
@@ -170,6 +339,18 @@ async function main() {
|
|
|
170
339
|
case "directus_verify":
|
|
171
340
|
payload = await handleVerify(args);
|
|
172
341
|
break;
|
|
342
|
+
case "directus_overview":
|
|
343
|
+
payload = await handleOverview(req.params.arguments ?? {});
|
|
344
|
+
break;
|
|
345
|
+
case "directus_migrations_status":
|
|
346
|
+
payload = await handleMigrationsStatus(req.params.arguments ?? {});
|
|
347
|
+
break;
|
|
348
|
+
case "directus_extensions_status":
|
|
349
|
+
payload = await handleExtensionsStatus(req.params.arguments);
|
|
350
|
+
break;
|
|
351
|
+
case "directus_extensions_diff":
|
|
352
|
+
payload = await handleExtensionsDiff(req.params.arguments ?? {});
|
|
353
|
+
break;
|
|
173
354
|
default:
|
|
174
355
|
throw new Error(`unknown tool: ${req.params.name}`);
|
|
175
356
|
}
|
package/dist/mcp-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|