自動構築し、かゆみのゲームを発行する.io



私は本当にソフトウェア開発の自動化が好きです.そして私の個人的なプロジェクトはGitHub , 完全に採用したGitHub Actions 私の継続的な統合プラットフォームとして.コードをプッシュすると、コードをリントし、そのスタイルをチェックし、自動テストを実行します.彼らはすべて合格すると、それは私の仕事の質に自信を与える.
私の今後のゲームのために、私は再び予測可能で一貫した品質でゲームの再現性のあるビルドを作成するためにGithubアクションを使用したい.目標は、プロセスを完全に自動化することによって、ヒューマンエラーを避けることでしたitch.io .

新しいアクションを作成する


私は、このワークフローのために新しい行動をつくることを勧めます.あなたが複数のオペレーティングシステムのためにあなたのゲームを構築したいならば、特にファイルはそうであるようにかなり長くなります.先に行くと新しいYAMLファイルを作成する.github/workflows/itch.yml , 次のコンテンツを追加します.
---
name: itch.io

env:
  itch_project: jdno/auto-traffic-control
変更するitch_project ユーザ名にマッチする文字列itch.io プロジェクトの名前.あなたが好きなら、アクションの名前を変更することもできます.

リリースする


私のgithubアクションのために長年にわたって開発したセットアップは1つの重要な機能を持っています:それは異なったワークフローのために異なった動作をします.
Githubにコードをプッシュすると、コードの品質をチェックするアクションが開始されます.これらのチェックは、コードをマージする前にmain 枝.彼らの目的は一貫したコード品質を保証することで、リリースを作成することではありません.

新しいリリースを作成したいときは、実際にrelease feature Githubについて私は変更されたものの短い要約を書くのが好きで、リリースノートでchangelogを含みます.それはリリースをより多くの“公式”感じ、実際の達成のようになります.私がリリースを作成すると、別のアクションは、ゲームを構築するキックオフされますrelease 次に、ゲームをプッシュしますitch.io .
次のスニペットは、私のリリースワークフローをトリガーするために使用するものです.プリリリースまたはリリースがGiThubに公開されるたびに、それはアクションを実行します.
"on":
  release:
    types:
      - prereleased
      - released
また、ビルドすることができますし、ゲームを発行するたびにコードをデフォルトの枝には、以下のようなスニペットでマージされます.選択は最終的にあなたのものであり、あなたの開発ワークフローに意味をなすものに依存します.
"on":
  push:

ビルドゲーム


ビルドステップはあなたのゲームによって異なります.手順は、使用するプログラミング言語やゲームエンジンに基づいて異なるようになります.しかし、高いレベルでは、次のようにします.
  • コードをチェックする
  • ビルド環境を設定する
  • ゲームをコンパイルする
  • 次の例では、バイナリと、ゲームに必要なリソース/アセットをコピーすると仮定しますdist フォルダ.これはプッシュされるフォルダですitch.io . 何が再びこのフォルダに入る必要があるゲームエンジンを使用しているに依存します.
    私はLinux、MacOS、およびWindows用の私のゲームのビルドを作成します.各々のオペレーティングシステムは少し異なる依存性を必要とするので、私は3つの異なる仕事に各々のオペレーティングシステムのために1つを構築することに決めました.以下はLinuxのビルド例です.ジョブは依存関係をインストールし、コードをチェックアウトし、錆ツールチェインを設定し、ゲームをビルドします.
    jobs:
      linux:
        name: Publish Linux build
        runs-on: ubuntu-latest
    
        steps:
          - name: Install system dependencies
            run: |
              sudo apt-get update && sudo apt-get install -y \
              libx11-dev \
              libasound2-dev \
              libudev-dev
    
          - name: Checkout code
            uses: actions/checkout@v3
    
          - name: Set up Rust toolchain
            uses: actions-rs/toolchain@v1
    
          - name: Build release artifact
            uses: actions-rs/cargo@v1
            with:
              command: build
              args: --release
    
    これらの手順の後、リリースアーティファクトはdist 私のゲームを使用する資産と一緒にフォルダー.理論上、私は今このフォルダから私のゲームを走らせることができます、そして、それは働きます.

    iTouchに発行します。io


    最後のステップは、ゲームを公開することですitch.io . 我々は、iTchのを使用されますbutler , iTouchにゲームをアップロードしやすくするツール.これはゲームの新しいバージョンを公開するコマンドです.
    butler push directory user/game:channel --userversion version
    
    コマンドはdirectory 引数として、このディレクトリの内容をitch.io . これは私たちのdist ディレクトリ.次の引数はプロジェクトで、我々はitch_project 変数の後に続く.
    Channels 重要な概念itch.io , そして、チャンネル名を自動的にプラットフォーム上でゲームをタグ付けするために使用することができます.例えば、linux チャンネルはLinuxの実行可能ファイルとしてゲームをタグ付けします.
    最後に、オプションuserversion 引数.目標は、githubとiTchで同じバージョン番号を使用することです.入出力
    私はgithubで作成したリリースからこれらの変数を取得しています.リリースが公開され、アクションが開始されると、Githubはリリースにアクションのcontext . これにより、例えばリリースのタイトルにアクセスすることが可能になりますgithub.event.release.name (これは0.1.0 このリリースのために).すべてのコミットに対してアクションを実行したい場合(つまり、すべてのコミットに対して動作します).on: [push] 上記のように、ハードコードを使用するか、別の方法で動的にそれらを提供する必要があります.
          - name: Set version
            run: echo "version=${{ github.event.release.name }}" >> $GITHUB_ENV
    
          - name: Set beta channel
            if: github.event.action == 'prereleased'
            run: echo "itch_channel=linux-beta" >> $GITHUB_ENV
    
          - name: Set release channel
            if: github.event.action == 'released'
            run: echo "itch_channel=linux-stable" >> $GITHUB_ENV
    
    私は特にプリリリースをサポートする方法を見つけることを誇りに思っています.リリースがGithubのプレスリリースとしてタグ付けされると、ゲームはbeta チャンネル.これは私が簡単にゲームの新しいバージョンをテストする前に、一般的に利用できるようになります.
    現在実行中の変数を設定しましたbutler , 我々は最初に我々のワークフローにツールを追加し、それを実行することができます.ビルドを押すitch.io 必要なAPIキーが必要ですfind here .
          - name: Set up butler
            uses: jdno/setup-butler@v1
    
          - name: Publish game to itch.io
            run: |
              butler push dist ${{ env.itch_project }}:${{ env.itch_channel }} --userversion ${{ env.version }}
            env:
              BUTLER_API_KEY: ${{ secrets.ITCHIO_API_KEY }}
    
    あなたのゲームの新しいバージョンが利用可能になりましたitch.io .

    利益


    これは確かにいくつかのかなり複雑な手順で高度なアクションです.プロジェクトに正しく動作するようにするには、いくつかの反復を必要とする場合があります.それは私にこの権利を得るために多くのビルドを取った.しかし、結果は素晴らしいし、努力の価値がある!
    最も重要なのは、現在、再現性の高いビルドがあります.あなたのゲームをリリースする準備ができて、もはや暗い芸術ではない、それはあなたの机のどこかに指示をメモを見つける必要がありません.あなただけの手順を構築する必要がありますし、ゲームをプッシュを参照してくださいにアクションを見ることができます.
    ビルドが自動化されるので、それは一貫した結果を生じることも保証されます.ビルド環境が常に清潔であるため、ローカル開発環境ではビルドやゲームを不可解な方法で壊すことはできません.
    そして、あなたはゲームを構築するために必要なすべてがGithubにバックアップされていることを知っている.すべてのコードとすべての資産が安全に2番目の場所には、バージョンの履歴を格納されます.

    Follow me


    あなたが一般的に私のゲームやプログラミングゲームで面白いならば、必ず従うようにしてください.私は、道がどこに我々を連れて行くかについて、よくわかりません、しかし、私は旅行に非常に興奮しています!
    私のブログを購読し、プロジェクトの進捗状況について毎週更新を受け取る.
    jdno.dev
    私もストリームのいくつかは、このゲームの開発のすべてではないので、そこに私に従ってください.
    jdno_dev - Twitch