GitHub のセルフホストランナーを使って Grasshopper コンポーネントをテストする
24 April, 2021 - 2 min read - Tags: Grasshopper,GitHub,CI
はじめに
以下の記事で作成したコンポーネントと RhinoCompute を使ったユニットテストを、GitHub のセルフホストランナーを使った CI 化します。
なぜセルフホストランナーを使用するかというと、Rhino のライセンスを解決するためです。 GitHub Actions では GitHub の仮想環境で実行されるため、自身のライセンスを持った Rhino 環境を構築できないためです。
セルフホストランナーではなく GitHub が提供するサーバーでコンポーネントのビルドやコードクオリティのチェックを CI 行う方法は、以下の記事で扱っているのでそちらを参照してください。
こちらの内容は以下の GitHub にデータがおいてあるので適宜参照してください。
セルフホストランナーの環境構築
セルフホストランナーの公式のドキュメントは以下です。必要に応じて参照してください。
セルフホストランナーを使用したリポジトリで Settings の Actions の下段にある Add Runner を押してしてください。
そうすると以下が表示されるのでリポジトリの URL やトークンを適宜取得して PowerShell などで実行してください。
# Create a folder under the drive root
$ mkdir actions-runner; cd actions-runner# Download the latest runner package
$ Invoke-WebRequest -Uri https://github.com/actions/runner/releases/download/v2.277.1/actions-runner-win-x64-2.277.1.zip -OutFile actions-runner-win-x64-2.277.1.zip# Extract the installer
$ Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("$PWD/actions-runner-win-x64-2.277.1.zip", "$PWD")
# Create the runner and start the configuration experience
$ ./config.cmd --url {YOUR_REPO_URL} --token {YOUR_TOKEN}
環境の構築に成功していれば以下のように表示されいくつかの設定を求められます。 設定はデフォルトのままで問題ありません。
--------------------------------------------------------------------------------
| ____ _ _ _ _ _ _ _ _ |
| / ___(_) |_| | | |_ _| |__ / \ ___| |_(_) ___ _ __ ___ |
| | | _| | __| |_| | | | | '_ \ / _ \ / __| __| |/ _ \| '_ \/ __| |
| | |_| | | |_| _ | |_| | |_) | / ___ \ (__| |_| | (_) | | | \__ \ |
| \____|_|\__|_| |_|\__,_|_.__/ /_/ \_\___|\__|_|\___/|_| |_|___/ |
| |
| Self-hosted runner registration |
| |
--------------------------------------------------------------------------------
なお今回は Rhino のライセンスの関係で Docker などの仮想環境を使用しないで Windows 環境の PowerShell を直接呼ぶようにしています。
基本的にはこれをパブリックのリポジトリではやらないでください。
誰でもプルリクを送れる状態であるということは、あなたの PC で任意のコードを実行できる状態になっているという意味です。 ハッキングどころの騒ぎじゃないです。 注意してください。
GitHub Actions の yml 作成
GitHub Actions を設定する yml ファイルは以下のように設定します。
name: Run Unit Test
on: push
jobs:
run-test:
# ここを self-hosted にすることで自分の PC が実行対象になる
runs-on: self-hosted
steps:
# git を checkout
- uses: actions/checkout@v2
# RhinoCompute を起動。完全に起動するまで待つため Start-Sleep で5秒待機
- name: Setup RhinoCompute
run: |
Start-Process -FilePath ../../../compute.geometry/compute.geometry.exe
Start-Sleep -Seconds 5
# テストの実行
- name: Run Unit Test
run: dotnet test
FilePath はご自身の RhinoCompute のファイルへのパスを指定してください。
作成した actions-runner のフォルダの直下に compute.geometry のフォルダを置くとパスは上記のようになります。
実行
actions-runnner のフォルダで以下を実行すると自分の PC のセルフホストランナーと GitHub が接続します。
./run.cmd
√ Connected to GitHub
2021-04-19 13:51:11Z: Listening for Jobs
# ↑ GitHub 側から呼ばれるまで待機状態
# GitHub で CI が呼ばれると以下のように表示され、job の結果が表示される
2021-04-19 14:00:21Z: Running job: run-test
2021-04-19 14:01:21Z: Job run-test completed with result: Succeeded
プッシュ時に CI が実行され GitHub 側は通常の GitHub Actions を実行した時と同じように表示されます。
Run Unit Test の欄を確認するとユニットテストがちゃんと実行され、テストに合格していることがわかります。
おわりに
前記事で書いたローカル環境でのユニットテストと、今回の CI 化を合わせることで Grasshopper コンポーネントの開発をだいぶ効率化できるのではないでしょうか。
効率化してよりクリエイティブなことに時間を使っていきましょう。