GitHub Actions でコンポーネントをビルドする

はじめに

この章では、Grasshopper というソフトで動作するコンポーネント(プラグイン)を、Github Actions を使ってビルドする方法についてを紹介します。 要は、.NET Framework を Github Actions で使ってビルドする方法になります。

GitHub Actions とは

以下公式より引用 GitHub Actions

GitHub Actions を使用すると、ワールドクラスの CI / CD ですべてのソフトウェアワークフローを簡単に自動化できます。 GitHub から直接コードをビルド、テスト、デプロイでき、コードレビュー、ブランチ管理、問題のトリアージを希望どおりに機能させます。

GitHub のリポにプッシュやプルリクなどの設定したアクションをしたときに、仮想マシンやコンテナを使ってテストやビルドなどを行える機能です。

やりたいこと

以下のときに、GitHub Actions を使ってコンポーネントをビルドし、テストが通れば GitHub 上にデータに保存する。

GitHub Actions は Windows 環境にも対応しているため、Windows 環境で Visual Studio を使ってビルドさせることを行います。

ローカルでの支度

Grasshopper コンポーネントの開発には Visual Studio 2019 を使います。0 から開発するのは大変なので、以下から開発用のテンプレートをダウンロードして使用します。

Grasshopper templates for v6

こちらのテンプレートを使用すると、RhinoCommon.dll や GH_IO.dll などの参照がローカルになっています。GitHub の環境では当然ですが Rhino がインストールされていないため、これらの dll ファイルはローカルにないので、nuget を使ったものに修正してください。 余談ですが、nuget の Rhino 関連のものの最新版は Rhino7 向けになっています。Rhino6 向けに使う場合は 6.XX で書かれているバージョンを使いましょう。

nuget パッケージの管理形式は、Package.config ではなく、PackageReference にしてください。

GitHub Actions の設定の仕方

GitHub Actions は、YAML 構文を使用してイベント、ジョブ、およびステップを定義しています。

この YAML ファイルを、コードリポジトリの .github/workflows というディレクトリに保存することで、動作の対象になります。 ファイル名は何でも構いません。

ファイルの内容は以下になります。適宜コメントアウトで説明しています。 やっていることを要約すると、MSBuild を使って対象のプロジェクトファイルをビルドしています。

# このワークフローの名前(バッジを作るときなどに使う)
name: Build Grasshopper Plugin

on:
  push: # develop にプッシュしたときに動く
    branches: [develop]
  pull_request: # main と develop にプルリクしたときに動く
    branches: [main, develop]

jobs:
  build:
    # Github Actions での Windows の最新の環境を指定
    #(現在は Windows Server 2019 になる)
    runs-on: windows-latest # windows-2019 でも同じ意味

    steps:
      # git のチェックアウトを行い、この環境に対象のリポを取得する
      - name: Checkout
        uses: actions/checkout@v2

      # Vusial Studio (MSBuild)のセットアップをする
      - name: Setup MSBuild.exe
        uses: microsoft/setup-msbuild@v1

      # nuget のセットアップをする
      - name: Setup NuGet
        uses: NuGet/setup-nuget@v1

      # solution ファイルの状態を復元する
      # 例えば、nuget で参照しているファイルを取得するなど
      - name: Restore the application
        run: msbuild /t:Restore /p:Configuration=Release

      # Build 実行
      - name: Build the application
        run: msbuild /p:Configuration=Release

      # Test向けに dotnet.exe をセットアップ
      - name: Setup .NET Core
        uses: actions/setup-dotnet@v1

      # Test を実行
      - name: Run Test
        run: dotnet test GrasshopperCISampleTests\bin\Release\GrasshopperCISampleTests.dll

      # 対象パスにあるファイルを GitHub にアップロードする
      - name: Upload build as artifact
        uses: actions/upload-artifact@v2
        with:
          name: GrasshopperComponent
          path: ./GrasshopperCISample/bin/GrasshopperCISample.gha

動作確認

上記ファイルをリモートの develop にプッシュすると、Actions が動き出します。動作は GitHub の対象のリポの Actions のタブをクリックすると確認できます。Actions が動いているときは以下のようにオレンジ色の丸が表示され、問題なく動作が完了すると緑のㇾマーク、何かエラーがあり止まると赤色の × マークになります。

問題なく動作が完了すると、 以下のように Artifact としてビルドしたものがアップされ、クリックすることでダウンロードできます。

これをやる利点

例えばリリースするデータを main ブランチで管理しているとします。main ブランチに直接プッシュしたとき、そのデータがちゃんとビルドできるデータであるかは個人の注意に依存しています。
それを避けるために、main ブランチにプルリクした際、ここで設定した CI が動くようにしています。
うっかり動かないものでも main ブランチにプルリクすると CI でチェックされるので以下のように check が failed になり、ミスを未然に防げます。


前のページ

はじめに

次のページ

Code Quality を測る

トップに戻る