diff --git a/.github/workflows/deploy-blog.yml b/.github/workflows/deploy-blog.yml new file mode 100644 index 0000000..47a3b31 --- /dev/null +++ b/.github/workflows/deploy-blog.yml @@ -0,0 +1,65 @@ +name: Deploy Hugo Blog + +on: + schedule: + - cron: '0 6 * * *' # 每天早上 6 点(UTC)执行一次 + push: + branches: + - main # 当 main 分支有新提交时执行 + +jobs: + build: + # 使用默认环境,并在最新的 Ubuntu 系统上运行 + environment: default + runs-on: ubuntu-latest + + steps: + # 1. 克隆当前博客仓库代码(包含完整历史记录) + - name: 克隆当前博客仓库 + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + # 2. 安装 Hugo 静态站点生成器(extended 版本支持 Sass/SCSS 等扩展功能) + - name: 安装 Hugo + uses: peaceiris/actions-hugo@v3 + with: + hugo-version: '0.145.0' + extended: true + + # 3. 克隆私有 wiki 仓库,作为博客内容的来源 + - name: 克隆私有 wiki 仓库 + run: | + # 遇到错误立即退出,并确保管道中任一命令失败时退出 + set -eo pipefail + # 清除旧的 wiki 临时目录,避免残留影响 + rm -rf /tmp/wiki + # 使用 secrets 中存储的认证信息从私有仓库克隆 wiki 到 /tmp/wiki + git clone https://${{ secrets.GITEA_REPO_READ }}@git.7wate.org/zhouzhongping/wiki.git /tmp/wiki + + # 4. 将 wiki 中的博客内容拷贝到 Hugo 的 content/posts 目录中 + - name: 拷贝 wiki 内容到 content/posts + run: | + set -eo pipefail + WIKI_BLOG_DIR="/tmp/wiki/Personal/Blog" + TARGET_DIR="content/posts" + if [ -d "$WIKI_BLOG_DIR" ]; then + cp -r "$WIKI_BLOG_DIR"/* "$TARGET_DIR"/ || { echo "拷贝失败"; exit 1; } + else + echo "目录 $WIKI_BLOG_DIR 不存在,拷贝失败" + exit 1 + fi + + # 5. 使用 Hugo 构建静态站点,并启用资源压缩优化 + - name: 构建 Hugo 静态站点 + run: | + set -eo pipefail + hugo --minify + + # 6. 使用 gh-pages Action 将生成的静态站点部署到指定分支(此处为 html 分支) + - name: 部署站点到 gh-pages 分支 + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_branch: html + publish_dir: ./public \ No newline at end of file