41 lines
946 B
Bash
41 lines
946 B
Bash
#!/bin/sh
|
||
|
||
set -eu
|
||
|
||
MSG_FILE="$1"
|
||
FIRST_LINE="$(sed -n '1p' "$MSG_FILE" | tr -d '\r')"
|
||
|
||
# Allow Git-generated merge commits and revert commits to pass through.
|
||
case "$FIRST_LINE" in
|
||
Merge\ *|Revert\ \"*)
|
||
exit 0
|
||
;;
|
||
esac
|
||
|
||
PATTERN='^(feat|feat-wip|fix|docs|typo|style|refactor|perf|optimize|test|build|ci|chore|revert)\([a-z][a-z0-9-]*\): .+$'
|
||
|
||
if printf '%s\n' "$FIRST_LINE" | grep -Eq "$PATTERN"; then
|
||
exit 0
|
||
fi
|
||
|
||
cat <<'EOF' >&2
|
||
ERROR: commit message must follow Conventional Commits.
|
||
|
||
Required format:
|
||
type(scope): 描述
|
||
|
||
Examples:
|
||
fix(system): 修复组织树查询空指针问题
|
||
refactor(framework): 拆分权限上下文装配逻辑
|
||
docs(other): 补充后端提交规范说明
|
||
|
||
Allowed types:
|
||
feat, feat-wip, fix, docs, typo, style, refactor, perf,
|
||
optimize, test, build, ci, chore, revert
|
||
|
||
Tip:
|
||
优先使用贴近模块的 scope,例如 system、gateway、framework、security、sql、deps、other。
|
||
EOF
|
||
|
||
exit 1
|