🤖

Github ActionsでUnity製アプリをSteamにアップロードする

2025/01/09に公開

ローカル環境

$ sw_vers
ProductName:		macOS
ProductVersion:		15.2
BuildVersion:		24C101

今回の記事のサンプルはSteamDeploySampleになります。

ローカルでのSteamへのアップロードフロー

CIでの自動化の前に、まずはローカルでSteamへのアップロードフローを確認します。アップロードフローはSteamworks SDKのドキュメントにまとめられていますが、この記事では簡略化したフローを説明します。

  1. Unity Editorで各種プラットフォーム用のビルドを行う
  2. Steamworksでアップロード用SDKをダウンロード(初回のみ)
  3. AppID、DepotID、各種ビルドへのパスを記載した設定ファイルを編集
  4. SDKに内包されているスクリプトで認証情報を付与してアップロード

Unity Editorでのビルドやファイル編集などもスクリプト化して作業できますが、社内確認などで定期実行したい場合には作業時間に影響があるため、CIで実行できるようにします。

CIでのSteamへのアップロードフロー

Unity製アプリのCIにはGameCIが便利です。これを活用してアップロードフローを自動化します。今回はGitHub Actionsで自動化フローを構築します。以下は設定ファイルの全体です。

main.yml
name: Upload to Steam

# 1. 毎週月曜日の11時に定期実行
# 2. GitHub上での手動実行
on:
  schedule:
    - cron: '0 2 * * 1'
  workflow_dispatch:
    inputs:
      environment: # デプロイ先の指定
        type: choice
        required: true
        default: "debug"
        options:
          - "debug"
          - "prerelease"
          - "default"
        description: Deployment environment

# 複数のアップロードフローが発火している際に古いフローをキャンセル
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true
    
jobs:
  build: # Unity製アプリのビルドフロー
    runs-on: ubuntu-latest
    outputs:
      buildVersion: ${{ steps.buildStep.outputs.buildVersion }}
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        
      - name: Create LFS file list
        run: git lfs ls-files -l | cut -d' ' -f1 | sort > .lfs-assets-id
        
      - name: Restore LFS cache
        uses: actions/cache@v3
        id: lfs-cache
        with:
          path: .git/lfs
          key: ${{ runner.os }}-lfs-${{ hashFiles('.lfs-assets-id') }}
          
      - name: Git LFS Pull
        run: |
          git lfs pull
          git add .
          git reset --hard

      - name: Set Build Version
        id: buildStep
        run: echo "buildVersion=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
      
      - uses: actions/cache@v3
        with:
          path: Library
          key: Library-${{ hashFiles('Assets/**', 'Packages/**', 'ProjectSettings/**') }}
          restore-keys: |
            Library-
          
      # Windows 64bit向けのビルド
      - name: Run the Windows build
        uses: game-ci/unity-builder@v4
        env:
          UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
          UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
          UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
        with:
          targetPlatform: StandaloneWindows64
          unityVersion: 2022.3.50f1 # 手元のUnity Versionに置き換える
          versioning: Semantic
          
      # デプロイフローで参照できるようにGitHub Actions上にアップロード
      - name: Upload artifact
        uses: actions/upload-artifact@v4
        with:
          name: Build-${{ steps.buildStep.outputs.buildVersion }}
          path: build
  
  deploy: # Steamへのデプロイフロー
    needs: [build]
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          
      # ビルドフローでアップロードした生成物をダウンロード
      - name: Download Artifact
        uses: actions/download-artifact@v4
        with:
          name: Build-${{ needs.build.outputs.buildVersion }}
          
      # Secretsに登録されているSteamの認証情報を用いてSteamへデプロイ
      - uses: game-ci/steam-deploy@v3
        with:
          username: ${{ secrets.STEAM_USERNAME }}
          configVdf: ${{ secrets.STEAM_CONFIG_VDF }}
          appId: ${{ secrets.STEAM_APP_ID }}
          buildDescription: v${{ needs.build.outputs.buildVersion }}
          rootPath: StandaloneWindows64
          depot1Path: .
          depot1InstallScriptPath: ./install_script.vdf
          releaseBranch: ${{ github.event.inputs.environment }} # デプロイ先

実際にGitHub Actionsで実行できるようにするためには初回のみ各種設定が必要になります。

SteamworksでのDeploy先の設定

デプロイ先は社内確認、リリース前確認、リリースなど様々な用途に対応するため、GitHub Actions上でデプロイ先を指定できるように設定します。それぞれの用途に対応するデプロイ先をSteamworksの管理画面で設定します。

main.yml
on:
  schedule:
    - cron: '0 2 * * 1'
  workflow_dispatch:
    inputs:
      environment: # デプロイ先の指定
        type: choice
        required: true
        default: "debug"
        options: # 各種選択肢をSteamworksの管理画面上で設定
          - "debug"
          - "prerelease"
          - "default"
        description: Deployment environment


Steamworksでの設定

GitHubでの認証情報の設定

CLI上でUnity製アプリのビルドやSteamへのアップロードを行うために、各種認証情報をGitHub Actionsで参照できるように設定します。STEAM_CONFIG_VDFUNITY_LICENSEの設定は少し煩雑なので、Makefileでスクリプト化しています。

Key Format Description
STEAM_APP_ID text Steamworksの登録アプリID
STEAM_CONFIG_VDF base64 $ make generate_steam_config
STEAM_USERNAME text Steamworksのアカウントのユーザ名
UNITY_EMAIL text https://unity.com のアカウントのメールアドレス
UNITY_LICENSE xml $ make generate_unity_licens
UNITY_PASSWORD text https://unity.com のアカウントのパスワード


GitHubでの認証情報の設定

Makefileを活用してBuildフォルダ以下に生成されるconfig_base64.txtUnity_lic.ulfの中身をコピーして、STEAM_CONFIG_VDFUNITY_LICENSEとして設定します。

.env
STEAM_USER_NAME=XXX

https://github.com/Nonchalant/SteamDeploySample/blob/main/Makefile

GitHub Actionsでの実行

各種認証情報を設定したら、GitHub Actionsで手動実行が可能になり、Steamworks上で確認できるようになります。これでローカルで実行せずに、CI上でSteamへのアップロードが可能になりました。

手動実行 実行ログ ビルド

まとめ

今回の記事のサンプルは、SteamDeploySampleになります。GitHub Actionsの実行ログも確認できるので、参考にしてみてください。

リファレンス

GitHubで編集を提案

Discussion