Penglihatan Bazel

Laporkan masalah Lihat sumber

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

  • Engineer dapat menerima dasar-dasar build dengan mudah. Developer software berfokus pada proses kreatif pembuatan kode karena proses mekanis build dan pengujian diselesaikan. Saat menyesuaikan sistem build untuk mendukung bahasa baru atau kebutuhan organisasi yang unik, pengguna berfokus pada aspek ekstensi yang unik untuk kasus penggunaan mereka, tanpa harus menciptakan kembali pipeline dasar.

  • Engineer dapat dengan mudah berkontribusi pada project apa pun. Developer yang ingin mulai mengerjakan project baru dapat meng-clone project dan menjalankan build. Tidak perlu konfigurasi lokal - ini hanya berfungsi. Dengan eksekusi jarak jauh lintas platform, mereka dapat bekerja di mesin mana saja di mana saja dan menguji perubahan mereka secara menyeluruh terhadap semua platform yang ditargetkan 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, tim ukuran apa pun. Pengujian yang cepat dan inkremental memungkinkan tim memvalidasi sepenuhnya setiap perubahan sebelum di-commit. Hal ini tetap berlaku bahkan saat repo berkembang, project mencakup beberapa repositori, 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 nol untuk memungkinkan build yang dapat direproduksi (serangkaian 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 (mem-build ulang hanya input yang diubah tidak menimbulkan risiko korupsi) dan distribusi (tindakan build diisolasi dan dapat dialihkan). Dengan meminimalkan pekerjaan yang diperlukan untuk melakukan build yang benar dan memparalelkan pekerjaan tersebut di beberapa inti dan sistem jarak jauh, Bazel dapat membuat build apa pun dengan cepat.

Lapisan abstraksi Bazel — petunjuk khusus untuk bahasa, platform, dan toolchain yang diimplementasikan dalam bahasa ekstensibilitas sederhana — memungkinkannya untuk 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, terlepas dari kombinasi bahasa dan platform yang ditargetkan.
  2. Build Bazel cepat dan benar. Setiap build dan pengujian yang dijalankan akan bersifat inkremental, baik pada mesin developer maupun di CI.
  3. Bazel menyediakan bahasa yang seragam dan dapat diperluas untuk menentukan build bagi bahasa atau platform apa pun.
  4. Dengan Bazel, build Anda dapat diskalakan dengan terhubung ke layanan eksekusi jarak jauh dan caching.
  5. Bazel berfungsi di semua platform pengembangan utama (Linux, MacOS, dan Windows).
  6. Kami menerima bahwa mengadopsi Bazel membutuhkan upaya, tetapi adopsi bertahap dapat dilakukan. Antarmuka Bazel dengan alat standar de-fasilitatorto untuk bahasa/platform tertentu.

Melayani komunitas bahasa

Rekayasa software berkembang dalam konteks komunitas bahasa, biasanya yang mengorganisasi sendiri orang-orang yang menggunakan alat dan praktik umum.

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

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

Persyaratan kumpulan aturan yang baik

  1. Aturan tersebut harus mendukung pembuatan dan pengujian yang efisien untuk bahasa tersebut, termasuk cakupan kode.
  2. Aturan ini perlu antarmuka 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 bersama, dengan mengikuti prinsip "Bazel sandwich".
  4. Aturan harus siap dijalankan dari jarak jauh. Dalam praktiknya, hal ini berarti dapat dikonfigurasi menggunakan mekanisme Toolchain.
  5. Aturan (dan Bazel) harus melakukan antarmuka dengan IDE yang banyak digunakan untuk bahasa, jika ada.
  6. Aturan harus memiliki dokumentasi yang lengkap dan dapat digunakan, dengan materi pengantar untuk pengguna baru, dokumen yang komprehensif untuk pengguna ahli.

Setiap item ini sangat penting dan hanya jika dijalankan bersama, kompetensi Bazel untuk ekosistem tertentu dapat tercapai.

Selain itu, Bazel juga sudah cukup, jika semuanya terpenuhi, Bazel akan sepenuhnya memberikan nilainya kepada anggota komunitas bahasa tersebut.