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