Caputchin
Разработка игры для маркетплейса

Опубликуй в маркетплейс

К концу этого руководства твоя игра залистена в маркетплейсе и встраиваема любым пользователем по её id игры. Публикация намеренно мало-церемонна: нет очереди отправки, нет ревью и нет загрузки. Ты помечаешь публичный репозиторий GitHub тегом, и платформа его индексирует.

Это предполагает, что ты построил игру (Построй игру для маркетплейса) и написал её манифест.

1. Пометь репозиторий GitHub тегом

Добавь тему GitHub caputchin-game к своему публичному репозиторию (секция About на странице репозитория). Индексатор запрашивает у GitHub эту тему; этот тег это весь твой opt-in.

Твой id игры выводится из координаты репозитория, owner/repo (или owner/repo/<leaf-dir> для ребёнка коллекции). Ты его не выбираешь и не объявляешь.

2. Подтверди обязательное в манифесте

Три вещи стоят воротами индексации; убедись, что они есть в твоём корневом caputchin.json:

  1. "terms_accepted": true (литеральное булево), подтверждающее Условия отправки в маркетплейс.
  2. license из одобренного списка.
  3. Указатель распространения (entry, npm или оба), чтобы бандл разрешился.

Добавь marketplace.author.email, если хочешь письма о сбое публикации (он никогда не показывается публично и является единственным способом их получать).

3. Опубликуй или обнови

Два способа приземлиться в индексе:

  • Ежедневный cron подхватывает помеченные тегом репозитории автоматически.
  • Кнопка «Опубликовать или обновить» в маркетплейсе запускает пер-репозиторный индексатор синхронно и перенаправляет тебя на твою страницу деталей или показывает точную ошибку валидации. Используй это для первого листинга или сразу после правки манифеста.

Когда он работает, индексатор запрашивает твой манифест, прибивает бандл к неизменному ref (опубликованная версия npm или разрешённый коммит SHA), вычисляет хеш целостности SHA-384 и хранит { url, integrity } по ключу твоего id игры. Новые релизы выходят в эфир на следующем прогоне индексации или мгновенно через кнопку.

4. Самопроверка реплея

Во время индексации платформа запускает твой артефакт run в запечатанном изоляте один раз с детерминированным сидом:

  • Проходит → твоя игра воспроизводима: раунд реального игрока перезапускается на сервере, чтобы прийти к решению, так что она может ставить ворота на ключе сайта.
  • Сбоит (run-not-conforming) → игра показывается как Не воспроизводима. Она всё ещё залистена и встраиваема, но только как UX, пока ты не опубликуешь соответствующую версию. Сайты, уже на более ранней воспроизводимой версии, продолжают запускать ровно тот снимок.

Сбойная самопроверка это почти всегда недетерминизм в твоём run; сделай свою симуляцию детерминированной и переопубликуй. Запуск selfCheck движкового кита локально сначала ловит это до того, как ты запушишь.

5. Проверь обнаружение

После успешной публикации страница деталей встраивает твою игру в живое превью с ручкой для каждого объявленного пресета локали, скина и конфигурации. Поиграй там, чтобы подтвердить, что пресеты разрешаются, как ты задумал.

Получай уведомление, когда публикация сбоит

Ежедневный индексатор перепроверяет каждую опубликованную игру. Если переиндексация натыкается на проблему, тебе могут о ней написать, но только если ты согласился, задав marketplace.author.email в своём манифесте. Без заданного email ты не получаешь уведомлений. Другого канала нет; это единственный сигнал, который ты иначе пропустил бы, потому что ежедневная перепроверка работает без твоего наблюдения.

Шлются два вида письма, соответствующие двум исходам:

ПисьмоКогдаЧто оно означает
«Проверка верификации сбоила для <game>»Переиндексированная версия сбоит самопроверку реплея (run-not-conforming)Игра остаётся залистена и встраиваема, но та версия показывается как Не воспроизводима и не может ставить ворота, пока ты не опубликуешь соответствующую.
«Мы не смогли опубликовать <game>»Переиндексация натыкается на любой другой сбой (ошибка манифеста, лицензии или бандла)Та версия не залистена, пока ты её не починишь.

Важные детали:

  • Только ежедневная переиндексация пишет тебе. Сбой на ручной кнопке «Опубликовать или обновить» показывается тебе в модальном окне прямо тогда, так что письмо за него не шлётся.
  • Дедуплицировано. Тот же сбой на той же игре пишется один раз, затем подавляется на 30 дней. Другой сбой (новый код ошибки или причина) пишется немедленно.
  • Откажись в любой момент, убрав или поменяв marketplace.author.email. Письма также несут указатель отписки в один клик на Условия отправки. Ты здесь не аккаунт Caputchin, так что поле манифеста это единственный рычаг.

6. Автоматизируй через CI

Поскольку публикация это «тег плюс пуш на неизменный ref», ты можешь вписать её в свой релизный пайплайн, чтобы каждый релиз переиндексировался автоматически. Надёжный шаблон:

  1. Опубликуй бандл на неизменный ref в CI, npm publish (или помеченный тегом релиз GitHub), против которого разрешаются npm / entry твоего манифеста. Индексатор всегда перерешает на твою последнюю опубликованную версию на следующем прогоне, так что обычный релизный пайплайн уже двигает закрепление.
  2. Поставь релиз воротами на локальную проверку детерминизма. Запусти selfCheck движкового кита (или свой собственный тест реплея) как шаг CI, чтобы недетерминированный run валил сборку, а не выходил как не воспроизводимый.
  3. Опционально запусти немедленную переиндексацию, вызвав «Опубликовать или обновить», а не дожидаясь ежедневного cron, если хочешь, чтобы новая версия была живой в момент завершения CI.
# sketch: release job
- run: npm ci
- run: npm test                 # includes your replay selfCheck
- run: npm publish              # advances the immutable ref the indexer pins
# the daily indexer picks up the new version; or hit Publish or update for instant

Держи проверку детерминизма до публикации, чтобы плохой run никогда не достигал маркетплейса как молча не воспроизводимый листинг.

Чего тебе никогда не надо делать

  • Никакой подписи кода, никакой отправки на ревью, никакой загрузки на CDN платформы.
  • Никакого соглашения о разделе дохода.
  • Никакого выбора id; твоя координата GitHub это id.
  • Никакого поля версии; индексатор прибивает ref.

Если публикация сбоит

Каждая ошибка пути публикации это то, что ты чинишь в своём репозитории и повторяешь. Найди свой код в Почини сбой публикации; полный список кодов это справочник ошибок публикации.

См. также

На этой странице