Files
blog/.github/workflows/subset-fonts.yml
T
Vaica 6135b6dcd5 fix: 修复Hugo版本兼容性问题
- 回滚footer.html,使用 .Err 语法(兼容0.128.2)
- 固定GitHub Actions的Hugo版本为0.128.2
- 确保本地和CI环境一致
2026-06-03 14:04:44 +08:00

166 lines
6.1 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# GitHub Actions: 字体子集化自动化
# 当内容更新时自动提取字符并生成优化的子集字体
name: Font Subset Optimization
on:
# 当推送到main分支且content目录有变更时触发
push:
branches:
- main
paths:
- 'content/**'
- 'layouts/**'
# 允许手动触发
workflow_dispatch:
inputs:
force_rebuild:
description: '强制重新生成子集字体'
required: false
default: 'false'
type: boolean
# 可选:每周自动运行一次(检查是否需要更新)
schedule:
- cron: '0 2 * * 1' # 每周一凌晨2点
# 限制同时运行的工作流数量
concurrency:
group: font-subset-${{ github.ref }}
cancel-in-progress: true
jobs:
subset-fonts:
name: Subset Fonts
runs-on: ubuntu-latest
timeout-minutes: 30
# 只在主仓库上运行(fork不运行)
if: github.repository == 'zqlit/blog'
steps:
# 1. 检出代码
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0 # 获取完整历史用于比较
# 2. 设置Python环境
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
cache: 'pip' # 使用requirements.txt进行缓存
# 3. 安装Python依赖
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install fonttools brotli
# 4. 检查是否需要更新(可选)
- name: Check if update needed
id: check
run: |
# 检查内容文件是否有变更
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
echo "needs_update=true" >> $GITHUB_OUTPUT
else
# 比较content目录的变更
CHANGED_FILES=$(git diff --name-only HEAD~1 HEAD -- content/ layouts/ || echo "")
if [ -n "$CHANGED_FILES" ]; then
echo "needs_update=true" >> $GITHUB_OUTPUT
echo "Changed files: $CHANGED_FILES"
else
echo "needs_update=false" >> $GITHUB_OUTPUT
echo "No content changes detected"
fi
fi
# 5. 构建Hugo站点(用于提取字符)
- name: Build Hugo site
if: steps.check.outputs.needs_update == 'true' || github.event.inputs.force_rebuild == 'true'
uses: peaceiris/actions-hugo@v2
with:
hugo-version: '0.128.2' # 固定版本,与本地一致
extended: true
- name: Build
if: steps.check.outputs.needs_update == 'true' || github.event.inputs.force_rebuild == 'true'
run: hugo --destination=public --minify
# 6. 运行字体子集化脚本
- name: Subset fonts
if: steps.check.outputs.needs_update == 'true' || github.event.inputs.force_rebuild == 'true'
run: |
python scripts/subset-font-safe.py
# 7. 检查子集字体是否真的优化了
- name: Verify optimization
if: steps.check.outputs.needs_update == 'true' || github.event.inputs.force_rebuild == 'true'
run: |
ORIGINAL_SIZE=$(stat -f%z themes/Ying/static/font/zql-v2.woff2 2>/dev/null || stat -c%s themes/Ying/static/font/zql-v2.woff2)
SUBSET_SIZE=$(stat -f%z themes/Ying/static/font/zql-v2-subset.woff2 2>/dev/null || stat -c%s themes/Ying/static/font/zql-v2-subset.woff2)
echo "Original font size: $ORIGINAL_SIZE bytes"
echo "Subset font size: $SUBSET_SIZE bytes"
# 检查子集字体是否真的更小
if [ $SUBSET_SIZE -ge $ORIGINAL_SIZE ]; then
echo "⚠️ Warning: Subset font is not smaller than original"
echo "Skipping commit..."
exit 0
fi
REDUCTION=$((ORIGINAL_SIZE - SUBSET_SIZE))
PERCENTAGE=$((REDUCTION * 100 / ORIGINAL_SIZE))
echo "✅ Font optimized: reduced $REDUCTION bytes ($PERCENTAGE%)"
# 8. 提交更改(如果有优化)
- name: Commit changes
if: steps.check.outputs.needs_update == 'true' || github.event.inputs.force_rebuild == 'true'
run: |
# 配置git
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
# 检查是否有变更
if git diff --quiet; then
echo "No changes to commit"
exit 0
fi
# 添加变更的文件
git add themes/Ying/static/font/zql-v2-subset.*
git add themes/Ying/static/font/used_chars.txt
# 提交(添加[skip ci]避免触发deploy.yml)
git commit -m "chore: update font subset (automated) [skip ci]
- Updated font subset based on latest content
- Subset characters: $(wc -c < themes/Ying/static/font/used_chars.txt) chars
- Font size: $(stat -c%s themes/Ying/static/font/zql-v2-subset.woff2 2>/dev/null || echo 'N/A') bytes"
# 9. 推送更改
- name: Push changes
if: steps.check.outputs.needs_update == 'true' || github.event.inputs.force_rebuild == 'true'
run: |
git push origin main
# 10. 创建摘要
- name: Create summary
if: steps.check.outputs.needs_update == 'true' || github.event.inputs.force_rebuild == 'true'
run: |
echo "## 🔤 Font Subset Optimization" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "✅ Font subset updated successfully!" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### 📊 Statistics" >> $GITHUB_STEP_SUMMARY
echo "- **Characters in subset:** $(wc -c < themes/Ying/static/font/used_chars.txt)" >> $GITHUB_STEP_SUMMARY
echo "- **Subset font size:** $(stat -c%s themes/Ying/static/font/zql-v2-subset.woff2 2>/dev/null || echo 'N/A') bytes" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### 📝 Triggered by" >> $GITHUB_STEP_SUMMARY
echo "- Event: ${{ github.event_name }}" >> $GITHUB_STEP_SUMMARY
echo "- Commit: ${{ github.sha }}" >> $GITHUB_STEP_SUMMARY