Опубликуй в Marketplace
К концу этого руководства твоя игра залистена в Marketplace и встраиваема любым пользователем по её id игры. Публикация намеренно мало-церемонна: нет очереди отправки, нет ревью и нет загрузки. Ты помечаешь публичный репозиторий GitHub тегом, и платформа его индексирует.
Это предполагает, что ты построил игру (Построй игру для Marketplace) и написал её манифест.
1. Пометь репозиторий GitHub тегом
Добавь тему GitHub caputchin-game к своему публичному репозиторию (секция About на странице репозитория). Индексатор запрашивает у GitHub эту тему; этот тег и есть весь твой opt-in.
Твой id игры выводится из координаты репозитория, owner/repo (или owner/repo/<leaf-dir> для ребёнка коллекции). Ты его не выбираешь и не объявляешь.
2. Подтверди обязательное в манифесте
Три вещи стоят воротами индексации; убедись, что они есть в твоём корневом caputchin.json:
"terms_accepted": true(литеральное булево), подтверждающее Условия отправки в Marketplace.licenseиз одобренного списка.- Указатель распространения (
entry,npmили оба), чтобы бандл разрешился.
Добавь marketplace.author.email, если хочешь письма о сбое публикации (он никогда не показывается публично и является единственным способом их получать).
3. Опубликуй или обнови
Два способа приземлиться в индексе:
- Ежедневный cron подхватывает помеченные тегом репозитории автоматически.
- Кнопка «Опубликовать или обновить» в Marketplace запускает пер-репозиторный индексатор синхронно и перенаправляет тебя на твою страницу деталей или показывает точную ошибку валидации. Используй это для первого листинга или сразу после правки манифеста.
Когда он работает, индексатор запрашивает твой манифест, прибивает бандл к неизменному ref (опубликованная версия npm или разрешённый коммит SHA), вычисляет хеш целостности SHA-384 и хранит { url, integrity } по ключу твоего id игры. Новые релизы выходят в эфир на следующем прогоне индексации или мгновенно через кнопку.
4. Самопроверка реплея
Во время индексации платформа запускает твой артефакт run в запечатанном изоляте один раз с детерминированным сидом:
- Проходит → твоя игра воспроизводима: раунд реального игрока перезапускается на сервере, чтобы прийти к решению, так что она может ставить ворота на ключе сайта.
- Сбоит (
run-not-conforming) → игра показывается как Не воспроизводима. Она всё ещё залистена и встраиваема, но только как UX, пока ты не опубликуешь соответствующую версию. Сайты, уже на более ранней воспроизводимой версии, продолжают запускать ровно тот снимок.
Сбойная самопроверка почти всегда означает недетерминизм в твоём run; сделай свою симуляцию детерминированной и переопубликуй. Запуск selfCheck движкового набора локально сначала ловит это до того, как ты запушишь.
5. Проверь обнаружение
После успешной публикации страница деталей встраивает твою игру в живое превью с ручкой для каждого объявленного пресета локали, скина и конфигурации. Поиграй там, чтобы подтвердить, что пресеты разрешаются, как ты задумал.
Получай уведомление, когда публикация сбоит
Ежедневный индексатор перепроверяет каждую опубликованную игру. Если переиндексация натыкается на проблему, тебе могут о ней написать, но только если ты согласился, задав marketplace.author.email в своём манифесте. Без заданного email ты не получаешь уведомлений. Другого канала нет; это единственный сигнал, который ты иначе пропустил бы, потому что ежедневная перепроверка работает без твоего наблюдения.
Шлются два вида письма, соответствующие двум исходам:
| Письмо | Когда | Что оно означает |
|---|---|---|
«Verification check failed for <game>» | Переиндексированная версия сбоит самопроверку реплея (run-not-conforming) | Игра остаётся залистена и встраиваема, но та версия показывается как Не воспроизводима и не может ставить ворота, пока ты не опубликуешь соответствующую. |
«We couldn't publish <game>» | Переиндексация натыкается на любой другой сбой (ошибка манифеста, лицензии или бандла) | Та версия не залистена, пока ты её не починишь. |
Важные детали:
- Только ежедневная переиндексация пишет тебе. Сбой на ручной кнопке «Опубликовать или обновить» показывается тебе в модальном окне прямо тогда, так что письмо за него не шлётся.
- Дедуплицировано. Тот же сбой на той же игре пишется один раз, затем подавляется на 30 дней. Другой сбой (новый код ошибки или причина) пишется немедленно.
- Откажись в любой момент, убрав или поменяв
marketplace.author.email. Письма также несут указатель отписки в один клик на Условия отправки. Ты здесь не аккаунт Caputchin, так что поле манифеста и есть единственный рычаг.
6. Автоматизируй через CI
Поскольку публикация представляет собой «тег плюс пуш на неизменный ref», ты можешь вписать её в свой релизный пайплайн, чтобы каждый релиз переиндексировался автоматически. Надёжный шаблон:
- Опубликуй бандл на неизменный ref в CI, npm
publish(или помеченный тегом релиз GitHub), против которого разрешаютсяnpm/entryтвоего манифеста. Индексатор всегда перерешает на твою последнюю опубликованную версию на следующем прогоне, так что обычный релизный пайплайн уже двигает закрепление. - Поставь релиз воротами на локальную проверку детерминизма. Запусти
selfCheckдвижкового набора (или свой собственный тест реплея) как шаг CI, чтобы недетерминированныйrunвалил сборку, а не выходил как не воспроизводимый. - Опционально запусти немедленную переиндексацию, вызвав «Опубликовать или обновить», а не дожидаясь ежедневного 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 никогда не достигал Marketplace как молча не воспроизводимый листинг.
Чего тебе никогда не надо делать
- Никакой подписи кода, никакой отправки на ревью, никакой загрузки на CDN платформы.
- Никакого соглашения о разделе дохода.
- Никакого выбора id; твоя координата GitHub и есть id.
- Никакого поля версии; индексатор прибивает ref.
Если публикация сбоит
Каждую ошибку пути публикации ты чинишь в своём репозитории и повторяешь. Найди свой код в Почини сбой публикации; полным списком кодов служит справочник ошибок публикации.
См. также
- Почини сбой публикации: пошаговые исправления по коду ошибки.
- Манифест caputchin.json: поля, которые валидирует индексатор.
- Контракт реплея: что запускает самопроверка.