ตามที่ประกาศไว้ใน บล็อกโพสต์ต้นฉบับ Bazel เวอร์ชัน 4.0 ขึ้นไปรองรับแทร็กการเผยแพร่ 2 รายการ ได้แก่ การเผยแพร่แบบต่อเนื่อง และการเผยแพร่แบบการสนับสนุนระยะยาว (LTS) หน้านี้ครอบคลุมข้อมูลล่าสุดเกี่ยวกับโมเดลการเผยแพร่ของ Bazel
การกำหนดเวอร์ชันที่เผยแพร่
Bazel ใช้รูปแบบการกำหนดเวอร์ชันเชิงความหมาย major.minor.patch Semantic Versioning
- การเผยแพร่เวอร์ชันหลัก มีฟีเจอร์ที่เข้ากันไม่ได้กับเวอร์ชันก่อนหน้า Bazel เวอร์ชันหลักแต่ละเวอร์ชันเป็นการเผยแพร่แบบ LTS
- การเผยแพร่เวอร์ชันย่อย มีการแก้ไขข้อบกพร่องที่เข้ากันได้กับเวอร์ชันก่อนหน้าและฟีเจอร์ที่ย้ายจาก Branch หลัก
- การเผยแพร่เวอร์ชันแพตช์ มีการแก้ไขข้อบกพร่องที่สำคัญ
นอกจากนี้ ระบบจะระบุเวอร์ชันก่อนเผยแพร่โดยการต่อท้ายเครื่องหมายยัติภังค์และคำต่อท้ายวันที่กับหมายเลขเวอร์ชันหลักถัดไป
ตัวอย่างเช่น การเผยแพร่เวอร์ชันใหม่ของแต่ละประเภทจะส่งผลให้มีหมายเลขเวอร์ชันดังนี้
- หลัก: 6.0.0
- ย่อย: 6.1.0
- แพตช์: 6.1.2
- ก่อนเผยแพร่: 7.0.0-pre.20230502.1
ขั้นตอนการสนับสนุน
Bazel เวอร์ชันหลักแต่ละเวอร์ชันมีขั้นตอนการสนับสนุน 4 ขั้นตอน ได้แก่
- ต่อเนื่อง: เวอร์ชันหลักนี้ยังอยู่ในช่วงก่อนเผยแพร่ ทีม Bazel จะเผยแพร่เวอร์ชันต่อเนื่องจาก HEAD
- ใช้งานอยู่: เวอร์ชันหลักนี้คือเวอร์ชัน LTS ที่ใช้งานอยู่ในปัจจุบัน ทีม Bazel จะย้ายฟีเจอร์ที่สำคัญและการแก้ไขข้อบกพร่องไปยังเวอร์ชันย่อย
- การบำรุงรักษา: เวอร์ชันหลักนี้คือเวอร์ชัน LTS เก่าที่อยู่ในโหมดการบำรุงรักษา ทีม Bazel สัญญาว่าจะย้ายเฉพาะการแก้ไขข้อบกพร่องที่สำคัญสำหรับปัญหาด้านความปลอดภัยและปัญหาความเข้ากันได้ของระบบปฏิบัติการไปยังเวอร์ชัน LTS นี้
- เลิกใช้งานแล้ว: ทีม Bazel ไม่ได้ให้การสนับสนุนเวอร์ชันหลัก นี้อีกต่อไป ผู้ใช้ทุกคนควรย้ายข้อมูลไปยัง Bazel เวอร์ชัน LTS ที่ใหม่กว่า
ความถี่ในการเผยแพร่
Bazel เผยแพร่เวอร์ชันใหม่เป็นประจำสำหรับแทร็กการเผยแพร่ 2 รายการ
การเผยแพร่แบบต่อเนื่อง
- การเผยแพร่แบบต่อเนื่องจะประสานงานกับการเผยแพร่ Google Blaze และเผยแพร่จาก HEAD ทุกๆ 2 สัปดาห์โดยประมาณ ซึ่งเป็นการแสดงตัวอย่างการเผยแพร่ Bazel LTS ครั้งถัดไป
- การเผยแพร่แบบต่อเนื่องอาจมีการเปลี่ยนแปลงที่ไม่เข้ากัน เราขอแนะนำให้ใช้แฟล็กที่ไม่เข้ากันสำหรับ การเปลี่ยนแปลงที่สำคัญซึ่งทำให้เกิดการหยุดทำงาน การเปิดตัวการเปลี่ยนแปลงที่ไม่เข้ากัน ควรเป็นไปตามนโยบายความเข้ากันได้กับเวอร์ชันก่อนหน้า
การเผยแพร่แบบ LTS
- การเผยแพร่เวอร์ชันหลัก: คาดว่าจะมีการตัดเวอร์ชัน LTS ใหม่จาก HEAD ทุกๆ 12 เดือน โดยประมาณ เมื่อมีการเผยแพร่ LTS เวอร์ชันใหม่แล้ว เวอร์ชันดังกล่าวจะเข้าสู่ขั้นตอนใช้งานอยู่ทันที และเวอร์ชัน LTS ก่อนหน้าจะเข้าสู่ขั้นตอนการบำรุงรักษา
- การเผยแพร่เวอร์ชันย่อย: คาดว่าจะมีการเผยแพร่เวอร์ชันย่อยใหม่ในแทร็ก LTS ที่ใช้งานอยู่ทุกๆ 2 เดือน
- การเผยแพร่เวอร์ชันแพตช์: คาดว่าจะมีการเผยแพร่เวอร์ชันแพตช์ใหม่สำหรับการเผยแพร่ LTS ในขั้นตอนใช้งานอยู่และ การบำรุงรักษาตามความต้องการสำหรับการแก้ไขข้อบกพร่องที่สำคัญ
- การเผยแพร่ Bazel LTS จะเข้าสู่ขั้นตอนเลิกใช้งานแล้วหลังจากอยู่ในขั้นตอนการบำรุงรักษาเป็นเวลา 2 ปี
สำหรับการเผยแพร่ที่วางแผนไว้ โปรดดูปัญหาการเผยแพร่ใน GitHub
เมทริกซ์การสนับสนุน
| การเผยแพร่แบบ LTS | ขั้นตอนการสนับสนุน | เวอร์ชันล่าสุด | สิ้นสุดการสนับสนุน |
|---|---|---|---|
| Bazel 7 | ต่อเนื่อง | ดูหน้าการเผยแพร่ GitHub | ไม่มี |
| Bazel 6 | ใช้งานอยู่ | 6.4.0 | ธ.ค. 2025 |
| Bazel 5 | การบำรุงรักษา | 5.4.1 | ม.ค. 2025 |
| Bazel 4 | การบำรุงรักษา | 4.2.4 | ม.ค. 2024 |
คุณดูการเผยแพร่ Bazel ทั้งหมดได้ในหน้า การเผยแพร่ใน GitHub
ขั้นตอนและนโยบายการเผยแพร่
สำหรับเวอร์ชันต่อเนื่อง กระบวนการจะตรงไปตรงมา โดยเราจะสร้างเวอร์ชันใหม่ทุกๆ 2 สัปดาห์โดยประมาณ ซึ่งสอดคล้องกับบรรทัดฐานเดียวกันกับการเผยแพร่ Google Blaze ภายใน เนื่องจากกำหนดการเผยแพร่อย่างรวดเร็ว เราจึงไม่ย้ายการเปลี่ยนแปลงใดๆ ไปยังเวอร์ชันต่อเนื่อง
สำหรับการเผยแพร่แบบ LTS เราจะปฏิบัติตามขั้นตอนและนโยบายด้านล่าง
- กำหนดคอมมิตบรรทัดฐานสำหรับการเผยแพร่
- สำหรับการเผยแพร่ LTS เวอร์ชันหลักใหม่ คอมมิตบรรทัดฐานคือ HEAD ของ Branch หลัก
- สำหรับการเผยแพร่เวอร์ชันย่อยหรือแพตช์ คอมมิตบรรทัดฐานคือ HEAD ของเวอร์ชันล่าสุดปัจจุบันของการเผยแพร่ LTS เดียวกัน
- สร้าง Branch การเผยแพร่ในชื่อ
release-<version>จากคอมมิตบรรทัดฐาน - ย้ายการเปลี่ยนแปลงผ่าน PR ไปยัง Branch การเผยแพร่
- ชุมชนสามารถแนะนำคอมมิตบางรายการที่จะย้ายได้โดยการตอบกลับ "
@bazel-io flag" ในปัญหาหรือ PR ที่เกี่ยวข้องใน GitHub เพื่อทำเครื่องหมายคอมมิตเหล่านั้นเป็นตัวบล็อกการเผยแพร่ที่อาจเกิดขึ้น ทีม Bazel จะจัดลำดับความสำคัญและตัดสินใจว่าจะย้ายคอมมิตหรือไม่ - เฉพาะคอมมิตที่เข้ากันได้กับเวอร์ชันก่อนหน้าใน Branch หลักเท่านั้นที่จะย้ายได้ และเราอนุญาตให้มีการเปลี่ยนแปลงเล็กน้อยเพิ่มเติมเพื่อแก้ไขความขัดแย้งในการผสาน
- ชุมชนสามารถแนะนำคอมมิตบางรายการที่จะย้ายได้โดยการตอบกลับ "
- ระบุตัวบล็อกการเผยแพร่และแก้ไขปัญหาที่พบใน Branch การเผยแพร่
- เราจะทดสอบ Branch การเผยแพร่ด้วยชุดการทดสอบเดียวกันใน postsubmit และ ไปป์ไลน์การทดสอบปลายทาง ใน Bazel CI ทีม Bazel จะตรวจสอบผลการทดสอบของ Branch การเผยแพร่และแก้ไขการถดถอยที่พบ
- สร้างรุ่นที่อาจได้รับการเผยแพร่ใหม่จาก Branch การเผยแพร่เมื่อแก้ไขตัวบล็อกการเผยแพร่ที่ทราบทั้งหมดแล้ว
- เราจะประกาศรุ่นที่อาจได้รับการเผยแพร่ใน bazel-discuss, และทีม Bazel จะตรวจสอบรายงานข้อบกพร่องของชุมชนสำหรับรุ่นดังกล่าว
- หากพบตัวบล็อกการเผยแพร่ใหม่ ให้กลับไปที่ขั้นตอนสุดท้ายและสร้างรุ่นที่อาจได้รับการเผยแพร่ใหม่หลังจากแก้ไขปัญหาทั้งหมดแล้ว
- เราไม่อนุญาตให้เพิ่มฟีเจอร์ใหม่ลงใน Branch การเผยแพร่หลังจากสร้างรุ่นที่อาจได้รับการเผยแพร่รุ่นแรกแล้ว
- เผยแพร่รุ่นที่อาจได้รับการเผยแพร่เป็นเวอร์ชันอย่างเป็นทางการหากไม่พบตัวบล็อกการเผยแพร่เพิ่มเติม
- สำหรับการเผยแพร่เวอร์ชันแพตช์ ให้เผยแพร่เวอร์ชันอย่างน้อย 2 วันทำการหลังจากเผยแพร่รุ่นที่อาจได้รับการเผยแพร่ล่าสุด
- สำหรับการเผยแพร่เวอร์ชันหลักและเวอร์ชันย่อย ให้เผยแพร่เวอร์ชัน 2 วันทำการหลังจากเผยแพร่รุ่นที่อาจได้รับการเผยแพร่ล่าสุด แต่ไม่เร็วกว่า 1 สัปดาห์หลังจากเผยแพร่รุ่นที่อาจได้รับการเผยแพร่รุ่นแรก
- เราจะเผยแพร่เวอร์ชันเฉพาะในวันที่วันถัดไปเป็นวันทำการ
- เราจะประกาศการเผยแพร่ใน bazel-discuss, และทีม Bazel จะตรวจสอบและแก้ไขรายงานข้อบกพร่องของชุมชนสำหรับการเผยแพร่เวอร์ชันใหม่
รายงานการถดถอย
หากผู้ใช้พบการถดถอยในการเผยแพร่ Bazel เวอร์ชันใหม่ รุ่นที่อาจได้รับการเผยแพร่ หรือแม้แต่ Bazel ที่ HEAD โปรดแจ้งข้อบกพร่องใน GitHub คุณสามารถใช้ Bazelisk เพื่อแบ่งส่วนคอมมิตที่เป็นสาเหตุและรวมข้อมูลนี้ไว้ในรายงานข้อบกพร่อง
ตัวอย่างเช่น หากการสร้างสำเร็จด้วย Bazel 6.1.0 แต่ล้มเหลวด้วยรุ่นที่อาจได้รับการเผยแพร่รุ่นที่ 2 ของ 6.2.0 คุณสามารถแบ่งส่วนผ่านคำสั่งต่อไปนี้
bazelisk --bisect=6.1.0..release-6.2.0rc2 build //foo:bar
คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อม BAZELISK_SHUTDOWN หรือ BAZELISK_CLEAN เพื่อเรียกใช้คำสั่ง Bazel ที่เกี่ยวข้องเพื่อรีเซ็ตสถานะการสร้างหากจำเป็นต้องทำซ้ำปัญหา ดูรายละเอียดเพิ่มเติมได้ในเอกสารประกอบเกี่ยวกับฟีเจอร์การแบ่งส่วนของ Bazelisk
อย่าลืมอัปเกรด Bazelisk เป็นเวอร์ชันล่าสุดเพื่อใช้ฟีเจอร์การแบ่งส่วน
ความเข้ากันได้ของกฎ
หากคุณเป็นผู้เขียนกฎและต้องการรักษาความเข้ากันได้กับ Bazel เวอร์ชันต่างๆ โปรดดูหน้าความเข้ากันได้ของ กฎ