Horizons"を出しているが、そのゲームをSteamにアップデートなどで送る時には「(自分で決定できる)特定のディレクトリ」に置いておかなければならない。Buildでビルドが走るところまでは自動化できていた。UCBでWindows用のIL2CPPビルドができるようになってよかった。ビルドされるゲームのバージョンは4つだ。Build」は開発者や内部テスター、ステージ制作者向けの実行ファイルだ。テスターの一人が、あるアップデートでゲームが壊れたと言い出したのだ。Unity上でもテストした。なんなら、ローカルでビルドして試してみた。いうか、彼の受け取ったビルドでそんなことが起こっていること自体あり得ないバグだった。ビルドされたゲームをディレクトリに配置していくときに、誤ってProductionバージョン(の実行ファイル)をdevバージョン(用のアップロードディレクトリ)に配置していたようだ。Commons本当に逆じゃなくてよかった。...よく考えたら、前にも同じような事故をやっていたことに気づいた。その時はテスト用のブランチでテストしていたから、通常のプレイヤーが変なビルドを見ることは回避されていたのだが...もうたくさんだ。BuildはWebhookを送信できるらしい。してこれを受け取って「ダウンロード→配置」までできればOKだ。やってこのWebhookを受け取るかが問題だ。レンタルサーバーは持っている。それはWebページ用だ。ここでやろうとしていることをやったものなら、サーバーにプロセスをぶった切られるリスクがある。VPSもアカウントはあるが少し高い。静的IPが欲しいからVPNを作るとか、そういう用途でない限りはあまり手を出したくない。そこで、自分の古いPCからホストできたらどうか、と気づいた。調べてみるとLoopholeという無料トンネルサービスがあることを見つけた。この手法でずっと開いておくのはあまり喜ばれたことではないかもしれないが、個人レベルの自動化プロジェクトならしばらくこれでも大丈夫だろう。これで自分のPCでWebhookを受け取る算段ができた。あとはどうやってHTTPリクエストに応答しつつ裏でスクリプトを走らせるかを学ぶだけだ。やってサーバ側のコードを書く?最初、Apache2を使うことも考えたが、よく考えたらやろうとしていることに対して大袈裟すぎる気がした。Apache2は高機能なwebサーバだ。Webhookを受け取りたいだけの目的には機能が多すぎる。そもそも、Jenkinsも同じような理由で使うのをやめていた。自分のマシンでビルドまでやっていたのであればJenkinsを使う理由もあったが、今やりたいのは「ビルドしたゲームのダウンロードとそのゲームを正しい位置に配置する」ことだけだ。自分の知っている言語で、あるポートへの通信を監視するだけの軽量なサーバライブラリがあれば十分だった。いう軽量Webフレームワークがあることを知った。裏でプロセスを立ち上げてもHTTPリクエストを処理できることも確認できた。今回は、このフレームワークに乗ることにした。ヘッドレスビルドなどをしていない限り、これがゲームとなる。使ってペイロードの検証も可能である。共通鍵とHMAC-SHA256の2つの手法があるが、今回紹介しているコードでは、HMAC-SHA256を使って検証している。何回かファイルシステムをメチャクチャにしてしまったが、完成品がこちら:このプロジェクトは、UCBからWebhookを受け取ったら、ペイロードの指定する成果物をダウンロードし、出力フォルダに配置すると共に、別に追加する必要のあるフォルダ・ファイルもまとめて配置してくれる。あとはSteamのツールの確認先をこのディレクトリに向ければいいだけだ。バイナリの種類を間違うことはないだろう。間違ってファイル全消しとかにならないためにも、Dockerコンテナで動かせるようにした。