Standardized commit message generation
Writing commit messages should benefit of automated assistance.
While the rules of this library are not perfect, it still helps writing commit messages with consistent style.
yarn add commit-fn
The library uses Inquirer
to take text or choice from the user. Generating the message includes the following steps:
- STEP 1 - Choosing the type of the commit
The user can select one among:
'feat' - Significant change in functionality
'fix' - Fixing an issue
'test' - Writing unit or end-to-end tests for specific feature
'chore' - Update build tasks, lint files or similar(no production code change)
'docs' - Edit the documentation of the project
- STEP 2 - Choosing the label of the commit
Start typing to select from predefined list of labels
- STEP 3 - Writing the commit message
In this step the user writes the actual commit message.
import { commitMessage } from 'commit-fn'
commitMessage().then((commitMessageValue: string) => {
console.log(commitMessageValue)
//=> 'feat@UI: use animation when logout'
})
commitAndPush
method will take the generated commit message and run the following commands for you:
1.git add . --all
2.git commit -m COMMIT_MESSAGE
3.git push
import { commitAndPush } from 'commit-fn'
commitAndPush().then((commitMessageValue: string) => {
console.log(commitMessageValue)
//=> Pushed with message 'feat@UI: use animation when logout'
})
Recommended way is to add the following in the scripts
property of your package.json
{
...
scripts:{
"commit":"commit-fn"
}
...
}
Now running yarn commit
will execute the commitAndPush
method.
"commitMessage": [
"script",
"build",
"prepublish",
"lint",
"typings",
"benchmark",
"refactor",
"method",
"docs",
"typings"
]
}
Every time STOP label is selected, the commit message will stay as WORK_IN_PROGRESS text.
Later if PROGRESS or STOP is selected, the WORK_IN_PROGRESS text will be prepended to the user input.
When STOP is selected WORK_IN_PROGRESS is reset back to an empty string.
Add commitMessage
field in your package.json
like so:
{
...
"commitMessage":{
"labels":[
"foo",
"bar",
"baz"
]
}
...
}
Custom labels belong to feat, fix, test
commit types.
You just need to pass true
like so:
commitMessage(true).then((commitMessageValue: string) => {
console.log(commitMessageValue)
//=> 'feat(UI): use animation when logout'
})
You can further customize the behaviour of this library with setting commitMessage
field in your package.json
:
"commitMessage": {
"labels": [
"choose-word",
"learning-meme"
],
"feature": [
"speed"
],
"support": [
"webpack"
]
}
In the above example, all labels
members will be labels in feat, fix, test
commit types.
All feature
members will be labels in feat
commit type.
All support
members will be labels in chore
commit type.
const cwd = process.env.COMMIT_MESSAGE_CWD || process.cwd()
Replace fuzzy with fuzzyset