@git.zone/cli 2.16.1 → 2.18.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/mod_config/index.js +978 -26
- package/package.json +1 -1
- package/readme.md +12 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/mod_config/index.ts +1109 -26
|
@@ -4,7 +4,7 @@ import { ReleaseConfig } from "./classes.releaseconfig.js";
|
|
|
4
4
|
import { CommitConfig } from "./classes.commitconfig.js";
|
|
5
5
|
import { runFormatter } from "../mod_format/index.js";
|
|
6
6
|
import { getCliMode, printJson } from "../helpers.climode.js";
|
|
7
|
-
import { getCliConfigValueFromData, readSmartconfigFile, setCliConfigValueInData, unsetCliConfigValueInData, writeSmartconfigFile, } from "../helpers.smartconfig.js";
|
|
7
|
+
import { CLI_NAMESPACE, getCliConfigValueFromData, getSmartconfigPath, readSmartconfigFile, setCliConfigValueInData, unsetCliConfigValueInData, writeSmartconfigFile, } from "../helpers.smartconfig.js";
|
|
8
8
|
import { CURRENT_GITZONE_CLI_SCHEMA_VERSION, migrateSmartconfigData, } from "../helpers.smartconfigmigrations.js";
|
|
9
9
|
export { ReleaseConfig, CommitConfig };
|
|
10
10
|
const defaultCliMode = {
|
|
@@ -76,9 +76,24 @@ export const run = async (argvArg) => {
|
|
|
76
76
|
case "commit":
|
|
77
77
|
await handleCommit(argvArg._?.[2], argvArg._?.[3], mode);
|
|
78
78
|
break;
|
|
79
|
+
case "project":
|
|
80
|
+
await handleProject(mode);
|
|
81
|
+
break;
|
|
82
|
+
case "cli":
|
|
83
|
+
await handleCli(mode);
|
|
84
|
+
break;
|
|
85
|
+
case "release":
|
|
86
|
+
await handleRelease(mode);
|
|
87
|
+
break;
|
|
79
88
|
case "services":
|
|
80
89
|
await handleServices(mode);
|
|
81
90
|
break;
|
|
91
|
+
case "doctor":
|
|
92
|
+
await handleDoctor(mode);
|
|
93
|
+
break;
|
|
94
|
+
case "fix":
|
|
95
|
+
await handleFix(argvArg, mode);
|
|
96
|
+
break;
|
|
82
97
|
case "migrate":
|
|
83
98
|
await handleMigrate(value, mode);
|
|
84
99
|
break;
|
|
@@ -113,13 +128,18 @@ async function handleInteractiveMenu() {
|
|
|
113
128
|
default: "show",
|
|
114
129
|
choices: [
|
|
115
130
|
{ name: "Show current configuration", value: "show" },
|
|
131
|
+
{ name: "Configure project basics", value: "project" },
|
|
132
|
+
{ name: "Configure CLI behavior", value: "cli" },
|
|
133
|
+
{ name: "Configure commit workflow", value: "commit" },
|
|
134
|
+
{ name: "Configure release workflow", value: "release" },
|
|
135
|
+
{ name: "Configure services", value: "services" },
|
|
136
|
+
{ name: "Validate configuration (doctor)", value: "doctor" },
|
|
137
|
+
{ name: "Fix configuration with opencode", value: "fix" },
|
|
116
138
|
{ name: "Add an npm target registry", value: "add" },
|
|
117
139
|
{ name: "Remove an npm target registry", value: "remove" },
|
|
118
140
|
{ name: "Clear npm target registries", value: "clear" },
|
|
119
141
|
{ name: "Set access level (public/private)", value: "access" },
|
|
120
142
|
{ name: "Migrate smartconfig schema", value: "migrate" },
|
|
121
|
-
{ name: "Configure commit options", value: "commit" },
|
|
122
|
-
{ name: "Configure services", value: "services" },
|
|
123
143
|
{ name: "Show help", value: "help" },
|
|
124
144
|
],
|
|
125
145
|
});
|
|
@@ -128,6 +148,15 @@ async function handleInteractiveMenu() {
|
|
|
128
148
|
case "show":
|
|
129
149
|
await handleShow(defaultCliMode);
|
|
130
150
|
break;
|
|
151
|
+
case "project":
|
|
152
|
+
await handleProject(defaultCliMode);
|
|
153
|
+
break;
|
|
154
|
+
case "cli":
|
|
155
|
+
await handleCli(defaultCliMode);
|
|
156
|
+
break;
|
|
157
|
+
case "release":
|
|
158
|
+
await handleRelease(defaultCliMode);
|
|
159
|
+
break;
|
|
131
160
|
case "add":
|
|
132
161
|
await handleAdd(undefined, defaultCliMode);
|
|
133
162
|
break;
|
|
@@ -149,45 +178,77 @@ async function handleInteractiveMenu() {
|
|
|
149
178
|
case "services":
|
|
150
179
|
await handleServices(defaultCliMode);
|
|
151
180
|
break;
|
|
181
|
+
case "doctor":
|
|
182
|
+
await handleDoctor(defaultCliMode);
|
|
183
|
+
break;
|
|
184
|
+
case "fix":
|
|
185
|
+
await handleFix({ _: ["config", "fix"] }, defaultCliMode);
|
|
186
|
+
break;
|
|
152
187
|
case "help":
|
|
153
188
|
showHelp();
|
|
154
189
|
break;
|
|
155
190
|
}
|
|
156
191
|
}
|
|
157
192
|
/**
|
|
158
|
-
* Show current
|
|
193
|
+
* Show current CLI project configuration
|
|
159
194
|
*/
|
|
160
195
|
async function handleShow(mode) {
|
|
196
|
+
const smartconfigData = await readSmartconfigFile();
|
|
197
|
+
const cliConfig = getCliConfigValueFromData(smartconfigData, "") || {};
|
|
161
198
|
if (mode.json) {
|
|
162
|
-
|
|
163
|
-
printJson(getCliConfigValueFromData(smartconfigData, ""));
|
|
199
|
+
printJson(cliConfig);
|
|
164
200
|
return;
|
|
165
201
|
}
|
|
166
|
-
const config = await ReleaseConfig.fromCwd();
|
|
167
|
-
const registries = config.getRegistries();
|
|
168
|
-
const accessLevel = config.getAccessLevel();
|
|
169
202
|
console.log("");
|
|
170
203
|
console.log("╭─────────────────────────────────────────────────────────────╮");
|
|
171
|
-
console.log("│
|
|
204
|
+
console.log("│ gitzone config - Project Configuration │");
|
|
172
205
|
console.log("╰─────────────────────────────────────────────────────────────╯");
|
|
173
206
|
console.log("");
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
if (registries.length === 0) {
|
|
178
|
-
plugins.logger.log("info", "No npm target registries configured.");
|
|
179
|
-
console.log("");
|
|
180
|
-
console.log(" Run `gitzone config add <registry-url>` to add one.");
|
|
181
|
-
console.log("");
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
plugins.logger.log("info", `Configured npm target registries (${registries.length}):`);
|
|
185
|
-
console.log("");
|
|
186
|
-
registries.forEach((url, index) => {
|
|
187
|
-
console.log(` ${index + 1}. ${url}`);
|
|
188
|
-
});
|
|
207
|
+
if (Object.keys(cliConfig).length === 0) {
|
|
208
|
+
plugins.logger.log("warn", `No ${CLI_NAMESPACE} configuration found.`);
|
|
209
|
+
console.log(" Run `gitzone config project` to create project basics.");
|
|
189
210
|
console.log("");
|
|
211
|
+
return;
|
|
190
212
|
}
|
|
213
|
+
printConfigSection("Project", [
|
|
214
|
+
["schemaVersion", formatValue(cliConfig.schemaVersion)],
|
|
215
|
+
["projectType", formatValue(cliConfig.projectType)],
|
|
216
|
+
["repository", formatRepository(cliConfig.module)],
|
|
217
|
+
["description", formatValue(cliConfig.module?.description)],
|
|
218
|
+
["npm package", formatValue(cliConfig.module?.npmPackagename || cliConfig.module?.npmPackageName)],
|
|
219
|
+
["license", formatValue(cliConfig.module?.license)],
|
|
220
|
+
["keywords", formatList(cliConfig.module?.keywords)],
|
|
221
|
+
]);
|
|
222
|
+
printConfigSection("CLI Behavior", [
|
|
223
|
+
["interactive", formatValue(cliConfig.cli?.interactive)],
|
|
224
|
+
["output", formatValue(cliConfig.cli?.output)],
|
|
225
|
+
["checkUpdates", formatValue(cliConfig.cli?.checkUpdates)],
|
|
226
|
+
]);
|
|
227
|
+
printConfigSection("Commit Workflow", [
|
|
228
|
+
["confirmation", formatValue(cliConfig.commit?.confirmation)],
|
|
229
|
+
["steps", formatList(cliConfig.commit?.steps)],
|
|
230
|
+
["test command", formatValue(cliConfig.commit?.test?.command)],
|
|
231
|
+
["build command", formatValue(cliConfig.commit?.build?.command)],
|
|
232
|
+
["push remote", formatValue(cliConfig.commit?.push?.remote)],
|
|
233
|
+
["push followTags", formatValue(cliConfig.commit?.push?.followTags)],
|
|
234
|
+
]);
|
|
235
|
+
const release = cliConfig.release || {};
|
|
236
|
+
const targets = release.targets || {};
|
|
237
|
+
printConfigSection("Release Workflow", [
|
|
238
|
+
["confirmation", formatValue(release.confirmation)],
|
|
239
|
+
["require clean tree", formatValue(release.preflight?.requireCleanTree)],
|
|
240
|
+
["run tests", formatValue(release.preflight?.test)],
|
|
241
|
+
["run build", formatValue(release.preflight?.build)],
|
|
242
|
+
["test command", formatValue(release.preflight?.testCommand)],
|
|
243
|
+
["build command", formatValue(release.preflight?.buildCommand)],
|
|
244
|
+
]);
|
|
245
|
+
printConfigSection("Release Targets", [
|
|
246
|
+
["git", formatTarget(targets.git?.enabled, targets.git)],
|
|
247
|
+
["npm", formatTarget(targets.npm?.enabled, targets.npm)],
|
|
248
|
+
["docker", formatTarget(targets.docker?.enabled, targets.docker)],
|
|
249
|
+
]);
|
|
250
|
+
console.log("Run `gitzone config doctor` to validate this configuration.");
|
|
251
|
+
console.log("");
|
|
191
252
|
}
|
|
192
253
|
/**
|
|
193
254
|
* Add an npm target registry URL
|
|
@@ -444,6 +505,403 @@ function showCommitHelp() {
|
|
|
444
505
|
console.log(" gitzone config commit alwaysBuild false");
|
|
445
506
|
console.log("");
|
|
446
507
|
}
|
|
508
|
+
async function handleProject(mode) {
|
|
509
|
+
if (!mode.interactive) {
|
|
510
|
+
throw new Error("Project configuration requires interactive mode. Use `gitzone config set` for automation.");
|
|
511
|
+
}
|
|
512
|
+
const smartconfigData = await readSmartconfigFile();
|
|
513
|
+
const cliConfig = getCliConfigValueFromData(smartconfigData, "") || {};
|
|
514
|
+
const moduleConfig = cliConfig.module || {};
|
|
515
|
+
const packageJson = await readPackageJson();
|
|
516
|
+
const interactInstance = new plugins.smartinteract.SmartInteract();
|
|
517
|
+
const projectType = await askValue(interactInstance, {
|
|
518
|
+
type: "list",
|
|
519
|
+
name: "projectType",
|
|
520
|
+
message: "What kind of project is this?",
|
|
521
|
+
choices: ["npm", "service", "wcc", "website"],
|
|
522
|
+
default: cliConfig.projectType || "npm",
|
|
523
|
+
});
|
|
524
|
+
const githost = await askValue(interactInstance, {
|
|
525
|
+
type: "input",
|
|
526
|
+
name: "githost",
|
|
527
|
+
message: "Git host:",
|
|
528
|
+
default: moduleConfig.githost || "code.foss.global",
|
|
529
|
+
});
|
|
530
|
+
const gitscope = await askValue(interactInstance, {
|
|
531
|
+
type: "input",
|
|
532
|
+
name: "gitscope",
|
|
533
|
+
message: "Git scope/owner:",
|
|
534
|
+
default: moduleConfig.gitscope || "git.zone",
|
|
535
|
+
});
|
|
536
|
+
const gitrepo = await askValue(interactInstance, {
|
|
537
|
+
type: "input",
|
|
538
|
+
name: "gitrepo",
|
|
539
|
+
message: "Git repository name:",
|
|
540
|
+
default: moduleConfig.gitrepo || inferRepoName(packageJson.name),
|
|
541
|
+
});
|
|
542
|
+
const description = await askValue(interactInstance, {
|
|
543
|
+
type: "input",
|
|
544
|
+
name: "description",
|
|
545
|
+
message: "Project description:",
|
|
546
|
+
default: moduleConfig.description || packageJson.description || "",
|
|
547
|
+
});
|
|
548
|
+
const npmPackagename = await askValue(interactInstance, {
|
|
549
|
+
type: "input",
|
|
550
|
+
name: "npmPackagename",
|
|
551
|
+
message: "npm package name:",
|
|
552
|
+
default: moduleConfig.npmPackagename || moduleConfig.npmPackageName || packageJson.name || "",
|
|
553
|
+
});
|
|
554
|
+
const license = await askValue(interactInstance, {
|
|
555
|
+
type: "input",
|
|
556
|
+
name: "license",
|
|
557
|
+
message: "License:",
|
|
558
|
+
default: moduleConfig.license || packageJson.license || "MIT",
|
|
559
|
+
});
|
|
560
|
+
const keywords = await askValue(interactInstance, {
|
|
561
|
+
type: "input",
|
|
562
|
+
name: "keywords",
|
|
563
|
+
message: "Keywords (comma-separated):",
|
|
564
|
+
default: Array.isArray(moduleConfig.keywords)
|
|
565
|
+
? moduleConfig.keywords.join(", ")
|
|
566
|
+
: Array.isArray(packageJson.keywords)
|
|
567
|
+
? packageJson.keywords.join(", ")
|
|
568
|
+
: "",
|
|
569
|
+
});
|
|
570
|
+
setCliConfigValueInData(smartconfigData, "schemaVersion", CURRENT_GITZONE_CLI_SCHEMA_VERSION);
|
|
571
|
+
setCliConfigValueInData(smartconfigData, "projectType", projectType);
|
|
572
|
+
setCliConfigValueInData(smartconfigData, "module", {
|
|
573
|
+
...moduleConfig,
|
|
574
|
+
githost: githost.trim(),
|
|
575
|
+
gitscope: gitscope.trim(),
|
|
576
|
+
gitrepo: gitrepo.trim(),
|
|
577
|
+
description: description.trim(),
|
|
578
|
+
npmPackagename: npmPackagename.trim(),
|
|
579
|
+
license: license.trim(),
|
|
580
|
+
keywords: parseCsv(keywords),
|
|
581
|
+
});
|
|
582
|
+
await writeSmartconfigFile(smartconfigData);
|
|
583
|
+
plugins.logger.log("success", "Project configuration updated");
|
|
584
|
+
await formatSmartconfigWithDiff(mode);
|
|
585
|
+
}
|
|
586
|
+
async function handleCli(mode) {
|
|
587
|
+
if (!mode.interactive) {
|
|
588
|
+
throw new Error("CLI behavior configuration requires interactive mode. Use `gitzone config set` for automation.");
|
|
589
|
+
}
|
|
590
|
+
const smartconfigData = await readSmartconfigFile();
|
|
591
|
+
const cliConfig = getCliConfigValueFromData(smartconfigData, "cli") || {};
|
|
592
|
+
const interactInstance = new plugins.smartinteract.SmartInteract();
|
|
593
|
+
const output = await askValue(interactInstance, {
|
|
594
|
+
type: "list",
|
|
595
|
+
name: "output",
|
|
596
|
+
message: "Default output mode:",
|
|
597
|
+
choices: ["human", "plain", "json"],
|
|
598
|
+
default: cliConfig.output || "human",
|
|
599
|
+
});
|
|
600
|
+
const interactive = await askValue(interactInstance, {
|
|
601
|
+
type: "confirm",
|
|
602
|
+
name: "interactive",
|
|
603
|
+
message: "Enable interactive prompts by default?",
|
|
604
|
+
default: cliConfig.interactive ?? true,
|
|
605
|
+
});
|
|
606
|
+
const checkUpdates = await askValue(interactInstance, {
|
|
607
|
+
type: "confirm",
|
|
608
|
+
name: "checkUpdates",
|
|
609
|
+
message: "Check for gitzone updates in human mode?",
|
|
610
|
+
default: cliConfig.checkUpdates ?? true,
|
|
611
|
+
});
|
|
612
|
+
setCliConfigValueInData(smartconfigData, "schemaVersion", CURRENT_GITZONE_CLI_SCHEMA_VERSION);
|
|
613
|
+
setCliConfigValueInData(smartconfigData, "cli", {
|
|
614
|
+
output,
|
|
615
|
+
interactive,
|
|
616
|
+
checkUpdates,
|
|
617
|
+
});
|
|
618
|
+
await writeSmartconfigFile(smartconfigData);
|
|
619
|
+
plugins.logger.log("success", "CLI behavior configuration updated");
|
|
620
|
+
await formatSmartconfigWithDiff(mode);
|
|
621
|
+
}
|
|
622
|
+
async function handleRelease(mode) {
|
|
623
|
+
if (!mode.interactive) {
|
|
624
|
+
throw new Error("Release configuration requires interactive mode. Use `gitzone config set` for automation.");
|
|
625
|
+
}
|
|
626
|
+
const smartconfigData = await readSmartconfigFile();
|
|
627
|
+
const currentRelease = getCliConfigValueFromData(smartconfigData, "release") || {};
|
|
628
|
+
const currentTargets = currentRelease.targets || {};
|
|
629
|
+
const interactInstance = new plugins.smartinteract.SmartInteract();
|
|
630
|
+
const confirmation = await askValue(interactInstance, {
|
|
631
|
+
type: "list",
|
|
632
|
+
name: "confirmation",
|
|
633
|
+
message: "Release confirmation mode:",
|
|
634
|
+
choices: ["prompt", "auto", "plan"],
|
|
635
|
+
default: currentRelease.confirmation || "prompt",
|
|
636
|
+
});
|
|
637
|
+
const requireCleanTree = await askValue(interactInstance, {
|
|
638
|
+
type: "confirm",
|
|
639
|
+
name: "requireCleanTree",
|
|
640
|
+
message: "Require a clean git tree before release?",
|
|
641
|
+
default: currentRelease.preflight?.requireCleanTree ?? true,
|
|
642
|
+
});
|
|
643
|
+
const runTests = await askValue(interactInstance, {
|
|
644
|
+
type: "confirm",
|
|
645
|
+
name: "runTests",
|
|
646
|
+
message: "Run tests during release preflight?",
|
|
647
|
+
default: currentRelease.preflight?.test ?? false,
|
|
648
|
+
});
|
|
649
|
+
const runBuild = await askValue(interactInstance, {
|
|
650
|
+
type: "confirm",
|
|
651
|
+
name: "runBuild",
|
|
652
|
+
message: "Run build during release?",
|
|
653
|
+
default: currentRelease.preflight?.build ?? true,
|
|
654
|
+
});
|
|
655
|
+
const testCommand = await askValue(interactInstance, {
|
|
656
|
+
type: "input",
|
|
657
|
+
name: "testCommand",
|
|
658
|
+
message: "Release test command:",
|
|
659
|
+
default: currentRelease.preflight?.testCommand || "pnpm test",
|
|
660
|
+
});
|
|
661
|
+
const buildCommand = await askValue(interactInstance, {
|
|
662
|
+
type: "input",
|
|
663
|
+
name: "buildCommand",
|
|
664
|
+
message: "Release build command:",
|
|
665
|
+
default: currentRelease.preflight?.buildCommand || "pnpm build",
|
|
666
|
+
});
|
|
667
|
+
const enabledTargets = await askValue(interactInstance, {
|
|
668
|
+
type: "checkbox",
|
|
669
|
+
name: "targets",
|
|
670
|
+
message: "Enable release targets:",
|
|
671
|
+
choices: [
|
|
672
|
+
{ name: "git - push branch and tags", value: "git" },
|
|
673
|
+
{ name: "npm - publish package registries", value: "npm" },
|
|
674
|
+
{ name: "docker - build and push images", value: "docker" },
|
|
675
|
+
],
|
|
676
|
+
default: getDefaultEnabledTargets(currentTargets),
|
|
677
|
+
});
|
|
678
|
+
const releaseTargets = { ...currentTargets };
|
|
679
|
+
if (enabledTargets.includes("git")) {
|
|
680
|
+
releaseTargets.git = {
|
|
681
|
+
...(currentTargets.git || {}),
|
|
682
|
+
enabled: true,
|
|
683
|
+
remote: await askValue(interactInstance, {
|
|
684
|
+
type: "input",
|
|
685
|
+
name: "gitRemote",
|
|
686
|
+
message: "Git remote:",
|
|
687
|
+
default: currentTargets.git?.remote || "origin",
|
|
688
|
+
}),
|
|
689
|
+
pushBranch: await askValue(interactInstance, {
|
|
690
|
+
type: "confirm",
|
|
691
|
+
name: "pushBranch",
|
|
692
|
+
message: "Push release commit branch?",
|
|
693
|
+
default: currentTargets.git?.pushBranch ?? true,
|
|
694
|
+
}),
|
|
695
|
+
pushTags: await askValue(interactInstance, {
|
|
696
|
+
type: "confirm",
|
|
697
|
+
name: "pushTags",
|
|
698
|
+
message: "Push release tags?",
|
|
699
|
+
default: currentTargets.git?.pushTags ?? true,
|
|
700
|
+
}),
|
|
701
|
+
};
|
|
702
|
+
}
|
|
703
|
+
else {
|
|
704
|
+
releaseTargets.git = { ...(currentTargets.git || {}), enabled: false };
|
|
705
|
+
}
|
|
706
|
+
if (enabledTargets.includes("npm")) {
|
|
707
|
+
const registries = await askValue(interactInstance, {
|
|
708
|
+
type: "input",
|
|
709
|
+
name: "npmRegistries",
|
|
710
|
+
message: "npm registries (comma-separated):",
|
|
711
|
+
default: Array.isArray(currentTargets.npm?.registries)
|
|
712
|
+
? currentTargets.npm.registries.join(", ")
|
|
713
|
+
: "https://registry.npmjs.org",
|
|
714
|
+
});
|
|
715
|
+
releaseTargets.npm = {
|
|
716
|
+
...(currentTargets.npm || {}),
|
|
717
|
+
enabled: true,
|
|
718
|
+
registries: parseCsv(registries).map(normalizeRegistryUrl),
|
|
719
|
+
accessLevel: await askValue(interactInstance, {
|
|
720
|
+
type: "list",
|
|
721
|
+
name: "npmAccessLevel",
|
|
722
|
+
message: "npm publish access level:",
|
|
723
|
+
choices: ["public", "private"],
|
|
724
|
+
default: currentTargets.npm?.accessLevel || "public",
|
|
725
|
+
}),
|
|
726
|
+
alreadyPublished: await askValue(interactInstance, {
|
|
727
|
+
type: "list",
|
|
728
|
+
name: "alreadyPublished",
|
|
729
|
+
message: "When a package version is already published:",
|
|
730
|
+
choices: ["success", "error"],
|
|
731
|
+
default: currentTargets.npm?.alreadyPublished || "success",
|
|
732
|
+
}),
|
|
733
|
+
};
|
|
734
|
+
}
|
|
735
|
+
else {
|
|
736
|
+
releaseTargets.npm = { ...(currentTargets.npm || {}), enabled: false };
|
|
737
|
+
}
|
|
738
|
+
if (enabledTargets.includes("docker")) {
|
|
739
|
+
const images = await askValue(interactInstance, {
|
|
740
|
+
type: "input",
|
|
741
|
+
name: "dockerImages",
|
|
742
|
+
message: "Docker image templates (comma-separated, supports {{version}}):",
|
|
743
|
+
default: Array.isArray(currentTargets.docker?.images)
|
|
744
|
+
? currentTargets.docker.images.join(", ")
|
|
745
|
+
: "",
|
|
746
|
+
});
|
|
747
|
+
releaseTargets.docker = {
|
|
748
|
+
...(currentTargets.docker || {}),
|
|
749
|
+
enabled: true,
|
|
750
|
+
images: parseCsv(images),
|
|
751
|
+
};
|
|
752
|
+
}
|
|
753
|
+
else {
|
|
754
|
+
releaseTargets.docker = { ...(currentTargets.docker || {}), enabled: false };
|
|
755
|
+
}
|
|
756
|
+
setCliConfigValueInData(smartconfigData, "schemaVersion", CURRENT_GITZONE_CLI_SCHEMA_VERSION);
|
|
757
|
+
setCliConfigValueInData(smartconfigData, "release", {
|
|
758
|
+
...currentRelease,
|
|
759
|
+
confirmation,
|
|
760
|
+
preflight: {
|
|
761
|
+
...(currentRelease.preflight || {}),
|
|
762
|
+
requireCleanTree,
|
|
763
|
+
test: runTests,
|
|
764
|
+
build: runBuild,
|
|
765
|
+
testCommand: testCommand.trim(),
|
|
766
|
+
buildCommand: buildCommand.trim(),
|
|
767
|
+
},
|
|
768
|
+
targets: releaseTargets,
|
|
769
|
+
});
|
|
770
|
+
await writeSmartconfigFile(smartconfigData);
|
|
771
|
+
plugins.logger.log("success", "Release configuration updated");
|
|
772
|
+
await formatSmartconfigWithDiff(mode);
|
|
773
|
+
}
|
|
774
|
+
async function handleDoctor(mode) {
|
|
775
|
+
const findings = await collectDoctorFindings();
|
|
776
|
+
printDoctorResult(findings, mode);
|
|
777
|
+
}
|
|
778
|
+
async function handleFix(argvArg, mode) {
|
|
779
|
+
if (mode.json) {
|
|
780
|
+
printJson({
|
|
781
|
+
ok: false,
|
|
782
|
+
error: "JSON output is not supported for `gitzone config fix`. Use `gitzone config doctor --json` for machine-readable diagnostics.",
|
|
783
|
+
});
|
|
784
|
+
process.exitCode = 1;
|
|
785
|
+
return;
|
|
786
|
+
}
|
|
787
|
+
const findings = await collectDoctorFindings();
|
|
788
|
+
const counts = countDoctorFindings(findings);
|
|
789
|
+
const extraInstructions = (argvArg._?.slice(2).join(" ") || "").trim();
|
|
790
|
+
const force = Boolean(argvArg.force);
|
|
791
|
+
if (counts.error === 0 && counts.warn === 0 && !extraInstructions && !force) {
|
|
792
|
+
plugins.logger.log("success", "Configuration doctor found no issues. Use `gitzone config fix --force` to run opencode anyway.");
|
|
793
|
+
return;
|
|
794
|
+
}
|
|
795
|
+
if (!mode.yes) {
|
|
796
|
+
if (!mode.interactive) {
|
|
797
|
+
throw new Error("Config fix requires an interactive terminal or `-y` to run opencode non-interactively.");
|
|
798
|
+
}
|
|
799
|
+
const confirmed = await plugins.smartinteract.SmartInteract.getCliConfirmation(`Run opencode to fix .smartconfig.json? (${counts.error} error, ${counts.warn} warning)`, true);
|
|
800
|
+
if (!confirmed) {
|
|
801
|
+
plugins.logger.log("info", "Config fix cancelled.");
|
|
802
|
+
return;
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
const opencodeArgs = [
|
|
806
|
+
"run",
|
|
807
|
+
"--title",
|
|
808
|
+
"gitzone config fix",
|
|
809
|
+
"--dir",
|
|
810
|
+
process.cwd(),
|
|
811
|
+
];
|
|
812
|
+
if (mode.yes) {
|
|
813
|
+
opencodeArgs.push("--dangerously-skip-permissions");
|
|
814
|
+
}
|
|
815
|
+
opencodeArgs.push(buildConfigFixPrompt(findings, extraInstructions));
|
|
816
|
+
plugins.logger.log("info", "Starting opencode configuration fix...");
|
|
817
|
+
const smartshellInstance = new plugins.smartshell.Smartshell({
|
|
818
|
+
executor: "bash",
|
|
819
|
+
sourceFilePaths: [],
|
|
820
|
+
});
|
|
821
|
+
let result;
|
|
822
|
+
try {
|
|
823
|
+
result = await smartshellInstance.execSpawn("opencode", opencodeArgs, {
|
|
824
|
+
passthrough: true,
|
|
825
|
+
});
|
|
826
|
+
}
|
|
827
|
+
catch (error) {
|
|
828
|
+
throw new Error(`Failed to run opencode: ${error instanceof Error ? error.message : String(error)}`);
|
|
829
|
+
}
|
|
830
|
+
if (result.exitCode !== 0) {
|
|
831
|
+
plugins.logger.log("error", `opencode exited with code ${result.exitCode}`);
|
|
832
|
+
process.exitCode = result.exitCode || 1;
|
|
833
|
+
return;
|
|
834
|
+
}
|
|
835
|
+
await formatSmartconfigWithDiff(mode);
|
|
836
|
+
const finalFindings = await collectDoctorFindings();
|
|
837
|
+
printDoctorResult(finalFindings, mode);
|
|
838
|
+
}
|
|
839
|
+
async function collectDoctorFindings() {
|
|
840
|
+
const findings = [];
|
|
841
|
+
const smartconfigPath = getSmartconfigPath();
|
|
842
|
+
const smartconfigExists = await plugins.smartfs.file(smartconfigPath).exists();
|
|
843
|
+
if (!smartconfigExists) {
|
|
844
|
+
findings.push({
|
|
845
|
+
level: "warn",
|
|
846
|
+
message: ".smartconfig.json does not exist",
|
|
847
|
+
fix: "Run `gitzone config project` to create project basics.",
|
|
848
|
+
});
|
|
849
|
+
return findings;
|
|
850
|
+
}
|
|
851
|
+
let smartconfigData;
|
|
852
|
+
try {
|
|
853
|
+
smartconfigData = await readSmartconfigFile();
|
|
854
|
+
}
|
|
855
|
+
catch (error) {
|
|
856
|
+
findings.push({
|
|
857
|
+
level: "error",
|
|
858
|
+
message: ".smartconfig.json is not valid JSON",
|
|
859
|
+
fix: error instanceof Error ? error.message : String(error),
|
|
860
|
+
});
|
|
861
|
+
return findings;
|
|
862
|
+
}
|
|
863
|
+
const cliConfig = getCliConfigValueFromData(smartconfigData, "") || {};
|
|
864
|
+
if (Object.keys(cliConfig).length === 0) {
|
|
865
|
+
findings.push({
|
|
866
|
+
level: "error",
|
|
867
|
+
message: `${CLI_NAMESPACE} configuration is missing`,
|
|
868
|
+
fix: "Run `gitzone config project` or `gitzone config migrate`.",
|
|
869
|
+
});
|
|
870
|
+
}
|
|
871
|
+
for (const legacyNamespace of ["gitzone", "tsdoc", "npmdocker", "npmci", "szci"]) {
|
|
872
|
+
if (smartconfigData[legacyNamespace]) {
|
|
873
|
+
findings.push({
|
|
874
|
+
level: "warn",
|
|
875
|
+
message: `Legacy namespace '${legacyNamespace}' is present`,
|
|
876
|
+
fix: "Run `gitzone config migrate`.",
|
|
877
|
+
});
|
|
878
|
+
}
|
|
879
|
+
}
|
|
880
|
+
if (cliConfig.schemaVersion === CURRENT_GITZONE_CLI_SCHEMA_VERSION) {
|
|
881
|
+
findings.push({ level: "ok", message: `Schema version is current (${CURRENT_GITZONE_CLI_SCHEMA_VERSION})` });
|
|
882
|
+
}
|
|
883
|
+
else {
|
|
884
|
+
findings.push({
|
|
885
|
+
level: "warn",
|
|
886
|
+
message: `Schema version is ${formatValue(cliConfig.schemaVersion)}, expected ${CURRENT_GITZONE_CLI_SCHEMA_VERSION}`,
|
|
887
|
+
fix: "Run `gitzone config migrate`.",
|
|
888
|
+
});
|
|
889
|
+
}
|
|
890
|
+
if (["npm", "service", "wcc", "website"].includes(cliConfig.projectType)) {
|
|
891
|
+
findings.push({ level: "ok", message: `Project type is ${cliConfig.projectType}` });
|
|
892
|
+
}
|
|
893
|
+
else {
|
|
894
|
+
findings.push({
|
|
895
|
+
level: "warn",
|
|
896
|
+
message: `Project type is missing or invalid: ${formatValue(cliConfig.projectType)}`,
|
|
897
|
+
fix: "Run `gitzone config project`.",
|
|
898
|
+
});
|
|
899
|
+
}
|
|
900
|
+
await validateDetectedProjectType(cliConfig, findings);
|
|
901
|
+
validateCommitConfig(cliConfig.commit || {}, findings);
|
|
902
|
+
await validateReleaseConfig(cliConfig.release || {}, findings);
|
|
903
|
+
return findings;
|
|
904
|
+
}
|
|
447
905
|
/**
|
|
448
906
|
* Handle services configuration
|
|
449
907
|
*/
|
|
@@ -569,6 +1027,480 @@ function parseConfigValue(rawValue) {
|
|
|
569
1027
|
}
|
|
570
1028
|
return rawValue;
|
|
571
1029
|
}
|
|
1030
|
+
const validProjectTypes = ["npm", "service", "wcc", "website"];
|
|
1031
|
+
const validConfirmationModes = ["prompt", "auto", "plan"];
|
|
1032
|
+
const validCommitSteps = [
|
|
1033
|
+
"format",
|
|
1034
|
+
"analyze",
|
|
1035
|
+
"test",
|
|
1036
|
+
"build",
|
|
1037
|
+
"changelog",
|
|
1038
|
+
"commit",
|
|
1039
|
+
"push",
|
|
1040
|
+
];
|
|
1041
|
+
function printConfigSection(title, rows) {
|
|
1042
|
+
console.log(`${title}:`);
|
|
1043
|
+
for (const [label, value] of rows) {
|
|
1044
|
+
console.log(` ${label.padEnd(20)} ${value}`);
|
|
1045
|
+
}
|
|
1046
|
+
console.log("");
|
|
1047
|
+
}
|
|
1048
|
+
function formatValue(value) {
|
|
1049
|
+
if (value === undefined || value === null || value === "") {
|
|
1050
|
+
return "(unset)";
|
|
1051
|
+
}
|
|
1052
|
+
if (typeof value === "boolean") {
|
|
1053
|
+
return value ? "true" : "false";
|
|
1054
|
+
}
|
|
1055
|
+
if (typeof value === "string" || typeof value === "number") {
|
|
1056
|
+
return String(value);
|
|
1057
|
+
}
|
|
1058
|
+
return JSON.stringify(value);
|
|
1059
|
+
}
|
|
1060
|
+
function formatRepository(moduleConfig) {
|
|
1061
|
+
if (!moduleConfig) {
|
|
1062
|
+
return "(unset)";
|
|
1063
|
+
}
|
|
1064
|
+
const parts = [
|
|
1065
|
+
moduleConfig.githost,
|
|
1066
|
+
moduleConfig.gitscope,
|
|
1067
|
+
moduleConfig.gitrepo,
|
|
1068
|
+
].filter(Boolean);
|
|
1069
|
+
return parts.length > 0 ? parts.join("/") : "(unset)";
|
|
1070
|
+
}
|
|
1071
|
+
function formatList(value) {
|
|
1072
|
+
if (!Array.isArray(value) || value.length === 0) {
|
|
1073
|
+
return "(none)";
|
|
1074
|
+
}
|
|
1075
|
+
return value.map((item) => String(item)).join(", ");
|
|
1076
|
+
}
|
|
1077
|
+
function formatTarget(enabled, targetConfig) {
|
|
1078
|
+
const state = enabled === false ? "disabled" : "enabled";
|
|
1079
|
+
if (!targetConfig || Object.keys(targetConfig).length === 0) {
|
|
1080
|
+
return state;
|
|
1081
|
+
}
|
|
1082
|
+
const details = [];
|
|
1083
|
+
if (targetConfig.remote)
|
|
1084
|
+
details.push(`remote=${targetConfig.remote}`);
|
|
1085
|
+
if (Array.isArray(targetConfig.registries)) {
|
|
1086
|
+
details.push(`registries=${targetConfig.registries.length}`);
|
|
1087
|
+
}
|
|
1088
|
+
if (targetConfig.accessLevel)
|
|
1089
|
+
details.push(`access=${targetConfig.accessLevel}`);
|
|
1090
|
+
if (Array.isArray(targetConfig.images)) {
|
|
1091
|
+
details.push(`images=${targetConfig.images.length}`);
|
|
1092
|
+
}
|
|
1093
|
+
return details.length > 0 ? `${state} (${details.join(", ")})` : state;
|
|
1094
|
+
}
|
|
1095
|
+
async function askValue(interactInstance, options) {
|
|
1096
|
+
const response = await interactInstance.askQuestion(options);
|
|
1097
|
+
return response.value;
|
|
1098
|
+
}
|
|
1099
|
+
async function readPackageJson() {
|
|
1100
|
+
const packageJsonPath = plugins.path.join(process.cwd(), "package.json");
|
|
1101
|
+
if (!(await plugins.smartfs.file(packageJsonPath).exists())) {
|
|
1102
|
+
return {};
|
|
1103
|
+
}
|
|
1104
|
+
const content = (await plugins.smartfs
|
|
1105
|
+
.file(packageJsonPath)
|
|
1106
|
+
.encoding("utf8")
|
|
1107
|
+
.read());
|
|
1108
|
+
return JSON.parse(content);
|
|
1109
|
+
}
|
|
1110
|
+
function inferRepoName(packageName) {
|
|
1111
|
+
if (typeof packageName === "string" && packageName.trim()) {
|
|
1112
|
+
const normalizedName = packageName.trim();
|
|
1113
|
+
return normalizedName.includes("/")
|
|
1114
|
+
? normalizedName.split("/").pop() || normalizedName
|
|
1115
|
+
: normalizedName;
|
|
1116
|
+
}
|
|
1117
|
+
return plugins.path.basename(process.cwd());
|
|
1118
|
+
}
|
|
1119
|
+
function parseCsv(value) {
|
|
1120
|
+
const result = [];
|
|
1121
|
+
for (const item of value.split(",")) {
|
|
1122
|
+
const trimmedItem = item.trim();
|
|
1123
|
+
if (trimmedItem && !result.includes(trimmedItem)) {
|
|
1124
|
+
result.push(trimmedItem);
|
|
1125
|
+
}
|
|
1126
|
+
}
|
|
1127
|
+
return result;
|
|
1128
|
+
}
|
|
1129
|
+
function normalizeRegistryUrl(url) {
|
|
1130
|
+
let normalizedUrl = url.trim();
|
|
1131
|
+
if (!normalizedUrl.startsWith("http://") && !normalizedUrl.startsWith("https://")) {
|
|
1132
|
+
normalizedUrl = `https://${normalizedUrl}`;
|
|
1133
|
+
}
|
|
1134
|
+
return normalizedUrl.endsWith("/") ? normalizedUrl.slice(0, -1) : normalizedUrl;
|
|
1135
|
+
}
|
|
1136
|
+
function getDefaultEnabledTargets(currentTargets) {
|
|
1137
|
+
const enabledTargets = [];
|
|
1138
|
+
const npmRegistries = currentTargets.npm?.registries;
|
|
1139
|
+
if (currentTargets.git?.enabled ?? true) {
|
|
1140
|
+
enabledTargets.push("git");
|
|
1141
|
+
}
|
|
1142
|
+
if (currentTargets.npm?.enabled ?? (Array.isArray(npmRegistries) && npmRegistries.length > 0)) {
|
|
1143
|
+
enabledTargets.push("npm");
|
|
1144
|
+
}
|
|
1145
|
+
if (currentTargets.docker?.enabled ?? false) {
|
|
1146
|
+
enabledTargets.push("docker");
|
|
1147
|
+
}
|
|
1148
|
+
return enabledTargets;
|
|
1149
|
+
}
|
|
1150
|
+
function countDoctorFindings(findings) {
|
|
1151
|
+
return findings.reduce((accumulator, finding) => {
|
|
1152
|
+
accumulator[finding.level] += 1;
|
|
1153
|
+
return accumulator;
|
|
1154
|
+
}, { ok: 0, warn: 0, error: 0 });
|
|
1155
|
+
}
|
|
1156
|
+
function buildConfigFixPrompt(findings, extraInstructions) {
|
|
1157
|
+
const promptParts = [
|
|
1158
|
+
"Other /c-* commands can be found at ~/.config/opencode/commands/*",
|
|
1159
|
+
"# gitzone config fix",
|
|
1160
|
+
"",
|
|
1161
|
+
`Working directory: ${process.cwd()}`,
|
|
1162
|
+
"",
|
|
1163
|
+
"Repair the project configuration so `gitzone config doctor --json` passes.",
|
|
1164
|
+
"",
|
|
1165
|
+
"Rules:",
|
|
1166
|
+
"- Read `.smartconfig.json`, `package.json`, and nearby project metadata before editing.",
|
|
1167
|
+
"- Keep gitzone CLI config under `@git.zone/cli` in `.smartconfig.json`.",
|
|
1168
|
+
`- Use schemaVersion ${CURRENT_GITZONE_CLI_SCHEMA_VERSION} for ` +
|
|
1169
|
+
"`@git.zone/cli`.",
|
|
1170
|
+
"- Use target-based release config: `release.targets.git`, `release.targets.npm`, and `release.targets.docker`.",
|
|
1171
|
+
"- Keep npm registries only at `@git.zone/cli.release.targets.npm.registries`.",
|
|
1172
|
+
"- Do not add runtime legacy compatibility code. If legacy config exists, migrate it explicitly.",
|
|
1173
|
+
"- Do not commit, release, install dependencies, or modify unrelated files.",
|
|
1174
|
+
"- Use pnpm commands only if commands are needed.",
|
|
1175
|
+
"- Run `gitzone config doctor --json` after changes and keep fixing until no errors remain.",
|
|
1176
|
+
"- Run `git diff --check` after changes to catch whitespace problems.",
|
|
1177
|
+
"",
|
|
1178
|
+
"Current doctor findings:",
|
|
1179
|
+
JSON.stringify(findings, null, 2),
|
|
1180
|
+
];
|
|
1181
|
+
if (extraInstructions) {
|
|
1182
|
+
promptParts.push("", "Additional user instructions:", extraInstructions);
|
|
1183
|
+
}
|
|
1184
|
+
return promptParts.join("\n");
|
|
1185
|
+
}
|
|
1186
|
+
function printDoctorResult(findings, mode) {
|
|
1187
|
+
const counts = countDoctorFindings(findings);
|
|
1188
|
+
if (mode.json) {
|
|
1189
|
+
printJson({
|
|
1190
|
+
ok: counts.error === 0,
|
|
1191
|
+
counts,
|
|
1192
|
+
findings,
|
|
1193
|
+
});
|
|
1194
|
+
}
|
|
1195
|
+
else {
|
|
1196
|
+
console.log("");
|
|
1197
|
+
console.log("gitzone config doctor");
|
|
1198
|
+
console.log("");
|
|
1199
|
+
for (const finding of findings) {
|
|
1200
|
+
const prefix = finding.level.toUpperCase().padEnd(5);
|
|
1201
|
+
console.log(`${prefix} ${finding.message}`);
|
|
1202
|
+
if (finding.fix) {
|
|
1203
|
+
console.log(` ${finding.fix}`);
|
|
1204
|
+
}
|
|
1205
|
+
}
|
|
1206
|
+
console.log("");
|
|
1207
|
+
console.log(`Summary: ${counts.ok} ok, ${counts.warn} warning, ${counts.error} error`);
|
|
1208
|
+
console.log("");
|
|
1209
|
+
}
|
|
1210
|
+
if (counts.error > 0) {
|
|
1211
|
+
process.exitCode = 1;
|
|
1212
|
+
}
|
|
1213
|
+
}
|
|
1214
|
+
function validateCommitConfig(commitConfig, findings) {
|
|
1215
|
+
const confirmation = commitConfig.confirmation;
|
|
1216
|
+
if (confirmation === undefined || validConfirmationModes.includes(confirmation)) {
|
|
1217
|
+
findings.push({ level: "ok", message: "Commit confirmation mode is valid" });
|
|
1218
|
+
}
|
|
1219
|
+
else {
|
|
1220
|
+
findings.push({
|
|
1221
|
+
level: "warn",
|
|
1222
|
+
message: `Invalid commit confirmation mode: ${formatValue(confirmation)}`,
|
|
1223
|
+
fix: "Use prompt, auto, or plan.",
|
|
1224
|
+
});
|
|
1225
|
+
}
|
|
1226
|
+
const steps = commitConfig.steps;
|
|
1227
|
+
if (steps === undefined) {
|
|
1228
|
+
findings.push({ level: "ok", message: "Commit workflow uses default steps" });
|
|
1229
|
+
return;
|
|
1230
|
+
}
|
|
1231
|
+
if (!Array.isArray(steps) || steps.length === 0) {
|
|
1232
|
+
findings.push({
|
|
1233
|
+
level: "error",
|
|
1234
|
+
message: "Commit steps must be a non-empty array",
|
|
1235
|
+
fix: "Run `gitzone config commit` or unset commit.steps.",
|
|
1236
|
+
});
|
|
1237
|
+
return;
|
|
1238
|
+
}
|
|
1239
|
+
const invalidSteps = steps.filter((step) => !validCommitSteps.includes(step));
|
|
1240
|
+
if (invalidSteps.length > 0) {
|
|
1241
|
+
findings.push({
|
|
1242
|
+
level: "error",
|
|
1243
|
+
message: `Invalid commit steps: ${invalidSteps.join(", ")}`,
|
|
1244
|
+
fix: `Allowed steps: ${validCommitSteps.join(", ")}`,
|
|
1245
|
+
});
|
|
1246
|
+
}
|
|
1247
|
+
const analyzeIndex = steps.indexOf("analyze");
|
|
1248
|
+
const changelogIndex = steps.indexOf("changelog");
|
|
1249
|
+
const commitIndex = steps.indexOf("commit");
|
|
1250
|
+
if (analyzeIndex === -1 || changelogIndex === -1 || commitIndex === -1) {
|
|
1251
|
+
findings.push({
|
|
1252
|
+
level: "error",
|
|
1253
|
+
message: "Commit workflow must include analyze, changelog, and commit",
|
|
1254
|
+
fix: "Run `gitzone config commit` or reset commit.steps.",
|
|
1255
|
+
});
|
|
1256
|
+
}
|
|
1257
|
+
else if (analyzeIndex > commitIndex || changelogIndex > commitIndex) {
|
|
1258
|
+
findings.push({
|
|
1259
|
+
level: "error",
|
|
1260
|
+
message: "Commit workflow must run analyze and changelog before commit",
|
|
1261
|
+
fix: "Move analyze and changelog before commit in commit.steps.",
|
|
1262
|
+
});
|
|
1263
|
+
}
|
|
1264
|
+
else {
|
|
1265
|
+
findings.push({ level: "ok", message: "Commit workflow steps are valid" });
|
|
1266
|
+
}
|
|
1267
|
+
if (steps.includes("test") && commitConfig.test?.command === "") {
|
|
1268
|
+
findings.push({
|
|
1269
|
+
level: "warn",
|
|
1270
|
+
message: "Commit test step has an empty command",
|
|
1271
|
+
fix: "Set commit.test.command or unset it to use the default pnpm test.",
|
|
1272
|
+
});
|
|
1273
|
+
}
|
|
1274
|
+
if (steps.includes("build") && commitConfig.build?.command === "") {
|
|
1275
|
+
findings.push({
|
|
1276
|
+
level: "warn",
|
|
1277
|
+
message: "Commit build step has an empty command",
|
|
1278
|
+
fix: "Set commit.build.command or unset it to use the default pnpm build.",
|
|
1279
|
+
});
|
|
1280
|
+
}
|
|
1281
|
+
}
|
|
1282
|
+
async function validateReleaseConfig(releaseConfig, findings) {
|
|
1283
|
+
const confirmation = releaseConfig.confirmation;
|
|
1284
|
+
if (confirmation === undefined || validConfirmationModes.includes(confirmation)) {
|
|
1285
|
+
findings.push({ level: "ok", message: "Release confirmation mode is valid" });
|
|
1286
|
+
}
|
|
1287
|
+
else {
|
|
1288
|
+
findings.push({
|
|
1289
|
+
level: "warn",
|
|
1290
|
+
message: `Invalid release confirmation mode: ${formatValue(confirmation)}`,
|
|
1291
|
+
fix: "Use prompt, auto, or plan.",
|
|
1292
|
+
});
|
|
1293
|
+
}
|
|
1294
|
+
if (releaseConfig.registries || releaseConfig.accessLevel || releaseConfig.steps || releaseConfig.changelog) {
|
|
1295
|
+
findings.push({
|
|
1296
|
+
level: "warn",
|
|
1297
|
+
message: "Legacy release keys are present outside release.targets",
|
|
1298
|
+
fix: "Run `gitzone config migrate`.",
|
|
1299
|
+
});
|
|
1300
|
+
}
|
|
1301
|
+
const preflight = releaseConfig.preflight || {};
|
|
1302
|
+
if (preflight.test === true && preflight.testCommand === "") {
|
|
1303
|
+
findings.push({
|
|
1304
|
+
level: "warn",
|
|
1305
|
+
message: "Release test preflight has an empty command",
|
|
1306
|
+
fix: "Set release.preflight.testCommand or unset it to use pnpm test.",
|
|
1307
|
+
});
|
|
1308
|
+
}
|
|
1309
|
+
if (preflight.build === true && preflight.buildCommand === "") {
|
|
1310
|
+
findings.push({
|
|
1311
|
+
level: "warn",
|
|
1312
|
+
message: "Release build preflight has an empty command",
|
|
1313
|
+
fix: "Set release.preflight.buildCommand or unset it to use pnpm build.",
|
|
1314
|
+
});
|
|
1315
|
+
}
|
|
1316
|
+
const targets = releaseConfig.targets || {};
|
|
1317
|
+
await validateGitTarget(targets.git || {}, findings);
|
|
1318
|
+
await validateNpmTarget(targets.npm || {}, findings);
|
|
1319
|
+
validateDockerTarget(targets.docker || {}, findings);
|
|
1320
|
+
}
|
|
1321
|
+
async function validateGitTarget(gitTarget, findings) {
|
|
1322
|
+
const enabled = gitTarget.enabled ?? true;
|
|
1323
|
+
if (!enabled) {
|
|
1324
|
+
findings.push({ level: "ok", message: "Git release target is disabled" });
|
|
1325
|
+
return;
|
|
1326
|
+
}
|
|
1327
|
+
if (gitTarget.remote === "") {
|
|
1328
|
+
findings.push({
|
|
1329
|
+
level: "error",
|
|
1330
|
+
message: "Git release target remote is empty",
|
|
1331
|
+
fix: "Set release.targets.git.remote or unset it to use origin.",
|
|
1332
|
+
});
|
|
1333
|
+
return;
|
|
1334
|
+
}
|
|
1335
|
+
findings.push({
|
|
1336
|
+
level: "ok",
|
|
1337
|
+
message: `Git release target is enabled (${gitTarget.remote || "origin"})`,
|
|
1338
|
+
});
|
|
1339
|
+
}
|
|
1340
|
+
async function validateNpmTarget(npmTarget, findings) {
|
|
1341
|
+
const registries = Array.isArray(npmTarget.registries) ? npmTarget.registries : [];
|
|
1342
|
+
const enabled = npmTarget.enabled ?? registries.length > 0;
|
|
1343
|
+
if (!enabled) {
|
|
1344
|
+
findings.push({ level: "ok", message: "npm release target is disabled" });
|
|
1345
|
+
return;
|
|
1346
|
+
}
|
|
1347
|
+
if (registries.length === 0) {
|
|
1348
|
+
findings.push({
|
|
1349
|
+
level: "error",
|
|
1350
|
+
message: "npm release target is enabled without registries",
|
|
1351
|
+
fix: "Run `gitzone config add https://registry.npmjs.org` or disable release.targets.npm.enabled.",
|
|
1352
|
+
});
|
|
1353
|
+
return;
|
|
1354
|
+
}
|
|
1355
|
+
if (npmTarget.accessLevel && !["public", "private"].includes(npmTarget.accessLevel)) {
|
|
1356
|
+
findings.push({
|
|
1357
|
+
level: "error",
|
|
1358
|
+
message: `Invalid npm access level: ${npmTarget.accessLevel}`,
|
|
1359
|
+
fix: "Use public or private.",
|
|
1360
|
+
});
|
|
1361
|
+
}
|
|
1362
|
+
if (npmTarget.alreadyPublished && !["success", "error"].includes(npmTarget.alreadyPublished)) {
|
|
1363
|
+
findings.push({
|
|
1364
|
+
level: "error",
|
|
1365
|
+
message: `Invalid npm alreadyPublished behavior: ${npmTarget.alreadyPublished}`,
|
|
1366
|
+
fix: "Use success or error.",
|
|
1367
|
+
});
|
|
1368
|
+
}
|
|
1369
|
+
const smartNetwork = new plugins.smartnetwork.SmartNetwork();
|
|
1370
|
+
await Promise.all(registries.map(async (registry) => {
|
|
1371
|
+
await validateNpmRegistry(registry, smartNetwork, findings);
|
|
1372
|
+
await validateNpmAuth(registry, findings);
|
|
1373
|
+
}));
|
|
1374
|
+
}
|
|
1375
|
+
async function validateNpmRegistry(registry, smartNetwork, findings) {
|
|
1376
|
+
const normalizedRegistry = normalizeRegistryUrl(registry);
|
|
1377
|
+
if (normalizedRegistry !== registry) {
|
|
1378
|
+
findings.push({
|
|
1379
|
+
level: "warn",
|
|
1380
|
+
message: `npm registry should be normalized: ${registry}`,
|
|
1381
|
+
fix: `Use ${normalizedRegistry}`,
|
|
1382
|
+
});
|
|
1383
|
+
}
|
|
1384
|
+
let registryUrl;
|
|
1385
|
+
try {
|
|
1386
|
+
registryUrl = new URL(normalizedRegistry);
|
|
1387
|
+
}
|
|
1388
|
+
catch {
|
|
1389
|
+
findings.push({
|
|
1390
|
+
level: "error",
|
|
1391
|
+
message: `Invalid npm registry URL: ${registry}`,
|
|
1392
|
+
fix: "Use a valid http or https registry URL.",
|
|
1393
|
+
});
|
|
1394
|
+
return;
|
|
1395
|
+
}
|
|
1396
|
+
if (registryUrl.protocol !== "https:" && registryUrl.protocol !== "http:") {
|
|
1397
|
+
findings.push({
|
|
1398
|
+
level: "error",
|
|
1399
|
+
message: `Unsupported npm registry protocol: ${registryUrl.protocol}`,
|
|
1400
|
+
fix: "Use an http or https registry URL.",
|
|
1401
|
+
});
|
|
1402
|
+
return;
|
|
1403
|
+
}
|
|
1404
|
+
try {
|
|
1405
|
+
const result = await smartNetwork.checkEndpoint(normalizedRegistry, { timeout: 5000 });
|
|
1406
|
+
if (result.status >= 200 && result.status < 500) {
|
|
1407
|
+
findings.push({
|
|
1408
|
+
level: "ok",
|
|
1409
|
+
message: `npm registry is reachable: ${normalizedRegistry} (${result.status})`,
|
|
1410
|
+
});
|
|
1411
|
+
}
|
|
1412
|
+
else {
|
|
1413
|
+
findings.push({
|
|
1414
|
+
level: "warn",
|
|
1415
|
+
message: `npm registry returned status ${result.status}: ${normalizedRegistry}`,
|
|
1416
|
+
});
|
|
1417
|
+
}
|
|
1418
|
+
}
|
|
1419
|
+
catch (error) {
|
|
1420
|
+
findings.push({
|
|
1421
|
+
level: "warn",
|
|
1422
|
+
message: `npm registry is not reachable: ${normalizedRegistry}`,
|
|
1423
|
+
fix: error instanceof Error ? error.message : String(error),
|
|
1424
|
+
});
|
|
1425
|
+
}
|
|
1426
|
+
}
|
|
1427
|
+
async function validateNpmAuth(registry, findings) {
|
|
1428
|
+
const normalizedRegistry = normalizeRegistryUrl(registry);
|
|
1429
|
+
const smartshellInstance = new plugins.smartshell.Smartshell({
|
|
1430
|
+
executor: "bash",
|
|
1431
|
+
sourceFilePaths: [],
|
|
1432
|
+
});
|
|
1433
|
+
try {
|
|
1434
|
+
const result = await smartshellInstance.execSpawn("pnpm", ["npm", "whoami", `--registry=${normalizedRegistry}`], { silent: true, timeout: 8000 });
|
|
1435
|
+
if (result.exitCode === 0) {
|
|
1436
|
+
findings.push({
|
|
1437
|
+
level: "ok",
|
|
1438
|
+
message: `npm auth is available for ${normalizedRegistry}`,
|
|
1439
|
+
});
|
|
1440
|
+
}
|
|
1441
|
+
else {
|
|
1442
|
+
findings.push({
|
|
1443
|
+
level: "warn",
|
|
1444
|
+
message: `npm auth is missing or invalid for ${normalizedRegistry}`,
|
|
1445
|
+
fix: `Run pnpm npm login --registry=${normalizedRegistry}`,
|
|
1446
|
+
});
|
|
1447
|
+
}
|
|
1448
|
+
}
|
|
1449
|
+
catch (error) {
|
|
1450
|
+
findings.push({
|
|
1451
|
+
level: "warn",
|
|
1452
|
+
message: `Could not check npm auth for ${normalizedRegistry}`,
|
|
1453
|
+
fix: error instanceof Error ? error.message : String(error),
|
|
1454
|
+
});
|
|
1455
|
+
}
|
|
1456
|
+
}
|
|
1457
|
+
function validateDockerTarget(dockerTarget, findings) {
|
|
1458
|
+
const enabled = dockerTarget.enabled ?? false;
|
|
1459
|
+
if (!enabled) {
|
|
1460
|
+
findings.push({ level: "ok", message: "Docker release target is disabled" });
|
|
1461
|
+
return;
|
|
1462
|
+
}
|
|
1463
|
+
if (!Array.isArray(dockerTarget.images) || dockerTarget.images.length === 0) {
|
|
1464
|
+
findings.push({
|
|
1465
|
+
level: "error",
|
|
1466
|
+
message: "Docker release target is enabled without images",
|
|
1467
|
+
fix: "Set release.targets.docker.images or disable release.targets.docker.enabled.",
|
|
1468
|
+
});
|
|
1469
|
+
return;
|
|
1470
|
+
}
|
|
1471
|
+
findings.push({
|
|
1472
|
+
level: "ok",
|
|
1473
|
+
message: `Docker release target has ${dockerTarget.images.length} image template(s)`,
|
|
1474
|
+
});
|
|
1475
|
+
}
|
|
1476
|
+
async function validateDetectedProjectType(cliConfig, findings) {
|
|
1477
|
+
const packageJsonPath = plugins.path.join(process.cwd(), "package.json");
|
|
1478
|
+
const denoJsonPath = plugins.path.join(process.cwd(), "deno.json");
|
|
1479
|
+
const hasPackageJson = await plugins.smartfs.file(packageJsonPath).exists();
|
|
1480
|
+
const hasDenoJson = await plugins.smartfs.file(denoJsonPath).exists();
|
|
1481
|
+
if (!hasPackageJson && !hasDenoJson) {
|
|
1482
|
+
findings.push({
|
|
1483
|
+
level: "warn",
|
|
1484
|
+
message: "Could not detect package.json or deno.json",
|
|
1485
|
+
fix: "Run this command from a project root.",
|
|
1486
|
+
});
|
|
1487
|
+
return;
|
|
1488
|
+
}
|
|
1489
|
+
if (hasPackageJson && validProjectTypes.includes(cliConfig.projectType)) {
|
|
1490
|
+
findings.push({
|
|
1491
|
+
level: "ok",
|
|
1492
|
+
message: "Detected project files match configured npm-compatible project type",
|
|
1493
|
+
});
|
|
1494
|
+
return;
|
|
1495
|
+
}
|
|
1496
|
+
if (hasDenoJson && !hasPackageJson) {
|
|
1497
|
+
findings.push({
|
|
1498
|
+
level: "warn",
|
|
1499
|
+
message: "Detected a Deno-only project, but guided config supports npm-compatible project types",
|
|
1500
|
+
fix: "Use `gitzone config set projectType npm|service|wcc|website` only for npm-compatible projects.",
|
|
1501
|
+
});
|
|
1502
|
+
}
|
|
1503
|
+
}
|
|
572
1504
|
/**
|
|
573
1505
|
* Show help for config command
|
|
574
1506
|
*/
|
|
@@ -582,6 +1514,11 @@ export function showHelp(mode) {
|
|
|
582
1514
|
name: "show",
|
|
583
1515
|
description: "Display current @git.zone/cli configuration",
|
|
584
1516
|
},
|
|
1517
|
+
{ name: "project", description: "Configure project basics interactively" },
|
|
1518
|
+
{ name: "cli", description: "Configure CLI behavior interactively" },
|
|
1519
|
+
{ name: "release", description: "Configure release workflow interactively" },
|
|
1520
|
+
{ name: "doctor", description: "Validate .smartconfig.json" },
|
|
1521
|
+
{ name: "fix [instructions]", description: "Use opencode to repair .smartconfig.json" },
|
|
585
1522
|
{ name: "get <path>", description: "Read a single config value" },
|
|
586
1523
|
{ name: "set <path> <value>", description: "Write a config value" },
|
|
587
1524
|
{ name: "unset <path>", description: "Delete a config value" },
|
|
@@ -603,6 +1540,10 @@ export function showHelp(mode) {
|
|
|
603
1540
|
],
|
|
604
1541
|
examples: [
|
|
605
1542
|
"gitzone config show --json",
|
|
1543
|
+
"gitzone config project",
|
|
1544
|
+
"gitzone config doctor --json",
|
|
1545
|
+
"gitzone config fix",
|
|
1546
|
+
"gitzone config fix -y",
|
|
606
1547
|
"gitzone config get release.targets.npm.accessLevel",
|
|
607
1548
|
"gitzone config set cli.interactive false",
|
|
608
1549
|
"gitzone config set cli.output json",
|
|
@@ -615,6 +1556,11 @@ export function showHelp(mode) {
|
|
|
615
1556
|
console.log("");
|
|
616
1557
|
console.log("Commands:");
|
|
617
1558
|
console.log(" show Display current @git.zone/cli configuration");
|
|
1559
|
+
console.log(" project Configure project basics interactively");
|
|
1560
|
+
console.log(" cli Configure CLI behavior interactively");
|
|
1561
|
+
console.log(" release Configure release workflow interactively");
|
|
1562
|
+
console.log(" doctor Validate .smartconfig.json");
|
|
1563
|
+
console.log(" fix [instructions] Use opencode to repair .smartconfig.json");
|
|
618
1564
|
console.log(" get <path> Read a single config value");
|
|
619
1565
|
console.log(" set <path> <value> Write a config value");
|
|
620
1566
|
console.log(" unset <path> Delete a config value");
|
|
@@ -629,6 +1575,12 @@ export function showHelp(mode) {
|
|
|
629
1575
|
console.log("Examples:");
|
|
630
1576
|
console.log(" gitzone config show");
|
|
631
1577
|
console.log(" gitzone config show --json");
|
|
1578
|
+
console.log(" gitzone config project");
|
|
1579
|
+
console.log(" gitzone config cli");
|
|
1580
|
+
console.log(" gitzone config release");
|
|
1581
|
+
console.log(" gitzone config doctor --json");
|
|
1582
|
+
console.log(" gitzone config fix");
|
|
1583
|
+
console.log(" gitzone config fix -y");
|
|
632
1584
|
console.log(" gitzone config get release.targets.npm.accessLevel");
|
|
633
1585
|
console.log(" gitzone config set cli.interactive false");
|
|
634
1586
|
console.log(" gitzone config set cli.output json");
|
|
@@ -645,4 +1597,4 @@ export function showHelp(mode) {
|
|
|
645
1597
|
console.log(" gitzone config services # Interactive");
|
|
646
1598
|
console.log("");
|
|
647
1599
|
}
|
|
648
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfY29uZmlnL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHdEQUF3RDtBQUV4RCxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBcUIsTUFBTSx3QkFBd0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsbUJBQW1CLEVBQ25CLHVCQUF1QixFQUN2Qix5QkFBeUIsRUFDekIsb0JBQW9CLEdBQ3JCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUNMLGtDQUFrQyxFQUNsQyxzQkFBc0IsR0FDdkIsTUFBTSxxQ0FBcUMsQ0FBQztBQUU3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxDQUFDO0FBRXZDLE1BQU0sY0FBYyxHQUFhO0lBQy9CLE1BQU0sRUFBRSxPQUFPO0lBQ2YsV0FBVyxFQUFFLElBQUk7SUFDakIsSUFBSSxFQUFFLEtBQUs7SUFDWCxLQUFLLEVBQUUsS0FBSztJQUNaLEtBQUssRUFBRSxLQUFLO0lBQ1osR0FBRyxFQUFFLEtBQUs7SUFDVixJQUFJLEVBQUUsS0FBSztJQUNYLEtBQUssRUFBRSxLQUFLO0lBQ1osWUFBWSxFQUFFLElBQUk7SUFDbEIsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBRUY7OztHQUdHO0FBQ0gsS0FBSyxVQUFVLHlCQUF5QixDQUFDLElBQWM7SUFDckQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN0QixPQUFPO0lBQ1QsQ0FBQztJQUVELHdCQUF3QjtJQUN4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
|
|
1600
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfY29uZmlnL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHdEQUF3RDtBQUV4RCxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBcUIsTUFBTSx3QkFBd0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFDTCxhQUFhLEVBQ2IseUJBQXlCLEVBQ3pCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUN6QixvQkFBb0IsR0FDckIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsa0NBQWtDLEVBQ2xDLHNCQUFzQixHQUN2QixNQUFNLHFDQUFxQyxDQUFDO0FBRTdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLENBQUM7QUFFdkMsTUFBTSxjQUFjLEdBQWE7SUFDL0IsTUFBTSxFQUFFLE9BQU87SUFDZixXQUFXLEVBQUUsSUFBSTtJQUNqQixJQUFJLEVBQUUsS0FBSztJQUNYLEtBQUssRUFBRSxLQUFLO0lBQ1osS0FBSyxFQUFFLEtBQUs7SUFDWixHQUFHLEVBQUUsS0FBSztJQUNWLElBQUksRUFBRSxLQUFLO0lBQ1gsS0FBSyxFQUFFLEtBQUs7SUFDWixZQUFZLEVBQUUsSUFBSTtJQUNsQixLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxLQUFLLFVBQVUseUJBQXlCLENBQUMsSUFBYztJQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3RCLE9BQU87SUFD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
|