Memahami catalog ingestion lewat static locations, URL dan file locations, serta entity providers untuk discovery otomatis, termasuk pipeline pengolahan dari entity provider hingga stitching, dengan integrasi GitHub discovery.

Di episode 4, kalian mengenal entity dan cara mendeskripsikannya lewat catalog-info.yaml. Pertanyaan selanjutnya: bagaimana entity itu masuk ke catalog? Episode 5 ini membahas catalog ingestion dan processing — mekanisme penyaluran entity (locations dan entity providers) beserta pipeline yang mengubah file mentah menjadi entity siap pakai.
Sebuah catalog hanya berguna jika isinya selalu mutakhir. Karena itu, selain memahami cara menulis entity, kalian perlu memahami dua mekanisme yang menjaga catalog tetap hidup: lokasi yang menunjuk ke sumber, dan pipeline yang mengolahnya secara berkelanjutan.
Ingestion adalah proses memasukkan entity ke dalam catalog. Ada beberapa pendekatan dengan tingkat kemudahan dan skala yang berbeda. Ketiga pendekatan di bawah tidak saling meniadakan — organisasi sering menggabungkannya: locations untuk entitas khusus, provider untuk seluruh repositori.
Cara paling sederhana adalah mendeklarasikan lokasi secara statis di app-config.yaml. Setiap lokasi menunjuk langsung ke satu sumber catalog-info.yaml:
catalog:
locations:
- type: url
target: https://github.com/acme/order-service/blob/main/catalog-info.yamlStatic locations mudah dipahami dan cocok untuk entitas yang jumlahnya sedikit. Namun untuk organisasi besar, mendaftarkan setiap repositori secara manual tidak akan bertahan lama.
Lokasi semacam ini juga bisa diregistrasi langsung dari UI katalog — Backstage menyediakan form untuk me-register lokasi baru tanpa mengubah file konfigurasi.
Location sendiri bisa berupa dua tipe sumber: url untuk sumber jarak jauh (misalnya GitHub, GitLab, atau situs mana pun) dan file untuk file lokal di dalam workspace. Tipe file biasanya dipakai saat kalian ingin me-register entity dari file di mesin atau dari sistem file yang terpasang. Perbedaan keduanya hanya pada sumbernya — proses pengolahan setelahnya identik. Location, apa pun tipenya, hanyalah petunjuk ke mana catalog harus membaca file entity.
Untuk skala besar, Backstage menyediakan entity providers — modul yang secara otomatis menemukan dan memasukkan banyak entity sekaligus dari satu sumber. Provider menyediakan berbagai integrasi:
| Provider | Sumber Entity |
|---|---|
| GitHub discovery | Organisasi dan repositori GitHub |
| GitLab | Grup dan repositori GitLab |
| Azure DevOps | Project di Azure DevOps |
| Bitbucket | Workspace dan repositori Bitbucket |
| S3 | File catalog-info.yaml di bucket |
| File system | Direktori pada sistem file lokal |
Daripada menunjuk satu per satu, sebuah provider memindai sumbernya, menemukan semua catalog-info.yaml yang cocok, lalu menyerahkan hasilnya ke catalog. Kalian tinggal mengatur pola yang ingin dicari — misalnya semua repositori dalam satu organisasi. Pemilihan provider bergantung pada di mana kalian menyimpan kode: untuk organisasi yang seragam di satu platform, satu provider saja sudah cukup; untuk organisasi campuran, beberapa provider bisa diaktifkan bersamaan.
Setelah lokasi atau provider menghasilkan sumber entity, kandidat tersebut melewati serangkaian tahap pengolahan yang disebut processing pipeline:
| Tahap | Fungsi |
|---|---|
| Entity provider | Menghasilkan dan menyerahkan lokasi entity |
| Reading | Membaca konten dari lokasi tersebut |
| Parsing | Mengurai konten menjadi struktur data entity |
| Validation | Memvalidasi bahwa entity sesuai skema yang berlaku |
| Relations | Membangun relasi antar entity dari isi spec |
| Stitching | Menggabungkan hasil akhir menjadi entity yang tampil di catalog |
Pipeline ini berjalan terus-menerus: setiap ada perubahan di sumber, entity diperbarui lewat proses yang sama. Alur dari provider hingga stitching inilah yang menjaga catalog tetap sinkron dengan repositori kalian tanpa campur tangan manual.
Urutan tahapan ini bersifat logis, bukan timeline tunggal — beberapa entity bisa berada di tahap berbeda pada waktu yang sama karena pipeline berjalan paralel dan asynchronous.
Kegagalan di salah satu tahap tidak selalu menghentikan seluruh pipeline. Catalog mencatat entity yang gagal diproses dan mencoba lagi secara berkala ketika sumber berubah. Ini berarti entity yang baru saja kalian push bisa butuh beberapa detik sebelum muncul di portal — kondisi normal untuk catalog yang aktif, bukan tanda ada yang rusak.
Tip
Jika sebuah entity belum muncul di catalog, kemungkinan terbesarnya ada di tahap parsing atau validation. Kesalahan YAML kecil seperti indentasi yang tidak konsisten bisa membuat entity ditolak tanpa peringatan mencolok — cek log backend untuk melihat alasan penolakannya.
Kasus paling umum adalah mendiscovery entity dari GitHub. Polanya sama untuk GitLab, Azure DevOps, dan provider lain — hanya nama provider dan sumbernya yang berbeda. Langkah pertama, konfigurasikan integrasi GitHub dan provider discovery di app-config.yaml:
integrations:
github:
- host: github.com
token: ${GITHUB_TOKEN}
catalog:
providers:
github:
providerId:
organization: acmeLangkah kedua, pasang modul backend yang menyediakan provider tersebut:
yarn --cwd packages/backend add @backstage/plugin-catalog-backend-module-githubModul catalog-backend-module-github inilah yang menghubungkan integrasi GitHub dengan pipeline catalog. Setelah modul terpasang dan didaftarkan di backend, setiap repositori di organisasi acme yang berisi catalog-info.yaml akan otomatis muncul sebagai entity di catalog. Pendaftaran di backend mengikuti pola New Backend System yang kalian pelajari di episode 2, yaitu dengan memanggil backend.add() untuk modul yang bersangkutan.
Important
Token GitHub yang dipakai untuk discovery harus memiliki akses baca ke repositori yang ingin ditemukan. Simpan token lewat environment variable seperti contoh di atas — jangan pernah menaruh token langsung di app-config.yaml.
Pada episode 5 ini, kalian memahami cara catalog mengisi dirinya: static locations untuk entitas tunggal, URL dan file locations, serta entity providers untuk discovery otomatis dari GitHub, GitLab, Azure DevOps, Bitbucket, S3, dan file system. Kalian juga mengenal pipeline pengolahan dari entity provider, reading, parsing, validation, relations, hingga stitching.
Inti yang harus dibawa pulang:
Di episode 6 berikutnya, kalian akan mengubah katalog menjadi mesin produktivitas: Software Templates (Scaffolder) — template YAML dengan golden path yang membiarkan engineer membuat service baru secara self-service, lengkap dengan repositori, pipeline, dan registrasi catalog otomatis.