Halaman ini ditujukan untuk penulis aturan yang berencana menyediakan aturan mereka kepada orang lain.
Sebaiknya mulai kumpulan aturan baru dari repositori template: https://github.com/bazel-contrib/rules-template Template tersebut mengikuti rekomendasi di bawah ini, dan mencakup pembuatan dokumentasi API dan menyiapkan pipeline CI/CD agar mudah untuk mendistribusikan kumpulan aturan Anda.
Aturan hosting dan penamaan
Aturan baru harus masuk ke repositori GitHub-nya sendiri di organisasi Anda. Mulai rangkaian pesan di GitHub jika merasa aturan Anda termasuk dalam bazelbuild organisasi/pengaturan.
Nama repositori untuk aturan Bazel distandarisasi dalam format berikut:
$ORGANIZATION/rules_$NAME
.
Lihat contoh di GitHub.
Agar konsisten, Anda harus mengikuti format yang sama ini saat memublikasikan aturan Bazel.
Pastikan untuk menggunakan deskripsi repositori GitHub yang deskriptif dan README.md
judul, contoh:
- Nama repositori:
bazelbuild/rules_go
- Deskripsi repositori: Aturan Go untuk Bazel
- Tag repositori:
golang
,bazel
- Header
README.md
: Aturan Go untuk Bazel (perhatikan tautan ke https://bazel.build yang akan memandu pengguna yang tidak terbiasa dengan Bazel ke tempat yang tepat)
Aturan dapat dikelompokkan berdasarkan bahasa (seperti Scala), platform runtime (seperti Android), atau framework (seperti Spring).
Konten repositori
Setiap repositori aturan harus memiliki tata letak tertentu sehingga pengguna dapat dengan cepat memahami aturan baru.
Misalnya, saat menulis aturan baru untuk (buat-percaya)
mockascript
, repositori aturan akan memiliki struktur berikut:
/
LICENSE
README
MODULE.bazel
mockascript/
constraints/
BUILD
runfiles/
BUILD
runfiles.mocs
BUILD
defs.bzl
tests/
BUILD
some_test.sh
another_test.py
examples/
BUILD
bin.mocs
lib.mocs
test.mocs
MODULE.bazel
Dalam MODULE.bazel
project, Anda harus menentukan nama yang akan digunakan pengguna
sebagai referensi pada aturan Anda. Jika aturan Anda termasuk dalam
bazelbuild, Anda harus menggunakan
rules_<lang>
(seperti rules_mockascript
). Jika tidak, Anda harus menamai
repositori <org>_rules_<lang>
(seperti build_stack_rules_proto
). Memohon
mulai rangkaian pesan di GitHub
jika merasa aturan Anda harus mengikuti konvensi untuk aturan dalam
bazelbuild.
Di bagian berikut, asumsikan bahwa repositori adalah milik bazelbuild.
module(name = "rules_mockascript")
README
Di tingkat atas, harus ada README
yang berisi deskripsi singkat
dari kumpulan aturan Anda, dan API yang diharapkan pengguna.
Aturan
Sering kali ada beberapa aturan yang disediakan oleh repositori Anda. Buat
direktori yang dinamai menurut bahasa dan berikan titik entri - file defs.bzl
mengekspor semua aturan (sertakan juga file BUILD
sehingga direktorinya adalah sebuah paket).
Untuk rules_mockascript
, itu berarti akan ada direktori bernama
mockascript
, dan file BUILD
serta file defs.bzl
di dalamnya:
/
mockascript/
BUILD
defs.bzl
Batasan
Jika aturan Anda menetapkan
toolchain,
Anda mungkin perlu menentukan constraint_setting
kustom, dan/atau
constraint_value
dtk. Masukkan ini ke dalam paket //<LANG>/constraints
. Nama
struktur direktori akan terlihat seperti ini:
/
mockascript/
constraints/
BUILD
BUILD
defs.bzl
Harap dibaca
github.com/bazelbuild/platforms
untuk praktik terbaik, dan melihat batasan apa yang sudah ada, dan
pertimbangkan untuk berkontribusi dalam batasan tersebut jika tidak tergantung bahasa.
Jangan lupa untuk memasukkan batasan
khusus, semua pengguna aturan Anda akan
menggunakannya untuk menjalankan logika khusus platform di file BUILD
mereka (misalnya,
menggunakan pilihan).
Dengan batasan khusus, Anda menentukan bahasa yang akan digunakan oleh seluruh ekosistem Bazel
akan berbicara.
Library Runfiles
Jika aturan Anda menyediakan pustaka standar
untuk mengakses {i>runfile<i}, aturan itu harus
dalam bentuk target library yang terletak di //<LANG>/runfiles
(singkatan
dari //<LANG>/runfiles:runfiles
). Target pengguna yang perlu mengakses data mereka
dependensi biasanya akan menambahkan target ini ke atribut deps
miliknya.
Aturan repositori
Dependensi
Aturan Anda mungkin memiliki dependensi eksternal, yang harus Anda tentukan file MODULE.bazel.
Mendaftarkan toolchain
Aturan Anda mungkin juga mendaftarkan toolchain, yang juga dapat Anda tetapkan dalam File MODULE.bazel.
Perhatikan bahwa untuk menyelesaikan toolchain
dalam fase analisis, Bazel perlu
analisis semua target toolchain
yang terdaftar. Bazel tidak perlu
analisis semua target yang dirujuk oleh atribut toolchain.toolchain
. Jika secara berurutan
untuk mendaftarkan toolchain, Anda perlu melakukan komputasi kompleks dalam
repositori, pertimbangkan untuk memisahkan repositori dengan target toolchain
dari
repositori dengan target <LANG>_toolchain
. Data sebelumnya akan selalu diambil, dan
yang kedua hanya akan diambil saat pengguna benar-benar perlu membuat kode <LANG>
.
Cuplikan rilis
Dalam pengumuman rilis, sediakan cuplikan yang dapat disalin dan ditempelkan oleh pengguna Anda
ke dalam file MODULE.bazel
. Cuplikan ini secara umum akan terlihat seperti berikut:
bazel_dep(name = "rules_<LANG>", version = "<VERSION>")
Pengujian
Harus ada pengujian yang memverifikasi bahwa aturan bekerja seperti yang diharapkan. Ini
dapat berada di lokasi standar untuk bahasa target aturan atau
Direktori tests/
di tingkat teratas.
Contoh (opsional)
Hal ini berguna bagi pengguna untuk memiliki direktori examples/
yang menampilkan beberapa
cara-cara dasar di mana aturan
tersebut dapat digunakan.
CI/CD
Banyak kumpulan aturan menggunakan Tindakan GitHub. Lihat konfigurasi yang digunakan di repositori rules-template, yang disederhanakan menggunakan "alur kerja yang dapat digunakan kembali" dalam {i>bazel-contrib<i}
org. ci.yaml
menjalankan pengujian pada setiap PR dan main
comit, dan release.yaml
berjalan setiap kali Anda mengirim tag ke repositori.
Lihat komentar di repositori template aturan untuk mengetahui informasi selengkapnya.
Jika repositori Anda berada di bawah organisasi bazelbuild, Anda bisa meminta untuk menambahkan ke ci.bazel.build.
Dokumentasi
Lihat dokumentasi Stardoc untuk petunjuk tentang cara memberikan komentar pada aturan Anda sehingga dokumentasi dapat dibuat secara otomatis.
Folder/dokumen/template aturan
menunjukkan cara sederhana untuk memastikan konten Markdown di folder docs/
selalu terbaru
saat file Starlark diperbarui.
FAQ
Mengapa kita tidak dapat menambahkan aturan ke repositori GitHub Bazel utama?
Kami ingin memisahkan aturan dari rilis Bazel sebanyak mungkin. Lebih jelas yang memiliki aturan individual, mengurangi beban pengembang Bazel. Bagi pengguna kami, pemisahan memudahkan Anda mengubah, mengupgrade, mendowngrade, dan mengganti aturan. Berkontribusi pada aturan bisa jadi lebih ringan dibandingkan berkontribusi pada Bazel - bergantung pada aturan -, termasuk akses kirim penuh ke repositori GitHub ASL. Mendapatkan akses kirim ke Bazel sendiri jauh lebih rumit {i>checkout<i}.
Kelemahannya adalah proses penginstalan satu kali yang lebih rumit bagi pengguna kami:
mereka harus menambahkan dependensi pada kumpulan aturan Anda di file MODULE.bazel
-nya.
Dulu kami memiliki semua aturan
di repositori Bazel (di bawah
//tools/build_rules
atau //tools/build_defs
). Kita masih punya
beberapa aturan
di sana, tetapi kami sedang berupaya memindahkan aturan yang tersisa.