90 lines
2.5 KiB
JavaScript
90 lines
2.5 KiB
JavaScript
const chalk = require('chalk')
|
|
const spawn = require('cross-spawn')
|
|
const defaultConfig = require('cz-customizable');
|
|
const { getChangedPackages } = require('./utils')
|
|
|
|
|
|
/**
|
|
* 针对不同类型的 commit prefix message
|
|
*/
|
|
const typesConfig = [
|
|
{ value: 'feat', name: 'A new feature' },
|
|
{ value: 'fix', name: 'A bug fix' },
|
|
{ value: 'docs', name: 'Documentation only changes' },
|
|
{
|
|
value: 'style',
|
|
name: 'Changes that do not affect the meaning of the code\n (white-space, formatting, missing semi-colons, etc)',
|
|
},
|
|
{
|
|
value: 'refactor',
|
|
name: 'A code change that neither fixes a bug nor adds a feature',
|
|
},
|
|
{
|
|
value: 'perf',
|
|
name: 'A code change that improves performance',
|
|
},
|
|
{ value: 'test', name: 'Adding missing tests' },
|
|
{
|
|
value: 'chore',
|
|
name: 'Changes to the build process or auxiliary tools',
|
|
},
|
|
{
|
|
value: 'build',
|
|
name: 'Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)',
|
|
},
|
|
{
|
|
value: 'ci',
|
|
name: 'Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)',
|
|
},
|
|
{
|
|
value: 'revert',
|
|
name: 'Reverts a previous commit',
|
|
},
|
|
]
|
|
|
|
const { stdout = '' } = spawn.sync(`git diff --staged --name-only`, {
|
|
shell: true,
|
|
encoding: 'utf8',
|
|
stdio: 'pipe',
|
|
})
|
|
const changedFiles = stdout.split('\n').filter(Boolean)
|
|
const changeSet = getChangedPackages(changedFiles)
|
|
|
|
if (changeSet.size > 1) {
|
|
process.stderr.write(
|
|
`${[
|
|
chalk.yellow(`检测到当前提交可能涉及到多个包的改动,请注意拆分提交粒度`),
|
|
].join('\n')}\n`,
|
|
)
|
|
|
|
changeSet.clear()
|
|
changeSet.add('multiple')
|
|
}
|
|
|
|
const changedScopes = [...changeSet]
|
|
|
|
module.exports = {
|
|
...defaultConfig,
|
|
types: typesConfig.map(({ value, name }) => {
|
|
return {
|
|
name: `${value}:${new Array(10 - value.length)
|
|
.fill(' ')
|
|
.join('')}${name}`,
|
|
value,
|
|
}
|
|
}),
|
|
messages: {
|
|
...defaultConfig.messages,
|
|
type: "Select the type of change that you're committing",
|
|
scope: 'Ensure the scope of this change',
|
|
subject: 'Write a short, imperative tense description of the change',
|
|
body: 'Provide a longer description of the change. Use "|" to break new line:\n',
|
|
breaking: 'List any BREAKING CHANGES (optional):\n',
|
|
confirmCommit: 'Are you sure you want to proceed with the commit above?',
|
|
},
|
|
scopes: changedScopes.join(','),
|
|
allowCustomScopes: false,
|
|
skipQuestions: ['customScope', 'footer', 'body'],
|
|
allowBreakingChanges: ['feat', 'fix'],
|
|
}
|