ブログ更新する習慣が途切れて1か月以上が経ってしまった。
いろいろ要因はありつつも、とりあえず更新の手間を下げて改善を図ろうと思いたち、GitHubへの移行を決行した。
言いたいこと
- GitHub ActionsでHugo使いたいときはシンプルにGo Modulesで管理しつつGoのステップを使えばいい
- Firebase Hostingへのデプロイのワークフローは
firebase init hosting:github
で簡単にセットアップできる
背景
もともとGitLabとGitLab CIで管理・デプロイしていて、glabコマンド
を使ったりして工夫はしていた。が、やっぱり日常使いしてるGitHubと違うことで発生する地味なコンテキストスイッチがストレスだった。
リポジトリの移行自体は別にremoteを切り替えるだけなのでどうってことないが、CIの移行はイチからやることになるのでどのようにやったかを残しておく。
GitHub Actions上でHugoを使う
Marketplaceに有志が作ったHugoのActionがかなりあるが、シンプルなビルドだけならactions/setup-go@v2
を使えばいい。
そのためにまずHugo自体のバージョン管理も兼ねてGo Modulesの管理下に置く。
go mod init なんか適当なモジュール名
go get github.com/gohugoio/hugo
Go Modulesでビルドツールへの依存を管理するために、おなじみのtools.goを追加する。
//+build tools
package tools
import _ "github.com/gohugoio/hugo"
これで管理下に置いたバージョンのHugoをインストールできるため、GitHub Actions上でも特定のバージョンのHugoを使える。ステップとしてこんな感じになる。
- name: Set up Go
uses: actions/setup-go@v2
with:
go-version: "1.16"
- name: Cache Hugo binary
id: cache-hugo
uses: actions/cache@v2
with:
path: ~/go/bin/hugo
key: v1-hugo-${{ hashFiles('go.mod') }}
restore-keys: v1-go-hugo-
- run: go install github.com/gohugoio/hugo
if: steps.cache-hugo.outputs.cache-hit != 'true'
- run: hugo
Hugoの実行バイナリをキャッシュするようにしてる。
Firebase Hostingへのデプロイ
ドキュメントにある手順で概ね完結する。
PR作成時にプレビューチャネルへのデプロイもやってくれるワークフローを生成できるのでなかなか便利だ。
デプロイ前のビルドステップは生成されたワークフローに前述のHugo実行までをまるっと入れちゃえばいい。
その他
dependabotを仕込めばHugoのバージョンアップにも追従しやすくなる。firebase-toolsをpackage.jsonで管理していればそちらも追従しやすい。GitHubがすっかり便利になってしまってなんとも感慨深い。