Auto Commit on Feature Completion #20
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: Auto Commit on Feature Completion | |
| on: | |
| # 手动触发工作流 | |
| workflow_dispatch: | |
| inputs: | |
| feature_name: | |
| description: 'Feature module name' | |
| required: true | |
| type: string | |
| commit_message: | |
| description: 'Commit message' | |
| required: false | |
| type: string | |
| default: 'feat: complete feature module' | |
| # 当特定文件被修改时触发 | |
| push: | |
| paths: | |
| - 'src/**/*.zig' | |
| - 'tests/**/*.zig' | |
| - 'docs/**/*.md' | |
| branches: | |
| - main | |
| - develop | |
| - 'feature/*' | |
| # 定时检查(每天一次) | |
| schedule: | |
| - cron: '0 2 * * *' | |
| jobs: | |
| auto-commit: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| fetch-depth: 0 | |
| - name: Setup Zig | |
| uses: mitchellh/setup-zig@v1 | |
| with: | |
| zig-version: '0.15.1' | |
| - name: Verify Zig installation | |
| run: zig version | |
| - name: Check for changes | |
| id: check-changes | |
| run: | | |
| if [ -n "${{ github.event.inputs.feature_name }}" ]; then | |
| echo "Manual trigger for feature: ${{ github.event.inputs.feature_name }}" | |
| echo "has_changes=true" >> $GITHUB_OUTPUT | |
| else | |
| # 检查是否有未提交的更改 | |
| if [ -n "$(git status --porcelain)" ]; then | |
| echo "Found uncommitted changes" | |
| echo "has_changes=true" >> $GITHUB_OUTPUT | |
| else | |
| echo "No changes to commit" | |
| echo "has_changes=false" >> $GITHUB_OUTPUT | |
| fi | |
| fi | |
| - name: Run tests | |
| if: steps.check-changes.outputs.has_changes == 'true' | |
| run: | | |
| echo "Running tests..." | |
| # 运行基础测试 | |
| if [ -f "tests/test_simple.zig" ]; then | |
| zig test tests/test_simple.zig | |
| fi | |
| # 运行垃圾回收测试 | |
| if [ -f "tests/test_gc_simple.zig" ]; then | |
| zig test tests/test_gc_simple.zig | |
| fi | |
| echo "Tests completed successfully" | |
| - name: Build project | |
| if: steps.check-changes.outputs.has_changes == 'true' | |
| run: | | |
| echo "Building project..." | |
| zig build | |
| echo "Build completed successfully" | |
| - name: Generate documentation | |
| if: steps.check-changes.outputs.has_changes == 'true' | |
| run: | | |
| echo "Generating documentation..." | |
| # 生成代码统计 | |
| echo "# ZPython 代码统计" > CODE_STATS.md | |
| echo "生成时间: $(date)" >> CODE_STATS.md | |
| echo "" >> CODE_STATS.md | |
| echo "## 文件统计" >> CODE_STATS.md | |
| echo "- Zig 文件: $(find src -name '*.zig' | wc -l)" >> CODE_STATS.md | |
| echo "- 测试文件: $(find tests -name '*.zig' | wc -l)" >> CODE_STATS.md | |
| echo "- 文档文件: $(find . -name '*.md' | wc -l)" >> CODE_STATS.md | |
| echo "" >> CODE_STATS.md | |
| echo "## 代码行数" >> CODE_STATS.md | |
| echo "- 源代码: $(find src -name '*.zig' -exec wc -l {} + | tail -1 | awk '{print $1}')" >> CODE_STATS.md | |
| echo "- 测试代码: $(find tests -name '*.zig' -exec wc -l {} + | tail -1 | awk '{print $1}')" >> CODE_STATS.md | |
| echo "- 文档: $(find . -name '*.md' -exec wc -l {} + | tail -1 | awk '{print $1}')" >> CODE_STATS.md | |
| - name: Update project status | |
| if: steps.check-changes.outputs.has_changes == 'true' | |
| run: | | |
| echo "Updating project status..." | |
| # 更新项目状态文件 | |
| cat > PROJECT_STATUS.md << EOF | |
| # ZPython 项目状态 | |
| ## 最后更新 | |
| - 更新时间: $(date) | |
| - 工作流: Auto Commit on Feature Completion | |
| - 触发者: ${{ github.actor }} | |
| - 分支: ${{ github.ref_name }} | |
| ## 功能模块状态 | |
| - 对象系统: ✅ 完成 | |
| - 垃圾回收: ✅ 完成 | |
| - 编译器框架: 🚧 进行中 | |
| - 虚拟机核心: 🚧 进行中 | |
| - 标准库: 📋 计划中 | |
| ## 测试状态 | |
| - 基础测试: ✅ 通过 | |
| - 垃圾回收测试: ✅ 通过 | |
| - 构建测试: ✅ 通过 | |
| ## 代码质量 | |
| - 编译状态: ✅ 成功 | |
| - 测试覆盖: 🚧 进行中 | |
| - 文档完整性: ✅ 完成 | |
| EOF | |
| - name: Commit changes | |
| if: steps.check-changes.outputs.has_changes == 'true' | |
| run: | | |
| # 配置 Git | |
| git config --local user.email "action@github.com" | |
| git config --local user.name "GitHub Action" | |
| # 添加所有更改 | |
| git add . | |
| # 生成提交消息 | |
| if [ -n "${{ github.event.inputs.commit_message }}" ]; then | |
| COMMIT_MSG="${{ github.event.inputs.commit_message }}" | |
| else | |
| COMMIT_MSG="feat: auto-commit feature completion | |
| 🤖 自动提交 - 功能模块完善 | |
| ## 更新内容 | |
| - ✅ 代码统计更新 | |
| - ✅ 项目状态更新 | |
| - ✅ 文档自动生成 | |
| - ✅ 测试验证通过 | |
| ## 工作流信息 | |
| - 触发时间: $(date) | |
| - 触发者: ${{ github.actor }} | |
| - 分支: ${{ github.ref_name }} | |
| - 工作流: Auto Commit on Feature Completion | |
| ## 质量检查 | |
| - 编译状态: ✅ 成功 | |
| - 测试状态: ✅ 通过 | |
| - 文档状态: ✅ 更新 | |
| 自动生成于 GitHub Actions 🚀" | |
| fi | |
| # 提交更改 | |
| git commit -m "$COMMIT_MSG" || echo "No changes to commit" | |
| - name: Push changes | |
| if: steps.check-changes.outputs.has_changes == 'true' | |
| run: | | |
| # 推送更改到远程仓库 | |
| git push origin ${{ github.ref_name }} || echo "Push failed or no changes to push" | |
| - name: Create release tag | |
| if: steps.check-changes.outputs.has_changes == 'true' && github.event_name == 'workflow_dispatch' | |
| run: | | |
| # 如果是手动触发,创建版本标签 | |
| FEATURE_NAME="${{ github.event.inputs.feature_name }}" | |
| TIMESTAMP=$(date +%Y%m%d_%H%M%S) | |
| TAG_NAME="feature-${FEATURE_NAME}-${TIMESTAMP}" | |
| git tag -a "$TAG_NAME" -m "Feature: $FEATURE_NAME completed | |
| 📅 完成时间: $(date) | |
| 👤 完成者: ${{ github.actor }} | |
| 🎯 功能模块: $FEATURE_NAME | |
| ## 功能描述 | |
| 功能模块 $FEATURE_NAME 已完成开发和测试 | |
| ## 质量保证 | |
| - ✅ 编译通过 | |
| - ✅ 测试通过 | |
| - ✅ 文档更新 | |
| - ✅ 代码审查 | |
| 自动生成标签 🏷️" | |
| git push origin "$TAG_NAME" | |
| - name: Send notification | |
| if: always() | |
| run: | | |
| if [ "${{ steps.check-changes.outputs.has_changes }}" == "true" ]; then | |
| echo "✅ 功能模块完善完成,已自动提交" | |
| echo "📊 提交信息: ${{ github.event.inputs.commit_message || 'Auto-commit feature completion' }}" | |
| echo "🏷️ 标签: feature-${{ github.event.inputs.feature_name || 'auto' }}-$(date +%Y%m%d_%H%M%S)" | |
| else | |
| echo "ℹ️ 没有检测到需要提交的更改" | |
| fi | |
| - name: Cleanup | |
| if: always() | |
| run: | | |
| echo "🧹 清理临时文件..." | |
| # 清理可能生成的临时文件 | |
| rm -f *.tmp *.log | |
| echo "✅ 清理完成" |