Langsung ke konten
FM Journal
ArtikelTerbit: Diperbarui 2 menit bacaContoh

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.

Ilustrasi: sebuah dokumen di pusat tiga orbit, dengan garis putus-putus menjangkau benda-benda kecil.

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: url eksplisit 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.

scripts/sync-ecosystem.mjsKode: js
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());
Diagram: berkas sumber divalidasi menjadi ecosystem.json yang diterbitkan; langkah sinkronisasi sebelum setiap build mengubahnya menjadi proyeksi kecil, dan pengambilan atau validasi yang gagal menghentikan build.
Jalur registri menuju satu aplikasi. Garis putus-putus adalah jalur kegagalan: build berhenti.
PendekatanSaat pengambilan gagalYang dilihat pengunjung
Snapshot di repositoriBuild tetap lolosFakta yang mungkin usang
Tanpa cadangan (jurnal ini)Build berhentiDeployment terakhir yang berfungsi
Dua cara menangani registri yang tidak tersedia.
Kode: bash
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.

ArtikelTerbit: 1 menit bacaContoh

Typed local content before a CMS

Starting a journal with typed data files and a small repository interface, so a database or CMS can arrive later without rewriting the pages.