@git.zone/cli 2.14.3 → 2.16.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/.smartconfig.json +36 -11
- package/assets/templates/service/npmextra.json +8 -2
- package/assets/templates/smartconfig/_smartconfig.json +5 -1
- package/assets/templates/website/npmextra.json +8 -2
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/gitzone.cli.js +15 -1
- package/dist_ts/helpers.changelog.d.ts +16 -0
- package/dist_ts/helpers.changelog.js +114 -0
- package/dist_ts/helpers.smartconfigmigrations.d.ts +7 -0
- package/dist_ts/helpers.smartconfigmigrations.js +161 -0
- package/dist_ts/helpers.workflow.d.ts +97 -0
- package/dist_ts/helpers.workflow.js +258 -0
- package/dist_ts/mod_commit/index.js +190 -303
- package/dist_ts/mod_commit/mod.helpers.d.ts +23 -0
- package/dist_ts/mod_commit/mod.helpers.js +22 -15
- package/dist_ts/mod_commit/mod.ui.d.ts +1 -1
- package/dist_ts/mod_commit/mod.ui.js +7 -2
- package/dist_ts/mod_config/classes.commitconfig.d.ts +6 -0
- package/dist_ts/mod_config/classes.commitconfig.js +28 -4
- package/dist_ts/mod_config/classes.releaseconfig.js +13 -7
- package/dist_ts/mod_config/index.js +77 -29
- package/dist_ts/mod_format/formatters/smartconfig.formatter.js +3 -57
- package/dist_ts/mod_release/index.d.ts +3 -0
- package/dist_ts/mod_release/index.js +299 -0
- package/dist_ts/mod_release/mod.plugins.d.ts +3 -0
- package/dist_ts/mod_release/mod.plugins.js +4 -0
- package/dist_ts/mod_standard/index.js +29 -3
- package/dist_ts/mod_tools/classes.packagemanager.d.ts +27 -0
- package/dist_ts/mod_tools/classes.packagemanager.js +140 -0
- package/dist_ts/mod_tools/index.d.ts +4 -0
- package/dist_ts/mod_tools/index.js +290 -0
- package/dist_ts/mod_tools/mod.plugins.d.ts +1 -0
- package/dist_ts/mod_tools/mod.plugins.js +2 -0
- package/license +2 -2
- package/package.json +20 -30
- package/readme.hints.md +15 -17
- package/readme.md +251 -415
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/gitzone.cli.ts +16 -0
- package/ts/helpers.changelog.ts +165 -0
- package/ts/helpers.smartconfigmigrations.ts +192 -0
- package/ts/helpers.workflow.ts +387 -0
- package/ts/mod_commit/index.ts +233 -435
- package/ts/mod_commit/mod.helpers.ts +28 -16
- package/ts/mod_commit/mod.ui.ts +7 -2
- package/ts/mod_config/classes.commitconfig.ts +33 -3
- package/ts/mod_config/classes.releaseconfig.ts +14 -7
- package/ts/mod_config/index.ts +89 -28
- package/ts/mod_format/formatters/smartconfig.formatter.ts +2 -62
- package/ts/mod_release/index.ts +393 -0
- package/ts/mod_release/mod.plugins.ts +5 -0
- package/ts/mod_standard/index.ts +28 -2
- package/ts/mod_tools/classes.packagemanager.ts +176 -0
- package/ts/mod_tools/index.ts +359 -0
- package/ts/mod_tools/mod.plugins.ts +1 -0
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import * as plugins from "./mod.plugins.js";
|
|
2
|
+
import { commitinfo } from "../00_commitinfo_data.js";
|
|
3
|
+
import { getCliMode, printJson } from "../helpers.climode.js";
|
|
4
|
+
import { PackageManagerUtil, } from "./classes.packagemanager.js";
|
|
5
|
+
export const GITZONE_PACKAGES = [
|
|
6
|
+
"@git.zone/cli",
|
|
7
|
+
"@git.zone/tsdoc",
|
|
8
|
+
"@git.zone/tsbuild",
|
|
9
|
+
"@git.zone/tstest",
|
|
10
|
+
"@git.zone/tspublish",
|
|
11
|
+
"@git.zone/tsbundle",
|
|
12
|
+
"@git.zone/tsdocker",
|
|
13
|
+
"@git.zone/tsview",
|
|
14
|
+
"@git.zone/tswatch",
|
|
15
|
+
"@git.zone/tsrust",
|
|
16
|
+
];
|
|
17
|
+
export const run = async (argvArg = {}) => {
|
|
18
|
+
const mode = await getCliMode(argvArg);
|
|
19
|
+
const command = argvArg._?.[1] || "help";
|
|
20
|
+
if (mode.help || command === "help") {
|
|
21
|
+
showHelp(mode);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
switch (command) {
|
|
25
|
+
case "update":
|
|
26
|
+
await runUpdate(argvArg, mode);
|
|
27
|
+
break;
|
|
28
|
+
case "install":
|
|
29
|
+
await runInstall(argvArg, mode);
|
|
30
|
+
break;
|
|
31
|
+
default:
|
|
32
|
+
showHelp(mode);
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
async function runUpdate(argvArg, mode) {
|
|
37
|
+
const verbose = Boolean(argvArg.v || argvArg.verbose);
|
|
38
|
+
const pmUtil = new PackageManagerUtil();
|
|
39
|
+
console.log("Scanning for installed @git.zone packages...\n");
|
|
40
|
+
const pnpmInfo = await pmUtil.getPnpmVersionInfo();
|
|
41
|
+
if (!pnpmInfo.available) {
|
|
42
|
+
console.log("pnpm is required for gitzone tools update, but it was not found.");
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
console.log("Package manager:\n");
|
|
46
|
+
console.log(" Name Current Latest Status");
|
|
47
|
+
console.log(" ----------------------------------------------");
|
|
48
|
+
const latestPnpm = (pnpmInfo.latestVersion || "unknown").padEnd(12);
|
|
49
|
+
const pnpmStatus = pnpmInfo.latestVersion === null
|
|
50
|
+
? "? Version unknown"
|
|
51
|
+
: pnpmInfo.needsUpdate
|
|
52
|
+
? "Update available"
|
|
53
|
+
: "Up to date";
|
|
54
|
+
console.log(` ${"pnpm".padEnd(9)}${pnpmInfo.currentVersion.padEnd(12)}${latestPnpm}${pnpmStatus}`);
|
|
55
|
+
console.log("");
|
|
56
|
+
if (verbose) {
|
|
57
|
+
console.log("Using pnpm as the supported global package manager.\n");
|
|
58
|
+
}
|
|
59
|
+
const selfUpdated = await handleSelfUpdate(pmUtil, mode);
|
|
60
|
+
if (selfUpdated) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const installedPackages = await pmUtil.getInstalledPackages();
|
|
64
|
+
const packageInfos = await getPackageUpdateInfos(pmUtil, installedPackages);
|
|
65
|
+
if (packageInfos.length === 0) {
|
|
66
|
+
console.log("No managed @git.zone packages found installed globally.");
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
console.log("Installed @git.zone packages:\n");
|
|
70
|
+
console.log(" Package Current Latest Status");
|
|
71
|
+
console.log(" ------------------------------------------------------------");
|
|
72
|
+
for (const packageInfo of packageInfos) {
|
|
73
|
+
const status = packageInfo.latestVersion === "unknown"
|
|
74
|
+
? "? Version unknown"
|
|
75
|
+
: packageInfo.needsUpdate
|
|
76
|
+
? "Update available"
|
|
77
|
+
: "Up to date";
|
|
78
|
+
console.log(` ${packageInfo.name.padEnd(28)}${packageInfo.currentVersion.padEnd(12)}${packageInfo.latestVersion.padEnd(12)}${status}`);
|
|
79
|
+
}
|
|
80
|
+
console.log("");
|
|
81
|
+
await printMissingPackages(pmUtil, installedPackages);
|
|
82
|
+
const packagesToUpdate = packageInfos.filter((packageInfo) => packageInfo.needsUpdate);
|
|
83
|
+
if (packagesToUpdate.length === 0) {
|
|
84
|
+
console.log("All managed packages are up to date.");
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
console.log(`Found ${packagesToUpdate.length} package(s) with available updates.\n`);
|
|
88
|
+
if (!mode.yes && !mode.interactive) {
|
|
89
|
+
console.log("Run gitzone tools update -y to update without prompts.");
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
let shouldUpdate = mode.yes;
|
|
93
|
+
if (!shouldUpdate) {
|
|
94
|
+
const interactInstance = new plugins.smartinteract.SmartInteract();
|
|
95
|
+
const answer = await interactInstance.askQuestion({
|
|
96
|
+
type: "confirm",
|
|
97
|
+
name: "confirmUpdate",
|
|
98
|
+
message: "Do you want to update these packages?",
|
|
99
|
+
default: true,
|
|
100
|
+
});
|
|
101
|
+
shouldUpdate = answer.value === true;
|
|
102
|
+
}
|
|
103
|
+
if (!shouldUpdate) {
|
|
104
|
+
console.log("Update cancelled.");
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
await installPackages(pmUtil, packagesToUpdate.map((packageInfo) => packageInfo.name), "updated");
|
|
108
|
+
}
|
|
109
|
+
async function runInstall(argvArg, mode) {
|
|
110
|
+
const verbose = Boolean(argvArg.v || argvArg.verbose);
|
|
111
|
+
const pmUtil = new PackageManagerUtil();
|
|
112
|
+
console.log("Scanning for missing @git.zone packages...\n");
|
|
113
|
+
const pnpmAvailable = await pmUtil.detectPnpm();
|
|
114
|
+
if (!pnpmAvailable) {
|
|
115
|
+
console.log("pnpm is required for gitzone tools install, but it was not found.");
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
if (verbose) {
|
|
119
|
+
console.log("Using pnpm as the supported global package manager.\n");
|
|
120
|
+
}
|
|
121
|
+
const installedPackages = await pmUtil.getInstalledPackages();
|
|
122
|
+
const installedNames = new Set(installedPackages.map((packageInfo) => packageInfo.name));
|
|
123
|
+
const missingPackages = GITZONE_PACKAGES.filter((packageName) => !installedNames.has(packageName));
|
|
124
|
+
if (missingPackages.length === 0) {
|
|
125
|
+
console.log("All managed @git.zone packages are already installed.");
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
console.log(`Found ${missingPackages.length} missing package(s).\n`);
|
|
129
|
+
if (!mode.yes && !mode.interactive) {
|
|
130
|
+
await printPackageListWithLatest(pmUtil, missingPackages);
|
|
131
|
+
console.log("Run gitzone tools install -y to install all missing packages without prompts.");
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
let selectedPackages = missingPackages;
|
|
135
|
+
if (!mode.yes) {
|
|
136
|
+
const choicesWithVersions = [];
|
|
137
|
+
for (const packageName of missingPackages) {
|
|
138
|
+
const latest = await pmUtil.getLatestVersion(packageName);
|
|
139
|
+
choicesWithVersions.push({
|
|
140
|
+
name: `${packageName}${latest ? `@${latest}` : ""}`,
|
|
141
|
+
value: packageName,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
const interactInstance = new plugins.smartinteract.SmartInteract();
|
|
145
|
+
const answer = await interactInstance.askQuestion({
|
|
146
|
+
type: "checkbox",
|
|
147
|
+
name: "packages",
|
|
148
|
+
message: "Select packages to install:",
|
|
149
|
+
default: missingPackages,
|
|
150
|
+
choices: choicesWithVersions,
|
|
151
|
+
});
|
|
152
|
+
selectedPackages = answer.value;
|
|
153
|
+
if (selectedPackages.length === 0) {
|
|
154
|
+
console.log("No packages selected. Nothing to install.");
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
await installPackages(pmUtil, selectedPackages, "installed");
|
|
159
|
+
}
|
|
160
|
+
async function handleSelfUpdate(pmUtil, mode) {
|
|
161
|
+
console.log("Checking for gitzone self-update...\n");
|
|
162
|
+
const currentVersion = commitinfo.version;
|
|
163
|
+
const latestVersion = await pmUtil.getLatestVersion("@git.zone/cli");
|
|
164
|
+
if (!latestVersion || !pmUtil.isNewerVersion(currentVersion, latestVersion)) {
|
|
165
|
+
console.log(` @git.zone/cli ${currentVersion} Up to date\n`);
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
console.log(` @git.zone/cli ${currentVersion} -> ${latestVersion} Update available\n`);
|
|
169
|
+
if (!mode.yes && !mode.interactive) {
|
|
170
|
+
console.log("Run gitzone tools update -y to update gitzone first.");
|
|
171
|
+
return true;
|
|
172
|
+
}
|
|
173
|
+
let shouldUpdate = mode.yes;
|
|
174
|
+
if (!shouldUpdate) {
|
|
175
|
+
const interactInstance = new plugins.smartinteract.SmartInteract();
|
|
176
|
+
const answer = await interactInstance.askQuestion({
|
|
177
|
+
type: "confirm",
|
|
178
|
+
name: "confirmSelfUpdate",
|
|
179
|
+
message: "Do you want to update gitzone itself first?",
|
|
180
|
+
default: true,
|
|
181
|
+
});
|
|
182
|
+
shouldUpdate = answer.value === true;
|
|
183
|
+
}
|
|
184
|
+
if (!shouldUpdate) {
|
|
185
|
+
console.log("Skipping gitzone self-update.\n");
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
const success = await pmUtil.installLatest("@git.zone/cli");
|
|
189
|
+
if (!success) {
|
|
190
|
+
console.log("\ngitzone self-update failed. Continuing with the current version.\n");
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
console.log("\ngitzone has been updated. Re-run gitzone tools update to check remaining packages.");
|
|
194
|
+
return true;
|
|
195
|
+
}
|
|
196
|
+
async function getPackageUpdateInfos(pmUtil, installedPackages) {
|
|
197
|
+
const packageInfos = [];
|
|
198
|
+
for (const installedPackage of installedPackages) {
|
|
199
|
+
if (!GITZONE_PACKAGES.includes(installedPackage.name)) {
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
const latestVersion = await pmUtil.getLatestVersion(installedPackage.name);
|
|
203
|
+
packageInfos.push({
|
|
204
|
+
name: installedPackage.name,
|
|
205
|
+
currentVersion: installedPackage.version,
|
|
206
|
+
latestVersion: latestVersion || "unknown",
|
|
207
|
+
needsUpdate: latestVersion
|
|
208
|
+
? pmUtil.isNewerVersion(installedPackage.version, latestVersion)
|
|
209
|
+
: false,
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
return packageInfos;
|
|
213
|
+
}
|
|
214
|
+
async function printMissingPackages(pmUtil, installedPackages) {
|
|
215
|
+
const installedNames = new Set(installedPackages.map((packageInfo) => packageInfo.name));
|
|
216
|
+
const missingPackages = GITZONE_PACKAGES.filter((packageName) => !installedNames.has(packageName));
|
|
217
|
+
if (missingPackages.length === 0) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
console.log("Not installed (managed @git.zone packages):\n");
|
|
221
|
+
await printPackageListWithLatest(pmUtil, missingPackages);
|
|
222
|
+
console.log("Run gitzone tools install to install missing packages.\n");
|
|
223
|
+
}
|
|
224
|
+
async function printPackageListWithLatest(pmUtil, packageNames) {
|
|
225
|
+
console.log(" Package Latest");
|
|
226
|
+
console.log(" ----------------------------------------");
|
|
227
|
+
for (const packageName of packageNames) {
|
|
228
|
+
const latest = await pmUtil.getLatestVersion(packageName);
|
|
229
|
+
console.log(` ${packageName.padEnd(28)} ${latest || "unknown"}`);
|
|
230
|
+
}
|
|
231
|
+
console.log("");
|
|
232
|
+
}
|
|
233
|
+
async function installPackages(pmUtil, packageNames, action) {
|
|
234
|
+
let successCount = 0;
|
|
235
|
+
let failCount = 0;
|
|
236
|
+
for (const packageName of packageNames) {
|
|
237
|
+
const success = await pmUtil.installLatest(packageName);
|
|
238
|
+
if (success) {
|
|
239
|
+
console.log(` ${packageName} ${action} successfully`);
|
|
240
|
+
successCount++;
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
console.log(` ${packageName} failed`);
|
|
244
|
+
failCount++;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
console.log("");
|
|
248
|
+
if (failCount === 0) {
|
|
249
|
+
console.log(`All ${successCount} package(s) ${action} successfully.`);
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
console.log(`${successCount} package(s) ${action}, ${failCount} failed.`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
export function showHelp(mode) {
|
|
256
|
+
if (mode?.json) {
|
|
257
|
+
printJson({
|
|
258
|
+
name: "gitzone tools",
|
|
259
|
+
usage: "gitzone tools <command> [options]",
|
|
260
|
+
commands: [
|
|
261
|
+
{ name: "update", description: "Check and update globally installed @git.zone packages" },
|
|
262
|
+
{ name: "install", description: "Install missing managed @git.zone packages" },
|
|
263
|
+
],
|
|
264
|
+
flags: [
|
|
265
|
+
{ flag: "-y, --yes", description: "Run without confirmation prompts" },
|
|
266
|
+
{ flag: "-v, --verbose", description: "Show package manager diagnostics" },
|
|
267
|
+
],
|
|
268
|
+
packageManager: "pnpm",
|
|
269
|
+
managedPackages: GITZONE_PACKAGES,
|
|
270
|
+
});
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
console.log("");
|
|
274
|
+
console.log("Usage: gitzone tools <command> [options]");
|
|
275
|
+
console.log("");
|
|
276
|
+
console.log("Commands:");
|
|
277
|
+
console.log(" update Check and update globally installed @git.zone packages");
|
|
278
|
+
console.log(" install Install missing managed @git.zone packages");
|
|
279
|
+
console.log("");
|
|
280
|
+
console.log("Options:");
|
|
281
|
+
console.log(" -y, --yes Run without confirmation prompts");
|
|
282
|
+
console.log(" -v, --verbose Show package manager diagnostics");
|
|
283
|
+
console.log("");
|
|
284
|
+
console.log("Examples:");
|
|
285
|
+
console.log(" gitzone tools update");
|
|
286
|
+
console.log(" gitzone tools update -y");
|
|
287
|
+
console.log(" gitzone tools install");
|
|
288
|
+
console.log("");
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfdG9vbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQ0wsa0JBQWtCLEdBR25CLE1BQU0sNkJBQTZCLENBQUM7QUFFckMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUc7SUFDOUIsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLHFCQUFxQjtJQUNyQixvQkFBb0I7SUFDcEIsb0JBQW9CO0lBQ3BCLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIsa0JBQWtCO0NBQ25CLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLFVBQWUsRUFBRSxFQUFpQixFQUFFO0lBQzVELE1BQU0sSUFBSSxHQUFHLE1BQU0sVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUM7SUFFekMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLE9BQU8sS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUNwQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDZixPQUFPO0lBQ1QsQ0FBQztJQUVELFFBQVEsT0FBTyxFQUFFLENBQUM7UUFDaEIsS0FBSyxRQUFRO1lBQ1gsTUFBTSxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQy9CLE1BQU07UUFDUixLQUFLLFNBQVM7WUFDWixNQUFNLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxD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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "../plugins.js";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from "../plugins.js";
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kLnBsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfdG9vbHMvbW9kLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxlQUFlLENBQUMifQ==
|
package/license
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Copyright (c) 2015 Task Venture Capital GmbH (hello@
|
|
1
|
+
Copyright (c) 2015 Task Venture Capital GmbH (hello@task.vc)
|
|
2
2
|
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
4
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -16,4 +16,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
16
16
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
17
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
18
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
19
|
-
SOFTWARE.
|
|
19
|
+
SOFTWARE.
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@git.zone/cli",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.16.0",
|
|
5
5
|
"description": "A comprehensive CLI tool for enhancing and managing local development workflows with gitzone utilities, focusing on project setup, version control, code formatting, and template management.",
|
|
6
6
|
"main": "dist_ts/index.js",
|
|
7
7
|
"typings": "dist_ts/index.d.ts",
|
|
@@ -10,24 +10,6 @@
|
|
|
10
10
|
"gitzone": "./cli.js",
|
|
11
11
|
"gzone": "./cli.js"
|
|
12
12
|
},
|
|
13
|
-
"scripts": {
|
|
14
|
-
"test": "(pnpm run clean && pnpm run prepareTest && pnpm run testCli && pnpm run testFormat && pnpm run testCommit && pnpm run testDeprecate && pnpm run testVersion && pnpm run testReadme && pnpm run testUpdate && pnpm run testTemplateNpm && pnpm run testTemplateLit) && rm -rf .nogit/test",
|
|
15
|
-
"build": "tsbuild tsfolders",
|
|
16
|
-
"clean": "(rm -rf .nogit/test/)",
|
|
17
|
-
"prepareTest": "(mkdir -p .nogit && git clone https://gitlab.com/sandboxzone/sandbox-npmts.git .nogit/test/)",
|
|
18
|
-
"testBuild": "pnpm run build && rm -r dist/",
|
|
19
|
-
"testCli": "(cd .nogit/test && node ../../cli.ts.js)",
|
|
20
|
-
"testCommit": "(cd .nogit/test && node ../../cli.ts.js commit)",
|
|
21
|
-
"testDeprecate": "(cd .nogit/test && node ../../cli.ts.js deprecate)",
|
|
22
|
-
"testOpen": "(cd .nogit/test && node ../../cli.ts.js open ci)",
|
|
23
|
-
"testReadme": "(cd .nogit/test && node ../../cli.ts.js readme)",
|
|
24
|
-
"testFormat": "(cd .nogit/test && node ../../cli.ts.js format)",
|
|
25
|
-
"testTemplateNpm": "(rm -rf .nogit/test/testtemplate_npm/ && mkdir -p .nogit/test/testtemplate_npm && cd .nogit/test/testtemplate_npm && node ../../../cli.ts.js template npm)",
|
|
26
|
-
"testTemplateLit": "(rm -rf .nogit/test/testtemplate_lit/ && mkdir -p .nogit/test/testtemplate_lit && cd .nogit/test/testtemplate_lit && node ../../../cli.ts.js template lit)",
|
|
27
|
-
"testUpdate": "(cd .nogit/test && node ../../cli.ts.js update)",
|
|
28
|
-
"testVersion": "(cd .nogit/test && node ../../cli.ts.js -v)",
|
|
29
|
-
"buildDocs": "tsdoc"
|
|
30
|
-
},
|
|
31
13
|
"repository": {
|
|
32
14
|
"type": "git",
|
|
33
15
|
"url": "https://gitlab.com/gitzone/private/gitzone.git"
|
|
@@ -107,14 +89,22 @@
|
|
|
107
89
|
"browserslist": [
|
|
108
90
|
"last 1 chrome versions"
|
|
109
91
|
],
|
|
110
|
-
"
|
|
111
|
-
"
|
|
112
|
-
"
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
92
|
+
"scripts": {
|
|
93
|
+
"test": "(pnpm run clean && pnpm run prepareTest && pnpm run testCli && pnpm run testFormat && pnpm run testCommit && pnpm run testDeprecate && pnpm run testVersion && pnpm run testReadme && pnpm run testUpdate && pnpm run testTemplateNpm && pnpm run testTemplateLit) && rm -rf .nogit/test",
|
|
94
|
+
"build": "tsbuild tsfolders",
|
|
95
|
+
"clean": "(rm -rf .nogit/test/)",
|
|
96
|
+
"prepareTest": "(mkdir -p .nogit && git clone https://gitlab.com/sandboxzone/sandbox-npmts.git .nogit/test/)",
|
|
97
|
+
"testBuild": "pnpm run build && rm -r dist/",
|
|
98
|
+
"testCli": "(cd .nogit/test && node ../../cli.ts.js)",
|
|
99
|
+
"testCommit": "(cd .nogit/test && node ../../cli.ts.js commit)",
|
|
100
|
+
"testDeprecate": "(cd .nogit/test && node ../../cli.ts.js deprecate)",
|
|
101
|
+
"testOpen": "(cd .nogit/test && node ../../cli.ts.js open ci)",
|
|
102
|
+
"testReadme": "(cd .nogit/test && node ../../cli.ts.js readme)",
|
|
103
|
+
"testFormat": "(cd .nogit/test && node ../../cli.ts.js format)",
|
|
104
|
+
"testTemplateNpm": "(rm -rf .nogit/test/testtemplate_npm/ && mkdir -p .nogit/test/testtemplate_npm && cd .nogit/test/testtemplate_npm && node ../../../cli.ts.js template npm)",
|
|
105
|
+
"testTemplateLit": "(rm -rf .nogit/test/testtemplate_lit/ && mkdir -p .nogit/test/testtemplate_lit && cd .nogit/test/testtemplate_lit && node ../../../cli.ts.js template lit)",
|
|
106
|
+
"testUpdate": "(cd .nogit/test && node ../../cli.ts.js update)",
|
|
107
|
+
"testVersion": "(cd .nogit/test && node ../../cli.ts.js -v)",
|
|
108
|
+
"buildDocs": "tsdoc"
|
|
109
|
+
}
|
|
110
|
+
}
|
package/readme.hints.md
CHANGED
|
@@ -38,7 +38,7 @@ The format module is responsible for project standardization:
|
|
|
38
38
|
2. **copy** - File copying with glob patterns (fully implemented)
|
|
39
39
|
3. **gitignore** - Creates/updates .gitignore from templates
|
|
40
40
|
4. **license** - Checks dependency licenses for compatibility
|
|
41
|
-
5. **
|
|
41
|
+
5. **smartconfig** - Manages project metadata and configuration
|
|
42
42
|
6. **packagejson** - Formats and updates package.json
|
|
43
43
|
7. **prettier** - Applies code formatting with batching
|
|
44
44
|
8. **readme** - Ensures readme files exist
|
|
@@ -89,28 +89,26 @@ The format module is responsible for project standardization:
|
|
|
89
89
|
5. **Performance Optimizations**: Parallel execution and caching
|
|
90
90
|
6. **Reporting**: Diff views, statistics, verbose logging
|
|
91
91
|
7. **Architecture**: Clean separation of concerns with new classes
|
|
92
|
-
8. **
|
|
92
|
+
8. **Split Commit/Release Workflows**: `commit` creates source commits; `release` owns versioning, tags, and artifact publishing
|
|
93
93
|
|
|
94
|
-
###
|
|
94
|
+
### Commit/Release Workflow Refactor (Latest)
|
|
95
95
|
|
|
96
|
-
The commit module
|
|
96
|
+
The commit module no longer bumps versions, creates tags, or publishes packages. Release work now belongs to `gitzone release`:
|
|
97
97
|
|
|
98
98
|
**Changes:**
|
|
99
99
|
|
|
100
|
-
-
|
|
101
|
-
-
|
|
102
|
-
-
|
|
103
|
-
-
|
|
104
|
-
-
|
|
105
|
-
-
|
|
100
|
+
- `gitzone commit` analyzes changes, updates `changelog.md` `Pending`, commits, and optionally pushes.
|
|
101
|
+
- `gitzone release` reads `Pending`, bumps versions, moves changelog entries into a version section, tags, pushes, and publishes configured artifacts.
|
|
102
|
+
- Commit workflow steps are configured in `.smartconfig.json` under `@git.zone/cli.commit.steps`.
|
|
103
|
+
- Smartconfig schema versioning lives at `@git.zone/cli.schemaVersion`; run `gitzone config migrate <version>` for targeted migrations.
|
|
104
|
+
- Release publishing is target-based under `@git.zone/cli.release.targets`.
|
|
105
|
+
- NPM registries only live under `@git.zone/cli.release.targets.npm.registries`.
|
|
106
106
|
|
|
107
107
|
**Benefits:**
|
|
108
108
|
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
-
|
|
112
|
-
- Same code path for all project types
|
|
113
|
-
- Reuses existing `calculateNewVersion()` function
|
|
109
|
+
- Commit is safer and has no publishing side effects.
|
|
110
|
+
- Multiple source commits can accumulate into one release via `Pending`.
|
|
111
|
+
- Per-artifact release results can distinguish published, already-published, skipped, and failed targets.
|
|
114
112
|
|
|
115
113
|
### Auto-Accept Flag for Commits
|
|
116
114
|
|
|
@@ -219,7 +217,7 @@ gitzone format --detailed
|
|
|
219
217
|
# Inspect config for agents and scripts
|
|
220
218
|
gitzone config show --json
|
|
221
219
|
gitzone config set cli.output json
|
|
222
|
-
gitzone config get release.accessLevel
|
|
220
|
+
gitzone config get release.targets.npm.accessLevel
|
|
223
221
|
```
|
|
224
222
|
|
|
225
223
|
## Common Issues (Now Resolved)
|
|
@@ -291,7 +289,7 @@ All sync methods must become async. Functions that were previously synchronous (
|
|
|
291
289
|
**Affected Modules:**
|
|
292
290
|
|
|
293
291
|
- ts/mod_format/\* (largest area - 15+ files)
|
|
294
|
-
- ts/mod_commit/\* (
|
|
292
|
+
- ts/mod_commit/\* and ts/mod_release/\* (commit/release workflows)
|
|
295
293
|
- ts/mod_services/\* (configuration management)
|
|
296
294
|
- ts/mod_meta/\* (meta repository management)
|
|
297
295
|
- ts/mod_standard/\* (template listing)
|