Github ActionsでGithub Pagesのリリースを自動化する
このブログの生成をGithub Actionsで行えるようにしたので、その時のメモ\\ 尚、現在のworkflowファイルはCj-bc/blog -- .github/workflows/publish.yamlにあります。
前提
静的サイトジェネレーターはHakyll
ほぼチュートリアル通りの作りになっている
=master=の代わりに=publish=、=develop=の代わりに=source=にしてある
Github Pageでホスティング
workflowファイルを作成する
トリガーの設定
自分の環境では、=source=ブランチの中身を使ってビルド→=publish=ブランチにおいて公開、という手順を追っているので、=source=ブランチにpushされたときだけ走るようにします
Jobの作成
Jobを作成します。環境はstackが動けばどこでも問題がないので、ubuntuにします。
ステップの作成
ここからstepを作っていきます。
必要なブランチをcheckoutする
今回、トリガー対象のブランチ=source=の他に=publish=ブランチを使っています。 しかし、デフォルトではローカルに=publish=ブランチは存在しません。\\ なので、=actions/checkout=に、全てのブランチとタグの履歴をfetchする=fetch-depth: 0=を付け足す必要があります。
キャッシュの設定をする
ビルドはなかなかに重い(現在の構成で約4,50分くらい)ので、なるべくキャッシュを活用します。\\ キャッシュには=actions/cache@v2=を使用します。キャッシュしたいものを生成するactionの前に実行し、キャッシュがあればそこをスキップするようにします。 キャッシュ対象は=~/.stack=ディレクトリです。\\ これは、[ncaqさんの記事][ncaq -- HaskellプログラムをGitHub Actionsでビルドしてクロスプラットフォーム向けにバイナリをReleaseにアップロードする]から大体を引用させていただきました。
haskellおよびstackのセットアップをする
Haskell stackを使うので、=actions/setup-haskell=のアクションを借ります。\\ ghcのバージョンは、とりあえず手元にあったものに合わせました。
publishコマンドを実行する
環境の準備がほぼできたので、あとはhakyllのビルドをしておしまいです。\\ その前に、*gitのuserを=github-actions=に設定*しておきます。このアカウントにすると、内部トークンを使ってくれます。\\ また、ビルド周りのコマンドはMakefileにしまってあったのでそのまま使います。