Setiap developer software dapat membangun, menguji, dan mengemas project apa pun secara efisien, dengan ukuran atau kompleksitas apa pun, menggunakan alat yang mudah diadopsi dan diperluas.
Engineer dapat menganggap remeh dasar-dasar build. Developer software berfokus pada proses kreatif penulisan kode karena proses mekanis build dan pengujian telah diselesaikan. Saat menyesuaikan sistem build untuk mendukung bahasa baru atau kebutuhan organisasi yang unik, pengguna berfokus pada aspek ekstensibilitas yang unik untuk kasus penggunaan mereka, tanpa harus membuat ulang infrastruktur dasar.
Engineer dapat dengan mudah berkontribusi ke project apa pun. Developer yang ingin mulai mengerjakan project baru dapat meng-clone project dan menjalankan build. Tidak perlu konfigurasi lokal - semuanya berfungsi. Dengan eksekusi jarak jauh lintas platform, mereka dapat bekerja di mesin mana pun dan menguji perubahan sepenuhnya terhadap semua platform yang ditargetkan project. Engineer dapat dengan cepat mengonfigurasi build untuk project baru atau secara bertahap memigrasikan build yang ada.
Project dapat diskalakan ke codebase berukuran apa pun, tim berukuran apa pun. Pengujian inkremental yang cepat memungkinkan tim memvalidasi setiap perubahan sepenuhnya sebelum diterapkan. Hal ini tetap berlaku meskipun repo bertambah, project mencakup beberapa repo, dan beberapa bahasa diperkenalkan. Infrastruktur tidak memaksa developer untuk menukar cakupan pengujian dengan kecepatan build.
Kami yakin Bazel memiliki potensi untuk memenuhi visi ini.
Bazel dibuat dari awal untuk mengaktifkan build yang dapat direproduksi (sekumpulan input tertentu akan selalu menghasilkan output yang sama) dan portabel (build dapat dijalankan di mesin mana pun tanpa memengaruhi output).
Karakteristik ini mendukung inkrementalitas yang aman (membangun ulang input yang diubah saja tidak menimbulkan risiko kerusakan) dan kemampuan distribusi (tindakan build diisolasi dan dapat di-offload). Dengan meminimalkan pekerjaan yang diperlukan untuk melakukan build yang benar dan memparalelkan pekerjaan tersebut di beberapa core dan sistem jarak jauh, Bazel dapat membuat build apa pun menjadi cepat.
Lapisan abstraksi Bazel — petunjuk khusus untuk bahasa, platform, dan toolchain yang diterapkan dalam bahasa ekstensibilitas sederhana — memungkinkan Bazel diterapkan dengan mudah ke konteks apa pun.
Kompetensi inti Bazel
- Bazel mendukung build dan pengujian multi-bahasa, multi-platform. Anda dapat menjalankan satu perintah untuk mem-build dan menguji seluruh pohon sumber, apa pun kombinasi bahasa dan platform yang Anda targetkan.
- Build Bazel cepat dan benar. Setiap build dan pengujian dijalankan secara inkremental, di mesin developer dan di CI.
- Bazel menyediakan bahasa yang seragam dan dapat diperluas untuk menentukan build untuk bahasa atau platform apa pun.
- Bazel memungkinkan build Anda untuk diskalakan dengan menghubungkan ke layanan eksekusi dan caching jarak jauh.
- Bazel berfungsi di semua platform pengembangan utama (Linux, MacOS, dan Windows).
- Kami mengakui bahwa mengadopsi Bazel memerlukan upaya, tetapi adopsi bertahap dimungkinkan. Bazel berinteraksi dengan alat standar de-facto untuk bahasa/platform tertentu.
Melayani komunitas bahasa
Teknik software berkembang dalam konteks komunitas bahasa — biasanya, kelompok orang yang mengatur diri sendiri yang menggunakan alat dan praktik umum.
Agar bermanfaat bagi anggota komunitas bahasa, aturan Bazel berkualitas tinggi yang terintegrasi dengan alur kerja dan konvensi komunitas tersebut harus tersedia.
Bazel berkomitmen untuk dapat diperluas dan terbuka, serta mendukung kumpulan aturan yang baik untuk bahasa apa pun.
Persyaratan kumpulan aturan yang baik
- Aturan harus mendukung pembuatan dan pengujian yang efisien untuk bahasa, termasuk cakupan kode.
- Aturan harus berinteraksi dengan "pengelola paket" yang banyak digunakan untuk bahasa (seperti Maven untuk Java), dan mendukung jalur migrasi inkremental dari sistem build lain yang banyak digunakan.
- Aturan harus dapat diperluas dan dapat dioperasikan, mengikuti "sandwich Bazel" prinsip.
- Aturan harus siap untuk eksekusi jarak jauh. Dalam praktiknya, hal ini berarti dapat dikonfigurasi menggunakan mekanisme toolchain.
- Aturan (dan Bazel) harus berinteraksi dengan IDE yang banyak digunakan untuk bahasa, jika ada.
- Aturan harus memiliki dokumentasi yang menyeluruh dan dapat digunakan , dengan materi pengantar untuk pengguna baru, dan dokumen komprehensif untuk pengguna ahli.
Setiap item ini penting dan hanya bersama-sama item ini dapat memenuhi kompetensi Bazel untuk ekosistem tertentu.
Secara umum, item ini juga cukup - setelah semuanya terpenuhi, Bazel sepenuhnya memberikan nilainya kepada anggota komunitas bahasa tersebut.