Create build-daily-book.yml

This commit is contained in:
justlovemaki
2025-06-12 18:38:14 +08:00
committed by GitHub
parent cfcceea466
commit a9e1b04746

109
.github/workflows/build-daily-book.yml vendored Normal file
View File

@@ -0,0 +1,109 @@
name: Build Daily Journal with mdBook
on:
# 允许手动触发此工作流
workflow_dispatch:
# 每天UTC时间8点自动触发 (对应北京时间下午4点)
# 如果需要北京时间早上8点请设置为 '0 0 * * *'
schedule:
- cron: '0 0 * * *'
jobs:
build-book:
runs-on: ubuntu-latest
# 需要写入权限来提交生成的文件
permissions:
contents: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install mdBook
run: |
mkdir -p $HOME/.cargo/bin
export PATH=$HOME/.cargo/bin:$PATH
curl -sL https://github.com/rust-lang/mdBook/releases/download/v0.4.36/mdbook-v0.4.36-x86_64-unknown-linux-gnu.tar.gz | tar -xz -C $HOME/.cargo/bin
- name: Generate SUMMARY.md
id: generate_summary
run: |
# 确保 src 目录存在
mkdir -p src
# 定义 SUMMARY.md 的路径
SUMMARY_FILE="src/SUMMARY.md"
# 查找最新的日刊文件
LATEST_DAILY_FILE=$(ls -1 daily/*.md | sort -r | head -n 1)
if [ -z "$LATEST_DAILY_FILE" ]; then
echo "错误:在 'daily' 目录中没有找到任何 .md 文件。"
exit 1
fi
# 获取最新日刊的文件名,例如 2025-06-12.md
LATEST_FILENAME=$(basename "$LATEST_DAILY_FILE")
# 将最新的日刊复制到 src 目录,作为 "Today" 页面
cp "$LATEST_DAILY_FILE" "src/$LATEST_FILENAME"
# 开始写入 SUMMARY.md
echo "# Summary" > "$SUMMARY_FILE"
echo "" >> "$SUMMARY_FILE"
echo "[Today]($LATEST_FILENAME)" >> "$SUMMARY_FILE"
echo "" >> "$SUMMARY_FILE"
# --- 生成按月分组的列表 ---
current_month=""
# 反向排序文件列表,实现日期从新到旧
for file in $(ls -1 daily/*.md | sort -r); do
# 从文件名 'daily/YYYY-MM-DD.md' 中提取月份 'YYYY-MM'
month=$(echo "$file" | cut -d'/' -f2 | cut -d'-' -f1,2)
# 如果是新的月份,则添加一个月份标题
if [ "$month" != "$current_month" ]; then
echo "# $month" >> "$SUMMARY_FILE"
current_month=$month
fi
# 提取链接标题 'MM-DD'
link_title=$(echo "$file" | cut -d'/' -f2 | cut -d'.' -f1 | cut -d'-' -f2,3)
# 写入日刊条目
echo "- [${link_title}-日刊]($file)" >> "$SUMMARY_FILE"
done
echo "SUMMARY.md 已成功生成。"
cat "$SUMMARY_FILE" # 在日志中打印生成的内容以供调试
- name: Build the book
run: |
mdbook build
- name: Organize output files
run: |
# 清理旧的 today 目录(如果存在),以防万一
rm -rf today
# 创建 today 目录并将构建产物移入
mkdir -p today
mv book today/
- name: Commit and push changes
run: |
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
# 添加所有新生成或修改的文件
# 包括 src/SUMMARY.md, src/YYYY-MM-DD.md 和 today/book/ 目录
git add src/SUMMARY.md "src/$(basename $(ls -1 daily/*.md | sort -r | head -n 1))" today/book
# 检查是否有文件变更
if git diff --staged --quiet; then
echo "没有文件变更,无需提交。"
else
echo "检测到文件变更,正在提交..."
git commit -m "docs: 自动构建日刊书籍 (`date -u`)"
git push
fi