だいぶそこそこでかいプロジェクト https://github.com/googleforgames/agones

How to Contribute

https://github.com/googleforgames/agones/blob/main/CONTRIBUTING.md We’d love to accept your patches and contributions to this project. There are just a few small guidelines you need to follow.

パッチとコントリビューションを歓迎している。 従うべきガイドラインは以下の少しだけらしい

Pull requests によるコード提出

  • GitHub Pull Request モデルに従う
  • 大量の作業の場合は、問題を作成し、「種類/設計」というラベルを付けて、構築したい機能の概要とその実装方法を説明することをお勧め
  • 新しい機能については、ドキュメントを含める必要があります。
  • 新しい API 設計は Google AIP 設計ガイドラインに従うことを強くお勧め
  • すべての提出は、マージ前にレビューが必要です。

レビュー完了

  • レビューが完了したら、PR を単一のコミットにリベースしてください。これにより、きれいな Git 履歴が保証

UE Plugin はえぐいな。。CIがないから手動でチェックしてスクショ貼らないといけないらしい。やっぱりUEは CI ないのが致命的に厳しい

フォーマット

  • Goコードは gofmt でフォーマット
  • インポートステートメントを修正する goimports も使う
  • C++ の場合は Google C++ style guide に従う
    • clang-format -style=Google foo.cc など) を使用して自動的に適用
  • UEは例外
  • 末尾の空白を削除します。多くのエディタはこれを自動的に行います。

新機能の場合は色々検討多い

  • Agones の各バージョンは Kubernetes の 3 つのリリースをサポートしています。
  • サポートされている 3 つのバージョンのうち少なくとも 1 つは、主要なクラウド プロバイダ(EKS および AKS)のそれぞれによってサポートされています。

https://github.com/googleforgames/agones

適当にひとつ見てみる https://github.com/googleforgames/agones/blob/main/pkg/gameservers/health.go

// HealthController watches Pods, and applies
// an Unhealthy state if certain pods crash, or can't be assigned a port, and other
// similar type conditions.
type HealthController struct {
	baseLogger       *logrus.Entry
	podSynced        cache.InformerSynced
	podLister        corelisterv1.PodLister
	gameServerSynced cache.InformerSynced
	gameServerGetter getterv1.GameServersGetter
	gameServerLister listerv1.GameServerLister
	workerqueue      *workerqueue.WorkerQueue
	recorder         record.EventRecorder
	waitOnFreePorts  bool
}

構造体のこいつは、Pod と apply を監視する。 ダメな奴に unhealthy のステートを付与する