Penglihatan Bazel

Laporkan masalah Lihat sumber {/18/}{/1/}

Setiap developer software dapat secara efisien membangun, menguji, dan mengemas project apa pun, dari berbagai ukuran atau kompleksitas, dengan alat yang mudah digunakan dan diperluas.

  • Engineer dapat menganggap remeh dasar-dasar build. Developer software berfokus pada proses kreatif pembuatan kode karena proses mekanis build dan pengujian terpecahkan. 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 mengubah hal teknis 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 apa pun di mana saja dan menguji perubahan secara menyeluruh terhadap semua platform target project. Engineer dapat dengan cepat mengonfigurasi build untuk project baru atau memigrasikan build yang ada secara bertahap.

  • Project dapat diskalakan ke codebase ukuran apa pun, semua ukuran tim. Pengujian inkremental yang cepat memungkinkan tim memvalidasi setiap perubahan sepenuhnya sebelum diterapkan. Hal ini tetap berlaku bahkan saat repositori berkembang, project mencakup beberapa repositori, dan beberapa bahasa diperkenalkan. Infrastruktur tidak memaksa developer untuk menukar cakupan pengujian demi kecepatan build.

Kami yakin Bazel berpotensi untuk mewujudkan visi ini.

Bazel dibangun dari awal untuk mengaktifkan build yang dapat direproduksi (sekumpulan input tertentu akan selalu menghasilkan output yang sama) dan portabel (build dapat dijalankan di mesin apa pun tanpa memengaruhi output).

Karakteristik ini mendukung inkrementalitas yang aman (membuat ulang hanya input yang diubah tidak menimbulkan risiko kerusakan) dan distribusi (tindakan build diisolasi dan dapat dialihkan). Dengan meminimalkan pekerjaan yang diperlukan untuk melakukan build yang benar dan memparalelkan pekerjaan di beberapa core dan sistem jarak jauh, Bazel dapat mempercepat proses build apa pun.

Lapisan abstraksi Bazel — petunjuk khusus untuk bahasa, platform, dan toolchain yang diimplementasikan dalam bahasa ekstensibilitas yang sederhana — memungkinkannya diterapkan dengan mudah ke konteks apa pun.

Kompetensi inti Bazel

  1. Bazel mendukung build dan pengujian multi-bahasa dan multi-platform. Anda dapat menjalankan satu perintah untuk mem-build dan menguji seluruh hierarki sumber, apa pun kombinasi bahasa dan platform yang Anda targetkan.
  2. Build Bazel cepat dan benar. Setiap build dan pengujian yang dijalankan bersifat inkremental, di mesin developer Anda dan di CI.
  3. Bazel menyediakan bahasa yang seragam dan dapat diperluas untuk menentukan build untuk bahasa atau platform apa pun.
  4. Bazel memungkinkan build Anda diskalakan dengan terhubung ke layanan eksekusi dan cache jarak jauh.
  5. Bazel berfungsi di semua platform pengembangan utama (Linux, MacOS, dan Windows).
  6. Kami memahami bahwa penggunaan Bazel memerlukan upaya, tetapi adopsi bertahap dapat dilakukan. Bazel berinteraksi dengan alat standar de-facto untuk bahasa/platform tertentu.

Komunitas bahasa yang melayani

Software engineering berkembang dalam konteks komunitas bahasa — biasanya, kelompok orang yang mengatur secara mandiri dan menggunakan alat dan praktik umum.

Agar dapat digunakan oleh anggota komunitas bahasa, aturan Bazel berkualitas tinggi harus tersedia serta terintegrasi dengan alur kerja dan konvensi komunitas tersebut.

Bazel berkomitmen untuk dapat diperluas dan terbuka, serta mendukung kumpulan aturan yang baik untuk bahasa apa pun.

Persyaratan seperangkat aturan yang baik

  1. Aturan harus mendukung proses build dan pengujian yang efisien untuk bahasa tersebut, termasuk cakupan kode.
  2. Aturan tersebut perlu berantarmuka dengan "pengelola paket" yang banyak digunakan untuk bahasa (seperti Maven untuk Java), dan mendukung jalur migrasi inkremental dari sistem build lain yang banyak digunakan.
  3. Aturan harus dapat diperluas dan dapat dioperasikan, sesuai dengan prinsip "Bazel sandwich".
  4. Aturan harus siap eksekusi jarak jauh. Dalam praktiknya, ini berarti dapat dikonfigurasi menggunakan mekanisme toolchains.
  5. Aturan (dan Bazel) harus berinteraksi dengan IDE yang digunakan secara luas untuk bahasa tersebut, jika ada.
  6. Aturan harus memiliki dokumentasi yang menyeluruh dan dapat digunakan, dengan materi pengantar untuk pengguna baru, dokumen komprehensif untuk pengguna ahli.

Masing-masing item ini sangat penting dan bersama-sama item tersebut memberikan kompetensi Bazel untuk ekosistem khususnya.

Rekomendasi juga, pada umumnya, memadai - setelah semuanya terpenuhi, Bazel sepenuhnya memberikan nilainya kepada anggota komunitas bahasa tersebut.