Hugo 排程發表文章

使用 GitHub Action 的 Scheduled Events

不管是 FB 粉專,或是以前無名小站時代的部落格系統,都有提供排程發表文章的功能,讓寫手在靈感特別多的時候,或是行銷人員希望配合特定時程,可以預先寫好未來要發表的文章,並且在時間到的時候自動發表。

問題來了,如果是使用像 Hugo 這種靜態網站產生器,能否實現相同的功能呢?

答案是可以的,官方網站有提到:

How do I schedule posts?

  1. Set publishDate in the page Front Matter to a date in the future.
  2. Build and publish at intervals.

就是叫你把日期設定在未來,然後每隔一段時間部署就好。

這篇就是要來講我如何使用 GitHub Action 實現排程發表。

正文

之前的文章有提到我把 blog CD 轉換到 GitHub Action。

GitHub Action 的官方文件提到,可以使用 cronjob 格式來設定排程:

# .github/workflows/deploy.yml
on:
  push:
    branches:
      - master
  schedule:
    - cron:  '0 19 * * *'
# 下略

這邊的時間是 UTC,會在每天 19:00 UTC 跑一次部署,也就是 (19 + 8) % 24 = 台灣時間半夜三點跑 deploy job,重新部署我的 blog。

誰會想在凌晨三點部署部落格
GitHub Action:歐好棒,三點了

歐好棒,三點了

我把兩個條件並列,就會變成 or 關係,任一個條件成立(push on master branch 或是每天的半夜三點),都會 trigger 這個 workflow,有了 CD 是不是很方便呢?

一個需要注意的是,如果你設定的 interval 太短,會自動被拉長到每五分鐘執行一次。

預覽未來文章

因為 Hugo 預設會忽略未來與草稿文章,可以分別用 -F-D 兩個 flag 來讓 Hugo 把這些文章也 build 起來:

$ hugo serve -FD

想要知道有哪些未來文章可以使用 hugo list

$ hugo list future

同理,列出草稿:

$ hugo list drafts