GitHub Actionsでdfx / vessel / mocをインストールする便利な方法を紹介します。
はじめに
こんにちは、@bioerrorlogです。
dfxによるcanister操作や、Motokoのコンパイル&Unitテストの実行をGitHub Actionsで行いたいときは、dfx / vessel / moc をGitHub Actionsのjob内でインストールする必要があります。
律儀にそれぞれをコマンドでインストールしてもよいのですが、コミュニティから開発されているactionsを使えば、とても簡単にインストールできます。
今回は、そのactionsを使ってdfx / vessel / mocをインストールする方法を紹介します。
GitHub Actionsでdfx/vessel/mocをインストールする
aviate-labs/setup-dfx の紹介
aviate-labsのsetup-dfx
を使えば、簡単にdfx / vessel / mocを簡単にインストールすることが出来ます。
このactionsのinputは下記の3つです。
inputs: dfx-version: description: 'The dfx version to download.' install-moc: description: 'Whether to install moc through dfx.' default: false vessel-version: description: 'The vessel version to download.'
dfx-version
: 指定したバージョンのdfxがインストールされるinstall-moc
: dfx経由でmocをインストールするかどうかを指定できるvessel-version
: 指定したバージョンのvesselがインストールされる
dfx-version
とvessel-version
はそのまま読んで字のごとくです。
指定したバージョンがインストールされ、指定しなかった場合はインストールされません。
一方、install-moc
は少し意図を捉えにくいですね。
一言でいうと、install-moc
をtrue
にすることでmocコマンドをmoc
で実行できるようになります。
(PATHが通った状態になる)
少しややこしいので、mocインストールの背景から軽く整理しましょう。
mocバイナリの置かれる場所には、大きく二つあります。
- dfx cache配下
- vessel bin配下
dfx cache配下に置かれたmocを実行するには、下記のようなコマンドを使います。
$(dfx cache show)/moc
一方vessel bin配下のmocを実行するには、下記のようなコマンドが使われます。
$(vessel bin)/moc
ここでsetup-dfxのinstall-moc
パラメータに話を戻すと、install-moc
をtrue
に指定することでdfx cache show
の結果がPATHに登録されるようになります:
// Install dfx cache to get moc. if (core.getBooleanInput('install-moc')) { cp.execSync(`${dfxPath} cache install`); const cachePath = infoExec(`${dfxPath} cache show`).trim(); core.addPath(cachePath); const mocPath = await io.which('moc'); infoExec(`${mocPath} --version`); }
※ ソースコードより
よって、$(dfx cache show)/moc
とやらなくてもmoc
だけでmocコマンドを実行できるようになる、ということです。
実装例
では、actionsの実装例を軽く示します。
name: Setup dfx on: push: jobs: setup-dfx: runs-on: ubuntu-latest env: VESSEL_VERSION: 0.6.3 DFX_VERSION: 0.9.3 steps: - uses: actions/checkout@v2 - uses: aviate-labs/setup-dfx@v0.2.3 with: dfx-version: ${{ env.DFX_VERSION }} install-moc: true vessel-version: ${{ env.VESSEL_VERSION }} - name: Show versions run: | dfx --version moc --version vessel --version - name: Motoko type checking run: | for i in src/*.mo ; do moc $(vessel sources) --check $i ; done
dfx/moc/vesselを全てインストールし、Motoko type checkを実行する例です。
Motoko type checkについての詳細は本記事では割愛しますが、それぞれのコマンドがGitHub Actions内で使えるようになったことが分かります。
おわりに
GitHub Actionsでdfx / vessel / mocをインストールする便利な方法を紹介しました。
Internet Computerのcanister開発においても、Actionsを使いこなして良いCICDライフを送りたいものです。
[関連記事]
参考
GitHub - dfinity/sdk: The DFINITY Canister Software Development Kit (SDK)
GitHub - dfinity/vessel: Simple package management for Motoko
Compiler reference | Internet Computer Home
actions-tests/setup-dfx.yml at main · bioerrorlog/actions-tests · GitHub