# OpenWebUI 社区统计报告自动生成 # 只在统计数据变化时 commit,避免频繁提交 name: Community Stats on: # 每小时整点运行 schedule: - cron: '0 * * * *' # 手动触发 workflow_dispatch: permissions: contents: write jobs: update-stats: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 with: token: ${{ secrets.GITHUB_TOKEN }} - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.11' - name: Install dependencies run: | pip install requests python-dotenv - name: Get previous stats id: prev_stats run: | # 获取当前的统计数据用于比较 if [ -f docs/community-stats.json ]; then OLD_DOWNLOADS=$(jq -r '.total_downloads' docs/community-stats.json 2>/dev/null || echo "0") OLD_POSTS=$(jq -r '.total_posts' docs/community-stats.json 2>/dev/null || echo "0") OLD_UPVOTES=$(jq -r '.total_upvotes' docs/community-stats.json 2>/dev/null || echo "0") echo "old_downloads=$OLD_DOWNLOADS" >> $GITHUB_OUTPUT echo "old_posts=$OLD_POSTS" >> $GITHUB_OUTPUT echo "old_upvotes=$OLD_UPVOTES" >> $GITHUB_OUTPUT else echo "old_downloads=0" >> $GITHUB_OUTPUT echo "old_posts=0" >> $GITHUB_OUTPUT echo "old_upvotes=0" >> $GITHUB_OUTPUT fi - name: Generate stats report env: OPENWEBUI_API_KEY: ${{ secrets.OPENWEBUI_API_KEY }} OPENWEBUI_USER_ID: ${{ secrets.OPENWEBUI_USER_ID }} run: | python scripts/openwebui_stats.py - name: Check for significant changes id: check_changes run: | # 获取新的统计数据 NEW_DOWNLOADS=$(jq -r '.total_downloads' docs/community-stats.json 2>/dev/null || echo "0") NEW_POSTS=$(jq -r '.total_posts' docs/community-stats.json 2>/dev/null || echo "0") NEW_UPVOTES=$(jq -r '.total_upvotes' docs/community-stats.json 2>/dev/null || echo "0") echo "📊 Previous: ${{ steps.prev_stats.outputs.old_downloads }} downloads, ${{ steps.prev_stats.outputs.old_posts }} posts, ${{ steps.prev_stats.outputs.old_upvotes }} upvotes" echo "📊 Current: $NEW_DOWNLOADS downloads, $NEW_POSTS posts, $NEW_UPVOTES upvotes" # 比较是否有变化 if [ "$NEW_DOWNLOADS" != "${{ steps.prev_stats.outputs.old_downloads }}" ] || \ [ "$NEW_POSTS" != "${{ steps.prev_stats.outputs.old_posts }}" ] || \ [ "$NEW_UPVOTES" != "${{ steps.prev_stats.outputs.old_upvotes }}" ]; then echo "changed=true" >> $GITHUB_OUTPUT echo "✅ Stats changed, will commit" else echo "changed=false" >> $GITHUB_OUTPUT echo "⏭️ No changes, skipping commit" fi - name: Commit and push changes if: steps.check_changes.outputs.changed == 'true' run: | git config --local user.email "github-actions[bot]@users.noreply.github.com" git config --local user.name "github-actions[bot]" git add docs/community-stats.zh.md docs/community-stats.md docs/community-stats.json README.md README_CN.md git diff --staged --quiet || git commit -m "chore: update community stats $(date +'%Y-%m-%d')" git push