test: 测试自动文档部署工作流 #3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: 部署文档系统 | ||
| # 触发条件:master分支推送或手动触发 | ||
| on: | ||
| push: | ||
| branches: [ master ] | ||
| paths: | ||
| - 'README.md' | ||
| - 'src/**' | ||
| - 'include/**' | ||
| - 'examples/**' | ||
| - '.github/workflows/docs-deploy.yml' | ||
| workflow_dispatch: # 允许手动触发 | ||
| # 权限设置 | ||
| permissions: | ||
| contents: write | ||
| pages: write | ||
| id-token: write | ||
| # 确保同时只有一个部署在运行 | ||
| concurrency: | ||
| group: "pages-deployment" | ||
| cancel-in-progress: false | ||
| jobs: | ||
| collect-and-deploy: | ||
| name: 收集文档并部署到docsify分支 | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - name: 检出master分支 | ||
| uses: actions/checkout@v4 | ||
| with: | ||
| fetch-depth: 0 # 获取完整历史记录 | ||
| token: ${{ secrets.GITHUB_TOKEN }} | ||
| - name: 设置Node.js环境 | ||
| uses: actions/setup-node@v4 | ||
| with: | ||
| node-version: '18' | ||
| - name: 收集项目文档 | ||
| id: collect | ||
| run: | | ||
| echo "🔄 开始收集项目文档..." | ||
| # 创建临时文档目录 | ||
| mkdir -p temp_docs/modules | ||
| mkdir -p temp_docs/api | ||
| mkdir -p temp_docs/examples | ||
| # 收集主README | ||
| if [ -f "README.md" ]; then | ||
| echo "📄 收集主README" | ||
| cp README.md temp_docs/ | ||
| fi | ||
| # 收集模块README | ||
| module_count=0 | ||
| if [ -d "src" ]; then | ||
| for dir in src/*/; do | ||
| if [ -d "$dir" ]; then | ||
| module_name=$(basename "$dir") | ||
| if [ -f "$dir/README.md" ]; then | ||
| echo "📁 收集模块文档: $module_name" | ||
| cp "$dir/README.md" "temp_docs/modules/${module_name}.md" | ||
| module_count=$((module_count + 1)) | ||
| fi | ||
| fi | ||
| done | ||
| fi | ||
| # 收集示例文档 | ||
| example_count=0 | ||
| if [ -d "examples" ]; then | ||
| for example in examples/*/; do | ||
| if [ -d "$example" ]; then | ||
| example_name=$(basename "$example") | ||
| if [ -f "$example/README.md" ]; then | ||
| echo "💡 收集示例文档: $example_name" | ||
| cp "$example/README.md" "temp_docs/examples/${example_name}.md" | ||
| example_count=$((example_count + 1)) | ||
| fi | ||
| fi | ||
| done | ||
| fi | ||
| # 生成收集统计 | ||
| echo "modules_collected=$module_count" >> $GITHUB_OUTPUT | ||
| echo "examples_collected=$example_count" >> $GITHUB_OUTPUT | ||
| echo "collection_time=$(date '+%Y-%m-%d %H:%M:%S')" >> $GITHUB_OUTPUT | ||
| - name: 检出docsify分支 | ||
| run: | | ||
| echo "📦 切换到docsify分支..." | ||
| # 检查docsify分支是否存在 | ||
| if git show-ref --verify --quiet refs/remotes/origin/docsify; then | ||
| echo "docsify分支已存在,检出..." | ||
| git checkout docsify | ||
| git pull origin docsify | ||
| else | ||
| echo "docsify分支不存在,创建新分支..." | ||
| git checkout --orphan docsify | ||
| git rm -rf . | ||
| # 创建基础docsify结构 | ||
| mkdir -p docs/modules docs/api docs/examples | ||
| fi | ||
| - name: 更新docsify分支文档 | ||
| run: | | ||
| echo "📝 更新docsify分支文档..." | ||
| # 确保docs目录存在 | ||
| mkdir -p docs/modules docs/api docs/examples | ||
| # 复制收集到的文档 | ||
| if [ -d "temp_docs" ]; then | ||
| cp -r temp_docs/* docs/ 2>/dev/null || true | ||
| fi | ||
| # 生成侧边栏配置 | ||
| cat > docs/_sidebar.md << 'EOF' | ||
| * [首页](/) | ||
| * [快速开始](README.md) | ||
| * **核心模块** | ||
| EOF | ||
| # 添加模块链接 | ||
| if [ -d "docs/modules" ]; then | ||
| for module_file in docs/modules/*.md; do | ||
| if [ -f "$module_file" ]; then | ||
| module_name=$(basename "$module_file" .md) | ||
| echo " * [$module_name](modules/$module_name.md)" >> docs/_sidebar.md | ||
| fi | ||
| done | ||
| fi | ||
| # 添加示例链接 | ||
| echo "" >> docs/_sidebar.md | ||
| echo "* **示例代码**" >> docs/_sidebar.md | ||
| if [ -d "docs/examples" ]; then | ||
| for example_file in docs/examples/*.md; do | ||
| if [ -f "$example_file" ]; then | ||
| example_name=$(basename "$example_file" .md) | ||
| echo " * [$example_name](examples/$example_name.md)" >> docs/_sidebar.md | ||
| fi | ||
| done | ||
| fi | ||
| # 生成导航栏 | ||
| cat > docs/_navbar.md << 'EOF' | ||
| * [GitHub](https://github.com/zuoliangyu/EmbedKit) | ||
| * [问题反馈](https://github.com/zuoliangyu/EmbedKit/issues) | ||
| EOF | ||
| # 生成封面页 | ||
| cat > docs/_coverpage.md << 'EOF' | ||
| # EmbedKit | ||
| > 轻量级嵌入式开发工具包 | ||
| - 模块化设计,易于扩展 | ||
| - 高性能,低内存占用 | ||
| - 详细的文档和示例 | ||
| [开始使用](#quick-start) | ||
| [查看GitHub](https://github.com/zuoliangyu/EmbedKit) | ||
| EOF | ||
| # 生成主页 | ||
| if [ -f "docs/README.md" ]; then | ||
| # 如果收集到主README,使用它 | ||
| echo "使用收集到的主README" | ||
| else | ||
| # 否则创建默认主页 | ||
| cat > docs/README.md << 'EOF' | ||
| # EmbedKit | ||
| 欢迎使用 EmbedKit - 轻量级嵌入式开发工具包! | ||
| ## 快速开始 | ||
| 这里是项目的文档主页。文档会从master分支自动收集和更新。 | ||
| ## 项目结构 | ||
| - **核心模块**: 查看左侧导航中的模块文档 | ||
| - **示例代码**: 学习如何使用各个组件 | ||
| - **API文档**: 详细的接口说明 | ||
| ## 更新说明 | ||
| 本文档系统会在master分支更新时自动同步。最后更新时间: $(date '+%Y-%m-%d %H:%M:%S') | ||
| EOF | ||
| fi | ||
| # 生成docsify配置 | ||
| cat > docs/index.html << 'EOF' | ||
| <!DOCTYPE html> | ||
| <html lang="zh-CN"> | ||
| <head> | ||
| <meta charset="UTF-8"> | ||
| <title>EmbedKit Documentation</title> | ||
| <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> | ||
| <meta name="description" content="EmbedKit - 轻量级嵌入式开发工具包"> | ||
| <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0"> | ||
| <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsify@4/lib/themes/vue.css"> | ||
| <link rel="icon" href="_media/favicon.ico"> | ||
| </head> | ||
| <body> | ||
| <div id="app">加载中...</div> | ||
| <script> | ||
| window.$docsify = { | ||
| name: 'EmbedKit', | ||
| repo: 'https://github.com/zuoliangyu/EmbedKit', | ||
| loadSidebar: true, | ||
| loadNavbar: true, | ||
| coverpage: true, | ||
| onlyCover: false, | ||
| maxLevel: 4, | ||
| subMaxLevel: 2, | ||
| auto2top: true, | ||
| homepage: 'README.md', | ||
| search: { | ||
| maxAge: 86400000, // 过期时间,单位毫秒,默认一天 | ||
| paths: 'auto', | ||
| placeholder: '🔍 搜索文档', | ||
| noData: '😞 没有找到结果', | ||
| depth: 6 | ||
| }, | ||
| copyCode: { | ||
| buttonText: '📋 复制', | ||
| errorText: '❌ 复制失败', | ||
| successText: '✅ 已复制' | ||
| }, | ||
| pagination: { | ||
| previousText: '⬅️ 上一页', | ||
| nextText: '下一页 ➡️', | ||
| crossChapter: true | ||
| } | ||
| } | ||
| </script> | ||
| <script src="//cdn.jsdelivr.net/npm/docsify@4"></script> | ||
| <script src="//cdn.jsdelivr.net/npm/docsify/lib/plugins/search.min.js"></script> | ||
| <script src="//cdn.jsdelivr.net/npm/docsify-copy-code@2"></script> | ||
| <script src="//cdn.jsdelivr.net/npm/docsify-pagination@2/dist/docsify-pagination.min.js"></script> | ||
| <script src="//cdn.jsdelivr.net/npm/prismjs@1/components/prism-c.min.js"></script> | ||
| <script src="//cdn.jsdelivr.net/npm/prismjs@1/components/prism-bash.min.js"></script> | ||
| </body> | ||
| </html> | ||
| EOF | ||
| # 创建.nojekyll文件 | ||
| touch docs/.nojekyll | ||
| - name: 提交更新到docsify分支 | ||
| run: | | ||
| echo "💾 提交文档更新..." | ||
| # 配置git | ||
| git config user.name "GitHub Actions" | ||
| git config user.email "actions@github.com" | ||
| # 添加所有文档文件 | ||
| git add docs/ | ||
| # 检查是否有变更 | ||
| if git diff --staged --quiet; then | ||
| echo "📝 没有文档更新" | ||
| else | ||
| # 提交变更 | ||
| git commit -m "docs: 自动更新文档 (来自master分支) | ||
| 📊 收集统计: | ||
| - 模块文档: ${{ steps.collect.outputs.modules_collected }} 个 | ||
| - 示例文档: ${{ steps.collect.outputs.examples_collected }} 个 | ||
| - 更新时间: ${{ steps.collect.outputs.collection_time }} | ||
| - 触发提交: ${{ github.sha }} | ||
| 🤖 由GitHub Actions自动生成" | ||
| # 推送到docsify分支 | ||
| git push origin docsify | ||
| echo "✅ 文档已更新到docsify分支" | ||
| fi | ||
| - name: 设置GitHub Pages | ||
| uses: actions/configure-pages@v4 | ||
| - name: 上传Pages制品 | ||
| uses: actions/upload-pages-artifact@v3 | ||
| with: | ||
| path: docs/ | ||
| - name: 部署到GitHub Pages | ||
| id: deployment | ||
| uses: actions/deploy-pages@v4 | ||
| - name: 部署成功通知 | ||
| run: | | ||
| echo "## 📚 文档部署成功!" >> $GITHUB_STEP_SUMMARY | ||
| echo "" >> $GITHUB_STEP_SUMMARY | ||
| echo "### 📊 本次收集统计" >> $GITHUB_STEP_SUMMARY | ||
| echo "- 🔢 收集模块: ${{ steps.collect.outputs.modules_collected }} 个" >> $GITHUB_STEP_SUMMARY | ||
| echo "- 💡 收集示例: ${{ steps.collect.outputs.examples_collected }} 个" >> $GITHUB_STEP_SUMMARY | ||
| echo "- ⏰ 更新时间: ${{ steps.collect.outputs.collection_time }}" >> $GITHUB_STEP_SUMMARY | ||
| echo "" >> $GITHUB_STEP_SUMMARY | ||
| echo "### 🌐 访问地址" >> $GITHUB_STEP_SUMMARY | ||
| echo "- [在线文档](${{ steps.deployment.outputs.page_url }})" >> $GITHUB_STEP_SUMMARY | ||
| echo "- [docsify分支](https://github.com/${{ github.repository }}/tree/docsify)" >> $GITHUB_STEP_SUMMARY | ||
| echo "" >> $GITHUB_STEP_SUMMARY | ||
| echo "### ℹ️ 说明" >> $GITHUB_STEP_SUMMARY | ||
| echo "文档从master分支自动收集,保存在docsify分支,并自动部署到GitHub Pages。" >> $GITHUB_STEP_SUMMARY | ||