Membaca konfigurasi bersama saat build
Mengapa setiap aplikasi di ekosistem mengambil satu registri sebelum build, dan mengapa pengambilan yang gagal seharusnya menggagalkan build alih-alih memakai cadangan.
Di halaman ini
Setiap proyek di ekosistem membutuhkan beberapa fakta bersama: di mana Support berada, apa URL Gateway, proyek mana yang publik. Menuliskannya langsung di setiap repositori berjalan baik sampai penggantian nama pertama. Setelah itu, setiap salinan bergeser dengan jadwalnya sendiri.
Satu registri, banyak pembaca
Registri adalah berkas JSON biasa yang dihasilkan dari berkas sumber kecil dan divalidasi dengan JSON Schema. Aplikasi tidak memasangnya sebagai paket; aplikasi mengambil berkas yang diterbitkan sebelum dev, build, typecheck, dan test, lalu hanya menyimpan bidang yang dipakai.
- Langkah sinkronisasi memvalidasi apa yang dibacanya, bukan seluruh registri, dan mengabaikan bidang yang tidak dikenalnya.
- Hasilnya berupa proyeksi minimal di berkas yang diabaikan git, sehingga registri lengkap tidak pernah sampai ke peramban pengunjung.
- URL deployment diselesaikan dengan cara yang sama di mana pun:
urleksplisit apa adanya, atau subdomain ditambah domain utama.
Tanpa cadangan basi
Desain yang menggoda adalah snapshot di repositori yang mengambil alih saat pengambilan gagal. Build tetap hijau, tetapi fakta kemarin ikut terkirim tanpa suara. Di sini, sinkronisasi yang gagal menghapus berkas hasil dan menggagalkan perintah, sehingga registri yang rusak menghentikan deploy alih-alih sampai ke pengunjung.
const response = await fetch(CONFIG_URL, { cache: "no-store" });if (!response.ok) throw new Error(`Config fetch failed: HTTP ${response.status}`);const projection = projectEcosystem(await response.json());| Pendekatan | Saat pengambilan gagal | Yang dilihat pengunjung |
|---|---|---|
| Snapshot di repositori | Build tetap lolos | Fakta yang mungkin usang |
| Tanpa cadangan (jurnal ini) | Build berhenti | Deployment terakhir yang berfungsi |
curl -s https://raw.githubusercontent.com/Fikrimarzuki/ecosystem-config/main/dist/ecosystem.json | node -e 'let s="";process.stdin.on("data",c=>s+=c).on("end",()=>console.log(Object.keys(JSON.parse(s).projects).length))'Harganya
Build membutuhkan jaringan, dan registri yang mati menghambat deploy. Untuk ekosistem kecil, itu pertukaran yang tepat: kegagalannya jelas, singkat, dan terlihat, sedangkan alternatifnya gagal diam-diam.