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

Báo cáo vấn đề Xem nguồn

Quy tắc Bazel Starlark có thể phá vỡ khả năng tương thích với bản phát hành Bazel LTS trong 2 trường hợp sau:

  1. Quy tắc này phá vỡ khả năng tương thích với các bản phát hành LTS trong tương lai vì một tính năng mà nền tảng phụ thuộc vào đã bị xoá khỏi Bazel tại HEAD.
  2. Quy tắc này phá vỡ khả năng tương thích với các bản phát hành LTS hiện tại hoặc cũ hơn vì một tính năng mà nó phụ thuộc chỉ có trong các bản phát hành LTS mới của Bazel.

Trong khi đó, quy tắc đó cũng có thể gửi các thay đổi không tương thích cho người dùng. Khi kết hợp với những thay đổi có thể gây lỗi trong Bazel, việc nâng cấp phiên bản quy tắc và phiên bản Bazel thường có thể là một nguyên nhân khiến người dùng Bazel thất vọng. Trang này trình bày cách các 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à 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 tính tương thích giữa mọi phiên bản của Bazel và mọi phiên bản của quy tắc, nhưng 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ý quy trình di chuyển. Quy trình di chuyển có thể quản lý được định nghĩa là một quy trình trong đó người dùng không buộc phải nâng cấp đồng thời phiên bản chính của quy tắc và phiên bản lớn của Bazel, 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 không được coi là dễ quản lý vì người dùng cần nâng cấp phiên bản lớn 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 được coi là có thể quản lý được vì người dùng trước tiên 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 chính, sau đó nâng cấp Bazel từ 5.x lên 6.x.
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 nào của phiên bản quy tắc chính tương thích với bản phát hành Bazel LTS.

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

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

Khi Bazel áp dụng các tác giả, bạn có thể đảm bảo quá trình di chuyển có thể quản lý được cho người dùng bằng cách làm theo các phương pháp hay nhất sau:

  1. Quy tắc này sẽ tuân theo Phiên bản ngữ nghĩa: các phiên bản nhỏ của cùng một phiên bản lớn sẽ 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 Bazel LTS 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ể
    • Thiết lập thử nghiệm CI của riêng bạn với Bazel tại HEAD
    • Thêm dự án của bạn vào Kiểm thử theo chiều xuôi của Blozel; nhóm Bazel sẽ gửi vấn đề cho dự án nếu việc phá vỡ các thay đổi ở Bazel ảnh hưởng đến dự án, đồng thời bạn phải tuân thủ chính sách dự án xuôi dòng của chúng tôi để kịp thời giải quyết vấn đề.
  4. Phiên bản chính mới nhất của quy tắc phải tương thích với bản phát hành BigQuery LTS mới nhất.
  5. Phiên bản chính mới của quy tắc phải tương thích với bản phát hành Bazel LTS mới nhất được phiên bản lớn trước đó của quy tắc hỗ trợ.

Đạt được 2. và 3. là nhiệm vụ quan trọng nhất vì nó cho phép đạt được 4. và 5. 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à bản phát hành BigQuery mới nhất, các tác giả có thể:

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

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