TongcyDai

update-wikipedia-daily-stats.yml

Dec 4th, 2025
7
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
YAML 3.23 KB | None | 0 0
  1. name: 維基百科每日統計自動更新
  2.  
  3. on:
  4.   schedule:
  5.    # 每天多個時間點執行,確保至少有一次成功
  6.     - cron: '15 1 * * *'   # UTC 01:15
  7.     - cron: '15 5 * * *'   # UTC 05:15
  8.     - cron: '15 9 * * *'   # UTC 09:15
  9.     - cron: '15 13 * * *'  # UTC 13:15
  10.  
  11.   # 允許手動觸發
  12.   workflow_dispatch:
  13. jobs:
  14.   update-stats:
  15.     runs-on: ubuntu-latest
  16.     timeout-minutes: 15
  17.    
  18.     steps:
  19.     - name: 檢出代碼
  20.       uses: actions/checkout@v4
  21.       with:
  22.         fetch-depth: 1
  23.    
  24.     - name: 設置 Python 環境
  25.       uses: actions/setup-python@v5
  26.       with:
  27.         python-version: '3.11'
  28.         cache: 'pip'
  29.    
  30.     - name: 安裝依賴
  31.       working-directory: python-scripts/stat_updater
  32.       run: |
  33.        python -m pip install --upgrade pip
  34.         pip install -r requirements.txt
  35.    
  36.     - name: 檢查今日是否已更新
  37.       id: check_updated
  38.       working-directory: python-scripts/stat_updater
  39.       run: |
  40.        if python check_if_updated_today.py; then
  41.           echo "already_updated=true" >> $GITHUB_OUTPUT
  42.           echo "今日統計已更新,跳過執行"
  43.         else
  44.           echo "already_updated=false" >> $GITHUB_OUTPUT
  45.           echo "今日尚未更新,開始執行"
  46.         fi
  47.       continue-on-error: true
  48.    
  49.     - name: 執行統計更新
  50.       if: steps.check_updated.outputs.already_updated != 'true'
  51.       working-directory: python-scripts/stat_updater
  52.       # 使用 GitHub Secrets 傳遞憑證(更安全)
  53.       env:
  54.         WIKI_USERNAME: ${{ secrets.WIKI_USERNAME }}
  55.         WIKI_PASSWORD: ${{ secrets.WIKI_PASSWORD }}
  56.       run: |
  57.        max_attempts=3
  58.         attempt=1
  59.        
  60.         while [ $attempt -le $max_attempts ]; do
  61.           echo "=== 第 $attempt 次嘗試執行維基百科統計更新 ==="
  62.          
  63.           if python wikipedia_stats_updater.py; then
  64.             echo "維基百科統計更新成功!"
  65.             exit 0
  66.           else
  67.             echo "第 $attempt 次嘗試失敗"
  68.            
  69.             if [ $attempt -lt $max_attempts ]; then
  70.               wait_time=$((attempt * 60))
  71.               echo "等待 $wait_time 秒後重試..."
  72.               sleep $wait_time
  73.             fi
  74.           fi
  75.          
  76.           attempt=$((attempt + 1))
  77.         done
  78.        
  79.         echo "所有重試都失敗了,將在下一個排程時間再次嘗試"
  80.         exit 1
  81.    
  82.     - name: 上傳日誌文件
  83.       if: always()
  84.       uses: actions/upload-artifact@v4
  85.       with:
  86.         name: wikipedia-bot-logs-${{ github.run_number }}
  87.         path: python-scripts/stat_updater/wikipedia_bot.log
  88.         retention-days: 30
  89.       continue-on-error: true
  90.    
  91.     - name: 記錄執行結果
  92.       if: always()
  93.       run: |
  94.        if [ "${{ steps.check_updated.outputs.already_updated }}" == "true" ]; then
  95.           echo "今日已更新,任務跳過"
  96.         elif [ $? -eq 0 ]; then
  97.           echo "維基百科統計更新成功"
  98.         else
  99.           echo "本次更新失敗,將在下一個時段重試"
  100.           echo "下次執行時間: 4 小時後"
  101.         fi
  102.         echo "查看詳細日誌: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
Advertisement
Add Comment
Please, Sign In to add comment