@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.
- 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 +8 -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 +16 -3
- package/license +2 -2
- package/package.json +20 -30
- package/readme.hints.md +15 -17
- package/readme.md +239 -421
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/gitzone.cli.ts +8 -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 +15 -2
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import * as plugins from "./mod.plugins.js";
|
|
2
|
+
import * as paths from "../paths.js";
|
|
3
|
+
import { logger } from "../gitzone.logging.js";
|
|
4
|
+
import { getCliMode, printJson } from "../helpers.climode.js";
|
|
5
|
+
import { inferVersionTypeFromPending, movePendingToVersion, readPendingChangelog, } from "../helpers.changelog.js";
|
|
6
|
+
import { resolveReleaseWorkflow, } from "../helpers.workflow.js";
|
|
7
|
+
import * as commitHelpers from "../mod_commit/mod.helpers.js";
|
|
8
|
+
export const run = async (argvArg) => {
|
|
9
|
+
const mode = await getCliMode(argvArg);
|
|
10
|
+
const subcommand = argvArg._?.[1];
|
|
11
|
+
if (mode.help || subcommand === "help") {
|
|
12
|
+
showHelp(mode);
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
if (mode.json) {
|
|
16
|
+
printJson({
|
|
17
|
+
ok: false,
|
|
18
|
+
error: "JSON output is not supported for mutating release workflows yet. Use `gitzone release --plan` for a human-readable plan.",
|
|
19
|
+
});
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const workflow = await resolveReleaseWorkflow(argvArg);
|
|
23
|
+
printReleasePlan(workflow);
|
|
24
|
+
if (workflow.confirmation === "plan") {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const smartshellInstance = new plugins.smartshell.Smartshell({
|
|
28
|
+
executor: "bash",
|
|
29
|
+
sourceFilePaths: [],
|
|
30
|
+
});
|
|
31
|
+
const pending = await readPendingChangelog(plugins.path.join(paths.cwd, workflow.changelogFile), workflow.changelogPendingSection);
|
|
32
|
+
if (pending.isEmpty && !argvArg["allow-empty"] && !argvArg.allowEmpty) {
|
|
33
|
+
logger.log("error", "No pending changelog entries. Nothing to release.");
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
const versionType = resolveVersionType(argvArg, pending.block);
|
|
37
|
+
const projectType = await commitHelpers.detectProjectType();
|
|
38
|
+
const currentVersion = await commitHelpers.readCurrentVersion(projectType);
|
|
39
|
+
const plannedVersion = commitHelpers.calculateNewVersion(currentVersion, versionType);
|
|
40
|
+
if (workflow.confirmation === "prompt") {
|
|
41
|
+
if (!mode.interactive) {
|
|
42
|
+
throw new Error("Release confirmation requires an interactive terminal. Use `-y` or set release.confirmation to `auto`.");
|
|
43
|
+
}
|
|
44
|
+
const confirmed = await plugins.smartinteract.SmartInteract.getCliConfirmation(`Release v${plannedVersion} (${versionType}) now?`, true);
|
|
45
|
+
if (!confirmed) {
|
|
46
|
+
logger.log("info", "Release cancelled.");
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
let newVersion = plannedVersion;
|
|
51
|
+
const gitResults = [];
|
|
52
|
+
const npmResults = [];
|
|
53
|
+
const dockerResults = [];
|
|
54
|
+
if (workflow.requireCleanTree) {
|
|
55
|
+
await verifyCleanTree(smartshellInstance, "Working tree is not clean. Commit or stash changes before releasing.");
|
|
56
|
+
}
|
|
57
|
+
if (workflow.runTests) {
|
|
58
|
+
await runCommandStep(smartshellInstance, "Running tests", workflow.testCommand);
|
|
59
|
+
}
|
|
60
|
+
newVersion = await runVersionStep(projectType, versionType);
|
|
61
|
+
await runChangelogStep(workflow, newVersion);
|
|
62
|
+
await runReleaseCommitStep(smartshellInstance, newVersion);
|
|
63
|
+
await runTagStep(smartshellInstance, newVersion);
|
|
64
|
+
if (workflow.runBuild) {
|
|
65
|
+
await runCommandStep(smartshellInstance, "Running release build", workflow.buildCommand);
|
|
66
|
+
await verifyCleanTree(smartshellInstance, "Build produced uncommitted changes. Aborting release.");
|
|
67
|
+
}
|
|
68
|
+
if (workflow.targets.includes("git")) {
|
|
69
|
+
gitResults.push(...(await runGitTarget(smartshellInstance, workflow)));
|
|
70
|
+
}
|
|
71
|
+
if (workflow.targets.includes("npm")) {
|
|
72
|
+
npmResults.push(...(await runNpmTarget(smartshellInstance, workflow)));
|
|
73
|
+
}
|
|
74
|
+
if (workflow.targets.includes("docker")) {
|
|
75
|
+
dockerResults.push(...(await runDockerTarget(smartshellInstance, workflow, newVersion)));
|
|
76
|
+
}
|
|
77
|
+
printReleaseSummary(newVersion, gitResults, npmResults, dockerResults);
|
|
78
|
+
if ([...gitResults, ...npmResults, ...dockerResults].some((result) => result.status === "failed")) {
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
function resolveVersionType(argvArg, pendingBlock) {
|
|
83
|
+
if (argvArg.major)
|
|
84
|
+
return "major";
|
|
85
|
+
if (argvArg.minor)
|
|
86
|
+
return "minor";
|
|
87
|
+
if (argvArg.patch)
|
|
88
|
+
return "patch";
|
|
89
|
+
return inferVersionTypeFromPending(pendingBlock);
|
|
90
|
+
}
|
|
91
|
+
async function runCommandStep(smartshellInstance, label, command) {
|
|
92
|
+
console.log(`\n${label}`);
|
|
93
|
+
const result = await smartshellInstance.exec(command);
|
|
94
|
+
if (result.exitCode !== 0) {
|
|
95
|
+
logger.log("error", `${label} failed. Aborting release.`);
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
logger.log("success", `${label} passed.`);
|
|
99
|
+
}
|
|
100
|
+
async function verifyCleanTree(smartshellInstance, errorMessage) {
|
|
101
|
+
const statusResult = await smartshellInstance.exec("git status --porcelain");
|
|
102
|
+
if (statusResult.stdout.trim() !== "") {
|
|
103
|
+
logger.log("error", errorMessage);
|
|
104
|
+
console.log(statusResult.stdout);
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
async function runVersionStep(projectType, versionType) {
|
|
109
|
+
const currentVersion = await commitHelpers.readCurrentVersion(projectType);
|
|
110
|
+
const newVersion = commitHelpers.calculateNewVersion(currentVersion, versionType);
|
|
111
|
+
logger.log("info", `Bumping version: ${currentVersion} -> ${newVersion}`);
|
|
112
|
+
const commitInfo = new plugins.commitinfo.CommitInfo(paths.cwd, versionType);
|
|
113
|
+
await commitInfo.writeIntoPotentialDirs();
|
|
114
|
+
await commitHelpers.updateProjectVersionFiles(projectType, newVersion);
|
|
115
|
+
return newVersion;
|
|
116
|
+
}
|
|
117
|
+
async function runChangelogStep(workflow, newVersion) {
|
|
118
|
+
const dateString = new Date().toISOString().slice(0, 10);
|
|
119
|
+
await movePendingToVersion(plugins.path.join(paths.cwd, workflow.changelogFile), workflow.changelogPendingSection, workflow.changelogVersionHeading, newVersion, dateString);
|
|
120
|
+
}
|
|
121
|
+
async function runReleaseCommitStep(smartshellInstance, newVersion) {
|
|
122
|
+
await smartshellInstance.exec("git add -A");
|
|
123
|
+
const result = await smartshellInstance.exec(`git commit -m ${shellQuote(`v${newVersion}`)}`);
|
|
124
|
+
if (result.exitCode !== 0) {
|
|
125
|
+
logger.log("error", "Release commit failed.");
|
|
126
|
+
process.exit(1);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
async function runTagStep(smartshellInstance, newVersion) {
|
|
130
|
+
const result = await smartshellInstance.exec(`git tag v${newVersion} -m ${shellQuote(`v${newVersion}`)}`);
|
|
131
|
+
if (result.exitCode !== 0) {
|
|
132
|
+
logger.log("error", "Release tag failed.");
|
|
133
|
+
process.exit(1);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
async function runGitTarget(smartshellInstance, workflow) {
|
|
137
|
+
const currentBranchResult = await smartshellInstance.exec("git branch --show-current");
|
|
138
|
+
const currentBranch = currentBranchResult.stdout.trim() || "master";
|
|
139
|
+
const commands = [];
|
|
140
|
+
if (workflow.pushBranch) {
|
|
141
|
+
commands.push({
|
|
142
|
+
target: `${workflow.gitRemote}/${currentBranch}`,
|
|
143
|
+
command: `git push ${workflow.gitRemote} ${currentBranch}`,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
if (workflow.pushTags) {
|
|
147
|
+
commands.push({
|
|
148
|
+
target: `${workflow.gitRemote}/tags`,
|
|
149
|
+
command: `git push ${workflow.gitRemote} --tags`,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
const results = [];
|
|
153
|
+
for (const { target, command } of commands) {
|
|
154
|
+
const result = await smartshellInstance.exec(command);
|
|
155
|
+
results.push({
|
|
156
|
+
target,
|
|
157
|
+
status: result.exitCode === 0 ? "success" : "failed",
|
|
158
|
+
message: result.exitCode === 0 ? undefined : "push failed",
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
return results;
|
|
162
|
+
}
|
|
163
|
+
async function runNpmTarget(smartshellInstance, workflow) {
|
|
164
|
+
if (!workflow.npmEnabled) {
|
|
165
|
+
return [{ target: "npm", status: "skipped", message: "disabled" }];
|
|
166
|
+
}
|
|
167
|
+
if (workflow.npmRegistries.length === 0) {
|
|
168
|
+
return [{ target: "npm", status: "failed", message: "no registries configured" }];
|
|
169
|
+
}
|
|
170
|
+
const results = [];
|
|
171
|
+
for (const registry of workflow.npmRegistries) {
|
|
172
|
+
const command = `pnpm publish --registry=${registry} --access=${workflow.npmAccessLevel}`;
|
|
173
|
+
const result = await smartshellInstance.exec(command);
|
|
174
|
+
const output = `${result.stdout || ""}\n${result.stderr || ""}\n${result.combinedOutput || ""}`;
|
|
175
|
+
if (result.exitCode === 0) {
|
|
176
|
+
results.push({ target: registry, status: "success" });
|
|
177
|
+
}
|
|
178
|
+
else if (isAlreadyPublishedOutput(output) && workflow.npmAlreadyPublished === "success") {
|
|
179
|
+
results.push({ target: registry, status: "already-published" });
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
results.push({ target: registry, status: "failed", message: firstMeaningfulLine(output) });
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return results;
|
|
186
|
+
}
|
|
187
|
+
async function runDockerTarget(smartshellInstance, workflow, newVersion) {
|
|
188
|
+
if (!workflow.dockerEnabled) {
|
|
189
|
+
return [{ target: "docker", status: "skipped", message: "disabled" }];
|
|
190
|
+
}
|
|
191
|
+
if (workflow.dockerImages.length === 0) {
|
|
192
|
+
return [{ target: "docker", status: "failed", message: "no images configured" }];
|
|
193
|
+
}
|
|
194
|
+
const results = [];
|
|
195
|
+
for (const imageTemplate of workflow.dockerImages) {
|
|
196
|
+
const image = imageTemplate.replaceAll("{{version}}", newVersion);
|
|
197
|
+
const buildResult = await smartshellInstance.exec(`docker build -t ${shellQuote(image)} .`);
|
|
198
|
+
if (buildResult.exitCode !== 0) {
|
|
199
|
+
results.push({ target: image, status: "failed", message: "docker build failed" });
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
const pushResult = await smartshellInstance.exec(`docker push ${shellQuote(image)}`);
|
|
203
|
+
results.push({
|
|
204
|
+
target: image,
|
|
205
|
+
status: pushResult.exitCode === 0 ? "success" : "failed",
|
|
206
|
+
message: pushResult.exitCode === 0 ? undefined : "docker push failed",
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
return results;
|
|
210
|
+
}
|
|
211
|
+
function isAlreadyPublishedOutput(output) {
|
|
212
|
+
return /previously published versions|cannot publish over|already exists/i.test(output);
|
|
213
|
+
}
|
|
214
|
+
function firstMeaningfulLine(output) {
|
|
215
|
+
return output
|
|
216
|
+
.split("\n")
|
|
217
|
+
.map((line) => line.trim())
|
|
218
|
+
.find((line) => line.length > 0) || "command failed";
|
|
219
|
+
}
|
|
220
|
+
function shellQuote(value) {
|
|
221
|
+
return `'${value.replaceAll("'", "'\\''")}'`;
|
|
222
|
+
}
|
|
223
|
+
function printReleasePlan(workflow) {
|
|
224
|
+
console.log("");
|
|
225
|
+
console.log("gitzone release - resolved workflow");
|
|
226
|
+
console.log(`confirmation: ${workflow.confirmation}`);
|
|
227
|
+
console.log(`plan: ${workflow.plan.join(" -> ")}`);
|
|
228
|
+
console.log(`targets: ${workflow.targets.length > 0 ? workflow.targets.join(", ") : "none"}`);
|
|
229
|
+
console.log(`changelog: ${workflow.changelogFile}#${workflow.changelogPendingSection}`);
|
|
230
|
+
if (workflow.targets.includes("npm")) {
|
|
231
|
+
console.log(`npm registries: ${workflow.npmRegistries.length > 0 ? workflow.npmRegistries.join(", ") : "none"}`);
|
|
232
|
+
}
|
|
233
|
+
if (workflow.targets.includes("docker")) {
|
|
234
|
+
console.log(`docker images: ${workflow.dockerImages.length > 0 ? workflow.dockerImages.join(", ") : "none"}`);
|
|
235
|
+
}
|
|
236
|
+
console.log("");
|
|
237
|
+
}
|
|
238
|
+
function printReleaseSummary(newVersion, gitResults, npmResults, dockerResults) {
|
|
239
|
+
console.log("");
|
|
240
|
+
console.log(`Release v${newVersion}`);
|
|
241
|
+
console.log("");
|
|
242
|
+
if (gitResults.length > 0) {
|
|
243
|
+
console.log("git:");
|
|
244
|
+
for (const result of gitResults) {
|
|
245
|
+
console.log(` ${result.target} ${result.status}${result.message ? ` (${result.message})` : ""}`);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
if (npmResults.length > 0) {
|
|
249
|
+
console.log("npm:");
|
|
250
|
+
for (const result of npmResults) {
|
|
251
|
+
console.log(` ${result.target} ${result.status}${result.message ? ` (${result.message})` : ""}`);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
if (dockerResults.length > 0) {
|
|
255
|
+
console.log("docker:");
|
|
256
|
+
for (const result of dockerResults) {
|
|
257
|
+
console.log(` ${result.target} ${result.status}${result.message ? ` (${result.message})` : ""}`);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
export function showHelp(mode) {
|
|
262
|
+
if (mode?.json) {
|
|
263
|
+
printJson({
|
|
264
|
+
command: "release",
|
|
265
|
+
usage: "gitzone release [options]",
|
|
266
|
+
description: "Creates a versioned release from pending changelog entries and publishes configured artifacts.",
|
|
267
|
+
flags: [
|
|
268
|
+
{ flag: "-y, --yes", description: "Run without interactive confirmation" },
|
|
269
|
+
{ flag: "-t, --test", description: "Enable release preflight tests" },
|
|
270
|
+
{ flag: "-b, --build", description: "Enable release preflight build" },
|
|
271
|
+
{ flag: "-p, --push", description: "Enable the git release target" },
|
|
272
|
+
{ flag: "--target <names>", description: "Release only selected targets: git,npm,docker" },
|
|
273
|
+
{ flag: "--npm", description: "Enable the npm release target" },
|
|
274
|
+
{ flag: "--docker", description: "Enable the Docker release target" },
|
|
275
|
+
{ flag: "--no-publish", description: "Run release core and git target only" },
|
|
276
|
+
{ flag: "--plan", description: "Show resolved workflow without mutating files" },
|
|
277
|
+
],
|
|
278
|
+
});
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
console.log("");
|
|
282
|
+
console.log("Usage: gitzone release [options]");
|
|
283
|
+
console.log("");
|
|
284
|
+
console.log("Creates a versioned release from changelog Pending entries.");
|
|
285
|
+
console.log("");
|
|
286
|
+
console.log("Flags:");
|
|
287
|
+
console.log(" -y, --yes Run without interactive confirmation");
|
|
288
|
+
console.log(" -t, --test Enable release preflight tests");
|
|
289
|
+
console.log(" -b, --build Enable release preflight build");
|
|
290
|
+
console.log(" -p, --push Enable the git release target");
|
|
291
|
+
console.log(" --target <names> Release only selected targets: git,npm,docker");
|
|
292
|
+
console.log(" --npm Enable the npm release target");
|
|
293
|
+
console.log(" --docker Enable the Docker release target");
|
|
294
|
+
console.log(" --no-publish Run release core and git target only");
|
|
295
|
+
console.log(" --major|--minor|--patch Override inferred semver level");
|
|
296
|
+
console.log(" --plan Show resolved workflow without mutating files");
|
|
297
|
+
console.log("");
|
|
298
|
+
}
|
|
299
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfcmVsZWFzZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFDTCwyQkFBMkIsRUFDM0Isb0JBQW9CLEVBQ3BCLG9CQUFvQixHQUNyQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFDTCxzQkFBc0IsR0FFdkIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEtBQUssYUFBYSxNQUFNLDhCQUE4QixDQUFDO0FBVTlELE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsT0FBWSxFQUFFLEVBQUU7SUFDeEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWxDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxVQUFVLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDdkMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2YsT0FBTztJQUNULENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLFNBQVMsQ0FBQztZQUNSLEVBQUUsRUFBRSxLQUFLO1lBQ1QsS0FBSyxFQUFFLDBIQUEwSDtTQUNsSSxDQUFDLENBQUM7UUFDSCxPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkQs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Q0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFaEIsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEIsS0FBSyxNQUFNLE1BQU0sSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JHLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEIsS0FBSyxNQUFNLE1BQU0sSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JHLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkIsS0FBSyxNQUFNLE1BQU0sSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JHLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxRQUFRLENBQUMsSUFBZTtJQUN0QyxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNmLFNBQVMsQ0FBQztZQUNSLE9BQU8sRUFBRSxTQUFTO1lBQ2xCLEtBQUssRUFBRSwyQkFBMkI7WUFDbEMsV0FBVyxFQUFFLGdHQUFnRztZQUM3RyxLQUFLLEVBQUU7Z0JBQ0wsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxzQ0FBc0MsRUFBRTtnQkFDMUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxnQ0FBZ0MsRUFBRTtnQkFDckUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxnQ0FBZ0MsRUFBRTtnQkFDdEUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSwrQkFBK0IsRUFBRTtnQkFDcEUsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLCtDQUErQyxFQUFFO2dCQUMxRixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLCtCQUErQixFQUFFO2dCQUMvRCxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGtDQUFrQyxFQUFFO2dCQUNyRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLHNDQUFzQyxFQUFFO2dCQUM3RSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLCtDQUErQyxFQUFFO2FBQ2pGO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsT0FBTztJQUNULENBQUM7SUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLENBQUMsQ0FBQztJQUNoRCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkRBQTZELENBQUMsQ0FBQztJQUMzRSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO0lBQzFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0RBQXNELENBQUMsQ0FBQztJQUNwRSxPQUFPLENBQUMsR0FBRyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7SUFDcEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0lBQ25FLE9BQU8sQ0FBQyxHQUFHLENBQUMscUVBQXFFLENBQUMsQ0FBQztJQUNuRixPQUFPLENBQUMsR0FBRyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7SUFDbkUsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO0lBQ3RFLE9BQU8sQ0FBQyxHQUFHLENBQUMsNERBQTRELENBQUMsQ0FBQztJQUMxRSxPQUFPLENBQUMsR0FBRyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7SUFDekUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO0lBQ25GLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsQ0FBQyJ9
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from "../plugins.js";
|
|
2
|
+
import * as commitinfo from "@push.rocks/commitinfo";
|
|
3
|
+
export { commitinfo };
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kLnBsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfcmVsZWFzZS9tb2QucGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGVBQWUsQ0FBQztBQUU5QixPQUFPLEtBQUssVUFBVSxNQUFNLHdCQUF3QixDQUFDO0FBRXJELE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyJ9
|
|
@@ -8,8 +8,9 @@ import { logger } from "../gitzone.logging.js";
|
|
|
8
8
|
const commandSummaries = [
|
|
9
9
|
{
|
|
10
10
|
name: "commit",
|
|
11
|
-
description: "
|
|
11
|
+
description: "Analyze changes and create semantic source commits",
|
|
12
12
|
},
|
|
13
|
+
{ name: "release", description: "Create versioned releases from pending changelog entries" },
|
|
13
14
|
{ name: "format", description: "Plan or apply project formatting changes" },
|
|
14
15
|
{ name: "config", description: "Read and change .smartconfig.json settings" },
|
|
15
16
|
{ name: "services", description: "Manage or configure development services" },
|
|
@@ -47,7 +48,8 @@ export let run = async (argvArg = {}) => {
|
|
|
47
48
|
message: "What would you like to do?",
|
|
48
49
|
default: "commit",
|
|
49
50
|
choices: [
|
|
50
|
-
{ name: "Commit changes
|
|
51
|
+
{ name: "Commit changes", value: "commit" },
|
|
52
|
+
{ name: "Release pending changes", value: "release" },
|
|
51
53
|
{ name: "Format project files", value: "format" },
|
|
52
54
|
{ name: "Configure release settings", value: "config" },
|
|
53
55
|
{ name: "Create from template", value: "template" },
|
|
@@ -63,6 +65,11 @@ export let run = async (argvArg = {}) => {
|
|
|
63
65
|
await modCommit.run({ _: ["commit"] });
|
|
64
66
|
break;
|
|
65
67
|
}
|
|
68
|
+
case "release": {
|
|
69
|
+
const modRelease = await import("../mod_release/index.js");
|
|
70
|
+
await modRelease.run({ _: ["release"] });
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
66
73
|
case "format": {
|
|
67
74
|
const modFormat = await import("../mod_format/index.js");
|
|
68
75
|
await modFormat.run({ interactive: true });
|
|
@@ -151,6 +158,7 @@ export async function showHelp(mode, commandName) {
|
|
|
151
158
|
console.log(" gitzone help commit");
|
|
152
159
|
console.log(" gitzone config show --json");
|
|
153
160
|
console.log(" gitzone commit recommend --json");
|
|
161
|
+
console.log(" gitzone release --plan");
|
|
154
162
|
console.log(" gitzone format plan --json");
|
|
155
163
|
console.log(" gitzone services set mongodb,minio");
|
|
156
164
|
console.log("");
|
|
@@ -164,6 +172,11 @@ async function showCommandHelp(commandName, mode) {
|
|
|
164
172
|
modCommit.showHelp(mode);
|
|
165
173
|
return true;
|
|
166
174
|
}
|
|
175
|
+
case "release": {
|
|
176
|
+
const modRelease = await import("../mod_release/index.js");
|
|
177
|
+
modRelease.showHelp(mode);
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
167
180
|
case "config": {
|
|
168
181
|
const modConfig = await import("../mod_config/index.js");
|
|
169
182
|
modConfig.showHelp(mode);
|
|
@@ -183,4 +196,4 @@ async function showCommandHelp(commandName, mode) {
|
|
|
183
196
|
return false;
|
|
184
197
|
}
|
|
185
198
|
}
|
|
186
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
199
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2Rfc3RhbmRhcmQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O3FEQUVxRDtBQUNyRCxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBRXJDLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFOUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBTy9DLE1BQU0sZ0JBQWdCLEdBQTBCO0lBQzlDO1FBQ0UsSUFBSSxFQUFFLFFBQVE7UUFDZCxXQUFXLEVBQ1Qsb0RBQW9EO0tBQ3ZEO0lBQ0QsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSwwREFBMEQsRUFBRTtJQUM1RixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLDBDQUEwQyxFQUFFO0lBQzNFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsNENBQTRDLEVBQUU7SUFDN0UsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSwwQ0FBMEMsRUFBRTtJQUM3RSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGtDQUFrQyxFQUFFO0lBQ3JFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsa0NBQWtDLEVBQUU7SUFDakUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxzQ0FBc0MsRUFBRTtJQUN2RTtRQUNFLElBQUksRUFBRSxXQUFXO1FBQ2pCLFdBQVcsRUFBRSwwQ0FBMEM7S0FDeEQ7SUFDRCxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLDhCQUE4QixFQUFFO0lBQzdELEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsa0NBQWtD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
|
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.15.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 test",
|
|
15
|
-
"build": "tsbuild tsfolders",
|
|
16
|
-
"clean": "(rm -rf test/)",
|
|
17
|
-
"prepareTest": "(git clone https://gitlab.com/sandboxzone/sandbox-npmts.git test/)",
|
|
18
|
-
"testBuild": "pnpm run build && rm -r dist/",
|
|
19
|
-
"testCli": "(cd test && node ../cli.ts.js)",
|
|
20
|
-
"testCommit": "(cd test && node ../cli.ts.js commit)",
|
|
21
|
-
"testDeprecate": "(cd test && node ../cli.ts.js deprecate)",
|
|
22
|
-
"testOpen": "(cd test && node ../cli.ts.js open ci)",
|
|
23
|
-
"testReadme": "(cd test && node ../cli.ts.js readme)",
|
|
24
|
-
"testFormat": "(cd test && node ../cli.ts.js format)",
|
|
25
|
-
"testTemplateNpm": "(rm -rf test/testtemplate_npm/ && mkdir test/testtemplate_npm && cd test/testtemplate_npm && node ../../cli.ts.js template npm)",
|
|
26
|
-
"testTemplateLit": "(rm -rf test/testtemplate_lit/ && mkdir test/testtemplate_lit && cd test/testtemplate_lit && node ../../cli.ts.js template lit)",
|
|
27
|
-
"testUpdate": "(cd test && node ../cli.ts.js update)",
|
|
28
|
-
"testVersion": "(cd 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)
|