之前博客发布是使用本地运行 deploy.sh 的方式,脚本可见 deploy.sh,这种方式每次发布都重新生成 public 文件夹,需要重新进行 git 初始化操作,导致远端 github 仓库永远只有一次 commit,看不到变更操作。所以决定修改为由 github action 在 push 代码时触发 hugo 来构建 github page。

触发 github action 需要在项目根目录下新建 .github/workflows 文件夹,并新建一个 .yml 结尾的文件,内容参考 actions-hugo。如果源 md 文件和打包出的 html 静态文件使用同一个 repo 的话,就会导致每次 push 都需要加 -f。为了避免这种操作可以设置两个 repo,一个存源 md 文件另一个存打包出来的,这就需要使用 action-gh-pages,并设置 external_repository deploy_key

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
name: CI
on:
  push:
    branches:
      - master
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: checkout
        uses: actions/checkout@v2.3.4
        with:
          submodules: true
      - name: Setup Hugo
        uses: peaceiris/actions-hugo@v2.4.13
        with:
          hugo-version: "0.80.0"
          extended: true
      - name: Build
        run: hugo
      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3.8.0
        with:
          deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
          external_repository: username/username.github.io
          publish_branch: master
          publish_dir: ./public

sub modules

项目根目录下需要有一个 .gitmodules 文件,内容为

1
2
3
4
5
6
7
[submodule "themes/even"]
  path = themes/even
  url = https://github.com/olOwOlo/hugo-theme-even.git
[submodule "public"]
  path = public
  url = https://github.com/username/username.github.io.git
  branch = master

tips

之前使用 even 主题的时候,本地有对源代码进行修改,但是如果直接链接作者的源 git 仓库会发现自己的修改是没有用的。于是 fork 了一份,并将 .gitmodules 中的 themes/even submodule 的 url 修改为自己 fork 后仓库的 url,发现可以生效~

参考