Files
menav/.github/workflows/deploy.yml
rbetree c6937429b8 feat(ci): 支持禁用 GitHub Pages 部署
为 GitHub Pages 部署步骤添加条件判断,通过 ENABLE_GITHUB_PAGES 变量控制
2026-01-17 21:10:02 +08:00

153 lines
5.8 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.
name: Build and Deploy Site
on:
push:
branches: [main]
workflow_dispatch:
schedule:
# 定时刷新 RSS / projects 仓库元信息GitHub Actions 的 cron 使用 UTC 时区)
- cron: '0 2 * * *'
# 设置GITHUB_TOKEN的权限
permissions:
contents: write
pages: write
id-token: write
# 允许一个并发部署
concurrency:
# 说明:
# - 本工作流在检测到 bookmarks/*.html 时会自动导入并 push 回主分支
# - 若 concurrency group 统一为固定值,会导致“自触发的 push run”取消当前正在部署的 runcancel-in-progress
# - 这里仅对 actions bot 的 push run 单独分组,避免误取消当前 run其余触发保持全局串行
group: ${{ github.event_name == 'push' && github.actor == 'github-actions[bot]' && 'pages-bot-push' || 'pages' }}
cancel-in-progress: true
jobs:
build_and_deploy:
# 防自触发CI 自己 push 产生的 push 事件不需要再部署(本次 run 已完成导入并继续部署)
if: ${{ github.event_name != 'push' || github.actor != 'github-actions[bot]' }}
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
# 使用persist-credentials: false以便后续步骤可以使用自定义的提交者
with:
persist-credentials: false
fetch-depth: 0 # 获取所有历史记录以进行diff检查
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'npm'
- name: Install dependencies
run: npm ci
# --- 书签处理步骤 ---
- name: Check for bookmark HTML files
id: check_bookmark_files
run: |
if [ -d bookmarks ] && [ "$(find bookmarks -type f -name "*.html" 2>/dev/null)" ]; then
echo "found=true" >> $GITHUB_OUTPUT
echo "Bookmark HTML files found, will process them."
else
echo "found=false" >> $GITHUB_OUTPUT
echo "No bookmark HTML files found, skipping bookmark processing."
fi
- name: Process bookmark files
if: steps.check_bookmark_files.outputs.found == 'true'
env:
MENAV_BOOKMARKS_DETERMINISTIC: '1'
run: |
echo "Processing bookmark files..."
node src/bookmark-processor.js
- name: Commit & push bookmark import result (single commit)
if: steps.check_bookmark_files.outputs.found == 'true'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -euo pipefail
# 校验导入结果(核心产物必须存在)
if [ ! -f config/user/pages/bookmarks.yml ]; then
echo "ERROR: config/user/pages/bookmarks.yml does not exist! Bookmark processing may have failed."
echo "Directory listing for config/user/pages:"
ls -la config/user/pages/ || echo "Directory does not exist"
exit 1
fi
echo "Cleaning up processed bookmark HTML files..."
HTML_FILES=$(find bookmarks -type f -name "*.html" 2>/dev/null || true)
FILE_COUNT=0
if [ -n "${HTML_FILES}" ]; then
FILE_COUNT=$(echo "${HTML_FILES}" | wc -l | tr -d ' ')
find bookmarks -type f -name "*.html" -delete
echo "Removed ${FILE_COUNT} HTML files."
else
echo "No HTML files found to clean up."
fi
git config --local user.email "action@github.com"
git config --local user.name "github-actions[bot]"
# 注意:配置系统采用“完全替换”,一旦写回 config/user/,后续构建会忽略 config/_default/
# 因此这里必须整体提交 config/user/(避免只提交书签页导致其它页面配置缺失)
git add -A config/user bookmarks
if git diff --cached --quiet; then
echo "No changes to commit."
exit 0
fi
git commit -m "chore(bookmarks): 导入书签并写回用户配置"
git push "https://x-access-token:${GITHUB_TOKEN}@github.com/${{ github.repository }}.git" HEAD:${{ github.ref_name }}
# --- 书签处理步骤结束 ---
# --- 网站构建和部署步骤 ---
# 同步时效性数据best-effortprojects 仓库信息、articles RSS 聚合
# 说明:
# - 同步结果写入 dev/(仓库默认 gitignore仅用于本次构建渲染
# - 同步脚本内部已做 best-effort失败不阻断后续 build
- name: Sync projects (best-effort)
run: npm run sync-projects
- name: Sync articles (best-effort)
run: npm run sync-articles
- name: Build site (clean dist + generate)
run: npm run build
- name: Check favicon
run: |
if [ -f dist/favicon.ico ]; then
echo "Favicon exists"
ls -l dist/favicon.ico
else
echo "Warning: favicon.ico not found in dist directory"
# 暂时改为警告,避免因为图标问题阻止部署
# exit 1
fi
# GitHub Pages 部署步骤(仅在启用时执行)
# 说明:
# - 如果你使用 Vercel/Cloudflare Pages 等第三方平台部署,可以跳过这些步骤
# - 设置 repository variable ENABLE_GITHUB_PAGES=false 来禁用 GitHub Pages 部署
# - 默认启用 GitHub Pages 部署以保持向后兼容
- name: Setup Pages
if: ${{ vars.ENABLE_GITHUB_PAGES != 'false' }}
uses: actions/configure-pages@v4
- name: Upload artifact
if: ${{ vars.ENABLE_GITHUB_PAGES != 'false' }}
uses: actions/upload-pages-artifact@v3
with:
path: 'dist'
- name: Deploy to GitHub Pages
if: ${{ vars.ENABLE_GITHUB_PAGES != 'false' }}
id: deployment
uses: actions/deploy-pages@v4