Github ActionsでUnity製アプリをSteamにアップロードする
ローカル環境
$ sw_vers
ProductName: macOS
ProductVersion: 15.2
BuildVersion: 24C101
今回の記事のサンプルはSteamDeploySampleになります。
ローカルでのSteamへのアップロードフロー
CIでの自動化の前に、まずはローカルでSteamへのアップロードフローを確認します。アップロードフローはSteamworks SDKのドキュメントにまとめられていますが、この記事では簡略化したフローを説明します。
- Unity Editorで各種プラットフォーム用のビルドを行う
- Steamworksでアップロード用SDKをダウンロード(初回のみ)
- AppID、DepotID、各種ビルドへのパスを記載した設定ファイルを編集
- SDKに内包されているスクリプトで認証情報を付与してアップロード
Unity Editorでのビルドやファイル編集などもスクリプト化して作業できますが、社内確認などで定期実行したい場合には作業時間に影響があるため、CIで実行できるようにします。
CIでのSteamへのアップロードフロー
Unity製アプリのCIにはGameCIが便利です。これを活用してアップロードフローを自動化します。今回はGitHub Actionsで自動化フローを構築します。以下は設定ファイルの全体です。
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の管理画面で設定します。
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_VDF
やUNITY_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.txt
やUnity_lic.ulf
の中身をコピーして、STEAM_CONFIG_VDF
やUNITY_LICENSE
として設定します。
STEAM_USER_NAME=XXX
GitHub Actionsでの実行
各種認証情報を設定したら、GitHub Actionsで手動実行が可能になり、Steamworks上で確認できるようになります。これでローカルで実行せずに、CI上でSteamへのアップロードが可能になりました。
手動実行 | 実行ログ | ビルド |
---|---|---|
まとめ
今回の記事のサンプルは、SteamDeploySampleになります。GitHub Actionsの実行ログも確認できるので、参考にしてみてください。
Discussion