-
Notifications
You must be signed in to change notification settings - Fork 26
/
commitlint.config.ts
101 lines (97 loc) · 3.87 KB
/
commitlint.config.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/* eslint-disable prettier/prettier */
import { execSync } from "child_process";
import fg from "fast-glob";
const getPackages = (packagePath) => fg.sync("*", { cwd: packagePath, onlyDirectories: true });
const scopes = [
...getPackages("src"),
"doc", // 文档
"project", // 项目
"core", // 核心
"ci", // 构建
"dev", // 开发相关
"vscode", // vscode相关
"mock", // mock相关
"public", // 公共资源相关
"other", // 其他
];
// @tip: git branch name = feature/issue_33 => auto get defaultIssues = #33
const issue = execSync("git rev-parse --abbrev-ref HEAD").toString().trim().split("_")[1];
// @see: https://cz-git.qbb.sh/zh/config/
export default {
rules: {
/**
* type[scope]: [function] description
* ^^^^^
*/
"scope-enum": [2, "always", scopes],
/**
* type[scope]: [function] description
*
* ^^^^^^^^^^^^^^ empty line.
* - Something here
*/
"body-leading-blank": [1, "always"],
/**
* type[scope]: [function] description
*
* - something here
*
* ^^^^^^^^^^^^^^
*/
"footer-leading-blank": [1, "always"],
/**
* type[scope]: [function] description [No more than 72 characters]
* ^^^^^
*/
"header-max-length": [2, "always", 72],
"scope-case": [2, "always", "lower-case"],
"subject-case": [1, "never", ["sentence-case", "start-case", "pascal-case", "upper-case"]],
"subject-empty": [2, "never"],
"subject-full-stop": [2, "never", "."],
"type-case": [2, "always", "lower-case"],
"type-empty": [2, "never"],
/**
* type[scope]: [function] description
* ^^^^
*/
"type-enum": [
2,
"always",
[
"build", // 构建流程、外部依赖变更(如升级npm包、修改打包配置等)
"chore", // 其他修改, 对构建过程或辅助工具和库的更改(不应影响源文件、测试用例)
"ci", // 修改CI配置、脚本
"docs", // 文档变更
"feat", // 新增功能
"fix", // 修复缺陷(bug)
"perf", // 性能优化
"refactor", // 代码重构
"revert", // 回滚commit
"release", // 发版
"style", // 代码格式
"test", // 添加测试或已有测试改动
],
],
},
prompt: {
customIssuePrefixAlign: !issue ? "top" : "bottom",
defaultIssues: !issue ? "" : `#${issue}`,
types: [
{ value: "feat", name: "feat: ✨ A new feature", emoji: ":sparkles:" },
{ value: "fix", name: "fix: 🐛 A bug fix", emoji: ":bug:" },
{ value: "docs", name: "docs: 📝 Documentation only changes", emoji: ":memo:" },
{ value: "style", name: "style: 🎨 Changes that do not affect the meaning of the code", emoji: ":art:" },
{ value: "refactor", name: "refactor: ♻️ A code change that neither fixes a bug nor adds a feature", emoji: ":recycle:" },
{ value: "perf", name: "perf: ⚡️ A code change that improves performance", emoji: ":zap:" },
{ value: "test", name: "test: ✅ Adding missing tests or correcting existing tests", emoji: ":white_check_mark:" },
{ value: "build", name: "build: 📦️ Changes that affect the build system or external dependencies", emoji: ":package:" },
{ value: "ci", name: "ci: 👷 Changes to our CI configuration files and scripts", emoji: ":construction_worker:" },
{ value: "chore", name: "chore: 🔨 Other changes that don't modify src or test files", emoji: ":hammer:" },
{ value: "revert", name: "revert: ⏪️ Reverts a previous commit", emoji: ":rewind:" },
{ value: "release", name: "release: 🔖 Release a version", emoji: ":bookmark:" },
],
useEmoji: true, // 出于美观, 项目使用了emoji, 但emoji应遵循规范 @see: https://gitmoji.dev/
allowCustomIssuePrefixs: false,
allowEmptyIssuePrefixs: false,
},
};