ความเข้ากันได้แบบย้อนหลัง

หน้านี้ให้ข้อมูลเกี่ยวกับวิธีจัดการความเข้ากันได้แบบย้อนหลัง รวมถึงการย้ายข้อมูลจากรุ่นหนึ่งไปยังอีกรุ่นหนึ่งและวิธีสื่อสาร การเปลี่ยนแปลงที่ไม่เข้ากัน

Bazel กำลังพัฒนา เวอร์ชันย่อยที่เผยแพร่เป็นส่วนหนึ่งของเวอร์ชันหลัก LTS จะมีความเข้ากันได้แบบย้อนหลังอย่างเต็มรูปแบบ LTS เวอร์ชันหลักใหม่ๆ อาจมีการเปลี่ยนแปลงที่เข้ากันไม่ได้ซึ่งต้องมีการย้ายข้อมูล ดูข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบการเผยแพร่ของ Bazel ได้ที่หน้ารูปแบบการเผยแพร่

สรุป

  1. ขอแนะนำให้ใช้ฟีเจอร์ --incompatible_* สำหรับการเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้อง
  2. สำหรับ--incompatible_*แฟล็กแต่ละรายการ ปัญหาใน GitHub จะอธิบายการเปลี่ยนแปลงลักษณะการทำงานและมีเป้าหมายเพื่อจัดทำสูตรการย้ายข้อมูล
  3. ขอแนะนำให้ย้อนกลับพอร์ตฟีเจอร์ที่ไม่รองรับไปยังรุ่น LTS ล่าสุด โดยไม่ต้องเปิดใช้ฟีเจอร์โดยค่าเริ่มต้น
  4. API และลักษณะการทำงานที่ได้รับการป้องกันโดยแฟล็ก --experimental_* อาจเปลี่ยนแปลงได้ทุกเมื่อ
  5. อย่าเรียกใช้บิลด์เวอร์ชันที่ใช้งานจริงด้วยแฟล็ก --experimental_* หรือ --incompatible_*

วิธีปฏิบัติตามนโยบายนี้

ฟังก์ชันการทำงานที่เสถียรคืออะไร

โดยทั่วไปแล้ว API หรือลักษณะการทำงานที่ไม่มี Flag --experimental_... จะถือว่าเป็นฟีเจอร์ที่เสถียรและรองรับใน Bazel

ซึ่งรวมถึงเนื้อหาต่อไปนี้

  • ภาษาและ API ของ Starlark
  • กฎที่มาพร้อมกับ Bazel
  • API ของ Bazel เช่น API การดำเนินการจากระยะไกลหรือโปรโตคอลเหตุการณ์การสร้าง
  • แฟล็กและความหมาย

การเปลี่ยนแปลงที่ไม่รองรับและสูตรการย้ายข้อมูล

สำหรับการเปลี่ยนแปลงที่ไม่เข้ากันทุกครั้งในรุ่นใหม่ ทีม Bazel มุ่งมั่นที่จะจัดหาสูตรการย้ายข้อมูลที่จะช่วยคุณอัปเดตโค้ด (ไฟล์ BUILD และ .bzl รวมถึงการใช้งาน Bazel ในสคริปต์ การใช้งาน Bazel API และอื่นๆ)

การเปลี่ยนแปลงที่เข้ากันไม่ได้ควรมี Flag --incompatible_* ที่เกี่ยวข้องและ ปัญหาที่เกี่ยวข้องใน GitHub

ขอแนะนำให้ย้อนกลับ Flag ที่เข้ากันไม่ได้และการเปลี่ยนแปลงที่เกี่ยวข้องไปยัง รุ่น LTS ล่าสุดโดยไม่ต้องเปิดใช้ Flag โดยค่าเริ่มต้น ซึ่งจะช่วยให้ผู้ใช้ย้ายข้อมูลสำหรับการเปลี่ยนแปลงที่ไม่เข้ากันได้ก่อนที่ LTS รุ่นถัดไปจะพร้อมใช้งาน

การสื่อสารการเปลี่ยนแปลงที่ไม่รองรับ

แหล่งข้อมูลหลักเกี่ยวกับการเปลี่ยนแปลงที่เข้ากันไม่ได้คือปัญหาใน GitHub ที่มีป้ายกำกับ"incompatible-change"

สำหรับการเปลี่ยนแปลงที่ไม่เข้ากันทุกครั้ง ปัญหาจะระบุสิ่งต่อไปนี้

  • ชื่อของฟีเจอร์ที่ควบคุมการเปลี่ยนแปลงที่ไม่รองรับ
  • คำอธิบายฟังก์ชันที่เปลี่ยนแปลง
  • สูตรการย้ายข้อมูล

เมื่อการเปลี่ยนแปลงที่เข้ากันไม่ได้พร้อมสำหรับการย้ายข้อมูลด้วย Bazel ที่ HEAD (ดังนั้นจึงพร้อมสำหรับการเผยแพร่ Bazel แบบต่อเนื่องครั้งถัดไปด้วย) คุณควรทำเครื่องหมายด้วย ป้ายกำกับ migration-ready ปัญหาการเปลี่ยนแปลงที่เข้ากันไม่ได้จะปิดเมื่อมีการเปลี่ยน Flag ที่เข้ากันไม่ได้ที่ HEAD