GitHub ActionsでCachixを導入する
Table of Contents
背景・動機
NixにハマってからGitHub Actions上でNixを実行する機会が増えた。 Nixというツールの性質上、どうしても実行環境の準備に時間がかかってしまうのでキャッシュ機能を導入したいと以前から思っていた。
Cachixが一番メジャーなサービスであり、個人利用程度なら無料で使えるので今回はじめて利用してみた。
試したこと・やったこと
1. Cachixの設定をする
アカウントを新規作成して、New Cacheで作成した。
「Settings > Cache Auth Tokens」でアクセストークンを作成して,GitHub Actions Secretに CACHIX_AUTH_TOKEN
に登録した。
2. GitHub Actionsで設定する
reusable actionで次のように定義した。
reusable actionからは secrets.XX
を参照できないので引数で渡す必要がある。
name: Run setup-nix
description: Set up Nix environment for GitHub Actions
inputs:
cachix-auth-token:
required: true
runs:
using: composite
steps:
- uses: cachix/install-nix-action@v31
- uses: cachix/cachix-action@v14
with:
name: takeokunn-blog
authToken: '${{ inputs.cachix-auth-token }}'
次のように呼び出すとよしなにCache HitしたらCachixからCopyしてくれるようになった。
steps:
- name: Setup nix
uses: ./.github/actions/setup-nix
with:
cachix-auth-token: ${{ secrets.CACHIX_AUTH_TOKEN }}
あとはよしなにnixを実行する。
# nix buildの場合
- name: Build zenn
run: nix build .#build-zenn
# nix developの場合
- name: flake check
run: nix develop --command bash -c "textlint 'org/**/*.org'"
得られた結果・所感
takeokunn/blog の場合、平均して1分でNix実行環境を用意できるようになり大幅なCI速度改善を実現できた。
https://github.com/takeokunn/blog/actions

Cachixの導入は簡単で苦労した所が特になかった。
今回の対応に合わせてflake.nixを充実させた結果、LocalとGitHub Actions上で同一の環境を再現性高く構築できるようになったのが良かった。
今後の展開・検討事項
LintのチェックなどのCI部分もflake.nix化の対応したい。