---
type: tutorial
title: Terbitkan ke marketplace
summary: Tag repo-mu, biarkan pengindeks menemukan dan memin-nya, pahami pemeriksaan-diri putar-ulang, dan otomasi penerbitan-ulang dari CI pada setiap rilis.
---

Di akhir tutorial ini game-mu terdaftar di marketplace dan bisa disematkan pengguna mana pun, lewat id game-nya. Penerbitan sengaja rendah-seremoni: tak ada antrean pengajuan, tak ada tinjauan, dan tak ada unggahan. Kamu menge-tag repo GitHub publik dan platform mengindeksnya.

Ini mengasumsikan kamu telah membangun sebuah game ([Bangun game marketplace](/docs/marketplace-game-development/build-a-marketplace-game)) dan menulis [manifest](/docs/marketplace-game-development/the-caputchin-json-manifest)-nya.

## 1. Tag repositori GitHub

Tambahkan topik GitHub `caputchin-game` ke repositori publikmu (bagian About di halaman repo). Pengindeks meng-query GitHub untuk topik ini; tag itu adalah seluruh opt-in-mu.

Id game-mu **diturunkan** dari koordinat repo, `owner/repo` (atau `owner/repo/<leaf-dir>` untuk anak [koleksi](/docs/marketplace-game-development/the-caputchin-json-manifest#collections)). Kamu tak memilih atau mendeklarasikannya.

## 2. Pastikan esensi manifest

Tiga hal menggerbang pengindeksan; pastikan `caputchin.json` akar-mu memilikinya:

1. `"terms_accepted": true` (boolean literal) memastikan [Ketentuan Pengajuan Marketplace](/legal/submission-terms).
2. Sebuah `license` di [daftar yang disetujui](/docs/marketplace-game-development/publish-failed-reference#approved-licenses).
3. Sebuah penunjuk distribusi (`entry`, `npm`, atau keduanya) agar bundel diselesaikan.

Tambahkan `marketplace.author.email` jika kamu ingin [email kegagalan-terbit](#get-notified-when-a-publish-fails) (ia tak pernah ditunjukkan publik, dan ia satu-satunya cara menerimanya).

## 3. Terbitkan atau perbarui

Dua cara mendarat di indeks:

- **Cron harian** mengambil repo ber-tag secara otomatis.
- **Tombol "Terbitkan atau perbarui"** di marketplace menjalankan pengindeks per-repo secara sinkron dan mengalihkanmu ke halaman detailmu, atau menunjukkan galat validasi persisnya. Pakai ini untuk daftar pertama atau tepat setelah suntingan manifest.

Saat ia berjalan, pengindeks mengambil manifest-mu, **memin bundel ke ref tak-berubah** (versi npm yang diterbitkan atau SHA commit yang diselesaikan), menghitung hash integritas SHA-384, dan menyimpan `{ url, integrity }` ber-kunci id game-mu. Rilis baru tayang pada run indeks berikutnya, atau seketika lewat tombol.

## 4. Pemeriksaan-diri putar-ulang

Saat-indeks platform menjalankan [artefak `run`](/docs/marketplace-game-development/replay-contract)-mu di isolate tersegel sekali dengan seed deterministik:

- **Lolos** → game-mu **bisa-diputar-ulang**: ronde pemain nyata dijalankan-ulang di sisi-server untuk mencapai keputusan, jadi ia bisa menggerbang sebuah kunci situs.
- **Gagal** (`run-not-conforming`) → game menunjukkan **Tidak bisa diputar ulang**. Ia tetap terdaftar dan bisa-disematkan, tapi hanya sebagai UX sampai kamu menerbitkan versi yang sesuai. Situs yang sudah pada versi bisa-diputar-ulang sebelumnya tetap menjalankan snapshot persis itu.

Pemeriksaan-diri yang gagal hampir selalu non-determinisme di `run`-mu; [buat simulasimu deterministik](/docs/marketplace-game-development/publish-failed-fixes#run-not-conforming) dan terbitkan-ulang. Menjalankan `selfCheck` [kit engine](/docs/marketplace-game-development/engine-kit) secara lokal dulu menangkap ini sebelum kamu mendorong.

## 5. Pastikan penemuan

Setelah penerbitan berhasil, halaman detail menyematkan game-mu di pratinjau live dengan sebuah tombol untuk tiap preset locale, skin, dan konfigurasi yang dideklarasikan. Mainkan ia di sana untuk memastikan preset diselesaikan sebagaimana kamu maksudkan.

## Dapatkan notifikasi saat penerbitan gagal [#get-notified-when-a-publish-fails]

Pengindeks harian memeriksa-ulang setiap game terbit. Jika reindeks menemui masalah, kamu bisa diemail tentangnya, tapi **hanya jika kamu opt in** dengan menyetel `marketplace.author.email` di [manifest](/docs/marketplace-game-development/the-caputchin-json-manifest#the-marketplace-block)-mu. Tanpa email disetel, kamu tak dapat notifikasi. Tak ada kanal lain; ini adalah satu sinyal yang kalau tidak akan kamu lewatkan, karena pemeriksaan-ulang harian berjalan tanpa kamu menonton.

Dua jenis email dikirim, cocok dengan dua hasil:

| Email | Kapan | Apa artinya |
|---|---|---|
| "Verification check failed for `<game>`" | Versi yang di-reindeks gagal pemeriksaan-diri putar-ulang (`run-not-conforming`) | Game tetap terdaftar dan bisa-disematkan, tapi versi itu menunjukkan **Tidak bisa diputar ulang** dan tak bisa menggerbang sampai kamu menerbitkan yang sesuai. |
| "We couldn't publish `<game>`" | Reindeks menemui kegagalan lain mana pun (galat manifest, lisensi, atau bundel) | Versi itu **tak terdaftar** sampai kamu memperbaikinya. |

Detail yang penting:

- **Hanya reindeks harian yang mengemail-mu.** Kegagalan pada tombol "Terbitkan atau perbarui" manual ditunjukkan padamu di modal saat itu juga, jadi tak ada email yang dikirim untuknya.
- **Terdeduplikasi.** Kegagalan yang sama pada game yang sama diemail sekali, lalu ditekan selama 30 hari. Kegagalan *berbeda* (kode galat atau alasan baru) mengemail seketika.
- **Opt out kapan saja** dengan menyingkirkan atau mengubah `marketplace.author.email`. Email juga membawa penunjuk berhenti-langganan satu-klik ke [Ketentuan Pengajuan](/legal/submission-terms). Kamu bukan akun Caputchin di sini, jadi bidang manifest adalah satu-satunya kontrol.

## 6. Otomasi dengan CI

Karena penerbitan adalah "tag plus dorong ke ref tak-berubah," kamu bisa menyambungkannya ke pipeline rilismu agar setiap rilis me-reindeks otomatis. Pola andalnya:

1. **Terbitkan bundel ke ref tak-berubah** di CI, `publish` npm (atau rilis GitHub ber-tag) yang menjadi tempat `npm` / `entry` manifest-mu diselesaikan. Pengindeks selalu menyelesaikan-ulang ke versi terbitmu terbaru pada run berikutnya, jadi pipeline rilis biasa sudah memajukan pin.
2. **Gerbangi rilis pada pemeriksaan determinisme lokal.** Jalankan `selfCheck` kit engine (atau uji putar-ulang-mu sendiri) sebagai langkah CI agar `run` non-deterministik menggagalkan build alih-alih mengirim sebagai tak-bisa-diputar-ulang.
3. **Opsional picu reindeks seketika** dengan memanggil "Terbitkan atau perbarui" ketimbang menunggu cron harian, jika kamu ingin versi baru live saat CI selesai.

```yaml
# 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
```

Jaga pemeriksaan determinisme **sebelum** publish agar `run` buruk tak pernah mencapai marketplace sebagai daftar yang diam-diam tak-bisa-diputar-ulang.

## Apa yang tak pernah harus kamu lakukan

- Tanpa penandatanganan kode, tanpa pengajuan tinjauan, tanpa unggahan CDN platform.
- Tanpa perjanjian bagi-hasil.
- Tanpa pemilihan-id; koordinat GitHub-mu adalah id-nya.
- Tanpa bidang versi; pengindeks memin ref.

## Jika penerbitan gagal

Setiap galat jalur-terbit adalah sesuatu yang kamu perbaiki di repo-mu dan coba-ulang. Temukan kodemu di [Perbaiki kegagalan terbit](/docs/marketplace-game-development/publish-failed-fixes); daftar kode penuhnya adalah [referensi galat terbit](/docs/marketplace-game-development/publish-failed-reference).

## Lihat juga

- [Perbaiki kegagalan terbit](/docs/marketplace-game-development/publish-failed-fixes): perbaikan langkah-demi-langkah per kode galat.
- [Manifest caputchin.json](/docs/marketplace-game-development/the-caputchin-json-manifest): bidang yang divalidasi pengindeks.
- [Kontrak putar-ulang](/docs/marketplace-game-development/replay-contract): apa yang dijalankan pemeriksaan-diri.
