Release and CI
นโยบายการเผยแพร่
OpenClaw เปิดให้ผู้ใช้ใช้งานช่องทางอัปเดตสามช่องทางในปัจจุบัน:
- stable: ช่องทางรุ่นที่ได้รับการโปรโมตซึ่งมีอยู่เดิม และยังคงชี้ผ่าน npm
latestจนกว่าหมุดหมาย CLI/ช่องทางแบบแยกส่วนจะพร้อมใช้งาน - beta: แท็กรุ่นก่อนเผยแพร่ที่เผยแพร่ไปยัง npm
beta - dev: จุดล่าสุดที่เคลื่อนไหวของ
main
นอกจากนี้ ผู้ดำเนินการเผยแพร่สามารถเผยแพร่แพ็กเกจหลักของเดือนล่าสุดที่สิ้นสุดแล้ว
ไปยัง npm extended-stable โดยเริ่มที่แพตช์ 33 ส่วนสายรุ่น final ปกติ
ของเดือนปัจจุบันยังคงอยู่บน npm latest; การแยกการเผยแพร่ในฝั่งผู้ดำเนินการนี้
ไม่ได้เปลี่ยนการเลือกช่องทางอัปเดตของ CLI ด้วยตัวมันเอง
บิลด์ alpha ของ Tideclaw เป็นสายรุ่นก่อนเผยแพร่ภายในที่แยกต่างหาก (npm dist-tag alpha) ซึ่งอธิบายไว้ใน อินพุตเวิร์กโฟลว์ NPM และ กล่องทดสอบรุ่นเผยแพร่
การตั้งชื่อเวอร์ชัน
- เวอร์ชันรุ่น extended-stable รายเดือนบน npm:
YYYY.M.PATCHพร้อมPATCH >= 33, git tagvYYYY.M.PATCH - เวอร์ชันรุ่น final รายวัน/ปกติ:
YYYY.M.PATCHพร้อมPATCH < 33, git tagvYYYY.M.PATCH - เวอร์ชันรุ่นแก้ไขสำรองแบบปกติ:
YYYY.M.PATCH-N, git tagvYYYY.M.PATCH-N - เวอร์ชันรุ่นก่อนเผยแพร่ beta:
YYYY.M.PATCH-beta.N, git tagvYYYY.M.PATCH-beta.N - เวอร์ชันรุ่นก่อนเผยแพร่ alpha:
YYYY.M.PATCH-alpha.N, git tagvYYYY.M.PATCH-alpha.N - ห้ามเติมเลขศูนย์นำหน้าเดือนหรือแพตช์
PATCHคือหมายเลขสายการเผยแพร่รายเดือนแบบลำดับต่อเนื่อง ไม่ใช่วันตามปฏิทิน รุ่น final ปกติและรุ่น beta จะเลื่อนสายปัจจุบัน ส่วนแท็กเฉพาะ alpha จะไม่ใช้หรือเลื่อนหมายเลขแพตช์ของ beta/รุ่นปกติ ดังนั้นให้ข้ามแท็กเดิมที่มีเฉพาะ alpha และมีหมายเลขแพตช์สูงกว่าเมื่อเลือกสาย beta หรือสายปกติ- บิลด์ alpha/nightly ใช้สายแพตช์ถัดไปที่ยังไม่เผยแพร่ และเพิ่มเฉพาะ
alpha.Nสำหรับบิลด์ซ้ำ เมื่อแพตช์นั้นมีรุ่น beta แล้ว บิลด์ alpha ใหม่จะย้ายไปยังแพตช์ถัดไป - เวอร์ชัน npm เปลี่ยนแปลงไม่ได้: ห้ามลบ เผยแพร่ซ้ำ หรือนำแท็กที่เผยแพร่แล้วกลับมาใช้ใหม่ ให้สร้างหมายเลขรุ่นก่อนเผยแพร่ถัดไปหรือแพตช์รายเดือนถัดไปแทน
latestยังคงติดตามสาย npm ปกติ/รายวันในปัจจุบัน;betaคือเป้าหมายการติดตั้ง beta ปัจจุบันextended-stableหมายถึงแพ็กเกจ npm ของเดือนล่าสุดที่รองรับ โดยเริ่มที่แพตช์33; แพตช์34และหลังจากนั้นคือรุ่นบำรุงรักษาบนสายรายเดือนนั้น- รุ่น final ปกติและรุ่นแก้ไขปกติจะเผยแพร่ไปยัง npm
betaโดยค่าเริ่มต้น; ผู้ดำเนินการเผยแพร่สามารถระบุเป้าหมายlatestอย่างชัดเจน หรือโปรโมตบิลด์ beta ที่ผ่านการตรวจสอบแล้วในภายหลัง - เส้นทาง extended-stable รายเดือนโดยเฉพาะจะเผยแพร่แพ็กเกจหลักบน npm และ Plugin อย่างเป็นทางการทุกรายการที่เผยแพร่บน npm ได้ด้วยเวอร์ชันเดียวกันทุกประการ เส้นทางนี้จะไม่เผยแพร่ Plugin ไปยัง ClawHub หรือเผยแพร่อาร์ติแฟกต์ macOS หรือ Windows, GitHub Release, dist-tag ของที่เก็บส่วนตัว, อิมเมจ Docker, อาร์ติแฟกต์มือถือ หรือไฟล์ดาวน์โหลดบนเว็บไซต์
- รุ่น final ปกติทุกรุ่นจะจัดส่งแพ็กเกจ npm, แอป macOS, Android APK แบบสแตนด์อโลนที่ลงนามแล้ว และตัวติดตั้ง Windows Hub ที่ลงนามแล้วพร้อมกัน โดยปกติรุ่น beta จะตรวจสอบและเผยแพร่เส้นทาง npm/แพ็กเกจก่อน ส่วนการสร้าง/ลงนาม/รับรองเอกสาร/โปรโมตแอปเนทีฟจะสงวนไว้สำหรับรุ่น final ปกติ เว้นแต่จะมีการร้องขออย่างชัดเจน
รอบการเผยแพร่
- การเผยแพร่จะเริ่มจาก beta ก่อน; stable จะตามมาหลังจากตรวจสอบ beta ล่าสุดแล้วเท่านั้น
- โดยปกติผู้ดูแลจะสร้างรุ่นเผยแพร่จากสาขา
release/YYYY.M.PATCHที่สร้างจากmainปัจจุบัน เพื่อให้การตรวจสอบและแก้ไขรุ่นเผยแพร่ไม่ขัดขวางการพัฒนาใหม่บนmain - หากมีการพุชหรือเผยแพร่แท็ก beta แล้วและจำเป็นต้องแก้ไข ผู้ดูแลจะสร้างแท็ก
-beta.Nถัดไป แทนการลบหรือสร้างแท็กเดิมใหม่ - ขั้นตอนการเผยแพร่ การอนุมัติ ข้อมูลประจำตัว และหมายเหตุการกู้คืนโดยละเอียดมีไว้สำหรับผู้ดูแลเท่านั้น
การเผยแพร่ extended-stable รายเดือนเฉพาะ npm
นี่เป็นข้อยกเว้นเฉพาะจากขั้นตอนการเผยแพร่ปกติด้านล่าง สำหรับเดือน
ที่สิ้นสุดแล้ว YYYY.M ให้สร้าง extended-stable/YYYY.M.33; เผยแพร่
vYYYY.M.33 และแพตช์บำรุงรักษาหลังจากนั้นจากสาขาเดียวกัน แท็ก
รุ่นเผยแพร่ ปลายสาขา เช็กเอาต์ เวอร์ชันแพ็กเกจ การตรวจสอบล่วงหน้าของ npm และการรัน Full Release
Validation ต้องระบุคอมมิตเดียวกันทั้งหมด main ที่ได้รับการป้องกันต้อง
มีเวอร์ชัน final ของเดือนตามปฏิทินที่ใหม่กว่าอย่างเคร่งครัดและต่ำกว่าแพตช์
33 อยู่แล้ว; แพตช์บำรุงรักษายังคงมีสิทธิ์หลังจาก main เลื่อนไปมากกว่าหนึ่ง
เดือน
บนสาขา extended-stable ที่ตรงกันทุกประการ ให้เพิ่มเวอร์ชันแพ็กเกจรากเป็น YYYY.M.P, รัน
pnpm release:prep และตรวจสอบว่าแพ็กเกจส่วนขยายที่เผยแพร่ได้ทุกรายการใช้
เวอร์ชันเดียวกัน คอมมิตและพุชการเปลี่ยนแปลงที่สร้างขึ้นทั้งหมด สร้างและพุช
แท็ก vYYYY.M.P ที่เปลี่ยนแปลงไม่ได้ ณ คอมมิตนั้น และบันทึก SHA แบบเต็มที่ได้
เวิร์กโฟลว์จะใช้โครงสร้างที่เตรียมไว้นี้; เวิร์กโฟลว์จะไม่เพิ่มหรือซิงโครไนซ์
เวอร์ชันให้
รันการตรวจสอบล่วงหน้าของ npm และ Full Release Validation จากปลายสาขา ที่เตรียมไว้ตรงกันทุกประการ จากนั้นบันทึก ID ของการรันทั้งสองรายการและครั้งที่รัน Full Release Validation ซึ่งสำเร็จ:
gh workflow run openclaw-npm-release.yml \ --ref extended-stable/YYYY.M.33 \ -f tag=vYYYY.M.P \ -f preflight_only=true \ -f npm_dist_tag=extended-stable gh workflow run full-release-validation.yml \ --ref extended-stable/YYYY.M.33 \ -f ref=extended-stable/YYYY.M.33 \ -f release_profile=stablerelease_profile=stable คือโปรไฟล์ความลึกในการตรวจสอบที่มีอยู่เดิม; โปรไฟล์นี้
แยกจาก dist-tag extended-stable ของ npm และตั้งใจให้
คงเดิม
หลังจากการรันทั้งสองสำเร็จ ให้เผยแพร่ Plugin อย่างเป็นทางการที่เผยแพร่บน npm ได้ทุกรายการจาก
ปลายสาขาเดียวกันทุกประการ แพตช์ P ต้องเป็น 33 หรือสูงกว่า ส่ง SHA ของรุ่นเผยแพร่
แบบเต็มเป็น ref รอให้เมทริกซ์ทั้งหมดและการอ่านกลับจากรีจิสทรีเสร็จสมบูรณ์ จากนั้นบันทึก
ID การรัน Plugin NPM Release ที่สำเร็จ:
RELEASE_SHA="$(git rev-parse HEAD)"gh workflow run plugin-npm-release.yml \ --ref extended-stable/YYYY.M.33 \ -f publish_scope=all-publishable \ -f ref="$RELEASE_SHA" \ -f npm_dist_tag=extended-stableเวิร์กโฟลว์ใช้รายการแพ็กเกจ all-publishable ที่เตรียมไว้ตามปกติ
รวมถึงแพ็กเกจที่ซอร์สไม่ได้เปลี่ยนแปลง เวิร์กโฟลว์จะตรวจสอบแพ็กเกจทุกแพ็กเกจ
และแท็ก extended-stable ของ Plugin ทุกรายการให้ตรงกันทุกประการก่อนสำเร็จ หากการรันบางส่วน
ล้มเหลว ให้รันคำสั่งเดิมอีกครั้ง: แพ็กเกจที่เผยแพร่แล้วจะถูกนำกลับมาใช้ แท็ก Plugin
ที่ขาดหายหรือล้าสมัยจะได้รับการปรับให้สอดคล้องภายใต้สภาพแวดล้อมการเผยแพร่ npm และ
การอ่านกลับขั้นสุดท้ายยังคงครอบคลุมชุดแพ็กเกจทั้งหมด
หลังจากเวิร์กโฟลว์ Plugin สำเร็จและสภาพแวดล้อมการเผยแพร่ npm พร้อมแล้ว
ให้เผยแพร่ tarball หลักจากการตรวจสอบล่วงหน้าที่ตรงกันทุกประการ การเผยแพร่ส่วนหลักจะตรวจสอบว่า
การรัน Plugin ที่อ้างอิงมีสถานะ completed/success บนสาขามาตรฐานเดียวกันและ
มี SHA ของซอร์สตรงกันทุกประการ:
gh workflow run openclaw-npm-release.yml \ --ref extended-stable/YYYY.M.33 \ -f tag=vYYYY.M.P \ -f preflight_only=false \ -f npm_dist_tag=extended-stable \ -f preflight_run_id=<npm-preflight-run-id> \ -f full_release_validation_run_id=<full-validation-run-id> \ -f full_release_validation_run_attempt=<full-validation-run-attempt> \ -f plugin_npm_run_id=<plugin-npm-run-id>สำหรับฟอร์กหรือการซ้อมในสภาพแวดล้อมที่ไม่ใช่ระบบจริงซึ่งตั้งใจว่าไม่สามารถปฏิบัติตาม
นโยบายเดือนของ .33 หรือ main ที่ได้รับการป้องกันได้ ให้เพิ่ม
-f bypass_extended_stable_guard=true ทั้งในการส่งคำสั่งตรวจสอบล่วงหน้าและเผยแพร่
ของ npm ค่าเริ่มต้นคือ false การข้ามจะได้รับการยอมรับเฉพาะเมื่อใช้
npm_dist_tag=extended-stable และจะถูกบันทึกในสรุปเวิร์กโฟลว์ การข้ามนี้
ไม่ข้าม ref เวิร์กโฟลว์ extended-stable/YYYY.M.33 มาตรฐาน
ความเท่ากันของปลายสาขา/แท็ก/เช็กเอาต์ ไวยากรณ์แท็ก final ความเท่ากันของเวอร์ชัน
แพ็กเกจ/แท็ก อัตลักษณ์ของการรันและแมนิเฟสต์ที่อ้างอิง ที่มาของ tarball
การอนุมัติสภาพแวดล้อม การอ่านกลับจากรีจิสทรี หรือหลักฐานการซ่อมแซมตัวเลือก
เวิร์กโฟลว์เผยแพร่จะตรวจสอบอัตลักษณ์ของการตรวจสอบล่วงหน้า การตรวจสอบ และการรัน Plugin ที่อ้างอิง ไดเจสต์ของ tarball ที่เตรียมไว้ และตัวเลือกรีจิสทรีของส่วนหลัก ให้ยืนยันผลลัพธ์โดยอิสระหลังจากเวิร์กโฟลว์สำเร็จ:
npm view [email protected] version --userconfig "$(mktemp)"npm view openclaw@extended-stable version --userconfig "$(mktemp)"คำสั่งทั้งสองต้องคืนค่า YYYY.M.P หากการเผยแพร่สำเร็จแต่การอ่านกลับตัวเลือก
ล้มเหลว ห้ามเผยแพร่เวอร์ชันแพ็กเกจที่เปลี่ยนแปลงไม่ได้ซ้ำ ให้ใช้
คำสั่งซ่อมแซม npm dist-tag add [email protected] extended-stable เพียงคำสั่งเดียว
ที่พิมพ์ในสรุปแบบรันเสมอของเวิร์กโฟลว์ที่ล้มเหลว จากนั้นทำการอ่านกลับอิสระทั้งสองรายการ
อีกครั้ง การย้อนกลับไปยังตัวเลือกก่อนหน้าเป็นการตัดสินใจของผู้ดำเนินการที่แยกต่างหาก
ไม่ใช่เส้นทางซ่อมแซมการอ่านกลับ
เอกสารการสนับสนุนสาธารณะระบุ Slack, Discord และ Codex เป็น พื้นผิว Plugin แบบ extended-stable ที่ครอบคลุมในช่วงแรก รายการดังกล่าวเป็นคำประกาศการสนับสนุน ไม่ใช่ รายการอนุญาตของโค้ดการเผยแพร่: Plugin อย่างเป็นทางการที่เผยแพร่บน npm ได้ทุกรายการจะใช้ เส้นทางการเผยแพร่ด้วยเวอร์ชันเดียวกันทุกประการ
รายการตรวจสอบปกติด้านล่างยังคงครอบคลุม beta, latest, GitHub Release,
Plugin, macOS, Windows และการเผยแพร่แพลตฟอร์มอื่น ๆ ห้ามรัน
ขั้นตอนเหล่านั้นสำหรับเส้นทาง extended-stable เฉพาะ npm นี้
รายการตรวจสอบสำหรับผู้ดำเนินการเผยแพร่แบบปกติ
รายการตรวจสอบนี้แสดงรูปแบบสาธารณะของขั้นตอนการเผยแพร่ ข้อมูลประจำตัวส่วนตัว การลงนาม การรับรองเอกสาร การกู้คืน dist-tag และรายละเอียดการย้อนกลับฉุกเฉินจะอยู่ในคู่มือการเผยแพร่สำหรับผู้ดูแลเท่านั้น
-
เริ่มจาก
mainปัจจุบัน: ดึงข้อมูลล่าสุด ยืนยันว่าคอมมิตเป้าหมายถูกพุชแล้ว และยืนยันว่าไปป์ไลน์ CI ของmainผ่านมากพอที่จะสร้างสาขาได้ -
สร้าง
release/YYYY.M.PATCHจากคอมมิตนั้น การแบ็กพอร์ตเป็นทางเลือก; ใช้เฉพาะชุดที่ผู้ดำเนินการเลือก เพิ่มเวอร์ชันในทุกตำแหน่งที่กำหนด รันpnpm release:prepดำเนินการแก้ไขรุ่นเผยแพร่และฟอร์เวิร์ดพอร์ตที่จำเป็นให้เสร็จสิ้น และตรวจสอบsrc/plugins/compat/registry.tsรวมถึงsrc/commands/doctor/shared/deprecation-compat.ts -
ตรึงคอมมิตก่อนบันทึกการเปลี่ยนแปลงที่ผลิตภัณฑ์เสร็จสมบูรณ์เป็น Code SHA รันการตรวจสอบล่วงหน้าของซอร์สแบบกำหนดผลลัพธ์แน่นอน จากนั้นใช้
node scripts/full-release-validation-at-sha.mjs --sha <code-sha> --target-ref release/YYYY.M.PATCHขั้นตอนนี้จะตรึงเครื่องมือเวิร์กโฟลว์ที่เชื่อถือได้ ขณะที่เมทริกซ์ Vitest, Docker, QA, แพ็กเกจ และประสิทธิภาพฉบับเต็มกำหนดเป้าหมายไปยัง Code SHA ที่ตรงกันทุกประการ -
จำแนกความล้มเหลวก่อนแก้ไข ความล้มเหลวของผลิตภัณฑ์/โค้ดจะสร้าง Code SHA ใหม่และกำหนดให้มีการตรวจสอบฉบับเต็มที่ผ่านสำหรับ SHA นั้น ความล้มเหลวของเวิร์กโฟลว์ ชุดทดสอบ ข้อมูลประจำตัว การอนุมัติ หรือโครงสร้างพื้นฐานจะได้รับการซ่อมแซมในพื้นผิวที่เป็นเจ้าของและรันใหม่กับ Code SHA เดิม
-
หลังจาก Code SHA ผ่านแล้วเท่านั้น ให้สร้างส่วนบนสุดของ
CHANGELOG.mdจาก pull request ที่ผสานแล้วและคอมมิตโดยตรงนับจากแท็กรุ่นที่จัดส่งแล้วล่าสุดซึ่งเข้าถึงได้ ทำให้รายการมุ่งเน้นผู้ใช้และไม่ซ้ำกัน เมื่อแท็กรุ่นที่จัดส่งแล้วซึ่งแยกสายออกไปหรือฟอร์เวิร์ดพอร์ตในภายหลังเชื่อมโยง pull request ที่เผยแพร่แล้วใหม่อีกครั้ง ให้ส่งแท็กนั้นอย่างชัดเจนเป็น--shipped-ref -
คอมมิตเฉพาะ
CHANGELOG.mdคอมมิตนี้คือ Release SHA diff ทั้งหมดจาก Code SHA ถึง Release SHA ต้องเป็นCHANGELOG.mdเท่านั้น; เส้นทางอื่นที่เปลี่ยนแปลงจะทำให้การเผยแพร่ย้อนกลับไปยังขั้นตอนที่ 2 -
รัน Full Release Validation แบบตรึง SHA สำหรับ Release SHA โดยเปิดใช้การนำหลักฐานกลับมาใช้ โพรเซสหลักแบบเบาต้องบันทึก
changelog-only-release-v1ชี้ไปยัง Code SHA ที่ผ่าน และไม่ส่งเลนย่อยของผลิตภัณฑ์ใด ๆ ขั้นตอนนี้นำหลักฐานผลิตภัณฑ์กลับมาใช้; ไม่ได้นำไบต์ของแพ็กเกจกลับมาใช้ -
รัน
OpenClaw NPM Releaseพร้อมpreflight_only=trueกับ Release SHA/แท็ก บันทึกpreflight_run_idที่สำเร็จ ขั้นตอนนี้จะสร้างและตรวจสอบไบต์แพ็กเกจที่ตรงกันทุกประการซึ่งรวมบันทึกการเปลี่ยนแปลงฉบับสุดท้าย -
แท็ก Release SHA จากนั้นรันตัวช่วยสำหรับรุ่นที่พร้อมเสนอด้วยโพรเซสหลักการตรวจสอบ Release-SHA ที่สำเร็จและการตรวจสอบล่วงหน้าของ npm แทนการส่งทั้งสองรายการอีกครั้ง:
bash pnpm release:candidate -- \ --tag vYYYY.M.PATCH-beta.N \ --full-release-run <release-sha-validation-run-id> \ --npm-preflight-run <preflight-run-id> \ --skip-dispatchสำหรับรุ่นเสถียร ให้ส่ง
--windows-node-tag vX.Y.Zด้วย ตัวช่วยจะตรวจสอบแหล่งที่มาของบันทึกประจำรุ่น ไบต์พรีไฟลต์ของ npm หลักฐานการติดตั้ง/อัปเดต Parallels หลักฐานแพ็กเกจ Telegram และแผนการเผยแพร่ plugin จากนั้นจะแสดงคำสั่งเผยแพร่OpenClaw Release Publishจะส่งแพ็กเกจ plugin ที่เลือกหรือแพ็กเกจ plugin ทั้งหมดที่เผยแพร่ได้ไปยัง npm และส่งชุดเดียวกันไปยัง ClawHub แบบขนาน จากนั้นโปรโมตอาร์ติแฟกต์พรีไฟลต์ npm ของ OpenClaw ที่เตรียมไว้ด้วย dist-tag ที่ตรงกันเมื่อเผยแพร่ plugin ไปยัง npm สำเร็จ เช็กเอาต์รุ่นยังคงเป็นรูทของผลิตภัณฑ์/ข้อมูล ขณะที่การวางแผนและการตรวจสอบขั้นสุดท้ายจะดำเนินการจากเช็กเอาต์แหล่งที่มาของเวิร์กโฟลว์ที่เชื่อถือได้ซึ่งตรงกันทุกประการ เพื่อไม่ให้คอมมิตรุ่นเก่าใช้เครื่องมือออกรุ่นที่ล้าสมัยโดยไม่มีการแจ้งเตือน ก่อนเริ่มโปรเซสย่อยสำหรับเผยแพร่ใด ๆ ระบบจะเรนเดอร์และแคชเนื้อหาของ GitHub release ที่ตรงกันทุกประการ เมื่อส่วนCHANGELOG.mdที่ตรงกันทั้งหมดอยู่ภายในขีดจำกัด 125,000 อักขระของ GitHub และเพดานความปลอดภัย 125,000 ไบต์ที่ตรงกันของตัวเรนเดอร์ หน้าเว็บจะมีส่วน## YYYY.M.PATCHนั้นแบบตรงกันทุกประการ รวมถึงหัวข้อของส่วนนั้นด้วย เมื่อส่วนต้นฉบับมีขนาดเกินกำหนด หน้าเว็บจะคงบันทึกบรรณาธิการที่จัดกลุ่มไว้อย่างตรงกันทุกประการ และแทนที่บันทึกการมีส่วนร่วมที่มีขนาดใหญ่เกินไปด้วยลิงก์ถาวรไปยังบันทึกฉบับเต็มในCHANGELOG.mdที่ตรึงกับแท็ก โดยจะไม่เผยแพร่บันทึกบางส่วนหรือหัวข้อย่อยที่ถูกตัดทอน เวิร์กโฟลว์จะเลือกเนื้อหาแบบเต็มหรือแบบย่อก่อนเพิ่ม### Release verification; หากส่วนท้ายของหลักฐานทำให้เกินขีดจำกัด ระบบจะคงเนื้อหามาตรฐานไว้และอาศัยหลักฐานแนบที่เปลี่ยนแปลงไม่ได้แทน รุ่นเสถียรที่เผยแพร่ไปยัง npmlatestจะกลายเป็น GitHub release ล่าสุด ส่วนรุ่นบำรุงรักษาเสถียรที่คงไว้บน npmbetaจะถูกสร้างด้วย GitHublatest=falseนอกจากนี้ เวิร์กโฟลว์ยังอัปโหลดหลักฐานการขึ้นต่อกันจากพรีไฟลต์ แมนิเฟสต์การตรวจสอบแบบเต็ม และหลักฐานการตรวจสอบรีจิสทรีหลังเผยแพร่ไปยัง GitHub release เพื่อใช้ตอบสนองต่อเหตุขัดข้องหลังออกรุ่น ระบบจะแสดง ID ของรันย่อยทันที อนุมัติเกตสภาพแวดล้อมการออกรุ่นที่โทเค็นเวิร์กโฟลว์ได้รับอนุญาตให้อนุมัติโดยอัตโนมัติ สรุปงานย่อยที่ล้มเหลวพร้อมส่วนท้ายของล็อก สร้างหน้า GitHub release แบบฉบับร่างไว้ล่วงหน้า และโปรโมตแอสเซ็ต Windows และ Android พร้อมกับการเผยแพร่ OpenClaw ไปยัง npm ปิดงานหน้า release และหลักฐานการขึ้นต่อกันเมื่อขั้นตอนเหล่านั้นสำเร็จ รอ ClawHub ทุกครั้งที่กำลังเผยแพร่ OpenClaw ไปยัง npm จากนั้นเรียกใช้ตัวตรวจสอบเบตาจาก main ที่เชื่อถือได้ และอัปโหลดหลักฐานหลังเผยแพร่สำหรับ GitHub release, แพ็กเกจ npm, แพ็กเกจ plugin บน npm ที่เลือก, แพ็กเกจ ClawHub ที่เลือก, ID รันของเวิร์กโฟลว์ย่อย และ ID รัน NPM Telegram ซึ่งเป็นทางเลือก ตัวตรวจสอบบูตสแตรป ClawHub ต้องการพาธและ SHA ของเวิร์กโฟลว์จาก main ที่เชื่อถือได้แบบตรงกันทุกประการ ความพยายามรันของผู้สร้างและรันปลายทาง SHA ของรุ่น ชุดแพ็กเกจที่ร้องขอ ทูเพิลอาร์ติแฟกต์แพ็กเกจที่เปลี่ยนแปลงไม่ได้ และอาร์ติแฟกต์การอ่านค่ากลับจากรีจิสทรีปลายทาง โดยจะไม่ยอมรับรันอ้างอิงรุ่นแบบเดิมที่สำเร็จจากนั้นเรียกใช้การทดสอบยอมรับแพ็กเกจหลังเผยแพร่กับแพ็กเกจ
[email protected]หรือopenclaw@betaที่เผยแพร่แล้ว หากรุ่นก่อนเผยแพร่ที่พุชหรือเผยแพร่แล้วต้องแก้ไข ให้สร้างหมายเลขรุ่นก่อนเผยแพร่ลำดับถัดไปที่ตรงกัน ห้ามลบหรือเขียนทับรุ่นเก่า -
เมื่อความพยายามเผยแพร่ล้มเหลว ให้คง Release SHA ไว้โดยไม่เปลี่ยนแปลง เว้นแต่ความล้มเหลวจะพิสูจน์ว่าผลิตภัณฑ์หรือบันทึกการเปลี่ยนแปลงมีข้อบกพร่อง ให้ดำเนินการต่อจากโปรเซสย่อยและอาร์ติแฟกต์ที่เปลี่ยนแปลงไม่ได้ซึ่งสำเร็จแล้ว ห้ามสร้างใหม่หรือเผยแพร่ซ้ำแพ็กเกจเวอร์ชันที่สำเร็จแล้ว
-
สำหรับรุ่นเสถียร ให้ดำเนินการต่อเฉพาะเมื่อเบตาหรือรุ่นทดสอบก่อนออกรุ่นที่ผ่านการตรวจสอบแล้วมีหลักฐานการตรวจสอบที่จำเป็น การเผยแพร่รุ่นเสถียรไปยัง npm จะผ่าน
OpenClaw Release Publishเช่นกัน โดยนำอาร์ติแฟกต์พรีไฟลต์ที่สำเร็จแล้วกลับมาใช้ผ่านpreflight_run_idความพร้อมสำหรับการออกรุ่นเสถียรบน macOS ยังต้องมี.zip,.dmg,.dSYM.zipที่จัดแพ็กเกจแล้ว และappcast.xmlที่อัปเดตแล้วบนmain; เวิร์กโฟลว์เผยแพร่ macOS จะเผยแพร่ appcast ที่ลงนามแล้วไปยังmainสาธารณะโดยอัตโนมัติหลังตรวจสอบแอสเซ็ตของรุ่น หรือเปิด/อัปเดต PR สำหรับ appcast หากการป้องกันสาขาปิดกั้นการพุชโดยตรง ความพร้อมของ Windows Hub รุ่นเสถียรต้องมีแอสเซ็ตOpenClawCompanion-Setup-x64.exe,OpenClawCompanion-Setup-arm64.exeและOpenClawCompanion-SHA256SUMS.txtที่ลงนามแล้วบน GitHub release ของ OpenClaw ส่งแท็กออกรุ่นopenclaw/openclaw-windows-nodeที่ลงนามแล้วแบบตรงกันทุกประการเป็นwindows_node_tagและส่งแผนที่ไดเจสต์ของตัวติดตั้งที่ผู้สมัครอนุมัติแล้วเป็นwindows_node_installer_digests;OpenClaw Release Publishจะคงฉบับร่างของรุ่นไว้ ส่งWindows Node Releaseและตรวจสอบแอสเซ็ตทั้งสามก่อนเผยแพร่ -
หลังเผยแพร่ ให้เรียกใช้ตัวตรวจสอบหลังเผยแพร่ของ npm, E2E Telegram แบบสแตนด์อโลนบน npm ที่เผยแพร่แล้วซึ่งเป็นทางเลือกเมื่อจำเป็นต้องมีหลักฐานช่องทางหลังเผยแพร่, การโปรโมต dist-tag เมื่อจำเป็น, ตรวจสอบหน้า GitHub release ที่สร้างขึ้น, ดำเนินขั้นตอนประกาศออกรุ่น แล้วจึงทำ การปิดงาน main สำหรับรุ่นเสถียร ให้เสร็จสิ้นก่อนถือว่าการออกรุ่นเสถียรเสร็จสมบูรณ์
การปิดงาน main สำหรับรุ่นเสถียร
การเผยแพร่รุ่นเสถียรยังไม่เสร็จสมบูรณ์จนกว่า main จะมีสถานะรุ่นที่เผยแพร่จริง
- เริ่มจาก
mainล่าสุดที่สดใหม่ ตรวจสอบrelease/YYYY.M.PATCHเทียบกับรายการดังกล่าว และพอร์ตการแก้ไขจริงที่ไม่มีในmainไปข้างหน้า อย่าผสานตัวปรับความเข้ากันได้ การทดสอบ หรือตัวปรับการตรวจสอบที่มีเฉพาะรุ่นเข้าไปในmainที่ใหม่กว่าโดยไม่พิจารณา - สำหรับเส้นทางปกติ ให้ตั้ง
mainเป็นเวอร์ชันเสถียรที่เผยแพร่แล้ว การปิดงานล่าช้าอาจใช้mainหลังจากที่รายการดังกล่าวเลื่อนไปยัง OpenClaw CalVer รุ่นเสถียรที่ใหม่กว่าแล้ว ห้ามดาวน์เกรดขบวนการออกรุ่นที่เริ่มไปแล้วเพียงเพื่อปิดรุ่นก่อนหน้า ตัวตรวจสอบยังคงกำหนดให้มีส่วนบันทึกการเปลี่ยนแปลงและรายการ appcast ของรุ่นที่เผยแพร่แบบตรงกันทุกประการ และบันทึกเวอร์ชันกับ SHA ของmainที่ใช้งานจริง เรียกใช้pnpm release:prepหลังการเปลี่ยนเวอร์ชันรูททุกครั้ง จากนั้นเรียกใช้pnpm deps:shrinkwrap:generate - ทำให้ส่วน
## YYYY.M.PATCHของCHANGELOG.mdบนmainตรงกับสาขารุ่นที่ติดแท็กทุกประการ รวมการอัปเดตappcast.xmlรุ่นเสถียรเมื่อรุ่น Mac เผยแพร่รายการดังกล่าว - ห้ามเพิ่ม
YYYY.M.PATCH+1, เวอร์ชันเบตา หรือส่วนบันทึกการเปลี่ยนแปลงในอนาคตที่ว่างเปล่าลงในmainจนกว่าผู้ดำเนินการจะเริ่มขบวนการออกรุ่นนั้นอย่างชัดเจน - เรียกใช้
pnpm release:generated:check,pnpm deps:shrinkwrap:checkและOPENCLAW_TESTBOX=1 pnpm check:changedพุช แล้วตรวจสอบว่าorigin/mainมีเวอร์ชันและบันทึกการเปลี่ยนแปลงที่เผยแพร่แล้ว ก่อนถือว่าการออกรุ่นเสถียรเสร็จสิ้น - อัปเดตตัวแปรที่เก็บ
RELEASE_ROLLBACK_DRILL_IDและRELEASE_ROLLBACK_DRILL_DATEให้เป็นปัจจุบันหลังการซ้อมย้อนกลับแบบส่วนตัวแต่ละครั้ง
OpenClaw Stable Main Closeout เริ่มจากการพุช main ที่มีเวอร์ชัน บันทึกการเปลี่ยนแปลง และ appcast ที่เผยแพร่แล้วหลังการเผยแพร่รุ่นเสถียร โดยจะอ่านหลักฐานหลังเผยแพร่ที่เปลี่ยนแปลงไม่ได้เพื่อผูกแท็กที่เผยแพร่กับรันการตรวจสอบรุ่นเต็มและการเผยแพร่ จากนั้นตรวจสอบสถานะ main รุ่นเสถียร รุ่น การทดสอบเฝ้าดูรุ่นเสถียรที่บังคับใช้ และหลักฐานประสิทธิภาพที่เป็นตัวบล็อก ระบบจะแนบแมนิเฟสต์การปิดงานและผลรวมตรวจสอบที่เปลี่ยนแปลงไม่ได้กับ GitHub release ทริกเกอร์การพุชอัตโนมัติจะข้ามรุ่นเดิมที่มีมาก่อนหลักฐานหลังเผยแพร่แบบเปลี่ยนแปลงไม่ได้ และจะไม่ถือว่าการข้ามนั้นเป็นการปิดงานที่เสร็จสมบูรณ์
การปิดงานที่สมบูรณ์ต้องมีทั้งสองแอสเซ็ตและผลรวมตรวจสอบที่ตรงกัน แมนิเฟสต์บางส่วนจะเล่นซ้ำ SHA ของ main และการซ้อมย้อนกลับที่บันทึกไว้เพื่อสร้างไบต์ที่เหมือนเดิม จากนั้นแนบผลรวมตรวจสอบที่ขาดหายไป คู่ที่ไม่ถูกต้องหรือผลรวมตรวจสอบที่ไม่มีแมนิเฟสต์จะยังคงเป็นตัวบล็อก รันที่ทริกเกอร์ด้วยการพุชโดยไม่มีตัวแปรที่เก็บสำหรับการซ้อมย้อนกลับจะข้ามโดยไม่ทำการปิดงานให้เสร็จสมบูรณ์ ส่วนบันทึกการซ้อมที่ไม่มีหรือเก่ากว่า 90 วันจะยังคงบล็อกการปิดงานแบบกำหนดเองที่มีหลักฐานรองรับ คำสั่งกู้คืนแบบส่วนตัวยังคงอยู่ในคู่มือปฏิบัติสำหรับผู้ดูแลเท่านั้น ใช้การส่งแบบกำหนดเองเฉพาะเพื่อซ่อมแซมหรือเล่นซ้ำการปิดงานรุ่นเสถียรที่มีหลักฐานรองรับ
หากพาเรนต์ Release Publish ล้มเหลวเฉพาะหลังจากแนบหลักฐาน npm/plugin ที่เปลี่ยนแปลงไม่ได้แล้ว ให้ซ่อมแซมและเผยแพร่แอสเซ็ตแพลตฟอร์มรุ่นเสถียรทุกประเภทก่อน จากนั้นผู้ดูแลอาจส่งการปิดงานด้วยตนเองโดยใช้ allow_failed_publish_recovery=true; โหมดดังกล่าวยอมรับเฉพาะพาเรนต์ที่ล้มเหลวและเสร็จสิ้นแล้ว และยังต้องมีสัญญาแอสเซ็ต Android และ Windows แบบตรงกันทุกประการ ไดเจสต์ SHA-256 ของ GitHub การตรวจสอบผลรวมตรวจสอบ แหล่งที่มาของ Android และการโปรโมต Windows ที่พาเรนต์ส่งและสำเร็จ ซึ่งการตรวจสอบ Authenticode และไดเจสต์ที่ผู้สมัครอนุมัติตรงกับตัวติดตั้งที่เผยแพร่ ควบคู่กับการตรวจสอบ macOS/appcast ตามปกติ การปิดงานอัตโนมัติจากการพุชจะไม่เปิดใช้โหมดกู้คืนนี้
แท็กแก้ไขสำรองแบบเดิมอาจนำหลักฐานของแพ็กเกจฐานกลับมาใช้ได้เฉพาะเมื่อแท็กแก้ไขชี้ไปยังคอมมิตต้นฉบับเดียวกับแท็กเสถียรฐาน รุ่น Android ของแท็กดังกล่าวจะนำ APK ที่ตรวจสอบแล้วของแท็กฐานกลับมาใช้และเพิ่มแหล่งที่มาสำหรับแท็กแก้ไข การแก้ไขที่มีต้นฉบับต่างกันต้องเผยแพร่และตรวจสอบหลักฐานแพ็กเกจของตนเอง และใช้ Android versionCode ที่สูงกว่า
พรีไฟลต์การออกรุ่น
-
เรียกใช้
pnpm check:test-typesก่อนพรีไฟลต์การออกรุ่น เพื่อให้ TypeScript สำหรับการทดสอบยังได้รับการครอบคลุมนอกเกตpnpm checkภายในเครื่องที่รวดเร็วกว่า -
เรียกใช้
pnpm check:architectureก่อนพรีไฟลต์การออกรุ่น เพื่อให้การตรวจสอบวงจรการนำเข้าและขอบเขตสถาปัตยกรรมที่กว้างขึ้นผ่านทั้งหมดนอกเกตภายในเครื่องที่รวดเร็วกว่า -
เรียกใช้
pnpm build && pnpm ui:buildก่อนpnpm release:checkเพื่อให้อาร์ติแฟกต์รุ่นdist/*ที่คาดไว้และบันเดิล Control UI มีอยู่สำหรับขั้นตอนตรวจสอบแพ็ก -
เรียกใช้
pnpm release:prepหลังเพิ่มเวอร์ชันรูทและก่อนติดแท็ก โดยจะเรียกใช้ตัวสร้างรุ่นแบบกำหนดแน่นอนทุกตัวที่มักคลาดเคลื่อนหลังการเปลี่ยนเวอร์ชัน/การกำหนดค่า/API ได้แก่ เวอร์ชัน plugin, shrinkwrap ของ npm, บัญชีรายการ plugin, สคีมาการกำหนดค่าพื้นฐาน, ข้อมูลเมตาการกำหนดค่าช่องทางที่รวมมาให้, เส้นฐานเอกสารการกำหนดค่า, การส่งออก SDK ของ plugin, แมนิเฟสต์สัญญา API ของ SDK สำหรับ Plugin และบันเดิลภาษาของ Control UI นอกจากนี้ยังบล็อกจนกว่าคำแปลแอปเนทีฟและทรัพยากรภาษาที่แพลตฟอร์มสร้างจะตรงกับบัญชีรายการต้นฉบับ หากล่าช้า ให้รอหรือส่งNative App Locale Refreshก่อนตรึง Code SHApnpm release:checkจะเรียกใช้ตัวป้องกันเหล่านั้นอีกครั้งในโหมดตรวจสอบ (รวมถึงเกตภาษาที่เข้มงวดและงบประมาณพื้นผิว SDK ของ plugin) และรายงานความล้มเหลวจากการคลาดเคลื่อนของสิ่งที่สร้างขึ้นทั้งหมดในครั้งเดียวก่อนเรียกใช้การตรวจสอบการออกรุ่นแพ็กเกจ -
การซิงค์เวอร์ชัน plugin จะอัปเดตแพ็กเกจรันไทม์
@openclaw/aiที่เผยแพร่ได้ เวอร์ชันแพ็กเกจ plugin อย่างเป็นทางการ และค่าขั้นต่ำopenclaw.compat.pluginApiที่มีอยู่ให้เป็นเวอร์ชันรุ่นของ OpenClaw โดยค่าเริ่มต้น ให้ถือว่าฟิลด์ดังกล่าวเป็นค่าขั้นต่ำของ API สำหรับ SDK/รันไทม์ของ plugin ไม่ใช่เพียงสำเนาเวอร์ชันแพ็กเกจ สำหรับรุ่นเฉพาะ plugin ที่ตั้งใจให้ยังเข้ากันได้กับโฮสต์ OpenClaw รุ่นเก่า ให้คงค่าขั้นต่ำไว้ที่ API โฮสต์รุ่นเก่าสุดที่รองรับ และบันทึกตัวเลือกนั้นไว้ในหลักฐานการออกรุ่น plugin -
เรียกใช้เวิร์กโฟลว์
Full Release Validationแบบกำหนดเองก่อนอนุมัติการออกรุ่น เพื่อเริ่มกล่องทดสอบก่อนออกรุ่นทั้งหมดจากจุดเริ่มต้นเดียว เวิร์กโฟลว์นี้รับสาขา แท็ก หรือ SHA ของคอมมิตแบบเต็ม ส่งCIแบบกำหนดเอง และส่งOpenClaw Release Checksสำหรับการทดสอบติดตั้งเบื้องต้น การยอมรับแพ็กเกจ การตรวจสอบแพ็กเกจข้ามระบบปฏิบัติการ ความสอดคล้องของ QA Lab, Matrix และเลน Telegram รันเสถียรและรันเต็มจะรวมการทดสอบเฝ้าดูเส้นทางการออกรุ่นแบบ live/E2E และ Docker อย่างละเอียดเสมอ โดยเก็บrun_release_soak=trueไว้สำหรับการทดสอบเฝ้าดูเบตาโดยชัดเจน การยอมรับแพ็กเกจมี E2E Telegram สำหรับแพ็กเกจที่เป็นมาตรฐานระหว่างการตรวจสอบผู้สมัคร จึงหลีกเลี่ยงตัวโพลแบบ live ตัวที่สองซึ่งทำงานพร้อมกันระบุ
release_package_specหลังเผยแพร่เบตาเพื่อนำแพ็กเกจ npm ที่เผยแพร่แล้วกลับมาใช้ในการตรวจสอบรุ่น การยอมรับแพ็กเกจ และ E2E Telegram สำหรับแพ็กเกจ โดยไม่สร้างทาร์บอลล์รุ่นใหม่ ระบุnpm_telegram_package_specเฉพาะเมื่อ Telegram ควรใช้แพ็กเกจที่เผยแพร่ซึ่งต่างจากส่วนอื่นของการตรวจสอบรุ่น ระบุpackage_acceptance_package_specเมื่อการยอมรับแพ็กเกจควรใช้แพ็กเกจที่เผยแพร่ซึ่งต่างจากข้อกำหนดแพ็กเกจรุ่น ระบุevidence_package_specเมื่อรายงานหลักฐานรุ่นควรพิสูจน์ว่าการตรวจสอบตรงกับแพ็กเกจ npm ที่เผยแพร่ โดยไม่บังคับใช้ E2E Telegrambash node scripts/full-release-validation-at-sha.mjs \ --sha <code-sha> \ --target-ref release/YYYY.M.PATCH -
เรียกใช้เวิร์กโฟลว์
Package Acceptanceแบบแมนนวลเมื่อต้องการหลักฐานจากช่องทางเสริมสำหรับแพ็กเกจที่เป็นตัวเลือก ระหว่างที่งานรีลีสดำเนินต่อไป ใช้source=npmสำหรับopenclaw@beta,openclaw@latestหรือเวอร์ชันรีลีสที่ระบุแน่นอน; ใช้source=refเพื่อแพ็ก branch/tag/SHA ของpackage_refที่เชื่อถือได้ด้วยชุดทดสอบworkflow_refปัจจุบัน; ใช้source=urlสำหรับ tarball HTTPS สาธารณะที่ต้องระบุ SHA-256 และใช้นโยบาย URL สาธารณะที่เข้มงวด; ใช้source=trusted-urlสำหรับนโยบายแหล่งที่เชื่อถือได้ที่มีชื่อ โดยต้องใช้trusted_source_idและ SHA-256; หรือใช้source=artifactสำหรับ tarball ที่อัปโหลดโดยการรัน GitHub Actions อื่นเวิร์กโฟลว์จะแปลงตัวเลือกเป็น
package-under-testนำตัวจัดกำหนดการรีลีส Docker E2E มาใช้ซ้ำกับ tarball นั้น และสามารถเรียกใช้ QA ของ Telegram กับ tarball เดียวกันโดยใช้telegram_mode=mock-openaiหรือtelegram_mode=live-frontierเมื่อเลน Docker ที่เลือกมีpublished-upgrade-survivorอาร์ติแฟกต์แพ็กเกจจะเป็นตัวเลือก และpublished_upgrade_survivor_baselineจะเลือก baseline ที่เผยแพร่แล้วupdate-restart-authใช้แพ็กเกจตัวเลือกเป็นทั้ง CLI ที่ติดตั้งและแพ็กเกจที่อยู่ระหว่างการทดสอบ เพื่อให้ทดสอบเส้นทางรีสตาร์ตแบบมีการจัดการของคำสั่งอัปเดตจากตัวเลือกตัวอย่าง:
bash gh workflow run package-acceptance.yml --ref main -f workflow_ref=main -f source=npm -f package_spec=openclaw@beta -f suite_profile=product -f [email protected] -f telegram_mode=mock-openaiโปรไฟล์ที่ใช้บ่อย:
smoke: เลนการติดตั้ง/ช่องทาง/เอเจนต์, เครือข่าย Gateway และการโหลดการกำหนดค่าใหม่package: เลนแพ็กเกจ/อัปเดต/รีสตาร์ต/Plugin ที่ทำงานกับอาร์ติแฟกต์โดยตรง โดยไม่มี OpenWebUI หรือ ClawHub แบบใช้งานจริงproduct: โปรไฟล์แพ็กเกจพร้อมช่องทาง MCP, การล้างข้อมูล cron/เอเจนต์ย่อย, การค้นหาเว็บของ OpenAI และ OpenWebUIfull: ส่วนย่อยของเส้นทางรีลีส Docker พร้อม OpenWebUIcustom: การเลือกdocker_lanesแบบตรงทั้งหมดสำหรับการรันซ้ำแบบเจาะจง
-
เรียกใช้เวิร์กโฟลว์
CIแบบแมนนวลโดยตรง เมื่อต้องการเพียงความครอบคลุมของ CI ปกติที่กำหนดผลลัพธ์ได้สำหรับตัวเลือกรีลีส การสั่งรัน CI แบบแมนนวลจะข้ามการจำกัดขอบเขตตามการเปลี่ยนแปลง และบังคับใช้ shard ของ Linux Node, shard ของ Plugin ที่รวมมาด้วย, shard สัญญาของ Plugin และช่องทาง, ความเข้ากันได้กับ Node 22,check-*,check-additional-*, การตรวจสอบเบื้องต้นของอาร์ติแฟกต์ที่สร้างแล้ว, การตรวจสอบเอกสาร, Skills ของ Python, Windows, macOS และเลน i18n ของ Control UI การรัน CI แบบแมนนวลแยกต่างหากจะเรียกใช้ Android เฉพาะเมื่อสั่งรันด้วยinclude_android=true;Full Release Validationจะส่งอินพุตนั้นให้ CI ลูกbash gh workflow run ci.yml --ref release/YYYY.M.PATCH -f include_android=true -
เรียกใช้
pnpm qa:otel:smokeเมื่อตรวจสอบเทเลเมทรีของรีลีส โดยจะทดสอบ QA-lab ผ่านตัวรับ OTLP/HTTP ภายในเครื่อง และตรวจสอบการส่งออก trace, metric และ log รวมถึงแอตทริบิวต์ trace ที่มีขอบเขตจำกัดและการปกปิดเนื้อหา/ตัวระบุ โดยไม่ต้องใช้ Opik, Langfuse หรือตัวรวบรวมภายนอกอื่น -
เรียกใช้
pnpm qa:otel:collector-smokeเมื่อตรวจสอบความเข้ากันได้กับตัวรวบรวม โดยจะกำหนดเส้นทางการส่งออก OTLP ของ QA-lab เดียวกันผ่านคอนเทนเนอร์ Docker ของ OpenTelemetry Collector จริง ก่อนตรวจสอบกับตัวรับภายในเครื่อง -
เรียกใช้
pnpm qa:prometheus:smokeเมื่อตรวจสอบการ scrape Prometheus ที่มีการป้องกัน โดยจะทดสอบ QA-lab ปฏิเสธการ scrape ที่ไม่ได้ยืนยันตัวตน และตรวจสอบว่ากลุ่ม metric ที่สำคัญต่อรีลีสไม่มีเนื้อหา prompt, ตัวระบุดิบ, โทเค็นการยืนยันตัวตน และพาธภายในเครื่อง -
เรียกใช้
pnpm qa:observability:smokeสำหรับเลนตรวจสอบเบื้องต้นของ OpenTelemetry และ Prometheus จาก source checkout ต่อเนื่องกัน -
เรียกใช้
pnpm release:checkก่อนทุกรีลีสที่มีแท็ก -
ขั้นตอนตรวจสอบเบื้องต้นของ
OpenClaw NPM Releaseจะสร้างหลักฐานรีลีสของ dependency ก่อนแพ็ก npm tarball เกตช่องโหว่จากคำแนะนำด้านความปลอดภัยของ npm จะบล็อกรีลีส รายงานความเสี่ยงของ manifest แบบส่งต่อ, ขอบเขตความเป็นเจ้าของ/การติดตั้ง dependency และการเปลี่ยนแปลง dependency ใช้เป็นหลักฐานรีลีสเท่านั้น รายงานการเปลี่ยนแปลง dependency จะเปรียบเทียบตัวเลือกรีลีสกับแท็กรีลีสก่อนหน้าที่ยังเข้าถึงได้ ขั้นตอนตรวจสอบเบื้องต้นจะอัปโหลดหลักฐาน dependency เป็นopenclaw-release-dependency-evidence-<tag>และฝังไว้ภายใต้dependency-evidence/ภายในอาร์ติแฟกต์ตรวจสอบเบื้องต้นของ npm ที่เตรียมไว้ด้วย เส้นทางเผยแพร่จริงจะนำอาร์ติแฟกต์ตรวจสอบเบื้องต้นนั้นมาใช้ซ้ำ แล้วแนบหลักฐานเดียวกันกับรีลีส GitHub เป็นopenclaw-<version>-dependency-evidence.zip -
เรียกใช้
OpenClaw Release Publishสำหรับลำดับการเผยแพร่ที่แก้ไขสถานะ หลังจากมีแท็กแล้ว ให้สั่งเผยแพร่ beta และ stable ตามปกติจากmainที่เชื่อถือได้ โดยแท็กรีลีสยังคงเลือก commit เป้าหมายที่แน่นอนและอาจชี้เข้าไปในrelease/YYYY.M.PATCHการเผยแพร่ alpha ของ Tideclaw ยังคงอยู่บน branch alpha ที่ตรงกัน ส่งpreflight_run_idของ npm สำหรับ OpenClaw ที่สำเร็จ,full_release_validation_run_idที่สำเร็จ และfull_release_validation_run_attemptที่แน่นอน และคงขอบเขตการเผยแพร่ Plugin เริ่มต้นเป็นall-publishableเว้นแต่กำลังดำเนินการซ่อมแซมแบบเจาะจงโดยตั้งใจ เวิร์กโฟลว์จะเรียงลำดับการเผยแพร่ npm ของ Plugin, การเผยแพร่ Plugin ไปยัง ClawHub และการเผยแพร่ npm ของ OpenClaw เพื่อไม่ให้เผยแพร่แพ็กเกจหลักก่อน Plugin ที่แยกออกมาเป็นภายนอก ส่วนการโปรโมต Windows และ Android จะทำงานพร้อมกับการเผยแพร่ npm หลักโดยอ้างอิงหน้ารีลีสฉบับร่าง การรันเผยแพร่ซ้ำสามารถทำต่อจากเดิมได้: เวอร์ชัน npm หลักที่เผยแพร่แล้วจะข้ามการสั่งรันส่วนหลัก หลังจากเวิร์กโฟลว์พิสูจน์ว่า tarball ในรีจิสทรีตรงกับอาร์ติแฟกต์ตรวจสอบเบื้องต้นของแท็ก และจะข้ามการโปรโมต Windows/Android เมื่อรีลีสมีสัญญาอาร์ติแฟกต์ที่ตรวจสอบแล้ว ดังนั้นการลองใหม่จะทำซ้ำเฉพาะขั้นตอนที่ล้มเหลว การซ่อมแซมเฉพาะ Plugin แบบเจาะจงต้องใช้plugin_publish_scope=selectedและรายการ Plugin ที่ไม่ว่าง การรันall-publishableแบบเฉพาะ Plugin ต้องมีหลักฐานการตรวจสอบเบื้องต้นและ Full Release Validation ที่ครบถ้วนและเปลี่ยนแปลงไม่ได้ โดยจะปฏิเสธหลักฐานที่ไม่ครบถ้วน -
OpenClaw Release Publishแบบ stable ต้องใช้windows_node_tagที่แน่นอน หลังจากมีรีลีสopenclaw/openclaw-windows-nodeที่ตรงกันและไม่ใช่ prerelease แล้ว พร้อมกับแผนที่windows_node_installer_digestsที่ตัวเลือกได้รับการอนุมัติ ก่อนสั่งรันส่วนการเผยแพร่ใด ๆ ระบบจะตรวจสอบว่ารีลีสต้นทางนั้นเผยแพร่แล้ว ไม่ใช่ prerelease มีตัวติดตั้ง x64/ARM64 ที่จำเป็น และยังคงตรงกับแผนที่ที่อนุมัติ จากนั้นจะสั่งรันWindows Node Releaseขณะที่รีลีส OpenClaw ยังเป็นฉบับร่าง โดยส่งแผนที่ digest ของตัวติดตั้งที่ตรึงไว้โดยไม่เปลี่ยนแปลง เวิร์กโฟลว์ลูกจะดาวน์โหลดตัวติดตั้ง Windows Hub ที่ลงนามแล้วจากแท็กที่ระบุแน่นอนนั้น เปรียบเทียบกับ digest ที่ตรึงไว้ ตรวจสอบบน runner ของ Windows ว่าลายเซ็น Authenticode ใช้ผู้ลงนาม OpenClaw Foundation ตามที่คาดไว้ เขียน manifest SHA-256 และอัปโหลดตัวติดตั้งพร้อม manifest ไปยังรีลีส GitHub มาตรฐานของ OpenClaw จากนั้นดาวน์โหลดอาร์ติแฟกต์ที่โปรโมตแล้วอีกครั้งและตรวจสอบการเป็นสมาชิกใน manifest พร้อมแฮช เวิร์กโฟลว์แม่จะตรวจสอบสัญญาอาร์ติแฟกต์ x64, ARM64 และ checksum ปัจจุบันก่อนเผยแพร่ การกู้คืนโดยตรงจะปฏิเสธชื่ออาร์ติแฟกต์OpenClawCompanion-*ที่ไม่คาดหมาย ก่อนแทนที่อาร์ติแฟกต์ตามสัญญาที่คาดไว้ด้วยไบต์จากต้นทางที่ตรึงไว้สั่งรัน
Windows Node Releaseแบบแมนนวลเฉพาะเพื่อการกู้คืนเท่านั้น และส่งแท็กที่ระบุแน่นอนเสมอ ห้ามใช้latestพร้อมกับแผนที่ JSONexpected_installer_digestsที่ระบุอย่างชัดเจนจากรีลีสต้นทางที่ได้รับอนุมัติ ลิงก์ดาวน์โหลดบนเว็บไซต์ควรชี้ไปยัง URL อาร์ติแฟกต์ของรีลีส OpenClaw ที่ระบุแน่นอนสำหรับรีลีส stable ปัจจุบัน หรือใช้releases/latest/download/...เฉพาะหลังจากตรวจสอบแล้วว่าการเปลี่ยนเส้นทาง latest ของ GitHub ชี้ไปยังรีลีสเดียวกัน ห้ามลิงก์เฉพาะไปยังหน้ารีลีสของ repo คู่กัน -
ขณะนี้การตรวจสอบรีลีสทำงานในเวิร์กโฟลว์แบบเรียกใช้ด้วยตนเองที่แยกต่างหาก:
OpenClaw Release Checksนอกจากนี้ยังเรียกใช้เลนตรวจสอบความสอดคล้องของม็อก QA Lab รวมถึงโปรไฟล์รีลีส Matrix และเลน QA ของ Telegram ก่อนอนุมัติรีลีส เลนแบบสดใช้สภาพแวดล้อมqa-live-shared; Telegram ยังใช้การเช่าข้อมูลรับรอง Convex CI ด้วย เรียกใช้เวิร์กโฟลว์QA-Lab - All Lanesแบบเรียกใช้ด้วยตนเองพร้อมmatrix_profile=allเมื่อต้องการทุกสถานการณ์ Matrix ที่ยังได้รับการดูแล โดยเวิร์กโฟลว์จะกระจายตัวเลือกนั้นไปยังโปรไฟล์การขนส่ง สื่อ และ E2EE เพื่อให้หลักฐานทั้งหมดเสร็จสิ้นภายในเวลาหมดเวลาของแต่ละงาน -
การตรวจสอบรันไทม์สำหรับการติดตั้งและอัปเกรดข้ามระบบปฏิบัติการเป็นส่วนหนึ่งของ
OpenClaw Release ChecksและFull Release Validationสาธารณะ ซึ่งเรียกเวิร์กโฟลว์แบบนำกลับมาใช้ใหม่.github/workflows/openclaw-cross-os-release-checks-reusable.ymlโดยตรง การแยกนี้เป็นไปโดยเจตนา เพื่อให้เส้นทางรีลีส npm จริงสั้น ทำงานแบบกำหนดผลลัพธ์ได้ และมุ่งเน้นอาร์ติแฟกต์ ขณะที่การตรวจสอบแบบสดที่ช้ากว่าจะอยู่ในเลนของตนเอง เพื่อไม่ให้การเผยแพร่หยุดชะงักหรือถูกบล็อก -
ควรสั่งให้การตรวจสอบรีลีสที่มีข้อมูลลับทำงานผ่าน
Full Release Validationหรือจากรีเฟอเรนซ์เวิร์กโฟลว์main/release เพื่อให้ตรรกะของเวิร์กโฟลว์และข้อมูลลับยังคงอยู่ภายใต้การควบคุม -
OpenClaw Release Checksยอมรับชื่อแบรนช์ แท็ก หรือ SHA ของคอมมิตแบบเต็ม ตราบใดที่คอมมิตที่แก้ไขแล้วสามารถเข้าถึงได้จากแบรนช์หรือแท็กรีลีสของ OpenClaw -
การตรวจสอบก่อนเริ่มแบบตรวจสอบเท่านั้นของ
OpenClaw NPM Releaseยังยอมรับ SHA แบบเต็ม 40 อักขระของคอมมิตแบรนช์เวิร์กโฟลว์ปัจจุบันโดยไม่ต้องมีแท็กที่พุชแล้ว เส้นทาง SHA นั้นใช้สำหรับการตรวจสอบเท่านั้นและไม่สามารถเลื่อนขั้นเป็นการเผยแพร่จริงได้ ในโหมด SHA เวิร์กโฟลว์จะสังเคราะห์v<package.json version>สำหรับการตรวจสอบข้อมูลเมตาของแพ็กเกจเท่านั้น ส่วนการเผยแพร่จริงยังคงต้องใช้แท็กรีลีสจริง -
ทั้งสองเวิร์กโฟลว์คงเส้นทางการเผยแพร่และการเลื่อนขั้นจริงไว้บนรันเนอร์ที่โฮสต์โดย GitHub ขณะที่เส้นทางการตรวจสอบที่ไม่เปลี่ยนแปลงข้อมูลสามารถใช้รันเนอร์ Blacksmith Linux ที่มีขนาดใหญ่กว่าได้
-
เวิร์กโฟลว์นั้นเรียกใช้
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_CACHE_TEST=1 pnpm test:live:cacheโดยใช้ข้อมูลลับของเวิร์กโฟลว์ทั้งOPENAI_API_KEYและANTHROPIC_API_KEY -
การตรวจสอบก่อนเริ่มรีลีส npm ไม่รอเลนการตรวจสอบรีลีสที่แยกต่างหากอีกต่อไป
-
ก่อนติดแท็กรีลีสแคนดิเดตในเครื่อง ให้เรียกใช้
RELEASE_TAG=vYYYY.M.PATCH-beta.N pnpm release:fast-pretag-checkตัวช่วยจะเรียกใช้ข้อควบคุมรีลีสแบบรวดเร็ว การตรวจสอบรีลีส npm/ClawHub ของ Plugin การบิลด์ การบิลด์ UI และrelease:openclaw:npm:checkตามลำดับที่ตรวจพบข้อผิดพลาดทั่วไปซึ่งอาจบล็อกการอนุมัติ ก่อนที่เวิร์กโฟลว์เผยแพร่ของ GitHub จะเริ่มทำงาน -
เรียกใช้
RELEASE_TAG=vYYYY.M.PATCH node --import tsx scripts/openclaw-npm-release-check.ts(หรือแท็กพรีรีลีส/แท็กแก้ไขที่ตรงกัน) ก่อนอนุมัติ -
หลังเผยแพร่ npm ให้เรียกใช้
node --import tsx scripts/openclaw-npm-postpublish-verify.ts YYYY.M.PATCH(หรือเวอร์ชันเบต้า/เวอร์ชันแก้ไขที่ตรงกัน) เพื่อตรวจสอบเส้นทางการติดตั้งจากรีจิสทรีที่เผยแพร่แล้วในคำนำหน้าชั่วคราวใหม่ -
หลังเผยแพร่เบต้า ให้เรียกใช้
[email protected] OPENCLAW_NPM_TELEGRAM_CREDENTIAL_SOURCE=convex OPENCLAW_NPM_TELEGRAM_CREDENTIAL_ROLE=ci pnpm test:docker:npm-telegram-liveเพื่อตรวจสอบการเริ่มต้นใช้งานจากแพ็กเกจที่ติดตั้ง การตั้งค่า Telegram และ E2E จริงของ Telegram กับแพ็กเกจ npm ที่เผยแพร่ โดยใช้พูลข้อมูลรับรอง Telegram แบบเช่าที่ใช้ร่วมกัน การทำงานเฉพาะกิจในเครื่องของผู้ดูแลสามารถละเว้นตัวแปร Convex และส่งข้อมูลรับรองสภาพแวดล้อมOPENCLAW_QA_TELEGRAM_*ทั้งสามรายการโดยตรง -
หากต้องการเรียกใช้การทดสอบควันเบต้าแบบเต็มหลังการเผยแพร่จากเครื่องของผู้ดูแล ให้ใช้
pnpm release:beta-smoke -- --beta betaNตัวช่วยจะเรียกใช้การตรวจสอบการอัปเดต npm/เป้าหมายใหม่ของ Parallels สั่งให้NPM Telegram Beta E2Eทำงาน สำรวจสถานะการทำงานของเวิร์กโฟลว์ที่ตรงกัน ดาวน์โหลดอาร์ติแฟกต์ และพิมพ์รายงาน Telegram -
ผู้ดูแลสามารถเรียกใช้การตรวจสอบหลังการเผยแพร่เดียวกันจาก GitHub Actions ผ่านเวิร์กโฟลว์
NPM Telegram Beta E2Eแบบเรียกใช้ด้วยตนเอง เวิร์กโฟลว์นี้จงใจให้เรียกใช้ด้วยตนเองเท่านั้นและไม่ทำงานในการผสานทุกครั้ง -
ระบบอัตโนมัติสำหรับรีลีสของผู้ดูแลใช้กระบวนการตรวจสอบก่อนเริ่มแล้วจึงเลื่อนขั้น:
- การเผยแพร่ npm จริงต้องผ่าน npm
preflight_run_idที่สำเร็จ - การประสานงานเผยแพร่และการตรวจสอบก่อนเริ่มสำหรับเบต้าและสเตเบิลตามปกติใช้
mainที่เชื่อถือได้กับแท็กเป้าหมายที่ตรงกันทุกประการ การเผยแพร่และการตรวจสอบก่อนเริ่มสำหรับ Tideclaw alpha ใช้แบรนช์ alpha ที่ตรงกัน - รีลีส npm แบบสเตเบิลมีค่าเริ่มต้นเป็น
beta; การเผยแพร่ npm แบบสเตเบิลสามารถกำหนดเป้าหมายlatestอย่างชัดเจนผ่านอินพุตของเวิร์กโฟลว์ - การเปลี่ยนแปลง dist-tag ของ npm ที่ใช้โทเค็นอยู่ใน
openclaw/releases/.github/workflows/openclaw-npm-dist-tags.ymlเนื่องจากnpm dist-tag addยังคงต้องใช้NPM_TOKENขณะที่รีโพซิทอรีต้นทางคงการเผยแพร่แบบ OIDC เท่านั้น macOS Releaseสาธารณะใช้สำหรับการตรวจสอบเท่านั้น เมื่อแท็กอยู่เฉพาะบนแบรนช์รีลีส แต่เวิร์กโฟลว์ถูกสั่งให้ทำงานจากmainให้ตั้งค่าpublic_release_branch=release/YYYY.M.PATCH- การเผยแพร่ macOS จริงต้องผ่าน macOS
preflight_run_idและvalidate_run_idที่สำเร็จ - เส้นทางการเผยแพร่จริงจะเลื่อนขั้นอาร์ติแฟกต์ที่เตรียมไว้ แทนที่จะบิลด์ใหม่อีกครั้ง
- การเผยแพร่ npm จริงต้องผ่าน npm
-
สำหรับรีลีสแก้ไขแบบสเตเบิล เช่น
YYYY.M.PATCH-Nตัวตรวจสอบหลังการเผยแพร่ยังตรวจสอบเส้นทางอัปเกรดด้วยคำนำหน้าชั่วคราวเดียวกันจากYYYY.M.PATCHไปยังYYYY.M.PATCH-Nเพื่อให้การแก้ไขรีลีสไม่สามารถปล่อยให้การติดตั้งแบบโกลบอลรุ่นเก่าค้างอยู่กับเพย์โหลดสเตเบิลพื้นฐานโดยไม่มีการแจ้งเตือน -
การตรวจสอบก่อนเริ่มรีลีส npm จะล้มเหลวแบบปิด เว้นแต่ tarball จะมีทั้ง
dist/control-ui/index.htmlและเพย์โหลดdist/control-ui/assets/ที่ไม่ว่างเปล่า เพื่อไม่ให้เราเผยแพร่แดชบอร์ดเบราว์เซอร์ที่ว่างเปล่าอีก -
การตรวจสอบหลังการเผยแพร่ยังตรวจสอบด้วยว่าจุดเข้าใช้งาน Plugin และข้อมูลเมตาของแพ็กเกจที่เผยแพร่มีอยู่ในเลย์เอาต์รีจิสทรีที่ติดตั้งแล้ว รีลีสที่เผยแพร่โดยขาดเพย์โหลดรันไทม์ของ Plugin จะไม่ผ่านตัวตรวจสอบหลังการเผยแพร่และไม่สามารถเลื่อนขั้นเป็น
latestได้ -
pnpm test:install:smokeยังบังคับใช้งบประมาณunpackedSizeของ npm pack กับ tarball อัปเดตแคนดิเดตด้วย เพื่อให้ E2E ของตัวติดตั้งตรวจพบขนาดแพ็กเกจที่เพิ่มขึ้นโดยไม่ตั้งใจก่อนเข้าสู่เส้นทางเผยแพร่รีลีส -
หากงานรีลีสแก้ไขการวางแผน CI แมนิเฟสต์เวลาทำงานของส่วนขยาย หรือเมทริกซ์การทดสอบส่วนขยาย ให้สร้างเอาต์พุตเมทริกซ์
plugin-prerelease-extension-shardที่ตัววางแผนเป็นเจ้าของขึ้นใหม่จาก.github/workflows/plugin-prerelease.ymlและตรวจสอบก่อนอนุมัติ เพื่อไม่ให้บันทึกประจำรุ่นอธิบายเลย์เอาต์ CI ที่ล้าสมัย -
ความพร้อมของรีลีส macOS แบบสเตเบิลยังรวมถึงพื้นผิวของตัวอัปเดตด้วย: รีลีส GitHub ต้องมี
.zip,.dmgและ.dSYM.zipที่บรรจุแพ็กเกจแล้ว;appcast.xmlบนmainต้องชี้ไปยังไฟล์ zip สเตเบิลใหม่หลังเผยแพร่ (เวิร์กโฟลว์เผยแพร่ macOS จะคอมมิตไฟล์นี้โดยอัตโนมัติ หรือเปิด appcast PR เมื่อการพุชโดยตรงถูกบล็อก); แอปที่บรรจุแพ็กเกจแล้วต้องคงรหัสบันเดิลที่ไม่ใช่ดีบัก URL ฟีด Sparkle ที่ไม่ว่างเปล่า และCFBundleVersionที่เท่ากับหรือสูงกว่าค่าขั้นต่ำของบิลด์ Sparkle มาตรฐานสำหรับเวอร์ชันรีลีสนั้น
กล่องทดสอบรีลีส
Full Release Validation คือวิธีที่ผู้ปฏิบัติงานเริ่มเมทริกซ์ผลิตภัณฑ์แบบเต็มจากจุดเข้าใช้งานเดียว ใช้ตัวช่วยเพื่อให้ทุกเวิร์กโฟลว์ย่อยทำงานจากแบรนช์ชั่วคราวที่ตรึงไว้กับ SHA ของเวิร์กโฟลว์ main ที่เชื่อถือได้หนึ่งรายการ ขณะที่คอมมิตที่ร้องขอยังคงเป็นแคนดิเดตที่อยู่ระหว่างการทดสอบ:
pnpm ci:full-release \ --sha <code-sha> \ --target-ref release/YYYY.M.PATCHตัวช่วยจะดึง origin/main ปัจจุบัน พุช release-ci/<workflow-sha>-... ที่คอมมิตเวิร์กโฟลว์ที่เชื่อถือได้นั้น อนุมาน beta จากเวอร์ชันแพ็กเกจ alpha/beta และใช้ stable ในกรณีอื่น สั่งให้ Full Release Validation ทำงานจากแบรนช์ชั่วคราวพร้อม ref=<target-sha> ตรวจสอบว่า headSha ของทุกเวิร์กโฟลว์ย่อยตรงกับ SHA ของเวิร์กโฟลว์หลักที่ตรึงไว้ แล้วจึงลบแบรนช์ชั่วคราว ส่ง -f reuse_evidence=false เพื่อบังคับให้ทำงานใหม่ -f release_profile=full สำหรับการตรวจสอบคำแนะนำแบบกว้าง หรือ --workflow-sha <trusted-main-sha> เพื่อตรึงคอมมิตเก่าที่ยังเข้าถึงได้จาก origin/main ปัจจุบัน ตัวเวิร์กโฟลว์เองจะไม่เขียนรีเฟอเรนซ์ของรีโพซิทอรี วิธีนี้ทำให้เครื่องมือรีลีสที่ใช้ได้เฉพาะ main ยังคงพร้อมใช้งานโดยไม่เพิ่มคอมมิตเครื่องมือลงในแคนดิเดต และหลีกเลี่ยงการพิสูจน์การทำงานย่อย main ที่ใหม่กว่าโดยไม่ตั้งใจ
หลังจาก Code SHA เป็นสีเขียว ให้คอมมิตเฉพาะ CHANGELOG.md และเรียกใช้ตัวช่วยเดิมด้วย Release SHA:
pnpm ci:full-release \ --sha <release-sha> \ --target-ref release/YYYY.M.PATCHเวิร์กโฟลว์หลักครั้งที่สองจะนำหลักฐานผลิตภัณฑ์กลับมาใช้ใหม่ก็ต่อเมื่อ GitHub พิสูจน์ว่า Release SHA สืบทอดจาก Code SHA และชุดพาธที่เปลี่ยนแปลงทั้งหมดเป็น CHANGELOG.md ทุกประการ เวิร์กโฟลว์จะบันทึก changelog-only-release-v1 และไม่สั่งให้เวิร์กโฟลว์ย่อยของผลิตภัณฑ์ทำงาน การตรวจสอบก่อนเริ่ม npm และการยอมรับแพ็กเกจ/การติดตั้งยังคงทำงานบน Release SHA เนื่องจากไบต์ของ tarball เปลี่ยนแปลง
สำหรับ Code SHA ใหม่ เวิร์กโฟลว์จะแก้ไขเป้าหมาย สั่งให้ CI แบบเรียกใช้ด้วยตนเองทำงาน แล้วจึงสั่งให้ OpenClaw Release Checks ทำงาน OpenClaw Release Checks จะกระจายงานไปยังการทดสอบควันการติดตั้ง การตรวจสอบรีลีสข้ามระบบปฏิบัติการ ความครอบคลุมเส้นทางรีลีส Docker แบบสด/E2E เมื่อเปิดใช้การแช่ทดสอบ การยอมรับแพ็กเกจพร้อม E2E แพ็กเกจ Telegram มาตรฐาน การตรวจสอบความสอดคล้องของ QA Lab, Matrix แบบสด และ Telegram แบบสด การทำงานแบบเต็ม/ทั้งหมดจะยอมรับได้ก็ต่อเมื่อสรุป Full Release Validation แสดงว่า normal_ci, plugin_prerelease และ release_checks สำเร็จ เว้นแต่การเรียกใช้ใหม่แบบเจาะจงจะจงใจข้ามเวิร์กโฟลว์ย่อย Plugin Prerelease ที่แยกต่างหาก ใช้เวิร์กโฟลว์ย่อย npm-telegram แบบสแตนด์อโลนเฉพาะสำหรับการเรียกใช้แพ็กเกจที่เผยแพร่แล้วใหม่แบบเจาะจงด้วย release_package_spec หรือ npm_telegram_package_spec สรุปของตัวตรวจสอบขั้นสุดท้ายมีตารางงานที่ช้าที่สุดสำหรับการทำงานย่อยแต่ละครั้ง เพื่อให้ผู้จัดการรีลีสเห็นเส้นทางวิกฤตปัจจุบันโดยไม่ต้องดาวน์โหลดบันทึก
เวิร์กโฟลว์ย่อยด้านประสิทธิภาพผลิตภัณฑ์ใช้เฉพาะอาร์ติแฟกต์ในเส้นทางรีลีสนี้ เวิร์กโฟลว์
หลักสั่งให้ทำงานด้วย publish_reports=false และการตรวจสอบจะถูกปฏิเสธ
เว้นแต่ข้อควบคุมแบบใช้อาร์ติแฟกต์เท่านั้นจะพิสูจน์ว่าตัวเผยแพร่รายงาน Clawgrit ยังคง
ถูกข้าม
ดู การตรวจสอบรีลีสแบบเต็ม สำหรับเมทริกซ์ขั้นตอนทั้งหมด ชื่องานเวิร์กโฟลว์ที่ตรงกันทุกประการ ความแตกต่างระหว่างโปรไฟล์สเตเบิลกับโปรไฟล์เต็ม อาร์ติแฟกต์ และตัวจัดการการเรียกใช้ใหม่แบบเจาะจง
เวิร์กโฟลว์ย่อยถูกสั่งให้ทำงานจากรีเฟอเรนซ์ที่เชื่อถือได้ซึ่งตรึงด้วย SHA และเรียกใช้ Full Release Validation การทำงานย่อยทุกครั้งต้องใช้ SHA ของเวิร์กโฟลว์หลักที่ตรงกันทุกประการ อย่าใช้การสั่งให้ --ref main -f ref=<sha> ทำงานโดยตรงสำหรับหลักฐานรีลีส ให้ใช้ pnpm ci:full-release --sha <target-sha> --target-ref release/YYYY.M.PATCH
ใช้ release_profile เพื่อเลือกขอบเขตความครอบคลุมแบบสด/ของผู้ให้บริการ:
beta: เส้นทาง OpenAI/แกนหลักแบบสดและ Docker ที่สำคัญต่อรีลีสและเร็วที่สุดstable: ความครอบคลุมผู้ให้บริการ/แบ็กเอนด์ระดับเบต้ารวมถึงสเตเบิลสำหรับการอนุมัติรีลีสfull: สเตเบิลรวมถึงความครอบคลุมผู้ให้บริการ/สื่อเชิงคำแนะนำแบบกว้าง
การตรวจสอบแบบสเตเบิลและแบบเต็มจะเรียกใช้การตรวจสอบแบบสด/E2E อย่างละเอียด เส้นทางรีลีส Docker และการตรวจสอบแพ็กเกจที่เผยแพร่แล้วว่ายังคงอัปเกรดได้ภายในขอบเขต ก่อนการเลื่อนขั้นเสมอ ใช้ run_release_soak=true เพื่อร้องขอการตรวจสอบชุดเดียวกันสำหรับเบต้า การตรวจสอบนี้ครอบคลุมแพ็กเกจสเตเบิลสี่เวอร์ชันล่าสุด รวมถึงค่าพื้นฐาน 2026.4.23 และ 2026.5.2 ที่ตรึงไว้ ตลอดจนความครอบคลุม 2026.4.15 ที่เก่ากว่า โดยนำค่าพื้นฐานที่ซ้ำกันออกและแบ่งค่าพื้นฐานแต่ละรายการไปยังงานรันเนอร์ Docker ของตนเอง
OpenClaw Release Checks ใช้รีเฟอเรนซ์เวิร์กโฟลว์ที่เชื่อถือได้เพื่อแก้ไขรีเฟอเรนซ์เป้าหมายครั้งเดียวเป็น release-package-under-test และนำอาร์ติแฟกต์นั้นกลับมาใช้ในการตรวจสอบข้ามระบบปฏิบัติการ การยอมรับแพ็กเกจ และเส้นทางรีลีส Docker เมื่อการแช่ทดสอบทำงาน วิธีนี้ทำให้กล่องที่เกี่ยวข้องกับแพ็กเกจทั้งหมดใช้ไบต์ชุดเดียวกันและหลีกเลี่ยงการบิลด์แพ็กเกจซ้ำ หลังจากเบต้าอยู่บน npm แล้ว ให้ตั้งค่า [email protected] เพื่อให้การตรวจสอบรีลีสดาวน์โหลดแพ็กเกจที่เผยแพร่แล้วเพียงครั้งเดียว แยก SHA ของซอร์สบิลด์จาก dist/build-info.json และนำอาร์ติแฟกต์นั้นกลับมาใช้สำหรับเลนข้ามระบบปฏิบัติการ การยอมรับแพ็กเกจ เส้นทางรีลีส Docker และ Telegram ของแพ็กเกจ
การทดสอบควันการติดตั้ง OpenAI ข้ามระบบปฏิบัติการใช้ OPENCLAW_CROSS_OS_OPENAI_MODEL เมื่อตั้งค่าตัวแปรของรีโพซิทอรี/องค์กร มิฉะนั้นจะใช้ openai/gpt-5.6-luna เนื่องจากเลนนี้พิสูจน์การติดตั้งแพ็กเกจ การเริ่มต้นใช้งาน การเริ่มทำงานของ Gateway และการทำงานของเอเจนต์แบบสดหนึ่งรอบ ไม่ใช่การวัดประสิทธิภาพของโมเดลที่มีความสามารถสูงสุด เมทริกซ์ผู้ให้บริการแบบสดที่กว้างกว่ายังคงเป็นพื้นที่สำหรับความครอบคลุมเฉพาะโมเดล
ใช้รูปแบบต่อไปนี้ตามขั้นตอนของรีลีส:
# ตรวจสอบ Code SHA ที่ผลิตภัณฑ์เสร็จสมบูรณ์pnpm ci:full-release \ --sha <code-sha> \ --target-ref release/YYYY.M.PATCH # ตรวจสอบ Release SHA ที่เปลี่ยนเฉพาะ changelog โดยใช้หลักฐานผลิตภัณฑ์จาก Code SHA ซ้ำpnpm ci:full-release \ --sha <release-sha> \ --target-ref release/YYYY.M.PATCH # หลังเผยแพร่ beta ให้เพิ่ม Telegram E2E สำหรับแพ็กเกจที่เผยแพร่แล้วpnpm ci:full-release \ --sha <release-sha> \ --target-ref release/YYYY.M.PATCH \ -f [email protected] \ -f [email protected] \ -f npm_telegram_provider_mode=mock-openaiอย่าใช้ชุดรวมทั้งหมดเป็นการรันซ้ำครั้งแรกหลังแก้ไขแบบเจาะจง หากกล่องใดล้มเหลว ให้ใช้เวิร์กโฟลว์ลูก งาน เลน Docker โปรไฟล์แพ็กเกจ ผู้ให้บริการโมเดล หรือเลน QA ที่ล้มเหลวสำหรับการพิสูจน์ครั้งถัดไป รันชุดรวมทั้งหมดอีกครั้งเฉพาะเมื่อการแก้ไขเปลี่ยนการประสานงานรีลีสร่วมกัน หรือทำให้หลักฐานจากทุกกล่องก่อนหน้านี้ล้าสมัย ตัวตรวจสอบขั้นสุดท้ายของชุดรวมจะตรวจสอบรหัสการรันเวิร์กโฟลว์ลูกที่บันทึกไว้อีกครั้ง ดังนั้นหลังจากรันเวิร์กโฟลว์ลูกซ้ำสำเร็จแล้ว ให้รันซ้ำเฉพาะงานแม่ Verify full validation ที่ล้มเหลว
rerun_group=all อาจใช้การรันชุดรวมที่ผ่านก่อนหน้านี้ซ้ำได้ เมื่อโปรไฟล์รีลีส
การตั้งค่า soak ที่มีผล และอินพุตการตรวจสอบตรงกัน และ target SHA
เหมือนกัน หรือเป้าหมายใหม่เป็น descendant ที่มีชุดพาธที่เปลี่ยนแปลงทั้งหมด
ตรงกับ CHANGELOG.md ทุกประการ การใช้เป้าหมายเดิมซ้ำจะบันทึก
exact-target-full-validation-v1; Release SHA หลังการตรวจสอบจะบันทึก
changelog-only-release-v1 โดยกรณีหลังจะใช้ซ้ำเฉพาะการตรวจสอบผลิตภัณฑ์เท่านั้น ส่วนการตรวจสอบล่วงหน้าของ npm
ไบต์ของแพ็กเกจ ที่มาของบันทึกประจำรุ่น และการยอมรับการติดตั้ง/อัปเดต
ยังต้องรันกับ Release SHA การเปลี่ยนแปลงเวอร์ชัน ซอร์ส ไฟล์ที่สร้างขึ้น
การอ้างอิง แพ็กเกจ หรือเป้าหมายที่เวิร์กโฟลว์เป็นเจ้าของ ต้องใช้ Code SHA ใหม่
และการตรวจสอบฉบับเต็มใหม่ การรันชุดรวมที่ใหม่กว่าสำหรับ ref release/* และ
กลุ่มการรันซ้ำเดียวกัน จะแทนที่รายการที่กำลังดำเนินการโดยอัตโนมัติ ส่ง
reuse_evidence=false เพื่อบังคับให้รันฉบับเต็มใหม่
สำหรับการกู้คืนที่มีขอบเขต ให้ส่ง rerun_group ไปยังชุดรวม all คือการรัน release candidate จริง, ci รันเฉพาะรายการลูกของ CI ปกติ, plugin-prerelease รันเฉพาะรายการลูกของ Plugin ที่ใช้เฉพาะรีลีส, release-checks รันทุกกล่องรีลีส และกลุ่มรีลีสที่แคบกว่าคือ install-smoke, cross-os, live-e2e, package, qa, qa-parity, qa-live และ npm-telegram การรันซ้ำแบบเจาะจง npm-telegram ต้องใช้ release_package_spec หรือ npm_telegram_package_spec; การรันแบบเต็ม/ทั้งหมดจะใช้ Telegram E2E ของแพ็กเกจมาตรฐานภายใน Package Acceptance การรันซ้ำข้ามระบบปฏิบัติการแบบเจาะจงสามารถเพิ่ม cross_os_suite_filter=windows/packaged-upgrade หรือตัวกรองระบบปฏิบัติการ/ชุดทดสอบอื่นได้ ความล้มเหลวของการตรวจสอบรีลีส QA จะบล็อกการตรวจสอบรีลีสตามปกติ รวมถึงความคลาดเคลื่อนของ dynamic tool ของ OpenClaw ที่กำหนดให้ตรวจสอบในระดับมาตรฐาน การรัน Tideclaw alpha ยังอาจถือว่าเลนตรวจสอบรีลีสที่ไม่เกี่ยวกับความปลอดภัยของแพ็กเกจเป็นเพียงคำแนะนำ เมื่อใช้ release_profile=beta ชุดทดสอบผู้ให้บริการจริง Run repo/live E2E validation จะเป็นเพียงคำแนะนำ (คำเตือน ไม่ใช่ตัวบล็อก) ส่วนโปรไฟล์ stable และ full ยังคงใช้เป็นตัวบล็อก เมื่อ live_suite_filter ร้องขอเลน QA แบบใช้งานจริงที่มีเกตอย่างชัดเจน เช่น Discord, WhatsApp หรือ Slack ต้องเปิดใช้งานตัวแปร repo OPENCLAW_RELEASE_QA_*_LIVE_CI_ENABLED ที่ตรงกัน มิฉะนั้นการเก็บอินพุตจะล้มเหลวแทนที่จะข้ามเลนโดยไม่แจ้ง
Vitest
กล่อง Vitest คือเวิร์กโฟลว์ลูกแบบแมนนวล CI CI แบบแมนนวลจงใจข้ามการจำกัดขอบเขตตามการเปลี่ยนแปลง และบังคับใช้กราฟการทดสอบปกติสำหรับ release candidate ได้แก่ shard ของ Linux Node, shard ของ Plugin ที่รวมมาในแพ็กเกจ, shard สัญญาของ Plugin และช่องทาง, ความเข้ากันได้กับ Node 22, check-*, check-additional-*, การตรวจสอบ smoke ของอาร์ติแฟกต์ที่สร้างแล้ว, การตรวจสอบเอกสาร, Skills สำหรับ Python, Windows, macOS และ i18n ของ Control UI โดยจะรวม Android เมื่อ Full Release Validation รันกล่องนี้ เนื่องจากชุดรวมส่ง include_android=true; ส่วน CI แบบแมนนวลที่รันแยกต่างหากต้องใช้ include_android=true เพื่อครอบคลุม Android
ใช้กล่องนี้เพื่อตอบว่า "ซอร์สทรีผ่านชุดทดสอบปกติฉบับเต็มหรือไม่" ซึ่งไม่เหมือนกับการตรวจสอบผลิตภัณฑ์ตามเส้นทางรีลีส หลักฐานที่ต้องเก็บไว้:
- สรุป
Full Release Validationที่แสดง URL ของการรันCIที่ถูกสั่งให้ทำงาน - การรัน
CIผ่านบน target SHA ที่ตรงกันทุกประการ - ชื่อ shard ที่ล้มเหลวหรือทำงานช้าจากงาน CI เมื่อตรวจสอบ regression
- อาร์ติแฟกต์เวลาของ Vitest เช่น
.artifacts/vitest-shard-timings.jsonเมื่อการรันต้องวิเคราะห์ประสิทธิภาพ
รัน CI แบบแมนนวลโดยตรงเฉพาะเมื่อรีลีสต้องการ CI ปกติที่กำหนดผลได้แน่นอน แต่ไม่ต้องใช้กล่อง Docker, QA Lab, การใช้งานจริง, ข้ามระบบปฏิบัติการ หรือแพ็กเกจ ใช้คำสั่งแรกสำหรับ CI โดยตรงที่ไม่รวม Android เพิ่ม include_android=true เมื่อ CI ของ release candidate ที่รันโดยตรงต้องครอบคลุม Android:
gh workflow run ci.yml --ref main -f target_ref=release/YYYY.M.PATCHgh workflow run ci.yml --ref main -f target_ref=release/YYYY.M.PATCH -f include_android=trueDocker
กล่อง Docker อยู่ใน OpenClaw Release Checks ถึง openclaw-live-and-e2e-checks-reusable.yml รวมถึงเวิร์กโฟลว์โหมดรีลีส install-smoke กล่องนี้ตรวจสอบ release candidate ผ่านสภาพแวดล้อม Docker ที่จัดแพ็กเกจแล้ว แทนการใช้เฉพาะการทดสอบระดับซอร์ส
ความครอบคลุมของ Docker สำหรับรีลีสประกอบด้วย:
- การทดสอบ smoke การติดตั้งแบบเต็ม โดยเปิดใช้การทดสอบ smoke การติดตั้ง Bun แบบ global ที่ทำงานช้า
- การเตรียม/ใช้ซ้ำอิมเมจ smoke จาก Dockerfile รากตาม target SHA โดยงาน smoke สำหรับ QR, root/gateway และ installer/Bun ทำงานเป็น shard ของ install-smoke แยกกัน
- เลน E2E ของรีโพซิทอรี
- ส่วนย่อย Docker ตามเส้นทางรีลีส:
core,package-update-openai,package-update-anthropic,package-update-core,plugins-runtime-plugins,plugins-runtime-services,plugins-runtime-install-aถึงplugins-runtime-install-hและopenwebui - ความครอบคลุม OpenWebUI บน runner เฉพาะที่มีดิสก์ขนาดใหญ่เมื่อมีการร้องขอ
- เลนติดตั้ง/ถอนการติดตั้ง Plugin ที่รวมมาในแพ็กเกจแบบแยกส่วน
bundled-plugin-install-uninstall-0ถึงbundled-plugin-install-uninstall-23 - ชุดทดสอบผู้ให้บริการแบบใช้งานจริง/E2E และความครอบคลุมโมเดลจริงใน Docker เมื่อการตรวจสอบรีลีสรวมชุดทดสอบแบบใช้งานจริง
ใช้อาร์ติแฟกต์ Docker ก่อนรันซ้ำ ตัวกำหนดตารางเวลาตามเส้นทางรีลีสจะอัปโหลด .artifacts/docker-tests/ พร้อมบันทึกของเลน, summary.json, failures.json, เวลาของแต่ละเฟส, JSON แผนตัวกำหนดตารางเวลา และคำสั่งรันซ้ำ สำหรับการกู้คืนแบบเจาะจง ให้ใช้ docker_lanes=<lane[,lane]> กับเวิร์กโฟลว์แบบใช้งานจริง/E2E ที่ใช้ซ้ำได้ แทนการรันส่วนย่อยของรีลีสทั้งหมดซ้ำ คำสั่งรันซ้ำที่สร้างขึ้นจะรวม package_artifact_run_id ก่อนหน้าและอินพุตอิมเมจ Docker ที่เตรียมไว้เมื่อมี เพื่อให้เลนที่ล้มเหลวใช้ tarball และอิมเมจ GHCR ชุดเดิมซ้ำได้
QA Lab
กล่อง QA Lab เป็นส่วนหนึ่งของ OpenClaw Release Checks เช่นกัน กล่องนี้เป็นเกตการรีลีสสำหรับพฤติกรรมเชิงเอเจนต์และระดับช่องทาง ซึ่งแยกจากกลไกแพ็กเกจของ Vitest และ Docker
ความครอบคลุม QA Lab สำหรับรีลีสประกอบด้วย:
- เลนความเท่าเทียมแบบจำลองที่เปรียบเทียบเลน candidate ของ OpenAI กับ baseline
anthropic/claude-opus-4-8โดยใช้ชุดทดสอบความเท่าเทียมเชิงเอเจนต์ - โปรไฟล์รีลีสของอะแดปเตอร์จริง Matrix โดยใช้สภาพแวดล้อม
qa-live-shared - เลน QA ของ Telegram แบบใช้งานจริงโดยใช้การเช่าข้อมูลประจำตัว Convex CI
pnpm qa:otel:smoke,pnpm qa:otel:collector-smoke,pnpm qa:prometheus:smokeหรือpnpm qa:observability:smokeเมื่อ telemetry ของรีลีสต้องการหลักฐานภายในเครื่องอย่างชัดเจน
ใช้กล่องนี้เพื่อตอบว่า "รีลีสทำงานถูกต้องในสถานการณ์ QA และโฟลว์ช่องทางแบบใช้งานจริงหรือไม่" เก็บ URL อาร์ติแฟกต์ของเลนความเท่าเทียม, Matrix และ Telegram ไว้เมื่ออนุมัติรีลีส ความครอบคลุม Matrix แบบเต็มยังคงมีให้ใช้เป็นการรัน QA Lab แบบแบ่ง shard ด้วยตนเอง แทนที่จะเป็นเลนวิกฤตต่อรีลีสตามค่าเริ่มต้น
แพ็กเกจ
กล่อง Package คือเกตสำหรับผลิตภัณฑ์ที่ติดตั้งได้ โดยใช้ Package Acceptance และตัวแก้ไข scripts/resolve-openclaw-package-candidate.mjs ตัวแก้ไขจะปรับ candidate ให้อยู่ในรูป tarball package-under-test ที่ Docker E2E ใช้ ตรวจสอบรายการภายในแพ็กเกจ บันทึกเวอร์ชันแพ็กเกจและ SHA-256 และแยก ref ของชุดควบคุมเวิร์กโฟลว์ออกจาก ref ของซอร์สแพ็กเกจ
แหล่งที่มาของ candidate ที่รองรับ:
source=npm:openclaw@beta,openclaw@latestหรือเวอร์ชันรีลีส OpenClaw ที่ระบุชัดเจนsource=ref: แพ็ก branch, tag หรือ commit SHA แบบเต็มของpackage_refที่เชื่อถือได้ ด้วยชุดควบคุมworkflow_refที่เลือกsource=url: ดาวน์โหลด.tgzผ่าน HTTPS สาธารณะโดยต้องมีpackage_sha256; ระบบจะปฏิเสธข้อมูลประจำตัวใน URL, พอร์ต HTTPS ที่ไม่ใช่ค่าเริ่มต้น, ชื่อโฮสต์หรือแอดเดรสที่แก้ไขได้ซึ่งเป็นแบบ private/internal/special-use และการเปลี่ยนเส้นทางที่ไม่ปลอดภัยsource=trusted-url: ดาวน์โหลด.tgzผ่าน HTTPS โดยต้องมีpackage_sha256และtrusted_source_idจากนโยบายที่ระบุชื่อใน.github/package-trusted-sources.json; ใช้ตัวเลือกนี้สำหรับมิเรอร์องค์กรหรือรีโพซิทอรีแพ็กเกจส่วนตัวที่ผู้ดูแลเป็นเจ้าของ แทนการเพิ่มตัวเลือกข้ามข้อจำกัดเครือข่ายส่วนตัวระดับอินพุตให้กับsource=urlsource=artifact: ใช้.tgzที่อัปโหลดโดยการรัน GitHub Actions อื่นซ้ำ
OpenClaw Release Checks รัน Package Acceptance ด้วย source=artifact, อาร์ติแฟกต์แพ็กเกจรีลีสที่เตรียมไว้, suite_profile=custom, docker_lanes=doctor-switch update-channel-switch skill-install update-corrupt-plugin upgrade-survivor published-upgrade-survivor root-managed-vps-upgrade update-restart-auth plugins-offline plugin-update plugin-binding-command-escape, telegram_mode=mock-openai Package Acceptance จะคงการตรวจสอบ migration, update, การอัปเกรด VPS ที่จัดการโดย root, การรีสตาร์ตหลังอัปเดตเมื่อกำหนดค่าการยืนยันตัวตนแล้ว, การติดตั้ง ClawHub skill แบบใช้งานจริง, การล้าง dependency ของ Plugin ที่ล้าสมัย, fixture ของ Plugin แบบออฟไลน์, การอัปเดต Plugin, การเสริมความแข็งแกร่งต่อการหลบเลี่ยงการผูกคำสั่งของ Plugin และ QA ของแพ็กเกจ Telegram โดยใช้ tarball ที่แก้ไขแล้วชุดเดียวกัน การตรวจสอบรีลีสแบบบล็อกจะใช้ baseline ของแพ็กเกจล่าสุดที่เผยแพร่ตามค่าเริ่มต้น ส่วนโปรไฟล์ beta ที่ใช้ run_release_soak=true, release_profile=stable หรือ release_profile=full จะขยายการกวาดตรวจผู้รอดจากการอัปเกรดแพ็กเกจที่เผยแพร่แล้วไปยัง last-stable-4 รวมถึง baseline ที่ปักหมุด 2026.4.23, 2026.5.2 และ 2026.4.15 พร้อมสถานการณ์ reported-issues ใช้ Package Acceptance กับ source=npm สำหรับ candidate ที่เผยแพร่แล้ว, source=ref สำหรับ tarball npm ภายในเครื่องที่อิง SHA ก่อนเผยแพร่, source=trusted-url สำหรับมิเรอร์องค์กร/ส่วนตัวที่ผู้ดูแลเป็นเจ้าของ หรือ source=artifact สำหรับ tarball ที่เตรียมไว้และอัปโหลดโดยการรัน GitHub Actions อื่น
กล่องนี้เป็นตัวแทนแบบ GitHub-native สำหรับความครอบคลุมการทดสอบแพ็กเกจ/อัปเดตส่วนใหญ่ที่ก่อนหน้านี้ต้องใช้ Parallels การตรวจสอบรีลีสข้ามระบบปฏิบัติการยังสำคัญต่อการเริ่มต้นใช้งาน ตัวติดตั้ง และพฤติกรรมเฉพาะแพลตฟอร์ม แต่การตรวจสอบผลิตภัณฑ์ด้านแพ็กเกจ/อัปเดตควรเลือกใช้ Package Acceptance
รายการตรวจสอบมาตรฐานสำหรับการตรวจสอบอัปเดตและ Plugin คือ การทดสอบอัปเดตและ Plugin ใช้รายการนี้เมื่อตัดสินใจว่าเลนภายในเครื่อง, Docker, Package Acceptance หรือการตรวจสอบรีลีสใดสามารถพิสูจน์การติดตั้ง/อัปเดต Plugin, การล้างข้อมูลโดย doctor หรือการเปลี่ยนแปลง migration ของแพ็กเกจที่เผยแพร่แล้วได้ การย้ายข้อมูลอัปเดตที่เผยแพร่แล้วอย่างละเอียดจากทุกแพ็กเกจ stable 2026.4.23+ เป็นเวิร์กโฟลว์แบบแมนนวล Update Migration ที่แยกต่างหาก และไม่ได้เป็นส่วนหนึ่งของ Full Release CI
การผ่อนปรนของ package-acceptance แบบเดิมถูกจำกัดเวลาโดยเจตนา แพ็กเกจจนถึง 2026.4.25 อาจใช้เส้นทางความเข้ากันได้สำหรับช่องว่างของข้อมูลเมตาที่เผยแพร่ไปยัง npm แล้ว ได้แก่ รายการสินค้าคงคลัง QA แบบ private ที่ไม่มีใน tarball, ไม่มี gateway install --wrapper, ไม่มีไฟล์ patch ใน fixture git ที่ได้จาก tarball, ไม่มี update.channel ที่จัดเก็บอย่างถาวร, ตำแหน่งระเบียนการติดตั้ง Plugin แบบเดิม, ไม่มีการจัดเก็บระเบียนการติดตั้ง marketplace อย่างถาวร และ migration ของข้อมูลเมตาการกำหนดค่าระหว่าง plugins update แพ็กเกจ 2026.4.26 ที่เผยแพร่แล้วอาจแจ้งเตือนเรื่องไฟล์ตราประทับข้อมูลเมตาของ build ภายในเครื่องที่เผยแพร่ไปแล้ว แพ็กเกจหลังจากนั้นต้องเป็นไปตามสัญญาแพ็กเกจสมัยใหม่ ช่องว่างเดิมเหล่านั้นจะทำให้การตรวจสอบรีลีสล้มเหลว
ใช้โปรไฟล์ Package Acceptance ที่กว้างขึ้นเมื่อคำถามเกี่ยวกับรีลีสเป็นเรื่องของแพ็กเกจที่ติดตั้งได้จริง:
gh workflow run package-acceptance.yml \ --ref main \ -f workflow_ref=main \ -f source=npm \ -f package_spec=openclaw@beta \ -f suite_profile=product \ -f [email protected]โปรไฟล์แพ็กเกจที่ใช้บ่อย:
smoke: เลนสำหรับการติดตั้งแพ็กเกจ/ช่องทาง/เอเจนต์อย่างรวดเร็ว เครือข่าย Gateway และการโหลดการกำหนดค่าใหม่package: สัญญาการติดตั้ง/อัปเดต/รีสตาร์ต/แพ็กเกจ Plugin พร้อมหลักฐานการติดตั้ง Skills จาก ClawHub แบบสด; นี่คือค่าเริ่มต้นของการตรวจสอบรีลีสproduct:packageพร้อมช่องทาง MCP, การล้าง cron/เอเจนต์ย่อย, การค้นหาเว็บของ OpenAI และ OpenWebUIfull: ส่วนย่อยของเส้นทางรีลีส Docker พร้อม OpenWebUIcustom: รายการdocker_lanesที่ตรงตามที่กำหนดสำหรับการรันซ้ำแบบเจาะจง
สำหรับหลักฐาน Telegram ของแพ็กเกจที่เป็นตัวเลือก ให้เปิดใช้ telegram_mode=mock-openai หรือ telegram_mode=live-frontier ใน Package Acceptance เวิร์กโฟลว์จะส่ง tarball package-under-test ที่ได้รับการระบุแล้วไปยังเลน Telegram; เวิร์กโฟลว์ Telegram แบบสแตนด์อโลนยังคงยอมรับข้อมูลจำเพาะ npm ที่เผยแพร่แล้วสำหรับการตรวจสอบหลังเผยแพร่
ระบบอัตโนมัติสำหรับการเผยแพร่รีลีสตามปกติ
สำหรับการเผยแพร่เบตา, latest, Plugin, GitHub Release และแพลตฟอร์ม
OpenClaw Release Publish คือจุดเริ่มต้นปกติที่มีการเปลี่ยนแปลงข้อมูล เส้นทาง extended-stable รายเดือน
.33+ ซึ่งใช้เฉพาะ npm ไม่ใช้ตัวประสานงานนี้
เวิร์กโฟลว์ปกติจะประสานเวิร์กโฟลว์ trusted-publisher ตามลำดับที่
รีลีสต้องการ:
- เช็กเอาต์แท็กรีลีสและระบุ SHA ของคอมมิต
- ตรวจสอบว่าแท็กเข้าถึงได้จาก
mainหรือrelease/*(หรือสาขาอัลฟาของ Tideclaw สำหรับอัลฟาพรีรีลีส) - รัน
pnpm plugins:sync:check - สั่งรัน
Plugin NPM Releaseด้วยpublish_scope=all-publishableและref=<release-sha> - สั่งรัน
Plugin ClawHub Releaseด้วยขอบเขตและ SHA เดียวกัน - สั่งรัน
OpenClaw NPM Releaseด้วยแท็กรีลีส, npm dist-tag และpreflight_run_idที่บันทึกไว้ หลังจากตรวจสอบfull_release_validation_run_idที่บันทึกไว้และครั้งที่รันอย่างตรงกัน - สำหรับรีลีสเสถียร ให้สร้างหรืออัปเดต GitHub release เป็นฉบับร่าง สั่งรัน
Windows Node Releaseด้วยwindows_node_tagที่ระบุชัดเจนและwindows_node_installer_digestsที่ตัวเลือกได้รับการอนุมัติ และตรวจสอบแอสเซ็ตตัวติดตั้ง/เช็กซัม Windows มาตรฐาน นอกจากนี้ ให้สั่งรันAndroid Releaseเพื่อสร้าง APK ที่ลงนามแล้วจากแท็กที่ตรงกัน พร้อมเช็กซัมและข้อมูลแหล่งที่มา ตรวจสอบสัญญาแอสเซ็ตเนทีฟทั้งสองก่อนเผยแพร่ฉบับร่าง
ตัวอย่างการเผยแพร่เบตา:
gh workflow run openclaw-release-publish.yml \ --ref main \ -f tag=vYYYY.M.PATCH-beta.N \ -f preflight_run_id=<successful-openclaw-npm-preflight-run-id> \ -f full_release_validation_run_id=<successful-full-release-validation-run-id> \ -f full_release_validation_run_attempt=<successful-full-release-validation-run-attempt> \ -f npm_dist_tag=betaการเผยแพร่รีลีสเสถียรไปยัง beta dist-tag เริ่มต้น:
gh workflow run openclaw-release-publish.yml \ --ref main \ -f tag=vYYYY.M.PATCH \ -f windows_node_tag=vX.Y.Z \ -f windows_node_installer_digests='{"OpenClawCompanion-Setup-x64.exe":"sha256:<approved-x64-sha256>","OpenClawCompanion-Setup-arm64.exe":"sha256:<approved-arm64-sha256>"}' \ -f preflight_run_id=<successful-openclaw-npm-preflight-run-id> \ -f full_release_validation_run_id=<successful-full-release-validation-run-id> \ -f full_release_validation_run_attempt=<successful-full-release-validation-run-attempt> \ -f npm_dist_tag=betaการเลื่อนรีลีสเสถียรไปยัง latest โดยตรงต้องระบุอย่างชัดเจน:
gh workflow run openclaw-release-publish.yml \ --ref main \ -f tag=vYYYY.M.PATCH \ -f windows_node_tag=vX.Y.Z \ -f windows_node_installer_digests='{"OpenClawCompanion-Setup-x64.exe":"sha256:<approved-x64-sha256>","OpenClawCompanion-Setup-arm64.exe":"sha256:<approved-arm64-sha256>"}' \ -f preflight_run_id=<successful-openclaw-npm-preflight-run-id> \ -f full_release_validation_run_id=<successful-full-release-validation-run-id> \ -f full_release_validation_run_attempt=<successful-full-release-validation-run-attempt> \ -f npm_dist_tag=latestใช้เวิร์กโฟลว์ระดับล่าง Plugin NPM Release และ Plugin ClawHub Release เฉพาะสำหรับงานซ่อมแซมหรือเผยแพร่ซ้ำแบบเจาะจงเท่านั้น OpenClaw Release Publish จะปฏิเสธ plugin_publish_scope=selected เมื่อ publish_openclaw_npm=true เพื่อไม่ให้แพ็กเกจหลักจัดส่งโดยไม่มี Plugin ทางการที่เผยแพร่ได้ครบทุกตัว รวมถึง @openclaw/diffs-language-pack สำหรับการซ่อมแซม Plugin ที่เลือก ให้ตั้งค่า publish_openclaw_npm=false พร้อม plugin_publish_scope=selected และ plugins=@openclaw/name หรือสั่งรันเวิร์กโฟลว์ลูกโดยตรง
การบูตสแตรป ClawHub สำหรับการเผยแพร่ครั้งแรกเป็นข้อยกเว้น: สั่งรัน Plugin ClawHub New
จาก main ที่เชื่อถือได้ และส่ง SHA เต็มของรีลีสเป้าหมายผ่าน ref
ห้ามรันเวิร์กโฟลว์บูตสแตรปจากแท็กหรือสาขารีลีสโดยตรง:
gh workflow run plugin-clawhub-new.yml \ --ref main \ -f plugins=@openclaw/name \ -f ref=<full-40-character-release-sha> \ -f pretag_validation=true \ -f dry_run=trueการตรวจสอบก่อนสร้างแท็กกำหนดให้ใช้ dry_run=true ปฏิเสธอินพุตแท็กรีลีสและการรันแม่
และยอมรับเฉพาะเป้าหมายที่ตรงกันและเข้าถึงได้จาก main หรือ release/*
โดยจะไม่โหลดข้อมูลประจำตัว ClawHub, เผยแพร่ไบต์ของแพ็กเกจ หรือเปลี่ยนการกำหนดค่า
trusted publisher เวิร์กโฟลว์ยังคงระบุแผนรีจิสทรีจริง
เช็กเอาต์และแพ็กเป้าหมายเฉพาะในงานที่ไม่มีข้อมูลลับ จัดเตรียม
ชุดเครื่องมือ ClawHub ที่ล็อกไว้ และตรวจสอบอาร์ติแฟกต์แบบเปลี่ยนแปลงไม่ได้และ
สลัก/ข้อมูลประจำตัวของแพ็กเกจก่อนมีแท็กรีลีส อนุมัติสภาพแวดล้อม
clawhub-plugin-bootstrap หลังจากงานแพ็กที่ไม่มีข้อมูลลับ
เสร็จสิ้นแล้วเท่านั้น; งานตรวจสอบที่ได้รับการป้องกันนี้ไม่มีข้อมูลประจำตัวหรือคำสั่งเปลี่ยนแปลงข้อมูล
การทดลองรันที่ได้รับอนุมัติหรือการบูตสแตรปจริงหลังสร้างแท็กต้องระบุ
แท็กรีลีสที่ตรงกัน พร้อม ID การรัน, ครั้งที่รัน และ
สาขาของ OpenClaw Release Publish แม่ ตัวแม่รับรอง SHA ของเวิร์กโฟลว์ตนเองและ SHA ที่เชื่อถือได้ซึ่งตรงกัน
แยกต่างหากของ main สำหรับ Plugin ClawHub New; การรันลูกและการอนุมัติ
สภาพแวดล้อมที่ได้รับการป้องกันทุกรายการต้องตรงกับ SHA ของลูกที่ได้รับอนุมัตินั้น แท็กรีลีสจะได้รับ
การตรวจสอบซ้ำก่อนการพยายามเผยแพร่และการเปลี่ยนแปลง trusted-publisher ทุกครั้ง
งานแพ็ก
อัปโหลดอาร์ติแฟกต์แบบเปลี่ยนแปลงไม่ได้หนึ่งรายการ โดยส่งชื่อ, ID/ไดเจสต์ของอาร์ติแฟกต์ Actions,
การรัน/ครั้งที่รันของผู้สร้าง, SHA เป้าหมาย และ SHA-256/ขนาดของ tarball ต่อแพ็กเกจ
ไปยังงานตรวจสอบและงานที่ได้รับการป้องกัน งานที่ได้รับการป้องกันจะเช็กเอาต์เฉพาะเครื่องมือ main
ที่เชื่อถือได้ ตรวจสอบทูเพิลของอาร์ติแฟกต์ผ่าน GitHub API ดาวน์โหลด
ด้วย ID อาร์ติแฟกต์ที่ตรงกัน แฮช tarball ทุกไฟล์ซ้ำ และตรวจสอบพาธ TAR ภายในเครื่องและ
ข้อมูลประจำตัวของแพ็กเกจด้วยกฎการทำให้ USTAR เป็นรูปแบบมาตรฐานของ CLI ที่ปักหมุดไว้ จากนั้นตัวเลือก
ทุกรายการจะผ่านการทดลองเผยแพร่ของ CLI ที่ปักหมุดไว้ ซึ่งจะส่งคืนผลก่อน
การค้นหารีจิสทรีหรือการตรวจสอบสิทธิ์ ตัวกรองล่วงหน้าของงานข้อมูลประจำตัวจำกัด ClawPack ที่บีบอัดไว้
ที่ 120 MiB, เพย์โหลดไฟล์รวมที่ 50 MiB, ข้อมูล TAR เมื่อขยายแล้วที่ 64 MiB และ
จำนวนรายการ TAR ที่ 10,000 การซ่อมแซม trusted-publisher ของแพ็กเกจที่มีอยู่ยังคง
เป็นการกำหนดค่าเท่านั้น แต่ยังคงแพ็กเป้าหมายและกำหนดให้แท็กที่ร้องขอ
ตรงกับไบต์และเมทาดาทาของรีจิสทรีอย่างสมบูรณ์ก่อนเปลี่ยนการกำหนดค่า trusted-publisher
การตรวจสอบหลังเผยแพร่จะดาวน์โหลดอาร์ติแฟกต์ ClawHub และ
กำหนดให้ SHA-256 และขนาดตรงกัน การกู้คืนด้วยการรันงานที่ล้มเหลวซ้ำอาจใช้อาร์ติแฟกต์แพ็กเกจ
จากครั้งก่อนหน้าได้เฉพาะเมื่องานผู้สร้างที่ตรงกันเสร็จสมบูรณ์
สำเร็จแล้วเท่านั้น หลักฐานขั้นสุดท้ายยังผูกเวอร์ชัน ClawHub ที่ล็อกไว้, SHA-256 ของล็อก
และความสมบูรณ์ของ npm หากไม่ตรงกันต้องใช้แพ็กเกจเวอร์ชันใหม่
อินพุตเวิร์กโฟลว์ NPM
OpenClaw NPM Release ยอมรับอินพุตที่ควบคุมโดยผู้ปฏิบัติงานดังต่อไปนี้:
tag: แท็กรีลีสที่จำเป็น เช่นv2026.4.2,v2026.4.2-1,v2026.4.2-beta.1หรือv2026.4.2-alpha.1; เมื่อpreflight_only=trueค่านี้อาจเป็น SHA ของคอมมิตปัจจุบันบนสาขาเวิร์กโฟลว์แบบเต็ม 40 อักขระสำหรับการตรวจสอบก่อนดำเนินการเท่านั้นpreflight_only:trueสำหรับการตรวจสอบ/บิลด์/แพ็กเกจเท่านั้น,falseสำหรับเส้นทางเผยแพร่จริงpreflight_run_id: ID การรันก่อนดำเนินการที่สำเร็จและมีอยู่แล้ว ซึ่งจำเป็นในเส้นทางเผยแพร่จริง เพื่อให้เวิร์กโฟลว์นำ tarball ที่เตรียมไว้กลับมาใช้แทนการสร้างใหม่full_release_validation_run_id: ID การรันFull Release Validationที่สำเร็จสำหรับแท็ก/SHA นี้ ซึ่งจำเป็นสำหรับการเผยแพร่จริง การเผยแพร่เบตาอาจดำเนินต่อโดยมีเพียงการตรวจสอบก่อนดำเนินการพร้อมคำเตือน แต่การเลื่อนรีลีสเสถียร/latestยังคงจำเป็นต้องใช้ค่านี้full_release_validation_run_attempt: ครั้งที่รันซึ่งเป็นจำนวนบวกที่ตรงกันและจับคู่กับfull_release_validation_run_id; จำเป็นทุกครั้งที่ระบุ ID การรัน เพื่อไม่ให้การรันซ้ำเปลี่ยนหลักฐานการอนุญาตระหว่างการเผยแพร่release_publish_run_id: ID การรันOpenClaw Release Publishที่ได้รับอนุมัติ; จำเป็นเมื่อเวิร์กโฟลว์นี้ถูกสั่งรันโดยตัวแม่นั้น (การเรียกเผยแพร่จริงโดยตัวกระทำที่เป็นบอต)plugin_npm_run_id: ID การรันPlugin NPM Releaseที่ส่วนหัวตรงกันและสำเร็จ; จำเป็นสำหรับการเผยแพร่หลักextended-stableจริงnpm_dist_tag: แท็กเป้าหมาย npm สำหรับเส้นทางเผยแพร่; ยอมรับalpha,beta,latestหรือextended-stableและมีค่าเริ่มต้นเป็นbetaแพตช์สุดท้าย33และใหม่กว่าต้องใช้extended-stable; โดยค่าเริ่มต้นextended-stableจะปฏิเสธแพตช์ก่อนหน้า และจะปฏิเสธแท็กที่ไม่ใช่แท็กสุดท้ายเสมอbypass_extended_stable_guard: ค่าบูลีนสำหรับการทดสอบเท่านั้น มีค่าเริ่มต้นเป็นfalse; เมื่อใช้กับnpm_dist_tag=extended-stableจะข้ามเกณฑ์คุณสมบัติ extended-stable รายเดือน โดยยังคงการตรวจสอบข้อมูลประจำตัวรีลีส, อาร์ติแฟกต์, การอนุมัติ และการอ่านกลับไว้
Plugin NPM Release ยอมรับ npm_dist_tag=default สำหรับพฤติกรรมรีลีส
ที่มีอยู่ หรือ npm_dist_tag=extended-stable สำหรับเส้นทางรายเดือนที่มีการป้องกัน
ตัวเลือก extended-stable กำหนดให้ใช้ publish_scope=all-publishable, มีอินพุต
plugins ว่าง, เป็นแพตช์สุดท้ายที่ 33 หรือสูงกว่า และอยู่บนสาขา
extended-stable/YYYY.M.33 มาตรฐานที่ส่วนปลายตรงกัน โดยจะไม่ย้าย
latest หรือ beta ของ Plugin แพ็กเกจเวอร์ชันใหม่จะได้รับ extended-stable แบบอะตอม
ผ่านการเผยแพร่ที่เชื่อถือได้ด้วย OIDC (npm publish --tag extended-stable); เวิร์กโฟลว์ต้นทางนี้
ไม่ใช้ npm dist-tag add ที่ตรวจสอบสิทธิ์ด้วยโทเค็น การลองใหม่
จะข้ามเวอร์ชันที่ตรงกันซึ่งมีอยู่แล้วใน npm จากนั้นจะล้มเหลวแบบปิด เว้นแต่การอ่านกลับอย่างสมบูรณ์
จะยืนยันว่าทุกแพ็กเกจและแท็ก extended-stable ที่ตรงกันได้ลู่เข้าสู่สถานะเดียวกันแล้ว
OpenClaw Release Publish ยอมรับอินพุตที่ควบคุมโดยผู้ปฏิบัติงานดังต่อไปนี้:
tag: แท็กรีลีสที่จำเป็น; ต้องมีอยู่แล้วpreflight_run_id: ID การรันก่อนดำเนินการOpenClaw NPM Releaseที่สำเร็จ; จำเป็นเมื่อpublish_openclaw_npm=trueหรือplugin_publish_scope=all-publishablefull_release_validation_run_id: ID การรันFull Release Validationที่สำเร็จ; จำเป็นเมื่อpublish_openclaw_npm=trueหรือplugin_publish_scope=all-publishablefull_release_validation_run_attempt: ครั้งที่รันซึ่งเป็นจำนวนบวกที่ตรงกันและจับคู่กับfull_release_validation_run_id; จำเป็นทุกครั้งที่ระบุ ID การรันwindows_node_tag: แท็กรีลีสopenclaw/openclaw-windows-nodeที่ไม่ใช่พรีรีลีสและตรงกัน; จำเป็นสำหรับการเผยแพร่ OpenClaw แบบเสถียรwindows_node_installer_digests: แมป JSON แบบกะทัดรัดที่ตัวเลือกได้รับการอนุมัติ ซึ่งแมปชื่อตัวติดตั้ง Windows ปัจจุบันกับไดเจสต์sha256:ที่ปักหมุดไว้; จำเป็นสำหรับการเผยแพร่ OpenClaw แบบเสถียรnpm_telegram_run_id: ID การรันNPM Telegram Beta E2Eที่สำเร็จและเป็นตัวเลือก เพื่อรวมไว้ในหลักฐานรีลีสขั้นสุดท้ายnpm_dist_tag: แท็กเป้าหมาย npm สำหรับแพ็กเกจ OpenClaw ซึ่งเป็นหนึ่งในalpha,betaหรือlatestplugin_publish_scope: มีค่าเริ่มต้นเป็นall-publishable; ใช้selectedเฉพาะสำหรับงานซ่อมแซม Plugin แบบเจาะจงเท่านั้นพร้อมกับpublish_openclaw_npm=falseplugins: ชื่อแพ็กเกจ@openclaw/*ที่คั่นด้วยจุลภาค เมื่อplugin_publish_scope=selectedpublish_openclaw_npm: มีค่าเริ่มต้นเป็นtrue; ตั้งเป็นfalseเฉพาะเมื่อใช้เวิร์กโฟลว์เป็นตัวประสานงานการซ่อมแซมเฉพาะ Pluginrelease_profile: โปรไฟล์ความครอบคลุมของรีลีสที่ใช้สำหรับสรุปหลักฐานรีลีส; มีค่าเริ่มต้นเป็นfrom-validationซึ่งอ่านค่าจากแมนิเฟสต์การตรวจสอบ หรือแทนที่ด้วยbeta,stableหรือfullwait_for_clawhub: มีค่าเริ่มต้นเป็นfalseเพื่อไม่ให้ความพร้อมใช้งานของ npm ถูกบล็อกโดยไซด์คาร์ ClawHub; ตั้งเป็นtrueเฉพาะเมื่อการเสร็จสิ้นเวิร์กโฟลว์ต้องรวมการเสร็จสิ้นของ ClawHub ด้วย
OpenClaw Release Checks ยอมรับอินพุตที่ควบคุมโดยผู้ปฏิบัติงานดังต่อไปนี้:
ref: แบรนช์ แท็ก หรือ SHA ของคอมมิตแบบเต็มที่จะตรวจสอบ การตรวจสอบที่ใช้ข้อมูลลับกำหนดให้คอมมิตที่แก้ไขแล้วต้องเข้าถึงได้จากแบรนช์หรือแท็กรีลีสของ OpenClawrun_release_soak: เลือกใช้การทดสอบสด/E2E แบบครอบคลุม เส้นทางรีลีส Docker และการทดสอบ soak การอยู่รอดหลังอัปเกรดทั้งหมดนับตั้งแต่ต้นสำหรับการตรวจสอบรีลีสเบตา ตัวเลือกนี้จะถูกบังคับเปิดโดยrelease_profile=stableและrelease_profile=full
กฎ:
- เวอร์ชันสุดท้ายและเวอร์ชันแก้ไขปกติที่มีแพตช์ต่ำกว่า
33สามารถเผยแพร่ไปยังbetaหรือlatestได้ เวอร์ชันสุดท้ายที่มีแพตช์33ขึ้นไปต้องเผยแพร่ไปยังextended-stableและเวอร์ชันที่มีส่วนต่อท้ายสำหรับการแก้ไข ณ ขอบเขตดังกล่าวจะถูกปฏิเสธ - แท็กพรีรีลีสเบตาสามารถเผยแพร่ไปยัง
betaเท่านั้น ส่วนแท็กพรีรีลีสอัลฟาสามารถเผยแพร่ไปยังalphaเท่านั้น - สำหรับ
OpenClaw NPM Releaseอนุญาตให้ป้อน SHA ของคอมมิตแบบเต็มได้เฉพาะเมื่อpreflight_only=true OpenClaw Release ChecksและFull Release Validationใช้สำหรับการตรวจสอบเท่านั้นเสมอ- เส้นทางเผยแพร่จริงต้องใช้
npm_dist_tagเดียวกับที่ใช้ระหว่างการตรวจสอบก่อนเริ่มงาน โดยเวิร์กโฟลว์จะตรวจสอบข้อมูลเมตาดังกล่าวก่อนดำเนินการเผยแพร่ต่อ
ลำดับการรีลีสเบตา/เสถียรล่าสุดแบบปกติ
ลำดับแบบเดิมนี้ใช้สำหรับรีลีสแบบประสานงานปกติ ซึ่งยังครอบคลุม Plugin, GitHub Release, Windows และงานสำหรับแพลตฟอร์มอื่นด้วย ไม่ใช่เส้นทางเสถียรระยะยาวแบบ npm เท่านั้นรายเดือน .33+ ที่จัดทำเอกสารไว้ด้านบนของหน้านี้
เมื่อจัดทำรีลีสเสถียรแบบประสานงานปกติ:
- เรียกใช้
OpenClaw NPM Releaseพร้อมpreflight_only=trueก่อนที่จะมีแท็ก สามารถใช้ SHA ของคอมมิตแบบเต็มปัจจุบันของแบรนช์เวิร์กโฟลว์เพื่อทดลองรันเวิร์กโฟลว์ตรวจสอบก่อนเริ่มงานสำหรับการตรวจสอบเท่านั้น - เลือก
npm_dist_tag=betaสำหรับขั้นตอนปกติที่เริ่มจากเบตา หรือเลือกlatestเฉพาะเมื่อตั้งใจเผยแพร่เวอร์ชันเสถียรโดยตรง - เรียกใช้
Full Release Validationบนแบรนช์รีลีส แท็กรีลีส หรือ SHA ของคอมมิตแบบเต็ม เมื่อต้องการ CI ปกติพร้อมการครอบคลุมแคชพรอมต์แบบสด, Docker, QA Lab, Matrix และ Telegram จากเวิร์กโฟลว์แบบเรียกใช้ด้วยตนเองรายการเดียว หากตั้งใจต้องการเฉพาะกราฟการทดสอบปกติที่ให้ผลลัพธ์แน่นอน ให้เรียกใช้เวิร์กโฟลว์CIแบบเรียกใช้ด้วยตนเองบนรีลีส ref แทน - เลือกแท็กรีลีส
openclaw/openclaw-windows-nodeที่ไม่ใช่พรีรีลีสอย่างเจาะจง ซึ่งควรจัดส่งตัวติดตั้ง x64 และ ARM64 ที่ลงนามแล้ว บันทึกแท็กดังกล่าวเป็นwindows_node_tagและบันทึกแมปไดเจสต์ที่ผ่านการตรวจสอบเป็นwindows_node_installer_digestsตัวช่วยรีลีสแคนดิเดตจะบันทึกทั้งสองรายการและรวมไว้ในคำสั่งเผยแพร่ที่สร้างขึ้น - บันทึก
preflight_run_id,full_release_validation_run_idที่สำเร็จ และfull_release_validation_run_attemptที่ตรงกันทุกประการ - เรียกใช้
OpenClaw Release Publishจากmainที่เชื่อถือได้ โดยใช้tagเดิม,npm_dist_tagเดิม,windows_node_tagที่เลือก,windows_node_installer_digestsที่บันทึกไว้ของรายการนั้น,preflight_run_idที่บันทึกไว้,full_release_validation_run_idและfull_release_validation_run_attemptระบบจะเผยแพร่ Plugin ที่แยกออกไปยัง npm และ ClawHub ก่อนโปรโมตแพ็กเกจ OpenClaw บน npm - หากรีลีสลงที่
betaให้ใช้เวิร์กโฟลว์openclaw/releases/.github/workflows/openclaw-npm-dist-tags.ymlเพื่อโปรโมตเวอร์ชันเสถียรนั้นจากbetaไปยังlatest - หากตั้งใจเผยแพร่รีลีสไปยัง
latestโดยตรง และbetaควรใช้บิลด์เสถียรเดียวกันทันที ให้ใช้เวิร์กโฟลว์รีลีสเดียวกันนั้นเพื่อชี้ dist-tag ทั้งสองไปยังเวอร์ชันเสถียร หรือปล่อยให้การซิงค์ซ่อมแซมตนเองตามกำหนดการย้ายbetaในภายหลัง
การเปลี่ยนแปลง dist-tag อยู่ในรีโพซิทอรีบัญชีแยกประเภทรีลีส เนื่องจากยังคงต้องใช้ NPM_TOKEN ขณะที่รีโพซิทอรีซอร์สยังคงใช้การเผยแพร่แบบ OIDC เท่านั้น วิธีนี้ทำให้ทั้งเส้นทางเผยแพร่โดยตรงและเส้นทางโปรโมตที่เริ่มจากเบตามีเอกสารกำกับและผู้ปฏิบัติงานมองเห็นได้
หากผู้ดูแลต้องเปลี่ยนไปใช้การยืนยันตัวตน npm ภายในเครื่อง ให้เรียกใช้คำสั่ง 1Password CLI (op) ภายในเซสชัน tmux เฉพาะเท่านั้น ห้ามเรียก op โดยตรงจากเชลล์หลักของเอเจนต์ การเก็บไว้ภายใน tmux ทำให้สามารถสังเกตพรอมต์ การแจ้งเตือน และการจัดการ OTP ได้ และป้องกันการแจ้งเตือนซ้ำบนโฮสต์
เอกสารอ้างอิงสาธารณะ
.github/workflows/full-release-validation.yml.github/workflows/package-acceptance.yml.github/workflows/openclaw-npm-release.yml.github/workflows/openclaw-release-checks.yml.github/workflows/openclaw-cross-os-release-checks-reusable.ymlscripts/resolve-openclaw-package-candidate.mjsscripts/openclaw-npm-release-check.tsscripts/package-mac-dist.shscripts/make_appcast.sh
ผู้ดูแลใช้เอกสารรีลีสส่วนตัวใน openclaw/maintainers/release/README.md เป็นคู่มือปฏิบัติงานจริง