- Keep detailed stats tables in README - Compare downloads/posts/upvotes before committing - Skip commit if no actual data change (only time updated)
89 lines
3.4 KiB
YAML
89 lines
3.4 KiB
YAML
# 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
|