Create a commit message in an interactive format.
2022-11-16.0.22.11.mov
# Go to git directory
brew install deno
deno run --allow-net --allow-write --allow-run "https://deno.land/x/hoipoi_capsule/demo/fill_in_commit_message/conventionalcommits_style.ts?source"
cat .git/COMMIT_EDITMSG
Run with Git hook.
It works without gh. gh is used to obtain github issues.Please complete the gh setup in advance.
brew install deno gh
Prepare Git hook.
mkdir .githooks
cat <<EOF > .githooks/prepare-commit-msg
#!/bin/sh
exec < /dev/tty deno run --allow-net --allow-write --allow-run "https://deno.land/x/hoipoi_capsule/demo/fill_in_commit_message/conventionalcommits_style.ts?source"
EOF
git config --local core.hooksPath .githooks
chmod +x .githooks/prepare-commit-msg
Execution.
touch myFile.txt
git add myFile.txt
git commit
Here is a reference.
import * as hoipoiCapsule from "https://deno.land/x/hoipoi_capsule/mod.ts";
const commitMessageTemplate = `{{type}}({{scope}}): {{summary}}
{{body}}
BREAKING CHANGE: {{breakingChange}}`;
hoipoiCapsule.useCase.fillInCommitMessage.run({
commitMessageTemplate,
questionList: [
{
/**
* The answer applies to the {{type}} part of commitMessageTemplate.
*/
target: "type",
/**
* Pre-prepared questions.
*/
q: hoipoiCapsule.preset.fillInCommitMessage.conventionalcommits.qMap.type,
/**
* Thus, you can also create your own questions.
*/
// q: typeQ,
/**
* Modify the commit message.
* Use this function when a message is unanswered, for example.
*/
fixCommitMessage: (p) => {
if (p.answerMap["type"] === "???") {
return p.commitMessage.replace(/\r?\n{2,}/, "\n").trim();
}
return p.commitMessage;
},
},
],
});
/**
* Please check here.
* https://github.com/c4spar/deno-cliffy
*/
const typeQ = () =>
hoipoiCapsule.userInterface.prompt.Select.prompt({
message: "Select type.",
search: true,
options: [
{
name:
"Build: Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)",
value: "Build",
},
{
name:
"CI: Changes to our CI configuration files and scripts (examples: CircleCi, SauceLabs)",
value: "CI",
},
{ name: "Docs: Documentation only changes", value: "Docs" },
{ name: "Feat: A new feature", value: "Feat" },
{ name: "Fix: A bug fix", value: "Fix:" },
{ name: "Perf: A code change that improves performance", value: "Perf" },
{
name:
"Refactor: A code change that neither fixes a bug nor adds a feature",
value: "Refactor",
},
{
name: "Test: Adding missing tests or correcting existing tests",
value: "Test",
},
],
});
2022-11-16.13.12.49.mov
Create commit-msg. It works well with this system.