@git.zone/cli 2.14.2 → 2.15.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.
Files changed (46) hide show
  1. package/.smartconfig.json +36 -11
  2. package/assets/templates/service/npmextra.json +8 -2
  3. package/assets/templates/smartconfig/_smartconfig.json +5 -1
  4. package/assets/templates/website/npmextra.json +8 -2
  5. package/dist_ts/00_commitinfo_data.js +1 -1
  6. package/dist_ts/gitzone.cli.js +8 -1
  7. package/dist_ts/helpers.changelog.d.ts +16 -0
  8. package/dist_ts/helpers.changelog.js +114 -0
  9. package/dist_ts/helpers.smartconfigmigrations.d.ts +7 -0
  10. package/dist_ts/helpers.smartconfigmigrations.js +161 -0
  11. package/dist_ts/helpers.workflow.d.ts +97 -0
  12. package/dist_ts/helpers.workflow.js +258 -0
  13. package/dist_ts/mod_commit/index.js +190 -303
  14. package/dist_ts/mod_commit/mod.helpers.d.ts +23 -0
  15. package/dist_ts/mod_commit/mod.helpers.js +22 -15
  16. package/dist_ts/mod_commit/mod.ui.d.ts +1 -1
  17. package/dist_ts/mod_commit/mod.ui.js +7 -2
  18. package/dist_ts/mod_config/classes.commitconfig.d.ts +6 -0
  19. package/dist_ts/mod_config/classes.commitconfig.js +28 -4
  20. package/dist_ts/mod_config/classes.releaseconfig.js +13 -7
  21. package/dist_ts/mod_config/index.js +77 -29
  22. package/dist_ts/mod_format/formatters/smartconfig.formatter.js +3 -57
  23. package/dist_ts/mod_release/index.d.ts +3 -0
  24. package/dist_ts/mod_release/index.js +299 -0
  25. package/dist_ts/mod_release/mod.plugins.d.ts +3 -0
  26. package/dist_ts/mod_release/mod.plugins.js +4 -0
  27. package/dist_ts/mod_standard/index.js +16 -3
  28. package/license +2 -2
  29. package/package.json +20 -30
  30. package/readme.hints.md +15 -17
  31. package/readme.md +239 -421
  32. package/ts/00_commitinfo_data.ts +1 -1
  33. package/ts/gitzone.cli.ts +8 -0
  34. package/ts/helpers.changelog.ts +165 -0
  35. package/ts/helpers.smartconfigmigrations.ts +192 -0
  36. package/ts/helpers.workflow.ts +387 -0
  37. package/ts/mod_commit/index.ts +233 -435
  38. package/ts/mod_commit/mod.helpers.ts +28 -16
  39. package/ts/mod_commit/mod.ui.ts +7 -2
  40. package/ts/mod_config/classes.commitconfig.ts +33 -3
  41. package/ts/mod_config/classes.releaseconfig.ts +14 -7
  42. package/ts/mod_config/index.ts +89 -28
  43. package/ts/mod_format/formatters/smartconfig.formatter.ts +2 -62
  44. package/ts/mod_release/index.ts +393 -0
  45. package/ts/mod_release/mod.plugins.ts +5 -0
  46. package/ts/mod_standard/index.ts +15 -2
@@ -0,0 +1,258 @@
1
+ import { getCliConfigValue } from "./helpers.smartconfig.js";
2
+ const commitFlagToStep = {
3
+ f: "format",
4
+ t: "test",
5
+ b: "build",
6
+ p: "push",
7
+ };
8
+ const unique = (items) => {
9
+ const result = [];
10
+ for (const item of items) {
11
+ if (!result.includes(item)) {
12
+ result.push(item);
13
+ }
14
+ }
15
+ return result;
16
+ };
17
+ const normalizeConfirmation = (value, fallback) => {
18
+ if (value === "prompt" || value === "auto" || value === "plan") {
19
+ return value;
20
+ }
21
+ return fallback;
22
+ };
23
+ const normalizeRegistryUrl = (url) => {
24
+ let normalizedUrl = url.trim();
25
+ if (!normalizedUrl.startsWith("http://") && !normalizedUrl.startsWith("https://")) {
26
+ normalizedUrl = `https://${normalizedUrl}`;
27
+ }
28
+ return normalizedUrl.endsWith("/") ? normalizedUrl.slice(0, -1) : normalizedUrl;
29
+ };
30
+ const isDisabled = (argvArg, ...keys) => {
31
+ return keys.some((key) => argvArg[key] === false || argvArg[`no-${key}`] || argvArg[`no${key[0].toUpperCase()}${key.slice(1)}`]);
32
+ };
33
+ const readCliWorkflowConfig = async () => {
34
+ return await getCliConfigValue("", {});
35
+ };
36
+ const getOrderedArgsAfterCommand = (commandName) => {
37
+ const rawArgs = process.argv.slice(2);
38
+ const commandIndex = rawArgs.indexOf(commandName);
39
+ if (commandIndex === -1) {
40
+ return rawArgs;
41
+ }
42
+ return rawArgs.slice(commandIndex + 1);
43
+ };
44
+ const getOrderedShortFlags = (commandName) => {
45
+ const orderedFlags = [];
46
+ for (const arg of getOrderedArgsAfterCommand(commandName)) {
47
+ if (arg === "--") {
48
+ break;
49
+ }
50
+ if (arg.startsWith("--")) {
51
+ continue;
52
+ }
53
+ if (arg.startsWith("-") && arg.length > 1) {
54
+ orderedFlags.push(...arg.slice(1).split(""));
55
+ }
56
+ }
57
+ return orderedFlags;
58
+ };
59
+ const hasExplicitCommitWorkflowFlags = (argvArg) => {
60
+ return Boolean(argvArg.f ||
61
+ argvArg.format ||
62
+ argvArg.t ||
63
+ argvArg.test ||
64
+ argvArg.b ||
65
+ argvArg.build ||
66
+ argvArg.p ||
67
+ argvArg.push);
68
+ };
69
+ const normalizeCommitSteps = (rawSteps) => {
70
+ const steps = unique(rawSteps.filter(Boolean));
71
+ const pushRequested = steps.includes("push");
72
+ const prePushSteps = steps.filter((step) => step !== "push");
73
+ if (!prePushSteps.includes("analyze")) {
74
+ prePushSteps.unshift("analyze");
75
+ }
76
+ if (!prePushSteps.includes("changelog")) {
77
+ const commitIndex = prePushSteps.indexOf("commit");
78
+ if (commitIndex === -1) {
79
+ prePushSteps.push("changelog");
80
+ }
81
+ else {
82
+ prePushSteps.splice(commitIndex, 0, "changelog");
83
+ }
84
+ }
85
+ if (!prePushSteps.includes("commit")) {
86
+ prePushSteps.push("commit");
87
+ }
88
+ const analyzeIndex = prePushSteps.indexOf("analyze");
89
+ const commitIndex = prePushSteps.indexOf("commit");
90
+ if (analyzeIndex > commitIndex) {
91
+ throw new Error("Commit workflow requires analyze before commit.");
92
+ }
93
+ const changelogIndex = prePushSteps.indexOf("changelog");
94
+ if (changelogIndex === -1 || changelogIndex > commitIndex) {
95
+ throw new Error("Commit workflow requires changelog before commit.");
96
+ }
97
+ return pushRequested ? [...prePushSteps, "push"] : prePushSteps;
98
+ };
99
+ const getTargetOverride = (argvArg) => {
100
+ const validTargets = ["git", "npm", "docker"];
101
+ const rawTargets = argvArg.target || argvArg.targets;
102
+ if (typeof rawTargets === "string") {
103
+ return rawTargets
104
+ .split(",")
105
+ .map((target) => target.trim())
106
+ .filter((target) => validTargets.includes(target));
107
+ }
108
+ const targets = [];
109
+ if (argvArg.git || argvArg.p || argvArg.push)
110
+ targets.push("git");
111
+ if (argvArg.npm)
112
+ targets.push("npm");
113
+ if (argvArg.docker)
114
+ targets.push("docker");
115
+ return targets.length > 0 ? targets : undefined;
116
+ };
117
+ const buildReleasePlan = (options) => {
118
+ const plan = [];
119
+ if (options.requireCleanTree)
120
+ plan.push("preflight.cleanTree");
121
+ if (options.runTests)
122
+ plan.push("preflight.test");
123
+ plan.push("core.version", "core.changelog", "core.commit", "core.tag");
124
+ if (options.runBuild)
125
+ plan.push("core.build");
126
+ for (const target of options.targets) {
127
+ plan.push(`target.${target}`);
128
+ }
129
+ return plan;
130
+ };
131
+ export const resolveCommitWorkflow = async (argvArg) => {
132
+ const cliConfig = await readCliWorkflowConfig();
133
+ const commitConfig = cliConfig.commit || {};
134
+ const releaseFlagRequested = Boolean(argvArg.r || argvArg.release);
135
+ let confirmation = normalizeConfirmation(commitConfig.confirmation, "prompt");
136
+ if (argvArg.plan) {
137
+ confirmation = "plan";
138
+ }
139
+ else if (argvArg.y || argvArg.yes) {
140
+ confirmation = "auto";
141
+ }
142
+ let rawSteps;
143
+ if (hasExplicitCommitWorkflowFlags(argvArg)) {
144
+ const orderedFlags = getOrderedShortFlags("commit");
145
+ rawSteps = ["analyze"];
146
+ for (const shortFlag of orderedFlags) {
147
+ const step = commitFlagToStep[shortFlag];
148
+ if (step) {
149
+ rawSteps.push(step);
150
+ }
151
+ }
152
+ if (argvArg.format && !rawSteps.includes("format"))
153
+ rawSteps.push("format");
154
+ if (argvArg.test && !rawSteps.includes("test"))
155
+ rawSteps.push("test");
156
+ if (argvArg.build && !rawSteps.includes("build"))
157
+ rawSteps.push("build");
158
+ if (argvArg.push && !rawSteps.includes("push"))
159
+ rawSteps.push("push");
160
+ rawSteps.push("changelog");
161
+ rawSteps.push("commit");
162
+ }
163
+ else if (Array.isArray(commitConfig.steps) && commitConfig.steps.length > 0) {
164
+ rawSteps = commitConfig.steps;
165
+ }
166
+ else {
167
+ rawSteps = ["analyze"];
168
+ if (commitConfig.alwaysTest)
169
+ rawSteps.push("test");
170
+ if (commitConfig.alwaysBuild)
171
+ rawSteps.push("build");
172
+ rawSteps.push("changelog");
173
+ rawSteps.push("commit");
174
+ }
175
+ return {
176
+ confirmation,
177
+ steps: normalizeCommitSteps(rawSteps),
178
+ staging: commitConfig.staging || "all",
179
+ testCommand: commitConfig.test?.command || "pnpm test",
180
+ buildCommand: commitConfig.build?.command || "pnpm build",
181
+ changelogFile: "changelog.md",
182
+ changelogSection: "Pending",
183
+ pushRemote: commitConfig.push?.remote || "origin",
184
+ pushFollowTags: commitConfig.push?.followTags || false,
185
+ releaseFlagRequested,
186
+ };
187
+ };
188
+ export const resolveReleaseWorkflow = async (argvArg) => {
189
+ const cliConfig = await readCliWorkflowConfig();
190
+ const releaseConfig = cliConfig.release || {};
191
+ const targetConfig = releaseConfig.targets || {};
192
+ const gitConfig = targetConfig.git || {};
193
+ const npmConfig = targetConfig.npm || {};
194
+ const dockerConfig = targetConfig.docker || {};
195
+ const npmRegistries = (npmConfig.registries || []).map(normalizeRegistryUrl);
196
+ const npmEnabled = npmConfig.enabled ?? npmRegistries.length > 0;
197
+ const gitEnabled = gitConfig.enabled ?? true;
198
+ const dockerEnabled = dockerConfig.enabled ?? false;
199
+ let confirmation = normalizeConfirmation(releaseConfig.confirmation, "prompt");
200
+ if (argvArg.plan) {
201
+ confirmation = "plan";
202
+ }
203
+ else if (argvArg.y || argvArg.yes) {
204
+ confirmation = "auto";
205
+ }
206
+ let requireCleanTree = releaseConfig.preflight?.requireCleanTree ?? true;
207
+ let runTests = releaseConfig.preflight?.test ?? false;
208
+ let runBuild = releaseConfig.preflight?.build ?? true;
209
+ if (argvArg.t || argvArg.test)
210
+ runTests = true;
211
+ if (argvArg.b || argvArg.build)
212
+ runBuild = true;
213
+ if (isDisabled(argvArg, "test"))
214
+ runTests = false;
215
+ if (isDisabled(argvArg, "build"))
216
+ runBuild = false;
217
+ if (isDisabled(argvArg, "preflight"))
218
+ requireCleanTree = false;
219
+ const configuredTargets = [];
220
+ if (gitEnabled)
221
+ configuredTargets.push("git");
222
+ if (npmEnabled)
223
+ configuredTargets.push("npm");
224
+ if (dockerEnabled)
225
+ configuredTargets.push("docker");
226
+ let targets = getTargetOverride(argvArg) || configuredTargets;
227
+ if (isDisabled(argvArg, "git", "push")) {
228
+ targets = targets.filter((target) => target !== "git");
229
+ }
230
+ if (isDisabled(argvArg, "publish")) {
231
+ targets = targets.filter((target) => target === "git");
232
+ }
233
+ targets = unique(targets);
234
+ return {
235
+ confirmation,
236
+ plan: buildReleasePlan({ requireCleanTree, runTests, runBuild, targets }),
237
+ targets,
238
+ requireCleanTree,
239
+ runTests,
240
+ runBuild,
241
+ testCommand: releaseConfig.preflight?.testCommand || "pnpm test",
242
+ buildCommand: releaseConfig.preflight?.buildCommand || "pnpm build",
243
+ changelogFile: "changelog.md",
244
+ changelogPendingSection: "Pending",
245
+ changelogVersionHeading: "## {{date}} - {{version}}",
246
+ gitEnabled,
247
+ gitRemote: gitConfig.remote || "origin",
248
+ pushBranch: gitConfig.pushBranch ?? true,
249
+ pushTags: gitConfig.pushTags ?? true,
250
+ npmEnabled,
251
+ npmRegistries,
252
+ npmAccessLevel: npmConfig.accessLevel || "public",
253
+ npmAlreadyPublished: npmConfig.alreadyPublished || "success",
254
+ dockerEnabled,
255
+ dockerImages: dockerConfig.images || [],
256
+ };
257
+ };
258
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy53b3JrZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2hlbHBlcnMud29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUF1SDdELE1BQU0sZ0JBQWdCLEdBQTRDO0lBQ2hFLENBQUMsRUFBRSxRQUFRO0lBQ1gsQ0FBQyxFQUFFLE1BQU07SUFDVCxDQUFDLEVBQUUsT0FBTztJQUNWLENBQUMsRUFBRSxNQUFNO0NBQ1YsQ0FBQztBQUVGLE1BQU0sTUFBTSxHQUFHLENBQUksS0FBVSxFQUFPLEVBQUU7SUFDcEMsTUFBTSxNQUFNLEdBQVEsRUFBRSxDQUFDO0lBQ3ZCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxxQkFBcUIsR0FBRyxDQUM1QixLQUFjLEVBQ2QsUUFBMkIsRUFDUixFQUFFO0lBQ3JCLElBQUksS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssTUFBTSxJQUFJLEtBQUssS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUMvRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDLENBQUM7QUFFRixNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBVyxFQUFVLEVBQUU7SUFDbkQsSUFBSSxhQUFhLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVB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