feat(mod_commit): Add execution plan output to commit command
This commit is contained in:
@@ -24,6 +24,16 @@ export const run = async (argvArg: any) => {
|
||||
}
|
||||
}
|
||||
|
||||
// Print execution plan at the start
|
||||
ui.printExecutionPlan({
|
||||
autoAccept: !!(argvArg.y || argvArg.yes),
|
||||
push: !!(argvArg.p || argvArg.push),
|
||||
build: wantsBuild,
|
||||
release: wantsRelease,
|
||||
format: !!argvArg.format,
|
||||
registries: releaseConfig?.getRegistries(),
|
||||
});
|
||||
|
||||
if (argvArg.format) {
|
||||
const formatMod = await import('../mod_format/index.js');
|
||||
await formatMod.run();
|
||||
|
||||
@@ -18,6 +18,15 @@ interface ICommitSummary {
|
||||
releasedRegistries?: string[];
|
||||
}
|
||||
|
||||
interface IExecutionPlanOptions {
|
||||
autoAccept: boolean;
|
||||
push: boolean;
|
||||
build: boolean;
|
||||
release: boolean;
|
||||
format: boolean;
|
||||
registries?: string[];
|
||||
}
|
||||
|
||||
interface IRecommendation {
|
||||
recommendedNextVersion: string;
|
||||
recommendedNextVersionLevel: string;
|
||||
@@ -41,6 +50,54 @@ export function printHeader(title: string): void {
|
||||
console.log('');
|
||||
}
|
||||
|
||||
/**
|
||||
* Print execution plan at the start of commit
|
||||
*/
|
||||
export function printExecutionPlan(options: IExecutionPlanOptions): void {
|
||||
console.log('');
|
||||
console.log('╭───────────────────────────────────────────────────────────────╮');
|
||||
console.log('│ gitzone commit - Execution Plan │');
|
||||
console.log('╰───────────────────────────────────────────────────────────────╯');
|
||||
console.log('');
|
||||
|
||||
// Show active options
|
||||
console.log(' Options:');
|
||||
console.log(` Auto-accept ${options.autoAccept ? '✓ enabled (-y)' : '○ interactive mode'}`);
|
||||
console.log(` Push to remote ${options.push ? '✓ enabled (-p)' : '○ disabled'}`);
|
||||
console.log(` Build & verify ${options.build ? '✓ enabled (-b)' : '○ disabled'}`);
|
||||
console.log(` Release to npm ${options.release ? '✓ enabled (-r)' : '○ disabled'}`);
|
||||
if (options.format) {
|
||||
console.log(` Format first ✓ enabled (--format)`);
|
||||
}
|
||||
console.log('');
|
||||
|
||||
// Show steps
|
||||
console.log(' Steps:');
|
||||
let stepNum = 1;
|
||||
if (options.format) {
|
||||
console.log(` ${stepNum++}. Format project files`);
|
||||
}
|
||||
console.log(` ${stepNum++}. Analyze repository changes`);
|
||||
console.log(` ${stepNum++}. Bake commit info into code`);
|
||||
console.log(` ${stepNum++}. Generate changelog.md`);
|
||||
console.log(` ${stepNum++}. Stage and commit files`);
|
||||
console.log(` ${stepNum++}. Bump version`);
|
||||
if (options.build) {
|
||||
console.log(` ${stepNum++}. Run build`);
|
||||
console.log(` ${stepNum++}. Verify clean working tree`);
|
||||
}
|
||||
if (options.push) {
|
||||
console.log(` ${stepNum++}. Push to remote`);
|
||||
}
|
||||
if (options.release) {
|
||||
console.log(` ${stepNum++}. Publish to npm registries`);
|
||||
if (options.registries && options.registries.length > 0) {
|
||||
options.registries.forEach(r => console.log(` → ${r}`));
|
||||
}
|
||||
}
|
||||
console.log('');
|
||||
}
|
||||
|
||||
/**
|
||||
* Print a section with a border
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user