GitHubActionsでOpenSiv3DをWindowsビルド


12/09 更新
環境変数の設定周り教えてもらったので修正しました

# はじめに
OpenSiv3DプロジェクトをGitHubActionsでWindowsビルドする方法を紹介します。

:::note
この記事を書いた時点でOpenSiv3Dのバージョンは **0.6.13**
:::

参考リポジトリ

https://github.com/tyanmahou/OpenSiv3D_GitHubActions

# 事前準備
サーバー上でビルドするので`.gitignore`から`App/engine`は外します。

```diff:.gitignore
- **/App/engine
+ #**/App/engine
```

:::note
ワークフローでVisual Studio プロジェクトテンプレートのzipをダウンロードしてきて、そこのengineフォルダをコピーすればIgnoreしなくてもよい

デフォルトではIgnoreされていなかったので、今回もリポジトリにengineが含まれてる想定でワークフローを組みます。

[.gitignore - Siv3D](https://siv3d.github.io/ja-jp/tools/gitignore/?h=ignore#gitignore-%E3%81%AE%E6%A9%9F%E8%83%BD)
:::
# Workflow
以下ファイルをリポジトリの`.github/workflows`以下に配置
```
[repo]
|- .github
   |- workflows
      |-build.yml
```

```yaml:build.yml
name: build

on: [push]
env:
  app-path: ./Test/App
  sln-name: ./Test.sln
  version: 0.6.13
jobs:
  build:
    name: MSBuild
    runs-on: windows-latest
    steps:
    - uses: actions/checkout@v1
      with:
        fetch-depth: 1

    - name: Setup MSBuild.exe
      uses: microsoft/setup-msbuild@v1.3.1

    # OpenSiv3D セットアップ
    - name: Setup s3d
      run: |
        bitsadmin /transfer s3d-download "https://siv3d.jp/downloads/Siv3D/manual/${{ env.version }}/OpenSiv3D_SDK_${{ env.version }}.zip" "C:\OpenSiv3D_SDK.zip"
        Expand-Archive -Path "C:\OpenSiv3D_SDK.zip" -DestinationPath "C:"
      shell: powershell
    # ビルド
    - name: MSBuild
      run: |  
        [Environment]::SetEnvironmentVariable("SIV3D_" + "${{ env.version }}".Replace(".", "_"), "C:\OpenSiv3D_SDK_${{ env.version }}")    
        msbuild ${{env.sln-name}} -p:Configuration=Release`;Platform="x64"
      shell: powershell
    # ビルド結果をアップロード
    - name: Upload artifact
      uses: actions/upload-artifact@v1
      with:
        name: build-result
        path: ${{env.app-path}}

```

## 流れを見てみよう

### 実行トリガー

```yaml
on: [push]
```
とりあえずGitHubへのpush時にしてあるが、任意のタイミングに設定しましょう。

### 環境変数

```yaml
  app-path: ./Test/App
  sln-name: ./Test.sln
  version: 0.6.13
```
`app-path`:Appフォルダのパス
`sln-name`:VSソリューションへのパス
↑使用する際に変更する箇所

`version`:Siv3Dのバージョン
↑zipファイルの命名規則が変わらない間はバージョンの数値を変えるだけでよいはず

:::note warn
昔は命名規則が違っていたので注意
 - OpenSiv3D_SDK(0.6.4)
 - OpenSiv3D_SDK_0.6.13
:::
### ベースイメージ
Windowsでビルドしたい
```yaml
    runs-on: windows-latest
```

### チェックアウト

```yaml
    - uses: actions/checkout@v1
      with:
        fetch-depth: 1
```

### msbuildを使えるようにする

```yaml
    - name: Setup MSBuild.exe
      uses: microsoft/setup-msbuild@v1.3.1
```

### OpenSiv3Dを落としてくる

```yaml
    - name: Setup s3d
      run: |
        bitsadmin /transfer s3d-download "https://siv3d.jp/downloads/Siv3D/manual/${{ env.version }}/OpenSiv3D_SDK_${{ env.version }}.zip" "C:\OpenSiv3D_SDK.zip"
        Expand-Archive -Path "C:\OpenSiv3D_SDK.zip" -DestinationPath "C:"
      shell: powershell
```

SDKは手動インストールできるようにzipファイルが用意されているのでそいつをダウンロードしてきてzipを解凍している。

https://siv3d.github.io/ja-jp/download/windows/#%E8%A3%9C%E8%B6%B3sdk-%E3%82%92%E6%89%8B%E5%8B%95%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B

### ビルドする

```yaml
    # ビルド
    - name: MSBuild
      run: |  
        [Environment]::SetEnvironmentVariable("SIV3D_" + "${{ env.version }}".Replace(".", "_"), "C:\OpenSiv3D_SDK_${{ env.version }}")    
        msbuild ${{env.sln-name}} -p:Configuration=Release`;Platform="x64"
      shell: powershell
```

:::note info
OpenSiv3Dのビルドに必要な`SIV3D_X_Y_Z` の環境変数を`env.version`から設定する
:::

### ビルド結果を保存する

```yaml
    - name: Upload artifact
      uses: actions/upload-artifact@v1
      with:
        name: build-result
        path: ${{env.app-path}}
```

ビルドが成功すれば、GitHub上からビルド結果をダウンロードできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104703/27395ce1-1f92-0727-eb32-12a9632e7ffb.png)

# まとめ

- GitHubActionsでOpenSiv3DのプロジェクトをWindowsビルドするためのWorkflowを紹介
  - .github/workflows/build.ymlをリポジトリに配置(yaml名は任意)
  - build.yamlの環境変数を修正
    - app-path
    - sln-name
    - version