1507
This commit is contained in:
1 parent
2fbf2e3d82
commit
5651d494ba
17 files changed
+4
-744
No files matched your search
@@ -7,11 +7,6 @@ on:
|
||||
schedule:
|
||||
- cron: '0 1 * * *' # UTC 01:00 = 北京时间 09:00
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
skip_font_subset:
|
||||
description: 'Skip font subset step'
|
||||
type: boolean
|
||||
default: true
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
@@ -86,162 +81,7 @@ jobs:
|
||||
echo "## ⏱️ Pre-check 耗时: ${duration}秒" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
# ============================================================
|
||||
# Job 1: Font Subset (字体子集化 - 可选并行任务)
|
||||
# ============================================================
|
||||
subset-fonts:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 15
|
||||
permissions:
|
||||
contents: write
|
||||
needs: pre-check
|
||||
if: |
|
||||
needs.pre-check.outputs.can_deploy == 'true' &&
|
||||
inputs.skip_font_subset != 'true' &&
|
||||
github.event_name == 'workflow_dispatch'
|
||||
outputs:
|
||||
font_updated: ${{ steps.update.outputs.font_updated }}
|
||||
char_count: ${{ steps.stats.outputs.char_count }}
|
||||
original_size: ${{ steps.stats.outputs.original_size }}
|
||||
subset_size: ${{ steps.stats.outputs.subset_size }}
|
||||
|
||||
steps:
|
||||
- name: Start timing
|
||||
id: start-subset
|
||||
run: echo "start_time=$(date +%s)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip install fonttools brotli zopfli
|
||||
|
||||
- name: Generate font subset
|
||||
id: update
|
||||
run: |
|
||||
# 运行字体子集化脚本
|
||||
# 会自动扫描:
|
||||
# 1. 静态文件 (content, layouts, public)
|
||||
# 2. 本地 JSON 数据 (友链、朋友圈)
|
||||
# 3. 远程 API (api.usj.cc 的友链、订阅源、朋友圈)
|
||||
python scripts/subset-font-safe.py
|
||||
|
||||
# 检查是否有变化
|
||||
git config --global user.name "GitHub Actions"
|
||||
git config --global user.email "actions@github.com"
|
||||
|
||||
git add themes/Ying/static/font/zql-v2-subset.woff2 themes/Ying/static/font/used_chars.txt
|
||||
if ! git diff --staged --quiet; then
|
||||
git commit -m "chore: update font subset [skip ci]"
|
||||
git push origin HEAD:main
|
||||
echo "font_updated=true" >> $GITHUB_OUTPUT
|
||||
echo "✅ 字体子集已更新并推送"
|
||||
else
|
||||
echo "font_updated=false" >> $GITHUB_OUTPUT
|
||||
echo "ℹ️ 字体子集无变化,跳过提交"
|
||||
fi
|
||||
|
||||
- name: Collect stats
|
||||
id: stats
|
||||
if: always()
|
||||
run: |
|
||||
CHAR_COUNT=$(wc -m < themes/Ying/static/font/used_chars.txt | tr -d ' ')
|
||||
ORIGINAL_SIZE=$(stat -c%s themes/Ying/static/font/zql-v2.woff2)
|
||||
SUBSET_SIZE=$(stat -c%s themes/Ying/static/font/zql-v2-subset.woff2)
|
||||
echo "char_count=$CHAR_COUNT" >> $GITHUB_OUTPUT
|
||||
echo "original_size=$ORIGINAL_SIZE" >> $GITHUB_OUTPUT
|
||||
echo "subset_size=$SUBSET_SIZE" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Create font subset summary
|
||||
if: always()
|
||||
run: |
|
||||
ORIGINAL_SIZE_KB=$(echo "scale=1; ${{ steps.stats.outputs.original_size }} / 1024" | bc)
|
||||
SUBSET_SIZE_KB=$(echo "scale=1; ${{ steps.stats.outputs.subset_size }} / 1024" | bc)
|
||||
REDUCTION_KB=$(echo "scale=1; (${{ steps.stats.outputs.original_size }} - ${{ steps.stats.outputs.subset_size }}) / 1024" | bc)
|
||||
PERCENTAGE=$(echo "scale=1; (${{ steps.stats.outputs.original_size }} - ${{ steps.stats.outputs.subset_size }}) * 100 / ${{ steps.stats.outputs.original_size }}" | bc)
|
||||
|
||||
echo "## 🔤 字体子集化" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
if [ "${{ steps.update.outputs.font_updated }}" = "true" ]; then
|
||||
echo "✅ **字体子集已更新**" >> $GITHUB_STEP_SUMMARY
|
||||
else
|
||||
echo "ℹ️ **字体子集无变化**" >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "### 📊 统计信息" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- **字符数:** ${{ steps.stats.outputs.char_count }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- **原始大小:** ${ORIGINAL_SIZE_KB} KB" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- **子集大小:** ${SUBSET_SIZE_KB} KB" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- **节省空间:** ${REDUCTION_KB} KB (${PERCENTAGE}%)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "### 🌐 扫描的数据源" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- 静态文件: content, layouts, public" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- 本地 JSON: link_lite.json, friend_circle_data.json" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- 远程 API: api.usj.cc (links, feeds, articles)" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
- name: Send font subset notification
|
||||
if: steps.update.outputs.font_updated == 'true'
|
||||
env:
|
||||
TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }}
|
||||
TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }}
|
||||
FEISHU_WEBHOOK_URL: ${{ secrets.FEISHU_WEBHOOK_URL }}
|
||||
run: |
|
||||
ORIGINAL_SIZE_KB=$(echo "scale=1; ${{ steps.stats.outputs.original_size }} / 1024" | bc)
|
||||
SUBSET_SIZE_KB=$(echo "scale=1; ${{ steps.stats.outputs.subset_size }} / 1024" | bc)
|
||||
REDUCTION_KB=$(echo "scale=1; (${{ steps.stats.outputs.original_size }} - ${{ steps.stats.outputs.subset_size }}) / 1024" | bc)
|
||||
PERCENTAGE=$(echo "scale=1; (${{ steps.stats.outputs.original_size }} - ${{ steps.stats.outputs.subset_size }}) * 100 / ${{ steps.stats.outputs.original_size }}" | bc)
|
||||
|
||||
if [ -n "$TELEGRAM_BOT_TOKEN" ] && [ -n "$TELEGRAM_CHAT_ID" ]; then
|
||||
MESSAGE="✅ **字体子集化完成**
|
||||
|
||||
📦 项目: ${{ github.repository }}
|
||||
🌿 分支: ${{ github.ref_name }}
|
||||
|
||||
📊 优化统计:
|
||||
- 字符数: ${{ steps.stats.outputs.char_count }}
|
||||
- 原始大小: ${ORIGINAL_SIZE_KB} KB
|
||||
- 子集大小: ${SUBSET_SIZE_KB} KB
|
||||
- 节省空间: ${REDUCTION_KB} KB (${PERCENTAGE}%)
|
||||
|
||||
🌐 数据源:
|
||||
- 静态文件 + 本地JSON + 远程API"
|
||||
|
||||
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
|
||||
-d chat_id="${TELEGRAM_CHAT_ID}" \
|
||||
-d text="${MESSAGE}" \
|
||||
-d parse_mode="Markdown"
|
||||
fi
|
||||
|
||||
if [ -n "$FEISHU_WEBHOOK_URL" ]; then
|
||||
curl -s -X POST "${FEISHU_WEBHOOK_URL}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"msg_type": "text",
|
||||
"content": {
|
||||
"text": "✅ **字体子集化完成**\n\n📦 项目: ${{ github.repository }}\n🌿 分支: ${{ github.ref_name }}\n\n📊 优化统计:\n- 字符数: ${{ steps.stats.outputs.char_count }}\n- 原始大小: '"${ORIGINAL_SIZE_KB}"' KB\n- 子集大小: '"${SUBSET_SIZE_KB}"' KB\n- 节省空间: '"${REDUCTION_KB}"' KB ('"${PERCENTAGE}"'%)\n\n🌐 数据源: 静态文件 + 本地JSON + 远程API"
|
||||
}
|
||||
}'
|
||||
fi
|
||||
|
||||
- name: End timing
|
||||
id: end-subset
|
||||
run: |
|
||||
end_time=$(date +%s)
|
||||
start_time=${{ steps.start-subset.outputs.start_time }}
|
||||
duration=$((end_time - start_time))
|
||||
echo "duration=${duration}" >> $GITHUB_OUTPUT
|
||||
echo "## ⏱️ Subset-fonts 耗时: ${duration}秒" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
# ============================================================
|
||||
# Job 2: Build (构建)
|
||||
# Job 1: Build (构建)
|
||||
# ============================================================
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -566,7 +406,7 @@ jobs:
|
||||
timeout-minutes: 5
|
||||
permissions:
|
||||
contents: read
|
||||
needs: [pre-check, subset-fonts, build, deploy-edgeone, deploy-upyun]
|
||||
needs: [pre-check, build, deploy-edgeone, deploy-upyun]
|
||||
if: always() && needs.build.result == 'success' && needs.deploy-edgeone.result == 'success' && needs.deploy-upyun.result == 'success'
|
||||
|
||||
steps:
|
||||
@@ -729,7 +569,6 @@ jobs:
|
||||
echo "| 阶段 | 状态 |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "|------|------|" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Pre-check | ${{ needs.pre-check.result == 'success' && '✅ 成功' || needs.pre-check.result == 'skipped' && '⏭️ 跳过' || '❌ 失败' }} |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Subset-fonts | ${{ needs.subset-fonts.result == 'success' && '✅ 成功' || needs.subset-fonts.result == 'skipped' && '⏭️ 跳过' || '❌ 失败' }} |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Build | ${{ needs.build.result == 'success' && '✅ 成功' || '❌ 失败' }} |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Deploy EdgeOne | ${EDGEONE_DISPLAY} |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Deploy UpYun | ${UPYUN_DISPLAY} |" >> $GITHUB_STEP_SUMMARY
|
||||
@@ -745,7 +584,7 @@ jobs:
|
||||
timeout-minutes: 3
|
||||
permissions:
|
||||
contents: read
|
||||
needs: [pre-check, subset-fonts, build, deploy-edgeone, deploy-upyun, finalize]
|
||||
needs: [pre-check, build, deploy-edgeone, deploy-upyun, finalize]
|
||||
if: always() && (needs.pre-check.result == 'failure' || needs.build.result == 'failure' || needs.deploy-edgeone.result == 'failure' || needs.deploy-upyun.result == 'failure' || needs.finalize.result == 'failure')
|
||||
|
||||
steps:
|
||||
|
||||
Reference in new issue
Block a user