Squashed 'docs/standards/playbook/' changes from b529012..a854534
a854534 ✨ feat(plan_progress): auto-detect env for blocked plans 0d9a8ec 🐛 fix(playbook): honor no_backup for sync 2d401fa ✅ test(templates): update prompts validation e23474e 📝 docs(playbook): update prompts and sync notes 60ff3cd 🐛 fix(playbook): sync templates per file 816f036 ✅ test(playbook): add sync and vendor coverage 625cabb 📝 docs(memory_bank): reformat templates 2554c87 📝 docs(prompts): refresh prompt templates 6774a9d ✨ feat(plan_progress): track plan status in progress.md 73d5c26 🔧 chore(playbook): split sync_templates into sections 278750e ✨ feat(playbook): add plan progress tracking and rules updates 6efd637 🐛 fix(sync): keep agents block blank lines ea00d43 🐛 fix(playbook): support toml without tomllib ab0dd11 📝 docs(playbook): drop docs/plans snapshots 398696c ✨ feat(playbook): merge unified cli d959f80 🎨 style(docs): format markdown b4f712a 🗑️ remove(legacy): drop old scripts and tests 0c4cd0e ✨ feat(actions): add install_skills and format_md 3d1582c ✨ feat(sync): add templates and standards actions 49bbfa1 ✨ feat(vendor): add playbook snapshot generation 8cfcc25 ✨ feat(cli): parse toml config and dispatch actions 05903c3 ✨ feat(cli): add toml config and dispatch order 65d216e ✅ test(cli): add basic playbook cli tests f0bcf54 📝 docs(plans): add unified playbook cli plan 0885309 📝 docs(plans): add unified playbook cli design 3483d8a 🔧 chore(git): ignore .worktrees dir eb75036 🔧 chore(templates): align agent templates and docs efb93f1 📝 docs(playbook): drop todo/confirm mentions 4a85306 🗑️ remove(workflow): drop todo/confirm artifacts 9c5ee9f 🎨 style(markdown): format docs with prettier 5a2925f 🐛 fix(scripts): repair windows script parsing 26a35e0 ✅ test(ci): update required skills list 8df3883 🐛 fix(test): skip external root doc links b067fc1 📦 deps(skills): sync superpowers c03cda0 🔧 chore(ci): sync from origin main 55e05cb 🔧 chore(ci): use superpowers sync script 73c97f3 🔧 chore(ci): centralize superpowers sync 945704f 🔧 chore(ci): add superpowers sync workflow e5d2c93 🗑️ remove(skills): drop duplicate workflows 3ae9708 🐛 fix(ci): update tests for flag-only scripts c44b9aa 🔧 chore(scripts): require flag-driven args e4e1d14 🔧 chore(scripts): unify single-dash options b2eb475 ✅ test(templates): add template coverage fc230b7 🎨 style(markdown): format markdown files 8dc8924 🔧 chore(markdown): add prettier config and usage 2045dd4 ✨ feat(vendor_playbook): add apply-templates option 872d8cf ✨ feat(templates): add sync templates scaffolding 5b1ca45 📝 docs(skills): clarify todo-plan template 054967a ✨ feat(skills): add todo-plan skill cc340f1 🔧 chore(ci): align standards-check workflow template e9de0aa 🔧 chore(ci): drop removed skill check e5dd7d9 🔧 fix(sync): avoid backtick expansion 087b0b9 🔧 chore(sync): align agents block across ps1/bat 9481510 🔧 chore(sync): scope agents block to existing langs b0ca842 🔧 fix(sync): rewrite docs path in agents c98d65c 🔧 chore(sync): rewrite agents docs paths c33611c 🗑️ remove(skills): drop unused skills and update references 2b37860 🎨 style(markdown): format markdown files e3ecd26 📝 docs(tsl): align syntax annotations and examples 37546fe 🐛 fix(playbook): enforce rulesets to agents flow f2df89d 🐛 fix(scripts): include language list in AGENTS.md c0d0737 🐛 fix(playbook): add agents mirror for sync 3b8b99b 🎨 style(markdown): normalize md headings and lists 31f3000 ♻️ refactor(playbook): rename agents template directory to rulesets 11b2bed ✨ feat(markdown): add ruleset and sync support 5b89580 ✅ test(scripts): quiet git init warnings 5822a87 ♻️ refactor(playbook): streamline agents and refresh tsl docs git-subtree-dir: docs/standards/playbook git-subtree-split: a85453439f65b0c0aa05a5bbece773a02216ce76
This commit is contained in:
+16
-306
@@ -86,334 +86,44 @@ jobs:
|
||||
echo "========================================"
|
||||
|
||||
apt-get update
|
||||
apt-get install -y bats cmake clang-format python3-pip
|
||||
apt-get install -y python3-pip
|
||||
|
||||
python3 -m pip install --upgrade pip
|
||||
python3 -m pip install toml tomli jsonschema yamllint
|
||||
python3 -m pip install yamllint
|
||||
|
||||
echo ""
|
||||
echo "✓ bats 版本: $(bats --version)"
|
||||
echo "✓ Python 版本: $(python3 --version)"
|
||||
echo "========================================"
|
||||
|
||||
- name: 🧪 运行全量测试并生成报告
|
||||
shell: bash
|
||||
run: |
|
||||
set +e
|
||||
set -o pipefail
|
||||
|
||||
overall_fail=0
|
||||
scripts_status="success"
|
||||
templates_status="success"
|
||||
integration_status="success"
|
||||
docs_status="success"
|
||||
set -euo pipefail
|
||||
|
||||
echo "========================================"
|
||||
echo "🐚 Shell 脚本测试"
|
||||
echo "🧪 Python CLI 测试"
|
||||
echo "========================================"
|
||||
|
||||
cd "$REPO_DIR/tests/scripts"
|
||||
cd "$REPO_DIR"
|
||||
python3 -m unittest discover -s tests/cli -v
|
||||
|
||||
run_bats() {
|
||||
local name="$1"
|
||||
local file="$2"
|
||||
local output="${name}_test_results.tap"
|
||||
echo "========================================"
|
||||
echo "🧪 Python 扩展测试"
|
||||
echo "========================================"
|
||||
|
||||
if [ ! -f "$file" ]; then
|
||||
echo "⚠️ 未找到测试文件: $file"
|
||||
scripts_status="failure"
|
||||
overall_fail=1
|
||||
return
|
||||
fi
|
||||
|
||||
bats --formatter tap "$file" | tee "$output"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "❌ $name 测试失败"
|
||||
scripts_status="failure"
|
||||
overall_fail=1
|
||||
else
|
||||
echo "✅ $name 测试通过"
|
||||
fi
|
||||
}
|
||||
|
||||
run_bats "sync_standards" "test_sync_standards.bats"
|
||||
run_bats "vendor_playbook" "test_vendor_playbook.bats"
|
||||
run_bats "install_codex_skills" "test_install_codex_skills.bats"
|
||||
python3 -m unittest discover -s tests -p "test_*.py" -v
|
||||
|
||||
echo "========================================"
|
||||
echo "📄 模板验证测试"
|
||||
echo "========================================"
|
||||
|
||||
cd "$REPO_DIR/tests/templates"
|
||||
|
||||
run_validator() {
|
||||
local name="$1"
|
||||
local script="$2"
|
||||
|
||||
if [ ! -f "$script" ]; then
|
||||
echo "⚠️ 未找到验证脚本: $script"
|
||||
templates_status="failure"
|
||||
overall_fail=1
|
||||
return
|
||||
fi
|
||||
|
||||
chmod +x "$script"
|
||||
"./$script"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "❌ $name 模板验证失败"
|
||||
templates_status="failure"
|
||||
overall_fail=1
|
||||
else
|
||||
echo "✅ $name 模板验证通过"
|
||||
fi
|
||||
}
|
||||
|
||||
run_validator "python" "validate_python_templates.sh"
|
||||
run_validator "cpp" "validate_cpp_templates.sh"
|
||||
run_validator "ci" "validate_ci_templates.sh"
|
||||
sh tests/templates/validate_python_templates.sh
|
||||
sh tests/templates/validate_cpp_templates.sh
|
||||
sh tests/templates/validate_ci_templates.sh
|
||||
sh tests/templates/validate_project_templates.sh
|
||||
|
||||
echo "========================================"
|
||||
echo "🔗 集成测试"
|
||||
echo "🔗 文档链接检查"
|
||||
echo "========================================"
|
||||
|
||||
mkdir -p "${TEST_WORKSPACE}"
|
||||
cd "${TEST_WORKSPACE}"
|
||||
|
||||
# 创建测试项目目录
|
||||
mkdir -p test-project-tsl
|
||||
mkdir -p test-project-cpp
|
||||
mkdir -p test-project-multi
|
||||
|
||||
echo "========================================"
|
||||
echo "🧪 测试场景1: TSL 项目标准同步"
|
||||
echo "========================================"
|
||||
|
||||
cd "${TEST_WORKSPACE}/test-project-tsl"
|
||||
|
||||
# 初始化 git 仓库
|
||||
git init
|
||||
git config user.name "Test User"
|
||||
git config user.email "test@example.com"
|
||||
|
||||
# 模拟 subtree add(包含 .agents 等点目录,排除 .git)
|
||||
mkdir -p docs/standards/playbook
|
||||
tar -C "$REPO_DIR" --exclude .git -cf - . | tar -C docs/standards/playbook -xf -
|
||||
|
||||
# 运行同步脚本
|
||||
echo "▶ 运行 sync_standards.sh tsl"
|
||||
sh docs/standards/playbook/scripts/sync_standards.sh tsl
|
||||
|
||||
# 验证结果
|
||||
if [ -d ".agents/tsl" ] && [ -f ".agents/tsl/index.md" ]; then
|
||||
echo "✅ TSL 规则集同步成功"
|
||||
else
|
||||
echo "❌ TSL 规则集同步失败"
|
||||
integration_status="failure"
|
||||
overall_fail=1
|
||||
fi
|
||||
|
||||
if grep -q "# BEGIN playbook .gitattributes" .gitattributes 2>/dev/null \
|
||||
|| grep -q "# Added from playbook .gitattributes" .gitattributes 2>/dev/null \
|
||||
|| grep -q "^\\* text=auto eol=lf" .gitattributes 2>/dev/null; then
|
||||
echo "✅ .gitattributes 更新成功"
|
||||
else
|
||||
echo "❌ .gitattributes 更新失败"
|
||||
integration_status="failure"
|
||||
overall_fail=1
|
||||
fi
|
||||
|
||||
echo "========================================"
|
||||
echo "🧪 测试场景2: C++ 项目标准同步"
|
||||
echo "========================================"
|
||||
|
||||
cd "${TEST_WORKSPACE}/test-project-cpp"
|
||||
|
||||
git init
|
||||
git config user.name "Test User"
|
||||
git config user.email "test@example.com"
|
||||
|
||||
mkdir -p docs/standards/playbook
|
||||
tar -C "$REPO_DIR" --exclude .git -cf - . | tar -C docs/standards/playbook -xf -
|
||||
|
||||
echo "▶ 运行 sync_standards.sh cpp"
|
||||
sh docs/standards/playbook/scripts/sync_standards.sh cpp
|
||||
|
||||
if [ -d ".agents/cpp" ] && [ -f ".agents/cpp/index.md" ]; then
|
||||
echo "✅ C++ 规则集同步成功"
|
||||
else
|
||||
echo "❌ C++ 规则集同步失败"
|
||||
integration_status="failure"
|
||||
overall_fail=1
|
||||
fi
|
||||
|
||||
echo "========================================"
|
||||
echo "🧪 测试场景3: 多语言项目标准同步"
|
||||
echo "========================================"
|
||||
|
||||
cd "${TEST_WORKSPACE}/test-project-multi"
|
||||
|
||||
git init
|
||||
git config user.name "Test User"
|
||||
git config user.email "test@example.com"
|
||||
|
||||
mkdir -p docs/standards/playbook
|
||||
tar -C "$REPO_DIR" --exclude .git -cf - . | tar -C docs/standards/playbook -xf -
|
||||
|
||||
echo "▶ 运行 sync_standards.sh tsl cpp"
|
||||
sh docs/standards/playbook/scripts/sync_standards.sh tsl cpp
|
||||
|
||||
if [ -d ".agents/tsl" ] && [ -d ".agents/cpp" ] && [ -f ".agents/index.md" ]; then
|
||||
echo "✅ 多语言规则集同步成功"
|
||||
else
|
||||
echo "❌ 多语言规则集同步失败"
|
||||
integration_status="failure"
|
||||
overall_fail=1
|
||||
fi
|
||||
|
||||
echo "========================================"
|
||||
echo "🧪 测试场景4: vendor_playbook 脚本"
|
||||
echo "========================================"
|
||||
|
||||
cd "${TEST_WORKSPACE}"
|
||||
mkdir -p test-project-vendor
|
||||
cd test-project-vendor
|
||||
|
||||
git init
|
||||
git config user.name "Test User"
|
||||
git config user.email "test@example.com"
|
||||
|
||||
echo "▶ 运行 vendor_playbook.sh"
|
||||
sh "$REPO_DIR/scripts/vendor_playbook.sh" . tsl
|
||||
|
||||
if [ -d "docs/standards/playbook" ] && [ -d ".agents/tsl" ]; then
|
||||
echo "✅ vendor_playbook 脚本执行成功"
|
||||
else
|
||||
echo "❌ vendor_playbook 脚本执行失败"
|
||||
integration_status="failure"
|
||||
overall_fail=1
|
||||
fi
|
||||
|
||||
echo "========================================"
|
||||
echo "🧹 清理测试环境..."
|
||||
chmod -R u+w "${TEST_WORKSPACE}" 2>/dev/null || true
|
||||
rm -rf "${TEST_WORKSPACE}"
|
||||
echo "✓ 清理完成"
|
||||
|
||||
echo "========================================"
|
||||
echo "📚 文档一致性检查"
|
||||
echo "========================================"
|
||||
|
||||
cd "$REPO_DIR/tests/integration"
|
||||
|
||||
if [ -f "check_doc_links.sh" ]; then
|
||||
chmod +x check_doc_links.sh
|
||||
./check_doc_links.sh
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "✅ 文档链接检查通过"
|
||||
else
|
||||
echo "❌ 发现无效链接"
|
||||
docs_status="failure"
|
||||
overall_fail=1
|
||||
fi
|
||||
else
|
||||
echo "⚠️ 未找到链接检查脚本,跳过"
|
||||
fi
|
||||
|
||||
echo "========================================"
|
||||
echo "🔍 检查代理规则一致性"
|
||||
echo "========================================"
|
||||
|
||||
cd "$REPO_DIR"
|
||||
|
||||
# 检查 .agents/ 和 docs/ 中的规则是否一致
|
||||
python3 << 'EOF'
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
errors = []
|
||||
|
||||
# 检查各语言的 .agents/ 目录
|
||||
agents_base = Path(".agents")
|
||||
for lang_dir in ["tsl", "cpp", "python"]:
|
||||
agents_lang = agents_base / lang_dir
|
||||
if not agents_lang.exists():
|
||||
continue
|
||||
|
||||
# 检查必须存在的文件
|
||||
required_files = ["index.md", "auth.md", "code_quality.md"]
|
||||
for req_file in required_files:
|
||||
file_path = agents_lang / req_file
|
||||
if not file_path.exists():
|
||||
errors.append(f"❌ 缺少文件: {file_path}")
|
||||
elif file_path.stat().st_size == 0:
|
||||
errors.append(f"❌ 文件为空: {file_path}")
|
||||
|
||||
if errors:
|
||||
print("\n".join(errors))
|
||||
sys.exit(1)
|
||||
else:
|
||||
print("✅ 代理规则一致性检查通过")
|
||||
EOF
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
docs_status="failure"
|
||||
overall_fail=1
|
||||
fi
|
||||
|
||||
echo "========================================"
|
||||
echo "📊 生成测试综合报告"
|
||||
echo "========================================"
|
||||
|
||||
format_status() {
|
||||
case "$1" in
|
||||
success)
|
||||
echo "✅ 通过"
|
||||
;;
|
||||
failure)
|
||||
echo "❌ 失败"
|
||||
;;
|
||||
*)
|
||||
echo "❔ 未知"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
cat >> $GITHUB_STEP_SUMMARY << EOFSUMMARY
|
||||
# 🧪 Playbook 测试报告
|
||||
|
||||
## 📋 测试执行摘要
|
||||
|
||||
| 测试类型 | 状态 |
|
||||
|---------|------|
|
||||
| 🐚 Shell 脚本测试 | $(format_status "$scripts_status") |
|
||||
| 📄 模板验证测试 | $(format_status "$templates_status") |
|
||||
| 🔗 集成测试 | $(format_status "$integration_status") |
|
||||
| 📚 文档一致性检查 | $(format_status "$docs_status") |
|
||||
|
||||
---
|
||||
|
||||
## 🔗 相关链接
|
||||
|
||||
- 📝 [测试文档](tests/README.md)
|
||||
- 🐛 [问题反馈](../../issues)
|
||||
- 📖 [开发指南](docs/index.md)
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
*🤖 由 [Gitea Actions](../../actions) 自动生成*
|
||||
|
||||
EOFSUMMARY
|
||||
|
||||
echo "*📅 生成时间: $(date -u '+%Y-%m-%d %H:%M:%S UTC')*" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "</div>" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
echo "========================================"
|
||||
if [ "$overall_fail" -ne 0 ]; then
|
||||
echo "❌ 测试失败"
|
||||
exit 1
|
||||
fi
|
||||
echo "✅ 全量测试通过"
|
||||
sh tests/integration/check_doc_links.sh
|
||||
|
||||
Reference in New Issue
Block a user