К содержимому
Вклад в SDK
На этой странице

Вклад в SDK

Куда сообщать о проблемах, где записаны правила SDK для контрибьюторов и как его собрать, протестировать и упаковать

SDK - отдельный репозиторий: bullet-hero/sdk, ветка по умолчанию master. Изменения в код SDK приходят туда пулл-реквестами

Куда сообщать

О чёмКуда
SDK и его кодbullet-hero/sdk/issues
игра: ошибки и пожелания игроковbullet-hero/releases/issues
текст документацииbullet-hero/docs

Где правила

Правила для контрибьюторов лежат в самом репозитории SDK, рядом с кодом, который они описывают:

ФайлЧто в нём
README.mdзависимости, пакеты уровней, сборка DLL и пакета, пример-проверка
CLAUDE.mdмодель мышления, указатель папок и соглашения всей библиотеки
CLAUDE.md в каждой папкелокальные правила этой папки, например Serialization, Validations, Publishing
Docs/VERSIONING.mdоси версий, поколения, миграция и отказ
Docs/IDENTIFIERS.mdкак модель адресует сущности: Guid, int, кадр, путь к полю
Лицензионная политика для пользовательских уровней (на этом сайте)политика лицензирования пользовательского контента, правится вместе с TrustedSourceCatalog
Versions/README.mdкак написать снимок и мигратор
Generators/README.mdконтракт генератора
Roslyn/README.mdанализаторы и генератор моделей, как их пересобрать
UnityIntegration/README.mdконтракт двойной компиляции
CHANGELOG.mdизменения по версиям sv, сверху раздел [Unreleased]

Сборка и тесты

dotnet build -c Release BH.SDK.csproj
dotnet test Tests/BH.SDK.Tests.csproj
dotnet pack -c Release BH.SDK.csproj
  • здесь без Unity собираются те же исходники, что компилирует Unity. Файл, нарушивший контракт независимости от движка, ломает эту сборку
  • вывод идёт в bin~ и obj~
  • команда упаковки только создаёт .nupkg. Из репозитория ничего не отправляется на nuget.org
Внимание

Анализаторы и генератор моделей поставляются готовой BH.SDK.Roslyn.dll в корне SDK. После правки чего-либо в Roslyn/ пересоберите и скопируйте её. Иначе продолжит работать старый генератор, хотя исходники говорят другое

cd Roslyn
dotnet build BH.SDK.Roslyn.csproj -c Release
cp bin~/Release/BH.SDK.Roslyn.dll ../BH.SDK.Roslyn.dll
dotnet test Tests~/BH.SDK.Roslyn.Tests.csproj -c Release

Внутри редактора Unity то же самое делает пункт меню Tools > BH.SDK.Roslyn > Build Analyzer

Инварианты, которые стоит знать заранее

  • ядро не ссылается ни на один тип UnityEngine. Код, которому нужен движок, идёт в UnityExtensions/ или в UnityIntegration/ за #if BHSDK_UNITY с веткой без движка
  • код одинаково работает с файлами и с данными в памяти и использует только асинхронность из BCL
  • netstandard2.1 и C# 9 - то, с чем компилируется Unity-проект. Их не поднимают
  • модель - это [GenerateModel] public sealed partial class. Каждое сериализуемое поле берёт ключ из Names.cs
  • любое изменение модели - новое поколение со снимком и мигратором. Подробнее - Версии и миграции
  • версия SDK живёт в трёх местах: SdkVersion.cs, package.json и <Version> в BH.SDK.csproj. SdkVersionAgreementTests падает, если одна из них сдвинулась одна