chore: 添加commitlint
This commit is contained in:
151
.husky/commit-msg
Normal file
151
.husky/commit-msg
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
# 颜色定义
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
PURPLE='\033[0;35m'
|
||||||
|
CYAN='\033[0;36m'
|
||||||
|
GRAY='\033[0;37m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
# 启用调试模式(可选)
|
||||||
|
DEBUG=${DEBUG:-false}
|
||||||
|
|
||||||
|
# 输出函数
|
||||||
|
print_info() {
|
||||||
|
echo -e "${BLUE}[INFO]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
print_success() {
|
||||||
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
print_error() {
|
||||||
|
echo -e "${RED}[ERROR]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
print_warning() {
|
||||||
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
print_debug() {
|
||||||
|
if [ "$DEBUG" = "true" ]; then
|
||||||
|
echo -e "${GRAY}[DEBUG]${NC} $1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
print_section() {
|
||||||
|
echo -e "${PURPLE}[SECTION]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
print_command() {
|
||||||
|
echo -e "${CYAN}[COMMAND]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
print_section "开始执行Commit Message Hook..."
|
||||||
|
print_info "时间: $(date)"
|
||||||
|
print_info "工作目录: $(pwd)"
|
||||||
|
print_info "用户: $(whoami)"
|
||||||
|
echo
|
||||||
|
|
||||||
|
# 调试信息
|
||||||
|
print_debug "接收到的参数: $*"
|
||||||
|
print_debug "参数数量: $#"
|
||||||
|
print_debug "第一个参数 (提交消息文件): $1"
|
||||||
|
print_debug "Shell: $SHELL"
|
||||||
|
print_debug "PATH: $PATH"
|
||||||
|
print_debug "当前进程ID: $"
|
||||||
|
|
||||||
|
|
||||||
|
# 检查 commitlint 是否可用
|
||||||
|
print_section "检查 commitlint..."
|
||||||
|
if npx commitlint --version >/dev/null 2>&1; then
|
||||||
|
COMMITLINT_VERSION=$(npx commitlint --version)
|
||||||
|
print_success "commitlint 可用: $COMMITLINT_VERSION"
|
||||||
|
else
|
||||||
|
print_error "commitlint 不可用或配置有误"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查提交消息文件
|
||||||
|
echo
|
||||||
|
print_section "检查提交消息文件..."
|
||||||
|
if [ -f "$1" ]; then
|
||||||
|
print_success "文件存在: $1"
|
||||||
|
FILE_SIZE=$(wc -c < "$1")
|
||||||
|
print_info "文件大小: $FILE_SIZE 字节"
|
||||||
|
|
||||||
|
print_info "文件内容:"
|
||||||
|
echo -e "${CYAN}========================================${NC}"
|
||||||
|
cat "$1"
|
||||||
|
echo
|
||||||
|
echo -e "${CYAN}========================================${NC}"
|
||||||
|
|
||||||
|
# 检查文件权限
|
||||||
|
FILE_PERMS=$(ls -l "$1" | awk '{print $1}')
|
||||||
|
print_debug "文件权限: $FILE_PERMS"
|
||||||
|
|
||||||
|
# 检查文件内容是否为空
|
||||||
|
if [ "$FILE_SIZE" -eq 0 ] || [ -z "$(tr -d '[:space:]' < "$1")" ]; then
|
||||||
|
print_warning "提交消息为空"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
print_error "找不到提交消息文件: $1"
|
||||||
|
print_info "当前目录内容:"
|
||||||
|
ls -la
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查 commitlint 配置
|
||||||
|
echo
|
||||||
|
print_section "检查 commitlint 配置..."
|
||||||
|
if [ -f ".commitlintrc.js" ] || [ -f ".commitlintrc.json" ] || [ -f "commitlint.config.js" ] || [ -f "commitlint.config.mjs" ]; then
|
||||||
|
print_success "找到 commitlint 配置文件"
|
||||||
|
for config_file in .commitlintrc.js .commitlintrc.json commitlint.config.js; do
|
||||||
|
if [ -f "$config_file" ]; then
|
||||||
|
print_info "配置文件: $config_file"
|
||||||
|
print_debug "$config_file 内容预览:"
|
||||||
|
print_debug "$(head -10 "$config_file" 2>/dev/null || echo '无法读取文件')"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
else
|
||||||
|
print_warning "未找到 commitlint 配置文件"
|
||||||
|
print_info "建议创建 .commitlintrc.js 或 commitlint.config.js/commitlint.config.mjs"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 运行 commitlint
|
||||||
|
echo
|
||||||
|
print_section "执行 commitlint 检查..."
|
||||||
|
print_command "执行命令: npx commitlint --edit \"$1\""
|
||||||
|
|
||||||
|
# 显示详细的执行过程
|
||||||
|
if [ "$DEBUG" = "true" ]; then
|
||||||
|
print_debug "详细执行过程:"
|
||||||
|
npx commitlint --edit "$1" --verbose
|
||||||
|
RESULT=$?
|
||||||
|
else
|
||||||
|
npx commitlint --edit "$1"
|
||||||
|
RESULT=$?
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
if [ $RESULT -eq 0 ]; then
|
||||||
|
print_success "提交消息格式检查通过!"
|
||||||
|
print_info "准备提交到 Git 仓库..."
|
||||||
|
print_debug "Hook 执行成功,退出代码: 0"
|
||||||
|
else
|
||||||
|
print_error "提交消息格式检查失败! (退出代码: $RESULT)"
|
||||||
|
echo
|
||||||
|
print_warning "故障排查建议:"
|
||||||
|
echo "1. 检查提交消息是否符合约定式提交格式"
|
||||||
|
echo "2. 确认 commitlint 配置是否正确"
|
||||||
|
echo "3. 运行 'DEBUG=true git commit' 查看详细调试信息"
|
||||||
|
echo "4. 手动测试: npx commitlint --edit .git/COMMIT_EDITMSG"
|
||||||
|
echo
|
||||||
|
print_debug "Hook 执行失败,退出代码: $RESULT"
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_info "Hook 执行完成: $(date)"
|
||||||
|
exit $RESULT
|
||||||
|
|
||||||
7
commitlint.config.ts
Normal file
7
commitlint.config.ts
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
import type { UserConfig } from '@commitlint/types';
|
||||||
|
|
||||||
|
const Configuration: UserConfig = {
|
||||||
|
extends: ['@commitlint/config-conventional']
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Configuration;
|
||||||
@ -20,6 +20,9 @@
|
|||||||
},
|
},
|
||||||
"packageManager": "pnpm@10.18.2",
|
"packageManager": "pnpm@10.18.2",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@commitlint/cli": "^20.2.0",
|
||||||
|
"@commitlint/config-conventional": "^20.2.0",
|
||||||
|
"@commitlint/types": "^20.2.0",
|
||||||
"@eslint/compat": "^1.4.0",
|
"@eslint/compat": "^1.4.0",
|
||||||
"@eslint/js": "^9.39.1",
|
"@eslint/js": "^9.39.1",
|
||||||
"@sveltejs/adapter-auto": "^7.0.0",
|
"@sveltejs/adapter-auto": "^7.0.0",
|
||||||
|
|||||||
780
pnpm-lock.yaml
generated
780
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user