Repository navigation
Architecture
Роман Зопиров edited this page Oct 29, 2026
·
2 revisions
OctoPublisher спроектирован как высокопроизводительное модульное решение на .NET 10 с нулевыми внешними нативными зависимостями и строгим разделением ответственности.
graph TD
CLI["OctoPublisher.Cli (octopublish)\n• Парсер командной строки\n• Предполётный линтер (MetadataLinter)\n• Сборщик шаблонов (PackagingScaffolder)\n• Инспектор локалей (PackagingInspector)"]
subgraph Core ["Базовый уровень"]
Common["Octo.Common\n• AnsiTerminal (Fluent ANSI вывод)\n• ImageTemplateGenerator (Генератор PNG без зависимостей)\n• LocaleRegistry (Нормализатор локалей и лимиты сторов)\n• PublisherResult (Строгие контракты ответов)"]
end
subgraph Modules ["Провайдеры магазинов"]
PlayStore["Octo.PlayStore\n• GoogleAuthService (JWT PKCS#8)\n• PlayStoreClient (REST API v3, Safe-Merge)\n• PlayStoreListingManager (Многоязычные ассеты)"]
MStore["Octo.MStore\n• MStoreTokenService (Azure AD OAuth2)\n• AzureBlobUploader (Блочная загрузка в Azure Blob)\n• MStoreClient (Dev Center Ingestion API)\n• MStoreListingManager (Парсер метаданных)"]
end
CLI --> Common
CLI --> PlayStore
CLI --> MStore
PlayStore --> Common
MStore --> Common
-
Генератор растровой графики без зависимостей (
ImageTemplateGenerator):- Формирует корректные файлы PNG со стандартизированным заголовком IHDR, потоком данных IDAT через сжатие
System.IO.Compression.ZLibStreamи контрольной суммой CRC32. - Читает размеры PNG и JPEG файлов непосредственно по сигнатурам заголовков без накладных расходов на полное декодирование растра.
- Полностью независим от нативных библиотек (
System.Drawing,SkiaSharp,ImageSharp).
- Формирует корректные файлы PNG со стандартизированным заголовком IHDR, потоком данных IDAT через сжатие
-
Защита Safe-Merge (
Octo.PlayStore):- Предотвращает стирание названия приложения при отправке частичных обновлений карточки через Google Play Developer API.
- Автоматически считывает активное название через
GETи подставляет его в тело запроса.
-
Блочная передача пакетов в Azure Blob (
Octo.MStore):- Реализует параллельную передачу чанков пакетов
.msixпо SAS-ссылке Partner Center. - Автоматически оборачивает
.msixво временный контейнер.zip. - Рассчитывает среднюю скорость загрузки и отрисовывает прогресс-бар в терминале.
- Реализует параллельную передачу чанков пакетов
-
Клиент открытого каталога Microsoft Store (
MStoreCatalogClient):- Позволяет выгружать метаданные и графику без предварительной авторизации через Display Catalog API (
displaycatalog.mp.microsoft.com). - Автоматически находит и скачивает официальные логотипы, супергеройские баннеры (SuperHeroArt 1920x1080) и скриншоты в высоком разрешении.
- Позволяет выгружать метаданные и графику без предварительной авторизации через Display Catalog API (
-
Тестовое покрытие:
-
114 модульных и интеграционных тестов (
OctoPublisher.Tests) с 100% успешным прохождением. - Покрыты парсер аргументов, валидатор линтера, чтение заголовков изображений, генерация PNG, инспекция таблиц, токенизация JWT, обратный импорт (pull) и жизненный цикл деплоя.
-
114 модульных и интеграционных тестов (
-
Начало работы
-
Store as Code
-
Модули магазинов
-
CI/CD и конфигурация
-
Внутреннее устройство