@git.zone/cli 2.23.0 → 2.25.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/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/gitzone.cli.js +11 -2
- package/dist_ts/mod_services/classes.dockercontainer.d.ts +81 -0
- package/dist_ts/mod_services/classes.dockercontainer.js +205 -10
- package/dist_ts/mod_services/classes.globalregistry.d.ts +10 -0
- package/dist_ts/mod_services/classes.globalregistry.js +23 -1
- package/dist_ts/mod_services/classes.serviceconfiguration.d.ts +52 -1
- package/dist_ts/mod_services/classes.serviceconfiguration.js +116 -20
- package/dist_ts/mod_services/classes.servicedatamarker.d.ts +93 -0
- package/dist_ts/mod_services/classes.servicedatamarker.js +166 -0
- package/dist_ts/mod_services/classes.servicemanager.d.ts +91 -5
- package/dist_ts/mod_services/classes.servicemanager.js +274 -64
- package/dist_ts/mod_services/classes.serviceoptions.d.ts +58 -0
- package/dist_ts/mod_services/classes.serviceoptions.js +93 -0
- package/dist_ts/mod_services/classes.servicepruner.d.ts +102 -0
- package/dist_ts/mod_services/classes.servicepruner.js +410 -0
- package/dist_ts/mod_services/helpers.d.ts +15 -0
- package/dist_ts/mod_services/helpers.js +57 -1
- package/dist_ts/mod_services/index.js +307 -53
- package/dist_ts/mod_tools/classes.packagemanager.d.ts +13 -0
- package/dist_ts/mod_tools/classes.packagemanager.js +42 -1
- package/dist_ts/mod_tools/index.js +4 -1
- package/package.json +3 -2
- package/readme.hints.md +105 -0
- package/readme.md +123 -5
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/gitzone.cli.ts +10 -0
- package/ts/mod_services/classes.dockercontainer.ts +244 -13
- package/ts/mod_services/classes.globalregistry.ts +27 -0
- package/ts/mod_services/classes.serviceconfiguration.ts +148 -27
- package/ts/mod_services/classes.servicedatamarker.ts +228 -0
- package/ts/mod_services/classes.servicemanager.ts +394 -72
- package/ts/mod_services/classes.serviceoptions.ts +135 -0
- package/ts/mod_services/classes.servicepruner.ts +532 -0
- package/ts/mod_services/helpers.ts +60 -0
- package/ts/mod_services/index.ts +437 -58
- package/ts/mod_tools/classes.packagemanager.ts +54 -0
- package/ts/mod_tools/index.ts +5 -0
|
@@ -2,8 +2,10 @@ import * as plugins from "./mod.plugins.js";
|
|
|
2
2
|
import * as helpers from "./helpers.js";
|
|
3
3
|
import { ServiceManager } from "./classes.servicemanager.js";
|
|
4
4
|
import { GlobalRegistry } from "./classes.globalregistry.js";
|
|
5
|
+
import { getServiceDataDirectory } from "./classes.servicedatamarker.js";
|
|
6
|
+
import { ServicePruner, defaultStaleDays, } from "./classes.servicepruner.js";
|
|
5
7
|
import { logger } from "../gitzone.logging.js";
|
|
6
|
-
import { getCliMode, printJson } from "../helpers.climode.js";
|
|
8
|
+
import { getCliMode, printJson, runWithSuppressedOutput, } from "../helpers.climode.js";
|
|
7
9
|
import { getCliConfigValueFromData, readSmartconfigFile, setCliConfigValueInData, writeSmartconfigFile, } from "../helpers.smartconfig.js";
|
|
8
10
|
export const run = async (argvArg) => {
|
|
9
11
|
const mode = await getCliMode(argvArg);
|
|
@@ -15,7 +17,7 @@ export const run = async (argvArg) => {
|
|
|
15
17
|
}
|
|
16
18
|
// Handle global commands first
|
|
17
19
|
if (isGlobal) {
|
|
18
|
-
await handleGlobalCommand(command);
|
|
20
|
+
await handleGlobalCommand(command, argvArg, mode);
|
|
19
21
|
return;
|
|
20
22
|
}
|
|
21
23
|
const service = argvArg._[2] || "all";
|
|
@@ -39,6 +41,12 @@ export const run = async (argvArg) => {
|
|
|
39
41
|
case "disable":
|
|
40
42
|
await handleDisableServices(argvArg._.slice(2), mode);
|
|
41
43
|
break;
|
|
44
|
+
case "prune":
|
|
45
|
+
await handlePrune(argvArg, mode);
|
|
46
|
+
break;
|
|
47
|
+
case "auth":
|
|
48
|
+
await handleAuth(argvArg._[2], argvArg._[3], mode);
|
|
49
|
+
break;
|
|
42
50
|
case "start":
|
|
43
51
|
case "stop":
|
|
44
52
|
case "restart":
|
|
@@ -49,10 +57,12 @@ export const run = async (argvArg) => {
|
|
|
49
57
|
case "clean":
|
|
50
58
|
case "reconfigure": {
|
|
51
59
|
const serviceManager = new ServiceManager();
|
|
52
|
-
|
|
60
|
+
// Initialisation is chatty. In JSON mode that chatter would land on stdout
|
|
61
|
+
// ahead of the payload and make the output unparseable.
|
|
62
|
+
await withJsonSafeOutput(mode, () => serviceManager.init());
|
|
53
63
|
switch (command) {
|
|
54
64
|
case "start":
|
|
55
|
-
await handleStart(serviceManager, service);
|
|
65
|
+
await handleStart(serviceManager, service, mode);
|
|
56
66
|
break;
|
|
57
67
|
case "stop":
|
|
58
68
|
await handleStop(serviceManager, service);
|
|
@@ -61,7 +71,12 @@ export const run = async (argvArg) => {
|
|
|
61
71
|
await handleRestart(serviceManager, service);
|
|
62
72
|
break;
|
|
63
73
|
case "status":
|
|
74
|
+
if (mode.json) {
|
|
75
|
+
printJson(await serviceManager.collectStatus());
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
64
78
|
await serviceManager.showStatus();
|
|
79
|
+
await printStaleHint();
|
|
65
80
|
break;
|
|
66
81
|
case "compass":
|
|
67
82
|
await serviceManager.showCompassConnection();
|
|
@@ -72,10 +87,10 @@ export const run = async (argvArg) => {
|
|
|
72
87
|
break;
|
|
73
88
|
}
|
|
74
89
|
case "remove":
|
|
75
|
-
await handleRemove(serviceManager);
|
|
90
|
+
await handleRemove(serviceManager, mode);
|
|
76
91
|
break;
|
|
77
92
|
case "clean":
|
|
78
|
-
await handleClean(serviceManager);
|
|
93
|
+
await handleClean(serviceManager, mode);
|
|
79
94
|
break;
|
|
80
95
|
case "reconfigure":
|
|
81
96
|
await serviceManager.reconfigure();
|
|
@@ -88,6 +103,17 @@ export const run = async (argvArg) => {
|
|
|
88
103
|
break;
|
|
89
104
|
}
|
|
90
105
|
};
|
|
106
|
+
/**
|
|
107
|
+
* Run work that logs for humans, keeping stdout clean when the caller asked for
|
|
108
|
+
* JSON. Without this, `--json` output is preceded by log lines and cannot be
|
|
109
|
+
* parsed by a consumer such as a test suite.
|
|
110
|
+
*/
|
|
111
|
+
async function withJsonSafeOutput(mode, work) {
|
|
112
|
+
if (!mode.json) {
|
|
113
|
+
return work();
|
|
114
|
+
}
|
|
115
|
+
return runWithSuppressedOutput(work);
|
|
116
|
+
}
|
|
91
117
|
const allowedServices = ["mongodb", "minio", "elasticsearch"];
|
|
92
118
|
const normalizeServiceName = (service) => {
|
|
93
119
|
switch (service) {
|
|
@@ -146,7 +172,8 @@ async function handleShowConfig(mode) {
|
|
|
146
172
|
logger.log("info", ` Database: ${env.MONGODB_NAME}`);
|
|
147
173
|
logger.log("info", ` User: ${env.MONGODB_USER}`);
|
|
148
174
|
logger.log("info", ` Container: ${env.PROJECT_NAME}-mongodb`);
|
|
149
|
-
logger.log("info", `
|
|
175
|
+
logger.log("info", ` Auth: ${env.MONGODB_AUTH_ENABLED === false ? "DISABLED (loopback only)" : "enabled"}`);
|
|
176
|
+
logger.log("info", ` Data: ${getServiceDataDirectory(process.cwd(), "mongodb")}`);
|
|
150
177
|
logger.log("info", ` Connection: ${env.MONGODB_URL}`);
|
|
151
178
|
console.log();
|
|
152
179
|
logger.log("note", "S3/MinIO:");
|
|
@@ -155,14 +182,14 @@ async function handleShowConfig(mode) {
|
|
|
155
182
|
logger.log("info", ` Console Port: ${env.S3_CONSOLE_PORT}`);
|
|
156
183
|
logger.log("info", ` Bucket: ${env.S3_BUCKET}`);
|
|
157
184
|
logger.log("info", ` Container: ${env.PROJECT_NAME}-minio`);
|
|
158
|
-
logger.log("info", ` Data: ${
|
|
185
|
+
logger.log("info", ` Data: ${getServiceDataDirectory(process.cwd(), "minio")}`);
|
|
159
186
|
logger.log("info", ` Endpoint: ${env.S3_ENDPOINT}`);
|
|
160
187
|
console.log();
|
|
161
188
|
logger.log("note", "Elasticsearch:");
|
|
162
189
|
logger.log("info", ` Host: ${env.ELASTICSEARCH_HOST}:${env.ELASTICSEARCH_PORT}`);
|
|
163
190
|
logger.log("info", ` User: ${env.ELASTICSEARCH_USER}`);
|
|
164
191
|
logger.log("info", ` Container: ${env.PROJECT_NAME}-elasticsearch`);
|
|
165
|
-
logger.log("info", ` Data: ${
|
|
192
|
+
logger.log("info", ` Data: ${getServiceDataDirectory(process.cwd(), "elasticsearch")}`);
|
|
166
193
|
logger.log("info", ` Connection: ${env.ELASTICSEARCH_URL}`);
|
|
167
194
|
}
|
|
168
195
|
async function handleSetServices(rawValue, mode) {
|
|
@@ -214,29 +241,72 @@ function validateRequestedServices(services) {
|
|
|
214
241
|
throw new Error(`Unknown service(s): ${invalidServices.join(", ")}`);
|
|
215
242
|
}
|
|
216
243
|
}
|
|
217
|
-
async function handleStart(serviceManager, service) {
|
|
244
|
+
async function handleStart(serviceManager, service, mode) {
|
|
245
|
+
const startService = async () => {
|
|
246
|
+
switch (service) {
|
|
247
|
+
case "mongo":
|
|
248
|
+
case "mongodb":
|
|
249
|
+
await serviceManager.startMongoDB();
|
|
250
|
+
break;
|
|
251
|
+
case "minio":
|
|
252
|
+
case "s3":
|
|
253
|
+
await serviceManager.startMinIO();
|
|
254
|
+
break;
|
|
255
|
+
case "elasticsearch":
|
|
256
|
+
case "es":
|
|
257
|
+
await serviceManager.startElasticsearch();
|
|
258
|
+
break;
|
|
259
|
+
case "all":
|
|
260
|
+
case "":
|
|
261
|
+
await serviceManager.startAll();
|
|
262
|
+
break;
|
|
263
|
+
default:
|
|
264
|
+
return false;
|
|
265
|
+
}
|
|
266
|
+
// Register on every start path so the global registry never drifts from
|
|
267
|
+
// reality; prune relies on this claim to identify tool-owned containers.
|
|
268
|
+
await serviceManager.registerWithGlobalRegistry();
|
|
269
|
+
return true;
|
|
270
|
+
};
|
|
271
|
+
if (mode.json) {
|
|
272
|
+
const started = await runWithSuppressedOutput(startService);
|
|
273
|
+
if (!started) {
|
|
274
|
+
throw new Error(`Unknown service: ${service}. Use: mongo, s3, elasticsearch, or all`);
|
|
275
|
+
}
|
|
276
|
+
printJson(await serviceManager.collectStatus());
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
218
279
|
helpers.printHeader("Starting Services");
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
280
|
+
if (!(await startService())) {
|
|
281
|
+
logger.log("error", `Unknown service: ${service}`);
|
|
282
|
+
logger.log("note", "Use: mongo, s3, elasticsearch, or all");
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
await printStaleHint();
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Non-blocking hint that reclaimable service data exists elsewhere on the
|
|
289
|
+
* machine. Detection is automatic; deletion never is.
|
|
290
|
+
*/
|
|
291
|
+
async function printStaleHint() {
|
|
292
|
+
try {
|
|
293
|
+
const summary = await GlobalRegistry.getInstance().getStaleSummary(defaultStaleDays);
|
|
294
|
+
if (summary.orphaned === 0 && summary.stale === 0) {
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
const parts = [];
|
|
298
|
+
if (summary.stale > 0) {
|
|
299
|
+
parts.push(`${summary.stale} inactive`);
|
|
300
|
+
}
|
|
301
|
+
if (summary.orphaned > 0) {
|
|
302
|
+
parts.push(`${summary.orphaned} with a deleted directory`);
|
|
303
|
+
}
|
|
304
|
+
console.log();
|
|
305
|
+
logger.log("note", `💡 ${parts.join(", ")} gitzone services project(s) registered on this machine.`);
|
|
306
|
+
logger.log("note", " Review what can be reclaimed with `gitzone services prune` (read-only).");
|
|
307
|
+
}
|
|
308
|
+
catch {
|
|
309
|
+
// A hint must never break the command that produced it.
|
|
240
310
|
}
|
|
241
311
|
}
|
|
242
312
|
async function handleStop(serviceManager, service) {
|
|
@@ -296,36 +366,196 @@ async function handleRestart(serviceManager, service) {
|
|
|
296
366
|
break;
|
|
297
367
|
}
|
|
298
368
|
}
|
|
299
|
-
async function handleRemove(serviceManager) {
|
|
369
|
+
async function handleRemove(serviceManager, mode) {
|
|
300
370
|
helpers.printHeader("Removing Containers");
|
|
301
371
|
logger.log("note", "⚠️ This will remove containers but preserve data");
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
372
|
+
if (!mode.yes) {
|
|
373
|
+
if (!mode.interactive) {
|
|
374
|
+
throw new Error("`services remove` needs confirmation. Re-run with --yes to remove containers non-interactively.");
|
|
375
|
+
}
|
|
376
|
+
const shouldContinue = await plugins.smartinteract.SmartInteract.getCliConfirmation("Continue?", false);
|
|
377
|
+
if (!shouldContinue) {
|
|
378
|
+
logger.log("note", "Cancelled");
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
308
381
|
}
|
|
382
|
+
await serviceManager.removeContainers();
|
|
309
383
|
}
|
|
310
|
-
async function handleClean(serviceManager) {
|
|
384
|
+
async function handleClean(serviceManager, mode) {
|
|
311
385
|
helpers.printHeader("Clean All");
|
|
312
386
|
logger.log("error", "⚠️ WARNING: This will remove all containers and data!");
|
|
313
387
|
logger.log("error", "This action cannot be undone!");
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
388
|
+
await serviceManager.showDiskUsage();
|
|
389
|
+
console.log();
|
|
390
|
+
if (!mode.yes) {
|
|
391
|
+
if (!mode.interactive) {
|
|
392
|
+
throw new Error("`services clean` destroys data and needs explicit intent. Re-run with --yes to confirm non-interactively.");
|
|
393
|
+
}
|
|
394
|
+
const smartinteraction = new plugins.smartinteract.SmartInteract();
|
|
395
|
+
const confirmAnswer = await smartinteraction.askQuestion({
|
|
396
|
+
name: "confirm",
|
|
397
|
+
type: "input",
|
|
398
|
+
message: 'Type "yes" to confirm:',
|
|
399
|
+
default: "no",
|
|
400
|
+
});
|
|
401
|
+
if (confirmAnswer.value !== "yes") {
|
|
402
|
+
logger.log("note", "Cancelled");
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
await serviceManager.removeContainers();
|
|
407
|
+
console.log();
|
|
408
|
+
await serviceManager.cleanData();
|
|
409
|
+
logger.log("ok", "All cleaned ✓");
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Toggle MongoDB authentication for this project.
|
|
413
|
+
*
|
|
414
|
+
* Opt-in only, and never silent: disabling auth also restricts publishing to
|
|
415
|
+
* loopback and is refused outright for a non-local MONGODB_HOST.
|
|
416
|
+
*/
|
|
417
|
+
async function handleAuth(rawService, rawValue, mode) {
|
|
418
|
+
const service = normalizeServiceName((rawService || "").trim());
|
|
419
|
+
if (service !== "mongodb") {
|
|
420
|
+
throw new Error("Only `mongodb` supports an auth toggle. Usage: gitzone services auth mongodb <on|off>");
|
|
421
|
+
}
|
|
422
|
+
const value = (rawValue || "").trim().toLowerCase();
|
|
423
|
+
if (value !== "on" && value !== "off") {
|
|
424
|
+
throw new Error("Usage: gitzone services auth mongodb <on|off>");
|
|
425
|
+
}
|
|
426
|
+
const serviceManager = new ServiceManager();
|
|
427
|
+
const configuration = await withJsonSafeOutput(mode, async () => {
|
|
428
|
+
await serviceManager.init();
|
|
429
|
+
const resolvedConfiguration = serviceManager.getConfiguration();
|
|
430
|
+
await resolvedConfiguration.setMongoAuthEnabled(value === "on");
|
|
431
|
+
return resolvedConfiguration;
|
|
320
432
|
});
|
|
321
|
-
if (
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
433
|
+
if (mode.json) {
|
|
434
|
+
printJson({
|
|
435
|
+
ok: true,
|
|
436
|
+
action: "auth",
|
|
437
|
+
service: "mongodb",
|
|
438
|
+
authEnabled: value === "on",
|
|
439
|
+
connectionString: configuration.getMongoConnectionString(),
|
|
440
|
+
});
|
|
441
|
+
return;
|
|
442
|
+
}
|
|
443
|
+
if (value === "off") {
|
|
444
|
+
logger.log("error", "⚠️ MongoDB authentication is now DISABLED for this project.");
|
|
445
|
+
logger.log("note", " The database will be published on 127.0.0.1 only. Do not use this for anything but local development.");
|
|
326
446
|
}
|
|
327
447
|
else {
|
|
448
|
+
logger.log("ok", "MongoDB authentication is now enabled for this project.");
|
|
449
|
+
}
|
|
450
|
+
logger.log("info", `Connection: ${configuration.getMongoConnectionString()}`);
|
|
451
|
+
logger.log("note", "Run `gitzone services start mongo` to recreate the container in the new mode.");
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Report — and only with --apply, reclaim — resources left behind by
|
|
455
|
+
* `gitzone services` across every registered project on this machine.
|
|
456
|
+
*/
|
|
457
|
+
async function handlePrune(argvArg, mode) {
|
|
458
|
+
const staleDaysRaw = argvArg["stale-days"] ?? argvArg.staleDays;
|
|
459
|
+
const staleDays = staleDaysRaw === undefined ? defaultStaleDays : parseInt(String(staleDaysRaw));
|
|
460
|
+
if (!Number.isFinite(staleDays) || staleDays < 1) {
|
|
461
|
+
throw new Error("--stale-days must be a positive number of days");
|
|
462
|
+
}
|
|
463
|
+
const apply = Boolean(argvArg.apply);
|
|
464
|
+
const pruner = new ServicePruner({ staleDays });
|
|
465
|
+
const plan = await pruner.createPlan();
|
|
466
|
+
const nothingToDo = plan.containersToRemove.length === 0 &&
|
|
467
|
+
plan.dataDirsToRemove.length === 0 &&
|
|
468
|
+
plan.registryEntriesToRemove.length === 0;
|
|
469
|
+
// Deleting data always needs intent beyond --apply. Enforced before the
|
|
470
|
+
// output branches so JSON mode cannot bypass the gate the human path applies.
|
|
471
|
+
const confirmDataRemoval = async () => {
|
|
472
|
+
if (!apply || nothingToDo || plan.dataDirsToRemove.length === 0 || mode.yes) {
|
|
473
|
+
return true;
|
|
474
|
+
}
|
|
475
|
+
if (!mode.interactive) {
|
|
476
|
+
throw new Error("`services prune --apply` would delete data directories. Re-run with --yes to confirm non-interactively.");
|
|
477
|
+
}
|
|
478
|
+
const smartinteraction = new plugins.smartinteract.SmartInteract();
|
|
479
|
+
const confirmAnswer = await smartinteraction.askQuestion({
|
|
480
|
+
name: "confirm",
|
|
481
|
+
type: "input",
|
|
482
|
+
message: `Type "yes" to permanently delete ${plan.dataDirsToRemove.length} data directory/ies:`,
|
|
483
|
+
default: "no",
|
|
484
|
+
});
|
|
485
|
+
return confirmAnswer.value === "yes";
|
|
486
|
+
};
|
|
487
|
+
if (mode.json) {
|
|
488
|
+
let applied = false;
|
|
489
|
+
if (apply && !nothingToDo) {
|
|
490
|
+
// Non-interactive by definition, so this throws unless --yes was passed.
|
|
491
|
+
await confirmDataRemoval();
|
|
492
|
+
await runWithSuppressedOutput(() => pruner.applyPlan(plan));
|
|
493
|
+
applied = true;
|
|
494
|
+
}
|
|
495
|
+
printJson({ applied, ...plan });
|
|
496
|
+
return;
|
|
497
|
+
}
|
|
498
|
+
printPrunePlan(plan, apply);
|
|
499
|
+
if (!apply || nothingToDo) {
|
|
500
|
+
return;
|
|
501
|
+
}
|
|
502
|
+
if (!(await confirmDataRemoval())) {
|
|
328
503
|
logger.log("note", "Cancelled");
|
|
504
|
+
return;
|
|
505
|
+
}
|
|
506
|
+
await pruner.applyPlan(plan);
|
|
507
|
+
logger.log("ok", "Prune applied ✓");
|
|
508
|
+
}
|
|
509
|
+
function printPrunePlan(plan, applyArg) {
|
|
510
|
+
helpers.printHeader(applyArg ? "Prune Services (apply)" : "Prune Services (dry run)");
|
|
511
|
+
logger.log("info", `Inactivity threshold: ${plan.staleDays} days`);
|
|
512
|
+
if (!plan.dockerAvailable) {
|
|
513
|
+
logger.log("error", "Docker is not reachable — container and data reclamation is disabled.");
|
|
514
|
+
}
|
|
515
|
+
console.log();
|
|
516
|
+
if (plan.projects.length === 0) {
|
|
517
|
+
logger.log("note", "No gitzone services projects known on this machine");
|
|
518
|
+
return;
|
|
519
|
+
}
|
|
520
|
+
for (const project of plan.projects) {
|
|
521
|
+
const stateIcon = project.state === "live"
|
|
522
|
+
? "🟢"
|
|
523
|
+
: project.state === "stale"
|
|
524
|
+
? "🟡"
|
|
525
|
+
: project.state === "orphaned"
|
|
526
|
+
? "⚫"
|
|
527
|
+
: "❓";
|
|
528
|
+
logger.log("ok", `${stateIcon} ${project.projectName} [${project.state}]`);
|
|
529
|
+
logger.log("info", ` Path: ${project.projectPath}`);
|
|
530
|
+
logger.log("info", ` ${project.stateReason}`);
|
|
531
|
+
for (const container of project.containers) {
|
|
532
|
+
const marker = container.reclaimable ? "REMOVE" : "keep";
|
|
533
|
+
logger.log("info", ` ${marker === "REMOVE" ? "🗑 " : " "}container ${container.name} (${container.state}) — ${marker}: ${container.reason}`);
|
|
534
|
+
}
|
|
535
|
+
for (const dataDir of project.dataDirectories) {
|
|
536
|
+
if (!dataDir.exists) {
|
|
537
|
+
continue;
|
|
538
|
+
}
|
|
539
|
+
const marker = dataDir.reclaimable ? "REMOVE" : "keep";
|
|
540
|
+
logger.log("info", ` ${marker === "REMOVE" ? "🗑 " : " "}${dataDir.service} data ${helpers.formatBytes(dataDir.sizeBytes)} — ${marker}: ${dataDir.reason}`);
|
|
541
|
+
}
|
|
542
|
+
console.log();
|
|
543
|
+
}
|
|
544
|
+
for (const skipped of plan.skipped) {
|
|
545
|
+
logger.log("note", `skipped ${skipped.target}: ${skipped.reason}`);
|
|
546
|
+
}
|
|
547
|
+
logger.log("note", "Summary:");
|
|
548
|
+
logger.log("info", ` Projects known: ${plan.totals.projects}`);
|
|
549
|
+
logger.log("info", ` Service data on disk: ${helpers.formatBytes(plan.totals.totalDataBytes)}`);
|
|
550
|
+
logger.log("info", ` Reclaimable now: ${helpers.formatBytes(plan.totals.reclaimableDataBytes)} across ${plan.dataDirsToRemove.length} directory/ies`);
|
|
551
|
+
if (plan.totals.blockedByRunningBytes > 0) {
|
|
552
|
+
logger.log("info", ` Held by running containers: ${helpers.formatBytes(plan.totals.blockedByRunningBytes)} — stop them first (\`gitzone services stop\` in the project, or \`gitzone services stop -g\`)`);
|
|
553
|
+
}
|
|
554
|
+
logger.log("info", ` Containers to remove: ${plan.containersToRemove.length}`);
|
|
555
|
+
logger.log("info", ` Stale registry entries to remove: ${plan.registryEntriesToRemove.length}`);
|
|
556
|
+
if (!applyArg) {
|
|
557
|
+
console.log();
|
|
558
|
+
logger.log("note", "Dry run only. Re-run with --apply to reclaim the items marked REMOVE.");
|
|
329
559
|
}
|
|
330
560
|
}
|
|
331
561
|
async function handleConfigureServices(serviceManager) {
|
|
@@ -357,11 +587,23 @@ export function showHelp(mode) {
|
|
|
357
587
|
{ name: "start [service]", description: "Start services" },
|
|
358
588
|
{ name: "stop [service]", description: "Stop services" },
|
|
359
589
|
{ name: "status", description: "Show service status" },
|
|
590
|
+
{
|
|
591
|
+
name: "auth mongodb <on|off>",
|
|
592
|
+
description: "Toggle MongoDB authentication; off publishes on loopback only",
|
|
593
|
+
},
|
|
594
|
+
{
|
|
595
|
+
name: "prune",
|
|
596
|
+
description: "Report reclaimable containers, data and registry entries (dry run; --apply to reclaim)",
|
|
597
|
+
},
|
|
360
598
|
],
|
|
361
599
|
examples: [
|
|
362
600
|
"gitzone services config --json",
|
|
601
|
+
"gitzone services status --json",
|
|
363
602
|
"gitzone services set mongodb,minio",
|
|
364
603
|
"gitzone services enable elasticsearch",
|
|
604
|
+
"gitzone services auth mongodb off",
|
|
605
|
+
"gitzone services prune",
|
|
606
|
+
"gitzone services prune --apply --yes",
|
|
365
607
|
],
|
|
366
608
|
});
|
|
367
609
|
return;
|
|
@@ -382,10 +624,18 @@ export function showHelp(mode) {
|
|
|
382
624
|
logger.log("info", " compass Show MongoDB Compass connection string");
|
|
383
625
|
logger.log("info", " logs [service] Show logs (mongo|s3|elasticsearch|all) [lines]");
|
|
384
626
|
logger.log("info", " reconfigure Reassign ports and restart services");
|
|
385
|
-
logger.log("info", "
|
|
627
|
+
logger.log("info", " auth mongodb <on|off> Toggle MongoDB auth (off = loopback only) ⚠️");
|
|
628
|
+
logger.log("info", " prune Report reclaimable data/containers machine-wide");
|
|
629
|
+
logger.log("info", " remove Remove all containers (keeps data)");
|
|
386
630
|
logger.log("info", " clean Remove all containers and data ⚠️");
|
|
387
631
|
logger.log("info", " help Show this help message");
|
|
388
632
|
console.log();
|
|
633
|
+
logger.log("note", "Cleanup levels (least to most destructive):");
|
|
634
|
+
logger.log("info", " stop Containers stay, data stays — fully resumable");
|
|
635
|
+
logger.log("info", " remove Containers removed, data kept — resumable");
|
|
636
|
+
logger.log("info", " clean Containers and this project's data removed — irreversible, needs typed confirmation or --yes");
|
|
637
|
+
logger.log("info", " prune Machine-wide reclamation of inactive/orphaned projects — dry run unless --apply");
|
|
638
|
+
console.log();
|
|
389
639
|
logger.log("note", "Available Services:");
|
|
390
640
|
logger.log("info", " • MongoDB (mongo) - Document database");
|
|
391
641
|
logger.log("info", " • MinIO (s3) - S3-compatible object storage");
|
|
@@ -416,6 +666,7 @@ export function showHelp(mode) {
|
|
|
416
666
|
logger.log("info", " status -g Show status across all projects");
|
|
417
667
|
logger.log("info", " stop -g Stop all containers across all projects");
|
|
418
668
|
logger.log("info", " cleanup -g Remove stale registry entries");
|
|
669
|
+
logger.log("info", " prune Report/reclaim inactive project data (--stale-days N, --apply)");
|
|
419
670
|
console.log();
|
|
420
671
|
logger.log("note", "Global Examples:");
|
|
421
672
|
logger.log("info", " gitzone services list -g # List all registered projects");
|
|
@@ -423,7 +674,7 @@ export function showHelp(mode) {
|
|
|
423
674
|
logger.log("info", " gitzone services stop -g # Stop all (prompts for confirmation)");
|
|
424
675
|
}
|
|
425
676
|
// ==================== Global Command Handlers ====================
|
|
426
|
-
async function handleGlobalCommand(command) {
|
|
677
|
+
async function handleGlobalCommand(command, argvArg, mode) {
|
|
427
678
|
const globalRegistry = GlobalRegistry.getInstance();
|
|
428
679
|
switch (command) {
|
|
429
680
|
case "list":
|
|
@@ -435,6 +686,9 @@ async function handleGlobalCommand(command) {
|
|
|
435
686
|
case "stop":
|
|
436
687
|
await handleGlobalStop(globalRegistry);
|
|
437
688
|
break;
|
|
689
|
+
case "prune":
|
|
690
|
+
await handlePrune(argvArg, mode);
|
|
691
|
+
break;
|
|
438
692
|
case "cleanup":
|
|
439
693
|
await handleGlobalCleanup(globalRegistry);
|
|
440
694
|
break;
|
|
@@ -549,4 +803,4 @@ async function handleGlobalCleanup(globalRegistry) {
|
|
|
549
803
|
logger.log("info", ` • ${path}`);
|
|
550
804
|
}
|
|
551
805
|
}
|
|
552
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2Rfc2VydmljZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsbUJBQW1CLEVBQ25CLHVCQUF1QixFQUN2QixvQkFBb0IsR0FDckIsTUFBTSwyQkFBMkIsQ0FBQztBQUVuQyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLE9BQVksRUFBRSxFQUFFO0lBQ3hDLE1BQU0sSUFBSSxHQUFHLE1BQU0sVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUM3QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQztJQUV2QyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ3BDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNmLE9BQU87SUFDVCxDQUFDO0lBRUQsK0JBQStCO0lBQy9CLElBQUksUUFBUSxFQUFFLENBQUM7UUFDYixNQUFNLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFB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
|
|
806
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2Rfc2VydmljZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsZ0JBQWdCLEdBRWpCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRS9DLE9BQU8sRUFDTCxVQUFVLEVBQ1YsU0FBUyxFQUNULHVCQUF1QixHQUN4QixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsbUJBQW1CLEVBQ25CLHVCQUF1QixFQUN2QixvQkFBb0IsR0FDckIsTUFBTSwyQkFBMkIsQ0FBQztBQUVuQyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLE9BQVksRUFBRSxFQUFFO0lBQ3hDLE1BQU0sSUFBSSxHQUFHLE1BQU0sVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUM3QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQztJQUV2QyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ3BDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNmLE9BQU87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
|