Khả năng tương thích quy tắc

Báo cáo vấn đề Xem nguồn Hằng đêm · 7,3 · 7,2 · 7.1 · 7 · 6,5

Các quy tắc của Bazel Starlark có thể phá vỡ khả năng tương thích với các bản phát hành LTS của Bazel trong hai tình huống sau:

  1. Quy tắc này làm hỏng khả năng tương thích với các bản phát hành LTS trong tương lai vì có một tính năng mà quy tắc đó phụ thuộc vào sẽ bị xoá khỏi Bazel tại HEAD.
  2. Quy tắc này làm hỏng khả năng tương thích với các bản phát hành LTS (hỗ trợ dài hạn) hiện tại hoặc cũ hơn vì một tính năng mà công cụ này phụ thuộc vào chỉ có trong các bản phát hành Bazel LTS mới hơn.

Trong khi đó, chính quy tắc này có thể gửi các thay đổi không tương thích cho người dùng dưới dạng tốt. Khi kết hợp với những thay đổi có thể gây lỗi trong Bazel, nâng cấp phiên bản quy tắc và phiên bản Bazel thường có thể là nguyên nhân gây thất vọng cho người dùng Bazel. Chiến dịch này Trang trình bày cách tác giả quy tắc nên duy trì khả năng tương thích của quy tắc với Bazel để giúp người dùng nâng cấp Bazel và các quy tắc dễ dàng hơn.

Quy trình di chuyển có thể quản lý

Mặc dù rõ ràng là không thể đảm bảo khả năng tương thích giữa của Bazel và mọi phiên bản của quy tắc, mục tiêu của chúng tôi là đảm bảo rằng người dùng Bazel vẫn có thể quản lý quá trình di chuyển. Quá trình di chuyển có thể quản lý được định nghĩa là một quá trình trong đó người dùng không bắt buộc phải nâng cấp phiên bản lớn của Rules và phiên bản lớn của Bazel cùng một lúc, do đó cho phép người dùng xử lý các thay đổi không tương thích từ một nguồn tại một thời điểm.

Ví dụ: với ma trận tương thích sau:

  • Việc di chuyển từ rules_foo 1.x + Bazel 4.x sang rules_foo 2.x + Bazel 5.x thì không được áp dụng được coi là dễ quản lý vì người dùng cần nâng cấp phiên bản chính của rules_foo và Bazel cùng một lúc.
  • Việc di chuyển từ rules_foo 2.x + Bazel 5.x sang rules_foo 3.x + Bazel 6.x là được coi là dễ quản lý vì trước tiên người dùng có thể nâng cấp rules_foo từ 2.x lên 3.x mà không cần thay đổi phiên bản Bazel lớn, sau đó nâng cấp Bazel từ 5.x lên 6 lần
rules_foo 1.x Rules_foo 2.x Rules_foo 3.x ĐẦU
Bazel 4.x
Bazel 5.x
Bazel 6.x
ĐẦU

❌: Không có phiên bản quy tắc chính nào tương thích với Bazel LTS bản phát hành.

✅: Có ít nhất một phiên bản của quy tắc tương thích với phiên bản mới nhất của quy tắc Bản phát hành LTS của Bazel.

Các phương pháp hay nhất

Như quy tắc của Bazel, bạn có thể đảm bảo quá trình di chuyển cho người dùng bằng cách làm theo các phương pháp hay nhất sau đây:

  1. Quy tắc đó phải tuân thủ Ngữ nghĩa Tạo phiên bản: các phiên bản nhỏ của cùng một phiên bản phiên bản lớn có khả năng tương thích ngược.
  2. Quy tắc tại HEAD phải tương thích với bản phát hành LTS của Bazel mới nhất.
  3. Quy tắc tại HEAD phải tương thích với Bazel tại HEAD. Để đạt được điều này, bạn có thể
  4. Phiên bản lớn mới nhất của quy tắc phải tương thích với phiên bản Bản phát hành LTS của Bazel.
  5. Phiên bản lớn mới của quy tắc phải tương thích với LTS Bazel gần đây nhất bản phát hành được hỗ trợ bởi phiên bản lớn trước đó của quy tắc.

Đạt được 2. và 3. là nhiệm vụ quan trọng nhất vì nó cho phép đạt được 4. và 5 điểm. một cách tự nhiên.

Để dễ dàng duy trì khả năng tương thích với cả Bazel ở HEAD và phiên bản mới nhất Bản phát hành LTS của Bazel, tác giả quy tắc có thể:

  • Yêu cầu các tính năng có khả năng tương thích ngược để chuyển về phiên bản LTS mới nhất bản phát hành, hãy xem quy trình phát hành để biết thêm chi tiết.
  • Sử dụng bazel_features là phát hiện tính năng Bazel.

Nhìn chung, với phương pháp tiếp cận được đề xuất, các quy tắc có thể di chuyển cho Bazel thay đổi không tương thích và sử dụng các tính năng mới của Bazel tại HEAD mà không giảm khả năng tương thích với bản phát hành Bazel LTS mới nhất.