Create build-daily-book.yml
This commit is contained in:
109
.github/workflows/build-daily-book.yml
vendored
Normal file
109
.github/workflows/build-daily-book.yml
vendored
Normal 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
|
||||
Reference in New Issue
Block a user