git-release-manager
Version:
A tool to generate release notes from git commit history
150 lines • 7.17 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createBranchCommand = createBranchCommand;
const commander_1 = require("commander");
const BranchController_1 = require("../modules/branch/BranchController");
const branchTypes = [
{ name: "release", prefix: "release/" },
{ name: "hotfix", prefix: "hotfix/" },
{ name: "feature", prefix: "feature/" },
{ name: "custom", prefix: "custom/" },
];
function createBranchCommand(program) {
const createBranchSubcommand = (type, prefix) => {
return new commander_1.Command(type)
.description(`Create and manage ${type} branches`)
.argument("<name>", `Name of the ${type} branch`)
.action(async (commandOptions) => {
const options = { ...program.opts(), ...commandOptions };
if (options[type]) {
options.branchName = `${prefix}${options[type]}`;
console.log(`Creating ${type} branch: ${options.branchName}`);
const controller = new BranchController_1.BranchController();
await controller.handleCreateCommand(options);
}
});
};
const programBranch = program
.command("branch")
.alias("b")
.description("Manage different types of git branches");
programBranch.addCommand(new commander_1.Command()
.command("create")
.alias("c")
.description("Create a new branch")
.addArgument(new commander_1.Argument("<name>", "branch to create"))
.addOption(new commander_1.Option('--push', 'Push branch to remote'))
.action(async (args, commandOptions) => {
const options = { ...program.opts(), ...commandOptions };
options.name = args;
const controller = new BranchController_1.BranchController();
await controller.handleCreateCommand(options);
}));
programBranch.addCommand(new commander_1.Command()
.command("delete")
.alias("d")
.description("Delete a given branch")
.argument("<name>", "Name of the branch to delete")
.addOption(new commander_1.Option('--push', 'Push branch to remote'))
.action(async (args, commandOptions) => {
const options = { ...program.opts(), ...commandOptions };
options.name = args;
const controller = new BranchController_1.BranchController();
await controller.handleDeleteCommand(options);
}));
programBranch.addCommand(new commander_1.Command()
.command("merge")
.alias("m")
.description("Merge a branch into the current branch")
.argument("<name>", "Name of the branch to be merged")
.action(async (args, commandOptions) => {
const options = { ...program.opts(), ...commandOptions };
options.name = args;
const controller = new BranchController_1.BranchController();
await controller.handleMergeCommand(options);
}));
programBranch.addCommand(new commander_1.Command()
.command("switch")
.alias("s")
.description("Switch to branch")
.addArgument(new commander_1.Argument("<name>", "branch to switch"))
.action(async (args, commandOptions) => {
const options = { ...program.opts(), ...commandOptions };
options.name = args;
const controller = new BranchController_1.BranchController();
await controller.handleSwitchCommand(options);
}));
programBranch.addCommand(new commander_1.Command()
.command("protect")
.alias("p")
.description("Protect a branch from direct commits")
.argument("<name>", "Name of the branch to protect")
.action(async (args, commandOptions) => {
const options = { ...program.opts(), ...commandOptions };
options.name = args;
const controller = new BranchController_1.BranchController();
await controller.handleProtectCommand(options);
}));
programBranch.addCommand(new commander_1.Command()
.command("unprotect")
.description("Remove protection from a branch")
.argument("<name>", "Name of the branch to unprotect")
.action(async (args, commandOptions) => {
const options = { ...program.opts(), ...commandOptions };
options.name = args;
const controller = new BranchController_1.BranchController();
await controller.handleUnProtectCommand(options);
}));
programBranch.addCommand(new commander_1.Command()
.command("rebase")
.alias("r")
.description("Rebase the current branch onto another specified branch")
.argument("<branchName>", "Name of the branch to rebase onto")
.action(async (args, commandOptions) => {
const options = { ...program.opts(), ...commandOptions };
options.name = args;
const controller = new BranchController_1.BranchController();
await controller.handleRebaseCommand(options);
}));
// programBranch .addCommand(
// new Command()
// .command("remote")
// .description("Synchronize version with remote tags and update remote")
// // .option('--sync', 'Sync versions with remote')
// // .option('--push', 'Push changes and tags to remote')
// // .option('--draft', 'Create draft release')
// .action(async (commandOptions: VersionRemoteCliArgs) => {
// console.log(`Comparing version: ${commandOptions.draft}`);
// })
// )
// // .option('--release <version>', 'Create a release branch (release/{version})')
// // .option('--hotfix <version>', 'Create a hotfix branch (hotfix/{version})')
// // .option('--feature <name>', 'Create a feature branch (feature/{name})')
// // .option('--finish [branchName]', 'Finish a feature/release/hotfix branch')
// .action(async (commandOptions: BranchCliArgs) => {
// const options = { ...program.opts(), ...commandOptions };
// branchRun(options);
// });
programBranch.addCommand(new commander_1.Command()
.command("list")
.alias("l")
.description("List all branches with filtering options")
.option("-l, --latest", "Display the latest branch only")
.option("-c, --count [count]", "List versions up to a count")
// .option('-r, --reverse', 'List versions in reverse order')
// .option('-t, --tag', 'List versions with tags')
// .option('-d, --date', 'List versions with dates')
// .option('-s, --sort', 'Sort versions')
// .option('-v, --verbose', 'Show detailed version information')
// .option('-a, --all', 'Show all versions')
.action(async (args, commandOptions) => {
const options = { ...program.opts(), ...commandOptions };
const controller = new BranchController_1.BranchController();
await controller.handleListCommand(options);
}));
branchTypes.forEach((type) => {
programBranch.addCommand(createBranchSubcommand(type.name, type.prefix));
});
return programBranch;
}
//# sourceMappingURL=branchCommand.js.map