GamePatchKit.Cli
0.2.0
dotnet tool install --global GamePatchKit.Cli --version 0.2.0
dotnet new tool-manifest
dotnet tool install --local GamePatchKit.Cli --version 0.2.0
#tool dotnet:?package=GamePatchKit.Cli&version=0.2.0
nuke :add-package GamePatchKit.Cli --version 0.2.0
GamePatchKit CLI
Git이 추적하는 게임 데이터를 버전별 패치 아카이브와 파일 객체로 만들고, 산출물의 무결성을 검사하고, Supabase Storage에 게시하고, 게시된 세대를 다시 내려받는 .NET tool이다.
설치
.NET 10 SDK로 설치한다. 설치된 tool을 실행하는 환경에는 .NET 10 런타임이 필요하다.
dotnet tool install --global GamePatchKit.Cli
설치 후 명령 이름은 gpk다.
.NET 런타임 없이 실행하려면 GitHub Releases에서 플랫폼별 self-contained 아카이브를 내려받는다.
빌드
Git 저장소의 데이터 루트에 gamepatchkit.yml을 만들거나, 같은 저장소의 공용 설정 파일을 gpk build --config <경로>로 지정한다. 설정 파일은 Git이 추적하는 일반 파일이어야 하며 심볼릭 링크는 사용할 수 없다.
groups:
- id: content
version: 1
packing: group
compression: zstd
패치 출력 폴더는 source가 속한 Git 저장소 바깥에 지정한다.
gpk build --source ./data --config ./config/gamepatchkit.yml --output ../patches
gpk verify --output ../patches
업로드
빌드한 패치 데이터를 Supabase Storage 버킷에 올린다. 대상 버킷과 인증 정보는 환경 변수로 전달한다.
export GPK_SUPABASE_STORAGE_URL=https://<project-ref>.storage.supabase.co/storage/v1
export GPK_SUPABASE_SECRET_KEY=sb_secret_...
export GPK_SUPABASE_BUCKET=<버킷 이름>
gpk upload --output ../patches
동기화
게시된 세대를 CLI가 설치된 머신의 폴더로 내려받는다. 릴리스 버전 포인터(Supabase Postgres)를 읽어 로컬과 다를 때만 바뀐 산출물을 받는다. 읽기용 key만 쓰며 게시 상태를 바꾸지 않는다.
export GPK_SUPABASE_PROJECT_URL=https://<project-ref>.supabase.co
export GPK_SUPABASE_PUBLISHABLE_KEY=sb_publishable_...
export GPK_SUPABASE_BUCKET=<버킷 이름>
gpk sync --output /srv/gamedata
주기 실행은 스케줄러에 맡기고, 게시 직후 바로 반영하려면 같은 명령을 손으로 실행한다. 동시 실행은 배타 락으로 하나만 진행한다.
*/5 * * * * gpk sync --output /srv/gamedata --env-file /etc/gpk/sync.env
포인터 테이블은 최초 1회 만들어야 한다. SQL은 gpk sync 문서에 있다.
Unity 클라이언트
게시된 세대를 Unity 6 클라이언트에 내려받는 UPM 패키지 com.sidenation.gamepatchkit은 Git URL로 설치한다.
"com.sidenation.gamepatchkit": "https://github.com/SideNation/GamePatchKit.git?path=/src/GamePatchKit.Unity#v0.1.10"
게임 서버가 알려준 releaseVersion을 넘기면 로컬이 그 세대와 다를 때만 바뀐 산출물을 받아 <rootPath>/data 아래에 원본 트리를 복원한다.
var client = new PatchClient("https://<project-ref>.supabase.co/storage/v1/object/public/<bucket>/", rootPath);
PatchSyncResult result = await client.SyncAsync(releaseVersion, cancellationToken);
패치 버전 조회 함수 배포
Supabase 프로젝트에 get-patch-version 함수를 생성하거나 갱신한다. 함수는 해당 프로젝트의 포인터에서 현재 패치 버전을 읽는다.
gpk deploy-function --project-id "$PROJECT_REF" --access-token "$SUPABASE_ACCESS_TOKEN"
배포에는 Supabase Access Token을, 함수 호출에는 bucket만 있으면 된다. 포인터 테이블은 미리 준비해야 한다.
자세한 내용은 다음 문서를 참고한다.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
This package has no dependencies.