Kompatibilitas Aturan

Aturan Bazel Starlark dapat merusak kompatibilitas dengan rilis Bazel LTS dalam dua skenario berikut:

  1. Aturan ini merusak kompatibilitas dengan rilis LTS mendatang karena fitur yang diandalkannya dihapus dari Bazel di HEAD.
  2. Aturan ini merusak kompatibilitas dengan rilis LTS saat ini atau yang lebih lama karena fitur yang diandalkannya hanya tersedia di rilis Bazel LTS yang lebih baru.

Sementara itu, aturan itu sendiri juga dapat mengirimkan perubahan yang tidak kompatibel untuk penggunanya. Jika digabungkan dengan perubahan yang dapat menyebabkan gangguan di Bazel, mengupgrade versi aturan dan versi Bazel sering kali dapat menjadi sumber frustrasi bagi pengguna Bazel. Halaman ini membahas cara penulis aturan mempertahankan kompatibilitas aturan dengan Bazel untuk memudahkan pengguna mengupgrade Bazel dan aturan.

Proses migrasi yang dapat dikelola

Meskipun jelas tidak mungkin menjamin kompatibilitas antara setiap versi Bazel dan setiap versi aturan, tujuan kami adalah memastikan proses migrasi tetap dapat dikelola oleh pengguna Bazel. Proses migrasi yang dapat dikelola didefinisikan sebagai proses di mana pengguna tidak dipaksa untuk mengupgrade versi utama aturan dan versi utama Bazel secara bersamaan, sehingga pengguna dapat menangani perubahan yang tidak kompatibel dari satu sumber dalam satu waktu.

Misalnya, dengan matriks kompatibilitas berikut:

  • Migrasi dari rules_foo 1.x + Bazel 4.x ke rules_foo 2.x + Bazel 5.x tidak dianggap dapat dikelola, karena pengguna harus mengupgrade versi utama rules_foo dan Bazel secara bersamaan.
  • Migrasi dari rules_foo 2.x + Bazel 5.x ke rules_foo 3.x + Bazel 6.x dianggap dapat dikelola, karena pengguna dapat mengupgrade rules_foo dari 2.x ke 3.x terlebih dahulu tanpa mengubah versi utama Bazel, lalu mengupgrade Bazel dari 5.x ke 6.x.
rules_foo 1.x rules_foo 2.x rules_foo 3.x HEAD
Bazel 4.x
Bazel 5.x
Bazel 6.x
HEAD

❌: Tidak ada versi utama aturan yang kompatibel dengan rilis Bazel LTS.

✅: Setidaknya satu versi aturan kompatibel dengan versi terbaru rilis Bazel LTS.

Praktik terbaik

Sebagai penulis aturan Bazel, Anda dapat memastikan proses migrasi yang dapat dikelola bagi pengguna dengan mengikuti praktik terbaik berikut:

  1. Aturan harus mengikuti Pembuatan Versik Semantik: versi minor dari versi utama yang sama memiliki kompatibilitas mundur.
  2. Aturan di HEAD harus kompatibel dengan rilis Bazel LTS terbaru.
  3. Aturan di HEAD harus kompatibel dengan Bazel di HEAD. Untuk mencapainya, Anda dapat
  4. Versi utama aturan terbaru harus kompatibel dengan rilis Bazel LTS terbaru.
  5. Versi utama aturan baru harus kompatibel dengan rilis Bazel LTS terakhir yang didukung oleh versi utama aturan sebelumnya.

Mencapai 2. dan 3. adalah tugas terpenting karena memungkinkan pencapaian 4. dan 5. secara alami.

Untuk memudahkan mempertahankan kompatibilitas dengan Bazel di HEAD dan rilis Bazel LTS terbaru, penulis aturan dapat:

  • Meminta fitur yang kompatibel mundur untuk di-backport ke rilis LTS terbaru, lihat proses rilis untuk mengetahui detail selengkapnya.
  • Menggunakan bazel_features untuk melakukan deteksi fitur Bazel.

Secara umum, dengan pendekatan yang direkomendasikan, aturan harus dapat dimigrasikan untuk perubahan yang tidak kompatibel dengan Bazel dan menggunakan fitur Bazel baru di HEAD tanpa menghilangkan kompatibilitas dengan rilis Bazel LTS terbaru.