LoginSignup
34
11

More than 1 year has passed since last update.

Nim用のGitHub Actionsを作ってみた

Last updated at Posted at 2019-11-16

まえがき

setup-nim-actionというNim用のGitHub Actionsを自作してみました。
使い方、作った経緯などについて書きます。

リポジトリ

作ったActionのコードは以下のリポジトリに全て存在します。
setup-nim-action - GitHub

使い方

.github/workflows/配下に以下のようなYAMLを書くだけです。
uses: jiro4989/setup-nim-action@v1を付け足すだけでGitHub ActionsのCI環境上でのNim環境の構築は完了します。

name: Build and test Nim

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - uses: jiro4989/setup-nim-action@v1
      - name: Build
        run: nimble build -Y
      - name: Test
        run: nimble test -Y

インストールするNimのバージョンを固定したい場合はnim-versionを指定します。
デフォルトはstableです。

    - uses: jiro4989/setup-nim-action@v1
      with:
        nim-version: 1.0.2

2019/11/18 追記

公式が提供しているcache Actionを使えばさらに高速化できます。
4, 5分かかっていたビルドが1分で終わるようになりました。

    steps:
    - uses: actions/checkout@v1
    - name: Cache choosenim
      id: cache-choosenim
      uses: actions/cache@v1
      with:
        path: ~/.choosenim
        key: ${{ runner.os }}-choosenim-stable
    - name: Cache nimble
      id: cache-nimble
      uses: actions/cache@v1
      with:
        path: ~/.nimble
        key: ${{ runner.os }}-nimble-stable
    - uses: jiro4989/setup-nim-action@v1
    - name: Build
      run: nimble build -Y
    - name: Test
      run: nimble test -Y

実装

以下のシェルの実行をTypeScriptで書いただけです。

export PATH=$HOME/.nimble/bin:$PATH
curl https://nim-lang.org/choosenim/init.sh -sSf > init.sh
sh init.sh -y
choosenim update stable

初めてのAction作成だったのですが、日本語のドキュメント用意されていたおかげで作成にはあまり苦労しませんでした。
以下のページを参考にしました。

ActionはJavaScriptとDockerを使って作れるみたいです。
将来的にネイティブバイナリを生成してGitHub Releasesにアップできるようにもしたかったので、Dockerは使わないことにしました。
よって、JavaScriptを使って実装することにしました。

公式のActionもGitHub上に公開されています。
僕のやりたいことと近いことをやっているActionがないか探していた所、Goのセットアップ用のActionが見つかりました。

こちらはTypeScriptで実装されています。
とてもわかりやすかったので、こちらを参考に実装することにしました。

CI上での動作

TypeScript何もわからなかったのですが、雰囲気でTypeScriptで実装してJSにトランスコンパイルして動作するようにできました。
以下はsetup-nim-actionを動かしているCIのログです。

setup-nim-actionリポジトリでsetup-nim-actionを実行して、自作の別リポジトリのコマンドをビルドして動作するようにできました。
windows (Windows Server), macOS, linuxでもビルドできてるみたいなので、クロスプラットホームで動くようにもできました。

作った経緯

僕は普段TravisCIを使用しています。
しかしTravisCIはNim用のCI環境を提供していません。
よって、Nimの環境構築はリポジトリ毎に自分でインストール設定を定義しないといけません。

TravisCIはYAMLファイルでCI設定を定義します。
ファイルのコピーで設定を使い回せるとはいえ、同じ設定が複数のリポジトリに複製されるのは良いものではないと思います。
この問題をActionsの自作によって解決できるのでは、と考えました。

また、Nim用のActionは存在しないようだったので、自分が作って共有することで、他のNim開発者の開発の助けになるのでは、と考えました。

作った感想

Actionを自作して共有できるGitHub Actionsに感動しました。

登場したての新しいプログラミング言語の場合、CIサービス提供側が環境を用意できないことも多いです。
GitHub Actionsなら、Actionを探して、無ければ自作して共有できます。
新しいプログラミング言語のCI環境をいち早く楽に構築できるようになります。
自分以外の開発者も楽できるようになるので、GitHub Actionsもっと普及してほしいなと思いました。

まとめ

以下の内容について書きました。

  • Nim用のGitHub Actionsを自作した
  • uses: jiro4989/setup-nim-action@v1を付け足すだけで使える
  • CI環境のWindows, Mac, Linuxでも動く

僕はつい最近GitHub Actionsを使い始めたばかりですが、しばらくこれを使ってみようと思います。
そのうちGitHub Actionsで各プラットフォーム向けにバイナリを生成する方法について記事を書くかもしれません。

参考までに、以前僕が書いた、Nimのコードから各プラットフォーム向けにバイナリを生成するCI環境構築の記事リンクを以下に記載します。

以上です。

34
11
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
11