BioErrorLog Tech Blog

試行錯誤の記録

GitHub Actionsでdfx/vessel/mocをインストールする | Motoko, Internet Computer

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を簡単にインストールすることが出来ます。

github.com

この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-versionvessel-versionはそのまま読んで字のごとくです。 指定したバージョンがインストールされ、指定しなかった場合はインストールされません。

一方、install-mocは少し意図を捉えにくいですね。 一言でいうと、install-moctrueにすることで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-moctrueに指定することで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ライフを送りたいものです。

[関連記事]

www.bioerrorlog.work

www.bioerrorlog.work

www.bioerrorlog.work

参考

GitHub - aviate-labs/setup-dfx: Set up your GitHub Actions workflow with a specific version of the Internet Computer SDK

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

cancan/scripts at main · dfinity/cancan · GitHub

GitHub - Japan-DfinityInfoHub/nft-barter