datai/datai-scenes/datai-scene-salesforce/scripts/verify.sh

167 lines
4.4 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 验证脚本:检查文档和代码的完整性
set -e
echo "=== 开始验证 ==="
# 1. 检查目录结构
echo "\n1. 检查目录结构..."
required_dirs=("docs" "docs/requirements" "docs/design" "docs/decisions/adr" "docs/prompts" "docs/sessions" "docs/retros" "docs/changelog")
for dir in "${required_dirs[@]}"; do
if [ ! -d "$dir" ]; then
echo "错误:目录 $dir 不存在"
exit 1
else
echo "✓ 目录 $dir 存在"
fi
done
# 2. 检查关键文件
echo "\n2. 检查关键文件..."
required_files=("README.md" "CONTRIBUTING.md" "CHANGELOG.md" "docs/index.md" "docs/decisions/adr/0000-template.md" "docs/prompts/0000-template.md" "docs/sessions/YYYYMMDD-template.md" "docs/retros/YYYYMMDD-template.md")
for file in "${required_files[@]}"; do
if [ ! -f "$file" ]; then
echo "错误:文件 $file 不存在"
exit 1
else
echo "✓ 文件 $file 存在"
fi
done
# 3. 检查文档链接
echo "\n3. 检查文档链接..."
# 检查docs/index.md中的链接
echo "检查 docs/index.md 中的链接..."
while read -r line; do
if [[ $line =~ \[([^\]]+)\]\(([^\)]+)\) ]]; then
link=${BASH_REMATCH[2]}
# 跳过外部链接
if [[ $link != http* ]]; then
if [ ! -f "docs/$link" ]; then
echo "警告:链接 $link 指向的文件不存在"
else
echo "✓ 链接 $link 有效"
fi
fi
fi
done < "docs/index.md"
# 4. 检查ADR编号
echo "\n4. 检查ADR编号..."
adr_files=$(find "docs/decisions/adr" -name "*.md" | grep -v "template.md")
adr_numbers=()
for file in $adr_files; do
if [[ $file =~ ([0-9]{4})- ]]; then
number=${BASH_REMATCH[1]}
adr_numbers+=($number)
fi
done
# 检查重复编号
if [ ${#adr_numbers[@]} -gt 0 ]; then
sorted_numbers=($(echo "${adr_numbers[@]}" | tr ' ' '\n' | sort | uniq -d))
if [ ${#sorted_numbers[@]} -gt 0 ]; then
echo "错误发现重复的ADR编号${sorted_numbers[@]}"
exit 1
else
echo "✓ 无重复的ADR编号"
fi
else
echo "✓ 无ADR文件需要检查"
fi
# 5. 检查Prompt模板字段
echo "\n5. 检查Prompt模板字段..."
prompt_template="docs/prompts/0000-template.md"
required_fields=(
"输入引用"
"目标"
"输出格式"
"约束"
"验收标准"
"风险"
"使用记录"
)
for field in "${required_fields[@]}"; do
if ! grep -q "$field" "$prompt_template"; then
echo "警告Prompt模板缺少字段$field"
else
echo "✓ Prompt模板包含字段$field"
fi
done
# 6. 检查Markdown语法
echo "\n6. 检查Markdown语法..."
# 检查是否有未闭合的Markdown标记
md_files=$(find "docs" -name "*.md")
for file in $md_files; do
# 检查未闭合的标题
if grep -q "^#\+[^#]" "$file" && ! grep -q "^#\+[^#].*$" "$file"; then
echo "警告:$file 可能有未闭合的标题"
fi
# 检查未闭合的列表
if grep -q "^- " "$file" || grep -q "^[0-9]\+\. " "$file"; then
# 简单检查,确保列表项有内容
if grep -q "^- *$" "$file" || grep -q "^[0-9]\+\. *$" "$file"; then
echo "警告:$file 可能有空的列表项"
fi
fi
done
# 7. 检查Git钩子
echo "\n7. 检查Git钩子..."
hook_dir=".githooks"
required_hooks=("pre-commit" "commit-msg")
if [ -d "$hook_dir" ]; then
for hook in "${required_hooks[@]}"; do
if [ -f "$hook_dir/$hook" ]; then
echo "✓ Git钩子 $hook 存在"
if [ -x "$hook_dir/$hook" ]; then
echo "✓ Git钩子 $hook 有执行权限"
else
echo "警告Git钩子 $hook 缺少执行权限"
fi
else
echo "警告Git钩子 $hook 不存在"
fi
done
else
echo "警告Git钩子目录 $hook_dir 不存在"
fi
# 8. 检查PR模板
echo "\n8. 检查PR模板..."
if [ -f ".github/PULL_REQUEST_TEMPLATE.md" ]; then
echo "✓ PR模板存在"
else
echo "警告PR模板不存在"
fi
# 9. 检查工作协议和并行任务清单
echo "\n9. 检查工作协议和并行任务清单..."
if [ -f "docs/working-agreement.md" ]; then
echo "✓ 工作协议存在"
else
echo "警告:工作协议不存在"
fi
if [ -f "docs/parallel-backlog.md" ]; then
echo "✓ 并行任务清单存在"
else
echo "警告:并行任务清单不存在"
fi
echo "\n=== 验证完成 ==="
echo "所有检查通过!"