Files
climperor/.gitea/workflows/web-daily.yml
T
vosonandCursor 2c4e2c2653 Fall back when runner lacks python venv/ensurepip.
Linux self-hosted runners without python3-venv fail job-local venv; use pip --break-system-packages so refresh can still install deps.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-30 18:45:58 +08:00

72 lines
2.6 KiB
YAML

# Daily Climperor web data refresh + deploy when changed.
# Repo secrets: STRATZ_API_TOKEN (optional for daily), CLOUDFLARE_EMAIL,
# CLOUDFLARE_API_KEY, OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET
# Runner: same self-hosted Mac mini as site-traffic-notify (needs python3, node/npx).
# daily also runs fetch_streamers.py (Douyin soft-fail; keeps previous counts on miss).
name: web-daily
on:
schedule:
# 06:00 China = 22:00 UTC previous calendar day
- cron: "0 22 * * *"
workflow_dispatch:
concurrency:
group: climperor-web-full-refresh
cancel-in-progress: false
jobs:
refresh:
runs-on: self-hosted
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Restore refresh cache
uses: actions/cache@v4
with:
path: web/.refresh-cache
key: web-refresh-${{ runner.os }}-${{ hashFiles('web/data/patches.json') }}-${{ github.run_id }}
restore-keys: |
web-refresh-${{ runner.os }}-${{ hashFiles('web/data/patches.json') }}-
web-refresh-${{ runner.os }}-
- name: Install deps
run: |
set -e
PYTHON=python3
command -v python3 >/dev/null || PYTHON=python
command -v node >/dev/null || { echo "node/npx required for wrangler deploy"; exit 1; }
# Prefer job-local venv (PEP 668). Some runners lack ensurepip/python3-venv.
rm -rf .venv
if "$PYTHON" -m venv .venv; then
.venv/bin/pip install -q -r web/requirements.txt
echo "CLIMPEROR_PY=${PWD}/.venv/bin/python" >> "$GITHUB_ENV"
else
echo "venv unavailable; pip --break-system-packages"
"$PYTHON" -m pip install -q --break-system-packages -r web/requirements.txt
echo "CLIMPEROR_PY=${PYTHON}" >> "$GITHUB_ENV"
fi
- name: Refresh daily tier
env:
REFRESH_CACHE_ENABLED: "1"
REFRESH_RUN_ID: ${{ github.run_id }}
STRATZ_API_TOKEN: ${{ secrets.STRATZ_API_TOKEN }}
CLOUDFLARE_EMAIL: ${{ secrets.CLOUDFLARE_EMAIL }}
CLOUDFLARE_API_KEY: ${{ secrets.CLOUDFLARE_API_KEY }}
OSS_ACCESS_KEY_ID: ${{ secrets.OSS_ACCESS_KEY_ID }}
OSS_ACCESS_KEY_SECRET: ${{ secrets.OSS_ACCESS_KEY_SECRET }}
run: |
set -e
"${CLIMPEROR_PY}" web/refresh_web.py --tier daily
- name: Save refresh summary
if: always()
uses: actions/upload-artifact@v4
with:
name: web-daily-refresh-${{ github.run_id }}
path: web/.refresh/summary.json
if-no-files-found: warn