Release and CI
นโยบายการเผยแพร่
ปัจจุบัน OpenClaw เปิดเผยช่องทางอัปเดตที่ผู้ใช้เห็นได้สามช่องทาง:
- stable: ช่องทางรีลีสที่โปรโมตแล้วซึ่งมีอยู่เดิม โดยยังคง resolve ผ่าน
npm
latestจนกว่า milestone CLI/channel แยกต่างหากจะพร้อมใช้งาน - beta: แท็ก prerelease ที่เผยแพร่ไปยัง npm
beta - dev: head ที่เปลี่ยนแปลงตลอดเวลาของ
main
แยกจากกัน ผู้ดำเนินการรีลีสสามารถเผยแพร่แพ็กเกจหลักของเดือนที่เสร็จสิ้นล่าสุด
ไปยัง npm extended-stable โดยเริ่มที่แพตช์ 33 ได้ ไลน์ final ปกติของเดือนปัจจุบัน
ยังคงอยู่บน npm latest; การแยกการเผยแพร่ฝั่งผู้ดำเนินการนี้ไม่ได้เปลี่ยน
การ resolve ช่องทางอัปเดตของ CLI ด้วยตัวเอง
การตั้งชื่อเวอร์ชัน
- เวอร์ชันรีลีส extended-stable รายเดือนของ npm:
YYYY.M.PATCHโดยมีPATCH >= 33- แท็ก Git:
vYYYY.M.PATCH
- แท็ก Git:
- เวอร์ชันรีลีส final รายวัน/ปกติ:
YYYY.M.PATCHโดยมีPATCH < 33- แท็ก Git:
vYYYY.M.PATCH
- แท็ก Git:
- เวอร์ชันรีลีสแก้ไข fallback ปกติ:
YYYY.M.PATCH-N- แท็ก Git:
vYYYY.M.PATCH-N
- แท็ก Git:
- เวอร์ชัน prerelease beta:
YYYY.M.PATCH-beta.N- แท็ก Git:
vYYYY.M.PATCH-beta.N
- แท็ก Git:
- อย่าเติมศูนย์นำหน้าเดือนหรือแพตช์
- ตั้งแต่การอัปเดตกระบวนการรีลีสเดือนมิถุนายน 2026 เป็นต้นไป คอมโพเนนต์ที่สามคือ หมายเลข release-train รายเดือนแบบลำดับ ไม่ใช่วันตามปฏิทิน รีลีส stable และ beta เป็นตัวกำหนด train ปัจจุบัน; แท็ก alpha-only จะไม่ใช้หรือ ขยับหมายเลขแพตช์ beta/stable แท็กและเวอร์ชัน npm ก่อนการอัปเดตจะคง ชื่อเดิมและยังใช้ได้; ระบบอัตโนมัติของรีลีสยังคง เปรียบเทียบตามปี เดือน แพตช์ ช่องทาง และหมายเลข prerelease หรือ correction
- บิลด์ alpha/nightly ใช้ patch train ถัดไปที่ยังไม่รีลีส และเพิ่มเฉพาะ
alpha.Nสำหรับบิลด์ซ้ำ เมื่อแพตช์นั้นมี beta แล้ว บิลด์ alpha ใหม่ จะย้ายไปยังแพตช์ถัดไป ให้ละเว้นแท็ก legacy alpha-only ที่มีหมายเลขแพตช์ สูงกว่าเมื่อเลือก train beta หรือ stable - เวอร์ชัน npm เปลี่ยนแปลงไม่ได้ หากแท็ก beta ถูกเผยแพร่ไปแล้ว อย่า
ลบ เผยแพร่ซ้ำ หรือใช้ซ้ำ; ให้ตัดหมายเลข beta ถัดไปหรือแพตช์รายเดือนถัดไปแทน
เนื่องจาก
2026.6.5-beta.1ถูกเผยแพร่แล้วระหว่างการเปลี่ยนผ่าน release train เดือนมิถุนายน 2026 ต้องใช้แพตช์5หรือสูงกว่า อย่า เผยแพร่ train stable หรือ beta ใหม่ของเดือนมิถุนายน 2026 เป็น2026.6.2,2026.6.3หรือ2026.6.4 - หลังจาก final ปกติ
2026.6.5train beta ใหม่ถัดไปคือ2026.6.6-beta.1แม้ว่า จะมีแท็กอัตโนมัติ alpha-only ที่มีหมายเลขแพตช์สูงกว่าอยู่แล้วก็ตาม latestยังคงตามไลน์ npm ปกติ/รายวันปัจจุบันbetaหมายถึงเป้าหมายการติดตั้ง beta ปัจจุบันextended-stableหมายถึงแพ็กเกจ npm ของเดือนย้อนหลังที่รองรับ โดยเริ่มที่แพตช์33; แพตช์34และหลังจากนั้นเป็นรีลีสบำรุงรักษาบนไลน์รายเดือนนั้น- เส้นทาง extended-stable รายเดือนเฉพาะจะเผยแพร่เฉพาะแพ็กเกจหลักของ npm เท่านั้น โดย ไม่เผยแพร่ plugins, อาร์ติแฟกต์ macOS หรือ Windows, GitHub Release, dist-tags ของ private-repository, Docker images, อาร์ติแฟกต์มือถือ หรือ ไฟล์ดาวน์โหลดเว็บไซต์
จังหวะการรีลีส
- รีลีสจะดำเนินแบบ beta-first
- Stable จะตามมาหลังจาก beta ล่าสุดผ่านการตรวจสอบแล้วเท่านั้น
- โดยปกติ maintainers จะตัดรีลีสจากสาขา
release/YYYY.M.PATCHที่สร้าง จากmainปัจจุบัน เพื่อให้การตรวจสอบรีลีสและการแก้ไขไม่บล็อก การพัฒนาใหม่บนmain - หากแท็ก beta ถูก push หรือเผยแพร่แล้วและต้องการการแก้ไข maintainers จะตัด
แท็ก
-beta.Nถัดไปแทนการลบหรือสร้างแท็ก beta เดิมใหม่ - ขั้นตอนรีลีสโดยละเอียด การอนุมัติ credential และบันทึกการกู้คืนเป็น เฉพาะ maintainer เท่านั้น
การเผยแพร่ extended-stable รายเดือนเฉพาะ npm
นี่เป็นข้อยกเว้นเฉพาะสำหรับขั้นตอนรีลีสปกติด้านล่าง สำหรับ
เดือนที่เสร็จสิ้นแล้ว YYYY.M ให้สร้าง extended-stable/YYYY.M.33; เผยแพร่ vYYYY.M.33 และ
แพตช์บำรุงรักษาหลังจากนั้นจากสาขาเดียวกันนั้น แท็กรีลีส ปลายสาขา
checkout เวอร์ชันแพ็กเกจ npm preflight และรัน Full Release Validation ต้อง
ระบุ commit เดียวกันทั้งหมด main ที่ได้รับการป้องกันต้องมีเวอร์ชัน final ของเดือนปฏิทินที่
ใหม่กว่าอย่างเคร่งครัดซึ่งต่ำกว่าแพตช์ 33 อยู่แล้ว; แพตช์บำรุงรักษายังคง
มีสิทธิ์หลังจาก main เดินหน้าไปมากกว่าหนึ่งเดือน
รัน npm preflight และ Full Release Validation จากสาขา extended-stable ที่ตรงกันพอดี จากนั้นบันทึก run ID ทั้งสองรายการ:
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 npm extended-stable และตั้งใจให้ไม่เปลี่ยนแปลง
หลังจากทั้งสองรันสำเร็จและสภาพแวดล้อมรีลีส npm พร้อมแล้ว ให้ promote
tarball preflight ที่ตรงกันพอดี แพตช์ P ต้องเป็น 33 หรือมากกว่า:
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>สำหรับ fork หรือการซ้อมที่ไม่ใช่ production ซึ่งตั้งใจว่าไม่สามารถทำตาม
นโยบายเดือน .33 หรือ protected-main ได้ ให้เพิ่ม
-f bypass_extended_stable_guard=true ใน dispatch ทั้ง npm preflight และ publish ค่า
เริ่มต้นคือ false bypass นี้ยอมรับเฉพาะเมื่อใช้กับ npm_dist_tag=extended-stable และ
จะถูกบันทึกในสรุป workflow โดยจะไม่ bypass workflow ref แบบ canonical
extended-stable/YYYY.M.33, ความเท่ากันของ branch-tip/tag/checkout, ไวยากรณ์ final-tag,
ความเท่ากันของเวอร์ชัน package/tag, ตัวตนของรันและ manifest ที่อ้างอิง,
provenance ของ tarball, การอนุมัติ environment, registry readback หรือหลักฐาน
การซ่อม selector
workflow publish จะตรวจสอบตัวตนของรันที่อ้างอิง digest ของ tarball ที่เตรียมไว้ และ selector ของ npm registry ทั้งสองรายการ ให้ยืนยัน ผลลัพธ์แยกต่างหากหลังจาก workflow สำเร็จ:
npm view openclaw@YYYY.M.P version --userconfig "$(mktemp)"npm view openclaw@extended-stable version --userconfig "$(mktemp)"ทั้งสองคำสั่งต้องคืนค่า YYYY.M.P หาก publish สำเร็จแต่ selector
readback ล้มเหลว อย่าเผยแพร่เวอร์ชันแพ็กเกจที่เปลี่ยนแปลงไม่ได้ซ้ำ ใช้คำสั่งซ่อมเดียว
npm dist-tag add openclaw@YYYY.M.P extended-stable ที่พิมพ์ไว้ใน
สรุป always-run ของ workflow ที่ล้มเหลว จากนั้นทำ readback แยกทั้งสองรายการซ้ำ
การ rollback ไปยัง selector ก่อนหน้าเป็นการตัดสินใจของผู้ดำเนินการแยกต่างหาก ไม่ใช่
เส้นทางซ่อม readback
checklist ปกติด้านล่างยังคงเป็นเจ้าของ beta, latest, GitHub Release,
plugins, macOS, Windows และการเผยแพร่แพลตฟอร์มอื่น ๆ อย่ารันขั้นตอนเหล่านั้น
สำหรับเส้นทาง extended-stable เฉพาะ npm นี้
checklist ผู้ดำเนินการรีลีสปกติ
checklist นี้คือรูปแบบสาธารณะของ release flow credential ส่วนตัว การ signing, notarization, การกู้คืน dist-tag และรายละเอียด rollback ฉุกเฉินจะอยู่ใน runbook รีลีสเฉพาะ maintainer เท่านั้น
- เริ่มจาก
mainปัจจุบัน: ดึงรายการล่าสุด ยืนยันว่าคอมมิตเป้าหมายถูกพุชแล้ว และยืนยันว่า CI ของmainปัจจุบันเขียวเพียงพอสำหรับการแตกแขนงจากจุดนั้น - สร้างส่วนบนสุดของ
CHANGELOG.mdจาก PR ที่ถูกรวมแล้วและคอมมิตโดยตรงทั้งหมด นับตั้งแต่แท็กรีลีสล่าสุดที่เข้าถึงได้ คงรายการให้เป็นมุมมองผู้ใช้ รวมรายการ PR/คอมมิตโดยตรงที่ซ้ำซ้อนกันใหม่ คอมมิตการเขียนใหม่ พุช และรีเบส/ดึงอีกครั้งก่อนแตกแขนง - ตรวจทานระเบียนความเข้ากันได้ของรีลีสใน
src/plugins/compat/registry.tsและsrc/commands/doctor/shared/deprecation-compat.tsลบความเข้ากันได้ ที่หมดอายุแล้วเฉพาะเมื่อเส้นทางอัปเกรดยังคงครอบคลุมอยู่ หรือบันทึกเหตุผลว่า เหตุใดจึงตั้งใจคงไว้ - สร้าง
release/YYYY.M.PATCHจากmainปัจจุบัน; อย่าทำงานรีลีสปกติ โดยตรงบนmain - เพิ่มเวอร์ชันในทุกตำแหน่งที่จำเป็นสำหรับแท็กที่ต้องการ จากนั้นรัน
pnpm release:prepคำสั่งนี้รีเฟรชเวอร์ชัน Plugin, อินเวนทอรี Plugin, สคีมาคอนฟิก, เมตาดาต้าคอนฟิกช่องทางที่บันเดิล, baseline เอกสารคอนฟิก, การส่งออก Plugin SDK และ baseline API ของ Plugin SDK ตามลำดับที่ถูกต้อง คอมมิต drift ที่ถูกสร้างขึ้น ก่อนติดแท็ก จากนั้นรัน preflight แบบ deterministic ในเครื่อง:pnpm check:test-types,pnpm check:architecture,pnpm build && pnpm ui:build, และpnpm release:check - รัน
OpenClaw NPM Releaseด้วยpreflight_only=trueก่อนมีแท็ก อนุญาตให้ใช้ SHA ของแขนงรีลีสแบบครบ 40 อักขระสำหรับ preflight เพื่อการตรวจสอบเท่านั้น preflight จะสร้างหลักฐานรีลีสของ dependency สำหรับกราฟ dependency ที่ checkout ออกมาแบบตรงตัว และเก็บไว้ในอาร์ติแฟกต์ npm preflight บันทึกpreflight_run_idที่สำเร็จไว้ - เริ่มการทดสอบก่อนรีลีสทั้งหมดด้วย
Full Release Validationสำหรับแขนงรีลีส, แท็ก, หรือ SHA คอมมิตแบบเต็ม นี่คือ entrypoint แบบ manual เพียงจุดเดียว สำหรับกล่องทดสอบรีลีสขนาดใหญ่ทั้งสี่: Vitest, Docker, QA Lab, และ Package - หากการตรวจสอบล้มเหลว ให้แก้บนแขนงรีลีสและรันไฟล์, lane, งาน workflow, โปรไฟล์แพ็กเกจ, provider, หรือ allowlist ของโมเดลที่ล้มเหลวซ้ำด้วยขอบเขตเล็กที่สุด ที่พิสูจน์การแก้ไขได้ รัน umbrella แบบเต็มซ้ำเฉพาะเมื่อพื้นผิวที่เปลี่ยนทำให้ หลักฐานก่อนหน้าไม่สดแล้ว
- สำหรับตัวเลือกเบต้าที่ติดแท็กแล้ว ให้รัน
pnpm release:candidate -- --tag vYYYY.M.PATCH-beta.Nจากแขนงrelease/YYYY.M.PATCHที่ตรงกัน สำหรับ stable ให้ส่ง source release ของ Windows ที่จำเป็นด้วย:pnpm release:candidate -- --tag vYYYY.M.PATCH --windows-node-tag vX.Y.Z. helper จะรันการตรวจ generated-release ในเครื่อง, dispatch หรือตรวจสอบ หลักฐาน full release validation และ npm preflight, รันหลักฐาน Parallels แบบ fresh/update กับ tarball ที่เตรียมไว้อย่างตรงตัวพร้อมหลักฐานแพ็กเกจ Telegram, บันทึกแผน npm ของ Plugin และ ClawHub, และพิมพ์คำสั่งOpenClaw Release Publishที่แน่นอนเฉพาะหลังจากชุดหลักฐานเขียวแล้วOpenClaw Release Publishจะ dispatch แพ็กเกจ Plugin ที่เลือกหรือที่ publish ได้ทั้งหมด ไปยัง npm และชุดเดียวกันไปยัง ClawHub แบบขนาน จากนั้นโปรโมตอาร์ติแฟกต์ OpenClaw npm preflight ที่เตรียมไว้ด้วย dist-tag ที่ตรงกันทันทีเมื่อการ publish npm ของ Plugin สำเร็จ หลังจาก child ของการ publish OpenClaw npm สำเร็จ ระบบจะสร้างหรืออัปเดตหน้า GitHub release/prerelease ที่ตรงกันจากส่วนCHANGELOG.mdที่ตรงกันแบบครบถ้วน รีลีส stable ที่ publish ไปยัง npmlatestจะกลายเป็นรีลีสล่าสุดของ GitHub; รีลีส maintenance แบบ stable ที่คงไว้บน npmbetaจะถูกสร้างด้วย GitHublatest=falseworkflow ยังอัปโหลดหลักฐาน dependency ของ preflight, manifest ของ full-validation, และหลักฐานการตรวจสอบ registry หลัง publish ไปยัง GitHub release เพื่อใช้ตอบสนอง incident หลังรีลีส workflow publish จะพิมพ์ ID ของ child run ทันที, อนุมัติ gate ของสภาพแวดล้อมรีลีสที่ workflow token ได้รับอนุญาตให้อนุมัติโดยอัตโนมัติ, สรุป child job ที่ล้มเหลวพร้อม log tail, ปิดงาน GitHub release และหลักฐาน dependency ทันทีเมื่อการ publish OpenClaw npm สำเร็จ, รอ ClawHub ทุกครั้งที่กำลัง publish OpenClaw npm, จากนั้นรันpnpm release:verify-betaและอัปโหลดหลักฐานหลัง publish สำหรับ GitHub release, แพ็กเกจ npm, แพ็กเกจ npm ของ Plugin ที่เลือก, แพ็กเกจ ClawHub ที่เลือก, ID ของ child workflow run, และ ID ของ NPM Telegram run ที่เป็นตัวเลือก เส้นทาง ClawHub จะ retry ความล้มเหลวชั่วคราวของการติดตั้ง dependency ของ CLI, publish Plugin ที่ผ่าน preview แม้ preview cell หนึ่งจะ flake, และจบด้วย การตรวจสอบ registry สำหรับทุกเวอร์ชัน Plugin ที่คาดไว้ เพื่อให้การ publish บางส่วนยังมองเห็นและ retry ได้ จากนั้นรันการยอมรับแพ็กเกจหลัง publish กับแพ็กเกจที่ publish แล้วopenclaw@YYYY.M.PATCH-beta.Nหรือopenclaw@betaหาก prerelease ที่ถูกพุชหรือ publish ต้องการการแก้ไข ให้ตัด prerelease หมายเลขถัดไปที่ตรงกัน; อย่าลบหรือเขียน prerelease เก่าใหม่ - สำหรับ stable ให้ดำเนินต่อเฉพาะหลังจากเบต้าหรือ release candidate ที่ผ่านการตรวจแล้ว
มีหลักฐานการตรวจสอบที่จำเป็น การ publish npm แบบ stable ต้องผ่าน
OpenClaw Release Publishเช่นกัน โดยนำอาร์ติแฟกต์ preflight ที่สำเร็จมาใช้ซ้ำผ่านpreflight_run_id; ความพร้อมของรีลีส macOS แบบ stable ยังต้องมีแพ็กเกจ.zip,.dmg,.dSYM.zip, และappcast.xmlที่อัปเดตแล้วบนmainworkflow publish ของ macOS จะ publish appcast ที่ลงนามแล้วไปยังmainสาธารณะโดยอัตโนมัติหลังจากตรวจสอบ release assets; หาก branch protection บล็อกการพุชโดยตรง ระบบจะเปิดหรืออัปเดต PR สำหรับ appcast ความพร้อมของ Windows Hub แบบ stable ต้องมี assetOpenClawCompanion-Setup-x64.exe,OpenClawCompanion-Setup-arm64.exe, และOpenClawCompanion-SHA256SUMS.txtที่ลงนามแล้วบน GitHub release ของ OpenClaw ส่งแท็กรีลีสopenclaw/openclaw-windows-nodeที่ลงนามอย่างตรงตัวเป็นwindows_node_tagและแผนที่ digest ของ installer ที่ผ่านการอนุมัติ candidate เป็นwindows_node_installer_digests;OpenClaw Release Publishจะคง draft ของรีลีส, dispatchWindows Node Release, และตรวจสอบ asset ทั้งสามก่อนเผยแพร่ - หลัง publish ให้รันตัวตรวจหลัง publish ของ npm, E2E Telegram ของ published-npm แบบ standalone ที่เป็นตัวเลือกเมื่อคุณต้องการหลักฐานช่องทางหลัง publish, โปรโมต dist-tag เมื่อจำเป็น, ตรวจสอบหน้า GitHub release ที่สร้างขึ้น, รันขั้นตอนประกาศรีลีส, จากนั้นทำ การปิดงาน main แบบ stable ให้เสร็จก่อนเรียกรีลีส stable ว่าเสร็จสิ้น
การปิดงาน main แบบ stable
การเผยแพร่ stable ยังไม่สมบูรณ์จนกว่า main จะมีสถานะรีลีสที่ถูก ship จริง
- เริ่มจาก
mainล่าสุดแบบสด ตรวจสอบrelease/YYYY.M.PATCHเทียบกับมันและ forward-port การแก้ไขจริงที่ไม่มีอยู่ในmainอย่า merge compatibility, test, หรือ validation adapter ที่มีเฉพาะรีลีสเข้าไปในmainที่ใหม่กว่าแบบไม่ไตร่ตรอง - ตั้ง
mainเป็นเวอร์ชัน stable ที่ถูก ship แล้ว ไม่ใช่ train ถัดไปเชิงคาดการณ์ รันpnpm release:prepหลังการเปลี่ยนเวอร์ชัน root จากนั้นรันpnpm deps:shrinkwrap:generate - ทำให้ส่วน
## YYYY.M.PATCHของCHANGELOG.mdบนmainตรงกับ แขนงรีลีสที่ติดแท็กอย่างสมบูรณ์ รวมการอัปเดตappcast.xmlแบบ stable เมื่อรีลีส mac publish ไฟล์ดังกล่าว - อย่าเพิ่ม
YYYY.M.PATCH+1, เวอร์ชันเบต้า, หรือส่วน changelog อนาคตที่ว่างเปล่า ไปยังmainจนกว่า operator จะเริ่ม release train นั้นอย่างชัดเจน - รัน
pnpm release:generated:check,pnpm deps:shrinkwrap:check, และOPENCLAW_TESTBOX=1 pnpm check:changedพุช จากนั้นตรวจสอบว่าorigin/mainมีเวอร์ชันและ changelog ที่ถูก ship ก่อนเรียกรีลีส stable ว่าเสร็จ - ทำให้ตัวแปร repository
RELEASE_ROLLBACK_DRILL_IDและRELEASE_ROLLBACK_DRILL_DATEเป็นปัจจุบันหลัง private rollback drill แต่ละครั้งOpenClaw Stable Main Closeoutจะเริ่มจากการพุชmainที่มีเวอร์ชัน, changelog, และ appcast ที่ถูก ship หลังการเผยแพร่ stable มันอ่านหลักฐาน หลัง publish แบบ immutable เพื่อผูกแท็กที่ถูก ship กับ Full Release Validation และ Publish run ของแท็กนั้น จากนั้นตรวจสอบสถานะ main แบบ stable, รีลีส, stable soak ที่บังคับ, และหลักฐานประสิทธิภาพที่บล็อก มันแนบ closeout manifest แบบ immutable และ checksum ไปยัง GitHub release ทริกเกอร์พุชอัตโนมัติจะข้าม รีลีส legacy ที่เก่ากว่าหลักฐานหลัง publish แบบ immutable; มันจะไม่ถือว่าการข้ามนั้น เป็น closeout ที่เสร็จสมบูรณ์ closeout ที่สมบูรณ์ต้องมีทั้ง asset และ checksum ที่ตรงกัน manifest บางส่วนจะ replay SHA ของmainและ rollback drill ที่บันทึกไว้ เพื่อสร้าง byte ที่เหมือนกันอีกครั้ง จากนั้นแนบ checksum ที่หายไป; คู่ที่ไม่ถูกต้อง, หรือ checksum ที่ไม่มี manifest, จะยังคงบล็อกอยู่ run ที่ถูกทริกเกอร์ด้วยการพุช ซึ่งไม่มีตัวแปร repository ของ rollback drill จะข้ามโดยไม่ทำ closeout ให้เสร็จ; ระเบียน drill ที่หายไปหรือเก่ากว่า 90 วันยังคงบล็อก closeout แบบ manual ที่มีหลักฐานรองรับ คำสั่งกู้คืนแบบ private ยังคงอยู่ใน runbook สำหรับ maintainer เท่านั้น ใช้ manual dispatch เฉพาะเพื่อซ่อมหรือ replay closeout แบบ stable ที่มีหลักฐานรองรับ แท็ก correction fallback แบบ legacy อาจนำหลักฐาน base-package มาใช้ซ้ำได้เฉพาะเมื่อ แท็ก correction resolve ไปยัง source commit เดียวกับแท็ก stable พื้นฐาน correction ที่มี source ต่างกันต้อง publish และตรวจสอบหลักฐานแพ็กเกจของตัวเอง
preflight ของรีลีส
- เรียกใช้
pnpm check:test-typesก่อน preflight การเผยแพร่ เพื่อให้ TypeScript สำหรับการทดสอบยังคง ถูกครอบคลุมนอกเหนือจาก gatepnpm checkภายในเครื่องที่เร็วกว่า - เรียกใช้
pnpm check:architectureก่อน preflight การเผยแพร่ เพื่อให้การตรวจสอบ import cycle และขอบเขตสถาปัตยกรรมที่กว้างขึ้นผ่านเป็นสีเขียวนอกเหนือจาก gate ภายในเครื่องที่เร็วกว่า - เรียกใช้
pnpm build && pnpm ui:buildก่อนpnpm release:checkเพื่อให้ artifact การเผยแพร่dist/*ที่คาดไว้และ bundle ของ Control UI มีอยู่สำหรับขั้นตอนตรวจสอบความถูกต้องของ pack - เรียกใช้
pnpm release:prepหลังจาก bump เวอร์ชันรากและก่อน tagging คำสั่งนี้ เรียกใช้ตัวสร้างการเผยแพร่แบบกำหนดได้ซ้ำทุกตัวที่มัก drift หลังจากการเปลี่ยนแปลง เวอร์ชัน/config/API: เวอร์ชัน Plugin, inventory ของ Plugin, schema config พื้นฐาน, metadata config ของ bundled channel, baseline เอกสาร config, export ของ Plugin SDK และ baseline API ของ Plugin SDKpnpm release:checkเรียก guard เหล่านั้นซ้ำ ในโหมดตรวจสอบ และรายงานความล้มเหลวจาก generated drift ทุกอย่างที่พบในรอบเดียว ก่อนเรียกใช้การตรวจสอบการเผยแพร่ package - การซิงก์เวอร์ชัน Plugin อัปเดตเวอร์ชัน package ของ Plugin ทางการ และ floor
openclaw.compat.pluginApiที่มีอยู่ให้เป็นเวอร์ชันเผยแพร่ OpenClaw โดย default ให้ถือว่าฟิลด์นั้นเป็น floor ของ API สำหรับ Plugin SDK/runtime ไม่ใช่แค่สำเนา ของเวอร์ชัน package: สำหรับการเผยแพร่เฉพาะ Plugin ที่ตั้งใจให้ยังคงเข้ากันได้ กับ host OpenClaw รุ่นเก่ากว่า ให้คง floor ไว้ที่ API ของ host ที่เก่าที่สุดที่รองรับ และบันทึกเหตุผลนั้นในหลักฐานการเผยแพร่ Plugin - เรียกใช้ workflow
Full Release Validationแบบ manual ก่อนอนุมัติการเผยแพร่ เพื่อ kick off test box ก่อนเผยแพร่ทั้งหมดจาก entrypoint เดียว รองรับ branch, tag หรือ commit SHA แบบเต็ม, dispatchCIแบบ manual และ dispatchOpenClaw Release Checksสำหรับ install smoke, package acceptance, การตรวจสอบ package ข้าม OS, QA Lab parity, Matrix และ lane ของ Telegram การรัน stable และ full จะรวม live/E2E แบบละเอียดและ Docker release-path soak เสมอ;run_release_soak=trueยังคงมีไว้สำหรับ beta soak แบบชัดเจน Package Acceptance ให้ Telegram E2E ของ package ที่เป็น canonical ระหว่างการตรวจสอบ candidate โดยเลี่ยง live poller ตัวที่สองที่ทำงานพร้อมกัน ระบุrelease_package_specหลังจากเผยแพร่ beta เพื่อใช้ npm package ที่ส่งมอบแล้วซ้ำ ใน release checks, Package Acceptance และ package Telegram E2E โดยไม่ต้อง rebuild release tarball ระบุnpm_telegram_package_specเฉพาะเมื่อ Telegram ควรใช้ package ที่เผยแพร่แล้ว คนละตัวกับส่วนที่เหลือของการตรวจสอบการเผยแพร่ ระบุpackage_acceptance_package_specเมื่อ Package Acceptance ควรใช้ package ที่เผยแพร่แล้ว คนละตัวกับ release package spec ระบุevidence_package_specเมื่อรายงานหลักฐานการเผยแพร่ควรพิสูจน์ว่าการตรวจสอบ ตรงกับ npm package ที่เผยแพร่แล้วโดยไม่บังคับ Telegram E2E ตัวอย่าง:gh workflow run full-release-validation.yml --ref main -f ref=release/YYYY.M.PATCH - เรียกใช้ workflow
Package Acceptanceแบบ manual เมื่อคุณต้องการหลักฐาน side-channel สำหรับ candidate ของ package ขณะที่งานเผยแพร่ยังดำเนินต่อ ใช้source=npmสำหรับopenclaw@beta,openclaw@latestหรือเวอร์ชันเผยแพร่แบบระบุชัด;source=refเพื่อ pack branch/tag/SHApackage_refที่เชื่อถือได้ด้วย harnessworkflow_refปัจจุบัน;source=urlสำหรับ tarball HTTPS สาธารณะที่ต้องมี SHA-256 และนโยบาย URL สาธารณะที่เข้มงวด;source=trusted-urlสำหรับนโยบาย trusted-source ที่มีชื่อโดยใช้trusted_source_idและ SHA-256 ที่จำเป็น; หรือsource=artifactสำหรับ tarball ที่อัปโหลดโดย GitHub Actions run อื่น workflow จะแปลง candidate เป็นpackage-under-test, ใช้ตัวจัดตาราง Docker E2E release ซ้ำกับ tarball นั้น และสามารถเรียกใช้ Telegram QA กับ tarball เดียวกันด้วยtelegram_mode=mock-openaiหรือtelegram_mode=live-frontierเมื่อ lane ของ Docker ที่เลือกมีpublished-upgrade-survivor, artifact ของ package คือ candidate และpublished_upgrade_survivor_baselineเลือก baseline ที่เผยแพร่แล้วupdate-restart-authใช้ package candidate เป็นทั้ง CLI ที่ติดตั้งและ package-under-test เพื่อให้ทดสอบ path การ restart ที่จัดการโดยคำสั่ง update ของ candidate ตัวอย่าง: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 published_upgrade_survivor_baseline=openclaw@2026.4.26 -f telegram_mode=mock-openaiprofile ทั่วไป:smoke: lane สำหรับ install/channel/agent, gateway network และ config reloadpackage: lane แบบ artifact-native สำหรับ package/update/restart/plugin โดยไม่มี OpenWebUI หรือ ClawHub แบบ liveproduct: profile package พร้อม MCP channels, การ cleanup cron/subagent, web search ของ OpenAI และ OpenWebUIfull: chunk ของ Docker release-path พร้อม OpenWebUIcustom: การเลือกdocker_lanesแบบระบุชัดสำหรับการ rerun ที่โฟกัส
- เรียกใช้ workflow
CIแบบ manual โดยตรงเมื่อคุณต้องการเฉพาะ coverage ของ CI ปกติ แบบกำหนดได้ซ้ำสำหรับ release candidate การ dispatch CI แบบ manual จะข้าม changed scoping และบังคับ shard Linux Node, shard bundled-plugin, shard contract ของ Plugin และ channel, ความเข้ากันได้กับ Node 22,check-*,check-additional-*, การตรวจสอบ smoke ของ built-artifact, การตรวจสอบ docs, Python skills, Windows, macOS และ lane Control UI i18n การรัน CI แบบ manual เดี่ยวจะรัน Android เฉพาะเมื่อ dispatch ด้วยinclude_android=true;Full Release Validationส่ง input นั้นให้ child CI ของตัวเอง ตัวอย่างพร้อม Android:gh workflow run ci.yml --ref release/YYYY.M.PATCH -f include_android=true - เรียกใช้
pnpm qa:otel:smokeเมื่อตรวจสอบ telemetry สำหรับการเผยแพร่ คำสั่งนี้ทดสอบ QA-lab ผ่านตัวรับ OTLP/HTTP ภายในเครื่อง และตรวจสอบการ export trace, metric และ log พร้อม attribute ของ trace ที่จำกัดขอบเขต และการ redact content/identifier โดยไม่ ต้องใช้ Opik, Langfuse หรือตัวรวบรวมภายนอกอื่น - เรียกใช้
pnpm qa:otel:collector-smokeเมื่อตรวจสอบความเข้ากันได้กับ collector คำสั่งนี้ route การ export OTLP ของ QA-lab เดียวกันผ่าน container Docker ของ OpenTelemetry Collector จริง ก่อน assertion ของตัวรับภายในเครื่อง - เรียกใช้
pnpm qa:prometheus:smokeเมื่อตรวจสอบ protected Prometheus scraping คำสั่งนี้ทดสอบ QA-lab, ปฏิเสธ scrape ที่ไม่ได้ authenticated และตรวจสอบว่า metric family ที่สำคัญต่อการเผยแพร่ยังคงไม่มี prompt content, identifier ดิบ, auth token และ path ภายในเครื่อง - เรียกใช้
pnpm qa:observability:smokeเมื่อคุณต้องการ lane smoke ของ OpenTelemetry และ Prometheus สำหรับ source-checkout ต่อเนื่องกัน - เรียกใช้
pnpm release:checkก่อนทุก tagged release - preflight ของ
OpenClaw NPM Releaseสร้างหลักฐานการเผยแพร่ dependency ก่อน pack npm tarball gate ช่องโหว่ npm advisory เป็นตัวบล็อกการเผยแพร่ ส่วน transitive manifest risk, dependency ownership/install surface และรายงานการเปลี่ยนแปลง dependency เป็นเพียงหลักฐานการเผยแพร่ รายงาน การเปลี่ยนแปลง dependency เปรียบเทียบ release candidate กับ release tag ก่อนหน้า ที่ reachable - preflight อัปโหลดหลักฐาน dependency เป็น
openclaw-release-dependency-evidence-<tag>และยังฝังไว้ใต้dependency-evidence/ภายใน artifact npm preflight ที่เตรียมไว้ path เผยแพร่จริง จะใช้ artifact preflight นั้นซ้ำ จากนั้นแนบหลักฐานเดียวกัน ไปยัง GitHub release เป็นopenclaw-<version>-dependency-evidence.zip - เรียกใช้
OpenClaw Release Publishสำหรับลำดับ publish ที่เปลี่ยนแปลงสถานะหลังจาก tag มีอยู่แล้ว Dispatch จากrelease/YYYY.M.PATCH(หรือmainเมื่อเผยแพร่ tag ที่ reachable จาก main), ส่ง release tag,preflight_run_idของ OpenClaw npm ที่สำเร็จ และfull_release_validation_run_idที่สำเร็จ และคงขอบเขตการ publish Plugin แบบ defaultall-publishableไว้ เว้นแต่คุณตั้งใจรันการ repair แบบโฟกัส workflow จะ serialize การ publish Plugin npm, การ publish Plugin ClawHub และการ publish OpenClaw npm เพื่อให้ core package ไม่ถูกเผยแพร่ก่อน Plugin ภายนอกของมัน OpenClaw Release Publishแบบ stable ต้องมีwindows_node_tagที่ระบุชัด หลังจาก releaseopenclaw/openclaw-windows-nodeแบบ non-prerelease ที่ตรงกันมีอยู่แล้ว นอกจากนี้ยังต้องมี mapwindows_node_installer_digestsที่ candidate-approved ก่อน dispatch child ของการ publish ใดๆ จะตรวจสอบว่า source release นั้น เผยแพร่แล้ว, ไม่ใช่ prerelease, มี installer x64/ARM64 ที่จำเป็น และ ยังคงตรงกับ map ที่อนุมัติแล้วนั้น จากนั้นจึง dispatchWindows Node Releaseขณะที่ release ของ OpenClaw ยังเป็น draft โดยส่ง map digest ของ installer ที่ปักหมุดไว้ โดยไม่เปลี่ยนแปลง workflow child ดาวน์โหลด installer Windows Hub ที่ signed แล้วจาก tag ที่ระบุนั้น, เทียบกับ digest ที่ปักหมุดไว้, ตรวจสอบว่า signature Authenticode ใช้ signer OpenClaw Foundation ที่คาดไว้บน runner Windows, เขียน manifest SHA-256 และอัปโหลด installer พร้อม manifest ไปยัง GitHub release ของ OpenClaw ที่เป็น canonical จากนั้นดาวน์โหลด asset ที่ promoted แล้วซ้ำ และ ตรวจสอบ membership และ hash ของ manifest parent ตรวจสอบ contract asset x64, ARM64 และ checksum ปัจจุบันก่อน publication การ recovery โดยตรง ปฏิเสธชื่อ assetOpenClawCompanion-*ที่ไม่คาดไว้ก่อนแทนที่ contract asset ที่คาดไว้ด้วย byte ของ source ที่ปักหมุดไว้ DispatchWindows Node Releaseแบบ manual เฉพาะสำหรับ recovery และส่ง tag แบบระบุชัดเสมอ ห้ามใช้latestพร้อมกับ map JSONexpected_installer_digestsที่ชัดเจนจาก source release ที่อนุมัติแล้ว ลิงก์ดาวน์โหลดบนเว็บไซต์ควรชี้ไปยัง URL asset ของ release OpenClaw แบบระบุชัดสำหรับ stable release ปัจจุบัน หรือreleases/latest/download/...เฉพาะหลังจากตรวจสอบว่า latest redirect ของ GitHub ชี้ไปที่ release เดียวกันนั้นแล้ว; อย่าลิงก์ไปเฉพาะหน้า release ของ companion repo- ตอนนี้การตรวจสอบการเผยแพร่รันใน workflow manual แยกต่างหาก:
OpenClaw Release Checks OpenClaw Release Checksยังรัน lane QA Lab mock parity พร้อมกับ profile Matrix แบบ live ที่เร็ว และ lane Telegram QA ก่อนอนุมัติการเผยแพร่ lane live ใช้ environmentqa-live-shared; Telegram ยังใช้ credential lease ของ Convex CI เรียกใช้ workflowQA-Lab - All Lanesแบบ manual ด้วยmatrix_profile=allและmatrix_shards=trueเมื่อคุณต้องการ inventory ของ transport, media และ E2EE ของ Matrix แบบเต็มใน parallel- การตรวจสอบ install และ upgrade runtime ข้าม OS เป็นส่วนหนึ่งของ
OpenClaw Release ChecksและFull Release Validationสาธารณะ ซึ่งเรียก workflow reusable.github/workflows/openclaw-cross-os-release-checks-reusable.ymlโดยตรง - การแยกนี้เป็นความตั้งใจ: รักษา path การเผยแพร่ npm จริงให้สั้น กำหนดได้ซ้ำ และโฟกัส artifact ขณะที่การตรวจสอบ live ที่ช้ากว่าอยู่ใน lane ของตัวเอง เพื่อไม่ให้ stall หรือ block การ publish
- การตรวจสอบการเผยแพร่ที่มี secret ควร dispatch ผ่าน
Full Release Validationหรือจาก workflow ref ของmain/release เพื่อให้ logic ของ workflow และ secret ยังถูกควบคุม OpenClaw Release Checksรับ branch, tag หรือ commit SHA แบบเต็ม ตราบใดที่ commit ที่ resolve แล้ว reachable จาก branch หรือ release tag ของ OpenClaw- preflight แบบ validation-only ของ
OpenClaw NPM Releaseยังรับ commit SHA แบบเต็ม 40 อักขระของ workflow-branch ปัจจุบันได้ โดยไม่ต้องใช้ tag ที่ push แล้ว - path SHA นั้นเป็น validation-only และไม่สามารถ promote เป็น publish จริงได้
- ในโหมด SHA workflow จะ synthesize
v<package.json version>เฉพาะสำหรับ การตรวจสอบ metadata ของ package; การ publish จริงยังต้องมี release tag จริง - workflow ทั้งสองคง path การ publish และ promotion จริงไว้บน runner ที่ GitHub-hosted ขณะที่ path validation ที่ไม่เปลี่ยนแปลงสถานะสามารถใช้ runner Linux Blacksmith ที่ใหญ่กว่าได้
- workflow นั้นรัน
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_CACHE_TEST=1 pnpm test:live:cacheโดยใช้ workflow secret ทั้งOPENAI_API_KEYและANTHROPIC_API_KEY - preflight การเผยแพร่ npm ไม่รอ lane release checks แยกอีกต่อไป
- ก่อน tagging release candidate ภายในเครื่อง ให้รัน
RELEASE_TAG=vYYYY.M.PATCH-beta.N pnpm release:fast-pretag-checkhelper นี้ รัน guardrail การเผยแพร่แบบเร็ว, การตรวจสอบ release ของ Plugin npm/ClawHub, build, UI build และrelease:openclaw:npm:checkตามลำดับที่จับ ข้อผิดพลาดทั่วไปที่บล็อกการอนุมัติก่อน workflow publish ของ GitHub จะเริ่ม - เรียกใช้
RELEASE_TAG=vYYYY.M.PATCH node --import tsx scripts/openclaw-npm-release-check.ts(หรือ tag beta/correction ที่ตรงกัน) ก่อนอนุมัติ - หลังจาก publish npm แล้ว ให้รัน
node --import tsx scripts/openclaw-npm-postpublish-verify.ts YYYY.M.PATCH(หรือเวอร์ชัน beta/correction ที่ตรงกัน) เพื่อตรวจสอบเส้นทางการติดตั้งจากรีจิสทรีที่เผยแพร่แล้ว ใน temp prefix ใหม่ - หลังจากเผยแพร่ beta ให้รัน
OPENCLAW_NPM_TELEGRAM_PACKAGE_SPEC=openclaw@YYYY.M.PATCH-beta.N OPENCLAW_NPM_TELEGRAM_CREDENTIAL_SOURCE=convex OPENCLAW_NPM_TELEGRAM_CREDENTIAL_ROLE=ci pnpm test:docker:npm-telegram-liveเพื่อตรวจสอบการเริ่มใช้งานแพ็กเกจที่ติดตั้งแล้ว การตั้งค่า Telegram และ Telegram E2E จริง กับแพ็กเกจ npm ที่เผยแพร่แล้ว โดยใช้พูลข้อมูลรับรอง Telegram แบบเช่าที่แชร์ร่วมกัน การรันเฉพาะกิจของผู้ดูแลในเครื่องอาจละเว้นตัวแปร Convex และส่งข้อมูลรับรอง envOPENCLAW_QA_TELEGRAM_*ทั้งสามรายการโดยตรงได้ - หากต้องการรัน smoke beta หลังเผยแพร่แบบเต็มจากเครื่องของผู้ดูแล ให้ใช้
pnpm release:beta-smoke -- --beta betaNตัวช่วยจะรันการตรวจสอบ Parallels npm update/fresh-target, dispatchNPM Telegram Beta E2E, poll workflow run ที่ตรงกัน, ดาวน์โหลด artifact และพิมพ์รายงาน Telegram - ผู้ดูแลสามารถรันการตรวจสอบหลังเผยแพร่แบบเดียวกันจาก GitHub Actions ผ่าน workflow
NPM Telegram Beta E2Eแบบ manual ได้ Workflow นี้ตั้งใจให้รันแบบ manual เท่านั้นและ ไม่ได้รันทุกครั้งที่ merge - ตอนนี้ระบบอัตโนมัติสำหรับ release ของผู้ดูแลใช้ preflight-then-promote:
- การเผยแพร่ npm จริงต้องผ่าน npm
preflight_run_idที่สำเร็จ - การเผยแพร่ npm จริงต้องถูก dispatch จาก branch
mainหรือrelease/YYYY.M.PATCHเดียวกันกับ preflight run ที่สำเร็จ - release npm แบบ stable มีค่าเริ่มต้นเป็น
beta - การเผยแพร่ npm แบบ stable สามารถ target
latestได้อย่างชัดเจนผ่าน workflow input - การเปลี่ยนแปลง npm dist-tag ที่ใช้ token ตอนนี้อยู่ใน
openclaw/releases/.github/workflows/openclaw-npm-dist-tags.ymlเพราะnpm dist-tag addยังต้องใช้NPM_TOKENขณะที่ repo ต้นทางยังคงเผยแพร่แบบ OIDC-only macOS Releaseสาธารณะใช้สำหรับการตรวจสอบเท่านั้น; เมื่อ tag อยู่เฉพาะบน release branch แต่ workflow ถูก dispatch จากmainให้ตั้งค่าpublic_release_branch=release/YYYY.M.PATCH- การเผยแพร่ macOS จริงต้องผ่าน macOS
preflight_run_idและvalidate_run_idที่สำเร็จ - เส้นทางการเผยแพร่จริงจะ promote artifact ที่เตรียมไว้ แทนที่จะ build ใหม่อีกครั้ง
- การเผยแพร่ npm จริงต้องผ่าน npm
- สำหรับ release แก้ไขแบบ stable เช่น
YYYY.M.PATCH-Nตัวตรวจสอบหลังเผยแพร่ จะตรวจสอบเส้นทาง upgrade แบบ temp-prefix เดียวกันจากYYYY.M.PATCHไปยังYYYY.M.PATCH-Nด้วย เพื่อไม่ให้ release แก้ไขปล่อยให้การติดตั้ง global รุ่นเก่าค้างอยู่บน payload stable ฐานโดยไม่ส่งสัญญาณ - npm release preflight จะ fail แบบปิด เว้นแต่ tarball จะมีทั้ง
dist/control-ui/index.htmlและ payloaddist/control-ui/assets/ที่ไม่ว่าง เพื่อไม่ให้เราส่ง dashboard เบราว์เซอร์ว่างอีกครั้ง - การตรวจสอบหลังเผยแพร่ยังตรวจสอบด้วยว่า entrypoint ของ Plugin ที่เผยแพร่แล้วและ
metadata ของแพ็กเกจมีอยู่ใน layout ของรีจิสทรีที่ติดตั้งแล้ว Release ที่ส่ง payload runtime
ของ Plugin ขาดหายจะ fail ตัวตรวจสอบ postpublish และไม่สามารถ promote เป็น
latestได้ pnpm test:install:smokeยังบังคับใช้งบประมาณunpackedSizeของ npm pack บน tarball update ตัวเลือกด้วย เพื่อให้ installer e2e จับ pack bloat โดยไม่ได้ตั้งใจ ก่อนเส้นทางเผยแพร่ release- หากงาน release แตะการวางแผน CI, manifest เวลา extension หรือ
matrix การทดสอบ extension ให้สร้างใหม่และตรวจทาน output matrix
plugin-prerelease-extension-shardที่ planner เป็นเจ้าของจาก.github/workflows/plugin-prerelease.ymlก่อนอนุมัติ เพื่อไม่ให้ release notes อธิบาย layout CI ที่ล้าสมัย - ความพร้อมของ release macOS แบบ stable ยังรวมถึงพื้นผิว updater:
- GitHub release ต้องลงท้ายด้วย
.zip,.dmgและ.dSYM.zipที่แพ็กเกจแล้ว appcast.xmlบนmainต้องชี้ไปยัง zip stable ใหม่หลังเผยแพร่; workflow เผยแพร่ macOS จะ commit ให้โดยอัตโนมัติ หรือเปิด PR appcast เมื่อ direct push ถูกบล็อก- แอปที่แพ็กเกจแล้วต้องคง bundle id แบบ non-debug, URL feed Sparkle ที่ไม่ว่าง
และ
CFBundleVersionที่เท่ากับหรือสูงกว่า build floor ของ Sparkle ตาม canonical สำหรับเวอร์ชัน release นั้น
- GitHub release ต้องลงท้ายด้วย
กล่องทดสอบการเผยแพร่
Full Release Validation คือวิธีที่ผู้ปฏิบัติงานเริ่มการทดสอบก่อนเผยแพร่ทั้งหมดจาก
จุดเข้าใช้งานเดียว สำหรับหลักฐานคอมมิตที่ปักหมุดไว้บนแบรนช์ที่เคลื่อนไหวเร็ว ให้ใช้
ตัวช่วยเพื่อให้ทุกเวิร์กโฟลว์ลูกทำงานจากแบรนช์ชั่วคราวที่ตรึงไว้กับ SHA เป้าหมาย:
pnpm ci:full-release --sha <full-sha>ตัวช่วยจะ push release-ci/<sha>-..., dispatch Full Release Validation
จากแบรนช์นั้นด้วย ref=<sha>, ตรวจสอบว่า headSha ของทุกเวิร์กโฟลว์ลูก
ตรงกับเป้าหมาย แล้วลบแบรนช์ชั่วคราว วิธีนี้หลีกเลี่ยงการพิสูจน์ child run ของ
main ที่ใหม่กว่าโดยไม่ตั้งใจ
สำหรับการตรวจสอบแบรนช์หรือแท็กเผยแพร่ ให้รันจาก ref เวิร์กโฟลว์ main ที่เชื่อถือได้
และส่งแบรนช์หรือแท็กเผยแพร่เป็น ref:
gh workflow run full-release-validation.yml \ --ref main \ -f ref=release/YYYY.M.PATCH \ -f provider=openai \ -f mode=both \ -f release_profile=stable \ -f evidence_package_spec=openclaw@YYYY.M.PATCH-beta.Nเวิร์กโฟลว์จะแก้ target ref, dispatch CI แบบ manual ด้วย
target_ref=<release-ref> แล้ว dispatch OpenClaw Release Checks
OpenClaw Release Checks จะแตกงานออกเป็น install smoke, การตรวจสอบเผยแพร่ข้าม OS,
ความครอบคลุมเส้นทางเผยแพร่ Docker แบบ live/E2E เมื่อเปิดใช้ soak, Package Acceptance
พร้อม E2E แพ็กเกจ Telegram ตาม canonical, QA Lab parity, live Matrix และ live
Telegram การรัน full/all จะยอมรับได้ก็ต่อเมื่อสรุป Full Release Validation
แสดง normal_ci, plugin_prerelease และ release_checks ว่าสำเร็จ
เว้นแต่การรันซ้ำแบบมุ่งเน้นจะตั้งใจข้ามลูก Plugin Prerelease ที่แยกต่างหาก
ใช้ลูก npm-telegram แบบ standalone เฉพาะสำหรับการรันซ้ำแพ็กเกจที่เผยแพร่แล้วแบบมุ่งเน้น
ด้วย release_package_spec หรือ npm_telegram_package_spec เท่านั้น
สรุปตัวตรวจสอบสุดท้ายมีตารางงานที่ช้าที่สุดของแต่ละ child run เพื่อให้ release manager
เห็น critical path ปัจจุบันโดยไม่ต้องดาวน์โหลด logs
ดู การตรวจสอบการเผยแพร่เต็มรูปแบบ สำหรับ
เมทริกซ์ stage ฉบับสมบูรณ์ ชื่องานเวิร์กโฟลว์ที่แน่นอน ความแตกต่างระหว่างโปรไฟล์ stable
กับ full, artifacts และ handle สำหรับการรันซ้ำแบบมุ่งเน้น
เวิร์กโฟลว์ลูกถูก dispatch จาก ref ที่เชื่อถือได้ซึ่งรัน Full Release Validation
โดยปกติคือ --ref main แม้ target ref จะชี้ไปยังแบรนช์หรือแท็กเผยแพร่ที่เก่ากว่า
ไม่มีอินพุต workflow-ref แยกต่างหากสำหรับ Full Release Validation ให้เลือก harness
ที่เชื่อถือได้ด้วยการเลือก ref ของ workflow run
อย่าใช้ --ref main -f ref=<sha> สำหรับหลักฐานคอมมิตที่แน่นอนบน main ที่เคลื่อนไหวอยู่
เพราะ raw commit SHA ไม่สามารถเป็น workflow dispatch ref ได้ ดังนั้นให้ใช้
pnpm ci:full-release --sha <sha> เพื่อสร้างแบรนช์ชั่วคราวที่ปักหมุดไว้
ใช้ release_profile เพื่อเลือกความกว้างของ live/provider:
minimum: เส้นทาง live และ Docker สำหรับ OpenAI/core ที่สำคัญต่อการเผยแพร่และเร็วที่สุดstable: minimum รวมกับความครอบคลุม provider/backend ที่เสถียรสำหรับการอนุมัติการเผยแพร่full: stable รวมกับความครอบคลุม provider/media เชิงแนะนำที่กว้างขึ้น
การตรวจสอบ stable และ full จะรัน exhaustive live/E2E, เส้นทางเผยแพร่ Docker
และการกวาด upgrade-survivor สำหรับแพ็กเกจที่เผยแพร่แล้วแบบมีขอบเขตก่อนโปรโมตเสมอ
ใช้ run_release_soak=true เพื่อขอให้รันการกวาดเดียวกันนั้นสำหรับ beta การกวาดนี้ครอบคลุม
แพ็กเกจ stable ล่าสุดสี่รายการ รวมถึง baseline ที่ปักหมุดไว้ 2026.4.23 และ 2026.5.2
รวมถึงความครอบคลุม 2026.4.15 ที่เก่ากว่า โดยลบ baseline ที่ซ้ำออกและแบ่ง shard
แต่ละ baseline ไปยังงาน Docker runner ของตัวเอง
OpenClaw Release Checks ใช้ ref เวิร์กโฟลว์ที่เชื่อถือได้เพื่อแก้ target
ref หนึ่งครั้งเป็น release-package-under-test และนำ artifact นั้นกลับมาใช้ใน cross-OS,
Package Acceptance และการตรวจสอบ Docker เส้นทางเผยแพร่เมื่อรัน soak วิธีนี้ทำให้
กล่องที่เกี่ยวข้องกับแพ็กเกจทั้งหมดใช้ bytes ชุดเดียวกันและหลีกเลี่ยงการ build แพ็กเกจซ้ำ
หลังจาก beta อยู่บน npm แล้ว ให้ตั้ง release_package_spec=openclaw@YYYY.M.PATCH-beta.N
เพื่อให้ release checks ดาวน์โหลดแพ็กเกจที่เผยแพร่แล้วหนึ่งครั้ง แยก SHA ของ build source
จาก dist/build-info.json แล้วนำ artifact นั้นกลับมาใช้ใน cross-OS,
Package Acceptance, release-path Docker และ lane แพ็กเกจ Telegram
OpenAI install smoke แบบ cross-OS ใช้ OPENCLAW_CROSS_OS_OPENAI_MODEL เมื่อ
ตั้งค่าตัวแปร repo/org ไว้ มิฉะนั้นใช้ openai/gpt-5.4 เพราะ lane นี้กำลังพิสูจน์
การติดตั้งแพ็กเกจ onboarding การเริ่ม Gateway และ live agent turn หนึ่งครั้ง
ไม่ใช่การ benchmark model ค่าเริ่มต้นที่ช้าที่สุด live provider matrix ที่กว้างกว่า
ยังคงเป็นที่สำหรับความครอบคลุมเฉพาะ model
ใช้ variant เหล่านี้ตาม stage การเผยแพร่:
# Validate an unpublished release candidate branch.gh workflow run full-release-validation.yml \ --ref main \ -f ref=release/YYYY.M.PATCH \ -f provider=openai \ -f mode=both \ -f release_profile=stable # Validate an exact pushed commit.gh workflow run full-release-validation.yml \ --ref main \ -f ref=<40-char-sha> \ -f provider=openai \ -f mode=both # After publishing a beta, add published-package Telegram E2E.gh workflow run full-release-validation.yml \ --ref main \ -f ref=release/YYYY.M.PATCH \ -f provider=openai \ -f mode=both \ -f release_profile=full \ -f release_package_spec=openclaw@YYYY.M.PATCH-beta.N \ -f evidence_package_spec=openclaw@YYYY.M.PATCH-beta.N \ -f npm_telegram_provider_mode=mock-openaiอย่าใช้ umbrella แบบเต็มเป็นการรันซ้ำครั้งแรกหลังการแก้แบบมุ่งเน้น หากกล่องหนึ่งล้มเหลว
ให้ใช้เวิร์กโฟลว์ลูก งาน Docker lane โปรไฟล์แพ็กเกจ model provider หรือ QA lane
ที่ล้มเหลวสำหรับหลักฐานครั้งถัดไป รัน umbrella แบบเต็มอีกครั้งเฉพาะเมื่อการแก้เปลี่ยน
orchestration การเผยแพร่ที่ใช้ร่วมกัน หรือทำให้หลักฐาน all-box ก่อนหน้าเก่าไปแล้ว
ตัวตรวจสอบสุดท้ายของ umbrella จะตรวจสอบ ids ของ child workflow run ที่บันทึกไว้อีกครั้ง
ดังนั้นหลังจากรันเวิร์กโฟลว์ลูกซ้ำจนสำเร็จ ให้รันซ้ำเฉพาะ parent job
Verify full validation ที่ล้มเหลว
สำหรับการกู้คืนแบบมีขอบเขต ให้ส่ง rerun_group ไปยัง umbrella 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; การรัน full/all ใช้ E2E แพ็กเกจ Telegram ตาม canonical
ภายใน Package Acceptance การรันซ้ำ cross-OS แบบมุ่งเน้นสามารถเพิ่ม
cross_os_suite_filter=windows/packaged-upgrade หรือตัวกรอง OS/suite อื่นได้
ความล้มเหลวของ QA release-check จะบล็อกการตรวจสอบการเผยแพร่ปกติ รวมถึง
OpenClaw dynamic tool drift ที่จำเป็นใน tier มาตรฐาน การรัน Tideclaw alpha
ยังอาจถือว่า lane release-check ที่ไม่ใช่ package-safety เป็นเชิงแนะนำได้
เมื่อ live_suite_filter ขอ lane QA live ที่ gated อย่างชัดเจน เช่น Discord,
WhatsApp หรือ Slack ต้องเปิดใช้ตัวแปร repo OPENCLAW_RELEASE_QA_*_LIVE_CI_ENABLED
ที่ตรงกัน มิฉะนั้น input capture จะล้มเหลวแทนที่จะข้าม lane อย่างเงียบ ๆ
Vitest
กล่อง Vitest คือเวิร์กโฟลว์ลูก CI แบบ manual Manual CI ตั้งใจข้าม changed scoping
และบังคับใช้กราฟทดสอบปกติสำหรับ release candidate: Linux Node shards,
bundled-plugin shards, plugin และ channel contract shards, ความเข้ากันได้กับ Node 22,
check-*, check-additional-*, การตรวจสอบ smoke ของ built-artifact, การตรวจสอบ docs,
Python skills, Windows, macOS และ Control UI i18n Android จะรวมอยู่เมื่อ
Full Release Validation รันกล่องนี้ เพราะ umbrella ส่ง include_android=true;
CI แบบ manual standalone ต้องมี include_android=true สำหรับความครอบคลุม Android
ใช้กล่องนี้เพื่อตอบว่า "source tree ผ่านชุดทดสอบปกติเต็มรูปแบบหรือไม่?" กล่องนี้ไม่เหมือนกับการตรวจสอบผลิตภัณฑ์บนเส้นทางเผยแพร่ หลักฐานที่ควรเก็บ:
- สรุป
Full Release Validationที่แสดง URL ของ runCIที่ dispatch - run
CIเป็นสีเขียวบน SHA เป้าหมายที่แน่นอน - ชื่อ shard ที่ล้มเหลวหรือช้าจากงาน CI เมื่อสืบสวน regression
- artifacts เวลาของ Vitest เช่น
.artifacts/vitest-shard-timings.jsonเมื่อ run ต้องการการวิเคราะห์ประสิทธิภาพ
รัน CI แบบ manual โดยตรงเฉพาะเมื่อการเผยแพร่ต้องการ CI ปกติที่ deterministic แต่
ไม่ต้องการกล่อง Docker, QA Lab, live, cross-OS หรือ package ใช้คำสั่งแรก
สำหรับ 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 แบบ packaged
แทนที่จะเป็นเฉพาะการทดสอบระดับซอร์สเท่านั้น
ความครอบคลุม Docker สำหรับการเผยแพร่รวมถึง:
- install smoke แบบเต็มโดยเปิดใช้ Bun global install smoke ที่ช้า
- การเตรียม/นำ root Dockerfile smoke image กลับมาใช้ตาม target SHA โดยมีงาน smoke สำหรับ QR, root/gateway และ installer/Bun รันเป็น install-smoke shards แยกกัน
- lane E2E ของ repository
- ชุดย่อย Docker เส้นทางเผยแพร่:
core,package-update-openai,package-update-anthropic,package-update-core,plugins-runtime-plugins,plugins-runtime-services,plugins-runtime-install-a,plugins-runtime-install-b,plugins-runtime-install-c,plugins-runtime-install-d,plugins-runtime-install-e,plugins-runtime-install-f,plugins-runtime-install-gและplugins-runtime-install-h - ความครอบคลุม OpenWebUI ภายในชุดย่อย
plugins-runtime-servicesเมื่อร้องขอ - lane ติดตั้ง/ถอนการติดตั้ง bundled plugin แบบแยก
bundled-plugin-install-uninstall-0ถึงbundled-plugin-install-uninstall-23 - provider suites แบบ live/E2E และความครอบคลุม Docker live model เมื่อ release checks รวม live suites
ใช้ artifacts ของ Docker ก่อนรันซ้ำ scheduler เส้นทางเผยแพร่จะอัปโหลด
.artifacts/docker-tests/ พร้อม lane logs, summary.json, failures.json,
phase timings, scheduler plan JSON และคำสั่ง rerun สำหรับการกู้คืนแบบมุ่งเน้น
ให้ใช้ docker_lanes=<lane[,lane]> บนเวิร์กโฟลว์ live/E2E แบบ reusable แทนการรัน
ชุดย่อยการเผยแพร่ทั้งหมดซ้ำ คำสั่ง rerun ที่สร้างขึ้นจะรวม
package_artifact_run_id ก่อนหน้าและ input สำหรับ Docker image ที่เตรียมไว้เมื่อมี
เพื่อให้ lane ที่ล้มเหลวสามารถนำ tarball และ GHCR images เดิมกลับมาใช้ได้
QA Lab
กล่อง QA Lab เป็นส่วนหนึ่งของ OpenClaw Release Checks เช่นกัน เป็น gate การเผยแพร่
ด้านพฤติกรรมเชิง agentic และระดับ channel แยกจาก mechanics ของแพ็กเกจใน Vitest และ Docker
ความครอบคลุม QA Lab สำหรับการเผยแพร่รวมถึง:
- lane mock parity ที่เปรียบเทียบ lane candidate ของ OpenAI กับ baseline Opus 4.6 โดยใช้ agentic parity pack
- โปรไฟล์ QA live Matrix แบบเร็วโดยใช้ environment
qa-live-shared - lane QA live Telegram โดยใช้ Convex CI credential leases
pnpm qa:otel:smoke,pnpm qa:otel:collector-smoke,pnpm qa:prometheus:smokeหรือpnpm qa:observability:smokeเมื่อ telemetry การเผยแพร่ต้องการหลักฐาน local ที่ชัดเจน
ใช้กล่องนี้เพื่อตอบว่า "การเผยแพร่ทำงานถูกต้องใน QA scenarios และ live channel flows หรือไม่?" เก็บ URL artifacts สำหรับ lane parity, Matrix และ Telegram เมื่ออนุมัติ การเผยแพร่ ความครอบคลุม Matrix แบบเต็มยังคงมีให้ใช้เป็นการรัน QA-Lab แบบ sharded ด้วย manual แทนที่จะเป็น lane ที่สำคัญต่อการเผยแพร่ตามค่าเริ่มต้น
Package
กล่อง Package คือ gate ของผลิตภัณฑ์ที่ติดตั้งได้ รองรับโดย
Package Acceptance และ resolver
scripts/resolve-openclaw-package-candidate.mjs resolver จะ normalize candidate
ให้เป็น tarball package-under-test ที่ Docker E2E ใช้ ตรวจสอบ inventory ของแพ็กเกจ
บันทึกเวอร์ชันแพ็กเกจและ SHA-256 และแยก ref ของ workflow harness ออกจาก ref
ของ package source
แหล่ง candidate ที่รองรับ:
source=npm:openclaw@beta,openclaw@latestหรือเวอร์ชันรีลีส OpenClaw ที่ระบุแน่นอนsource=ref: แพ็ก branch, tag หรือ commit SHA แบบเต็มของpackage_refที่เชื่อถือได้ พร้อม harnessworkflow_refที่เลือกsource=url: ดาวน์โหลด.tgzสาธารณะผ่าน HTTPS พร้อมpackage_sha256ที่จำเป็น; ข้อมูลรับรองใน URL, พอร์ต HTTPS ที่ไม่ใช่ค่าเริ่มต้น, ชื่อโฮสต์หรือที่อยู่ที่ resolve แล้วแบบส่วนตัว/ภายใน/ใช้งานพิเศษ และ redirect ที่ไม่ปลอดภัยจะถูกปฏิเสธsource=trusted-url: ดาวน์โหลด.tgzผ่าน HTTPS พร้อมpackage_sha256และtrusted_source_idที่จำเป็นจากนโยบายที่ระบุชื่อใน.github/package-trusted-sources.json; ใช้สิ่งนี้สำหรับ mirror ระดับองค์กรหรือที่เก็บแพ็กเกจส่วนตัว ที่ maintainer เป็นเจ้าของ แทนการเพิ่ม bypass เครือข่ายส่วนตัวระดับ input ให้กับsource=urlsource=artifact: ใช้.tgzที่อัปโหลดโดย GitHub Actions run อื่นซ้ำ
OpenClaw Release Checks เรียกใช้การยอมรับแพ็กเกจด้วย source=artifact, artifact แพ็กเกจรีลีส
ที่เตรียมไว้, suite_profile=custom,
docker_lanes=doctor-switch update-channel-switch skill-install update-corrupt-plugin upgrade-survivor published-upgrade-survivor update-restart-auth plugins-offline plugin-update,
telegram_mode=mock-openai การยอมรับแพ็กเกจจะรักษา QA ของ migration, update,
การ restart อัปเดต auth ที่ตั้งค่าไว้, การติดตั้ง ClawHub skill แบบ live, การล้าง dependency ของ Plugin ที่ค้างเก่า, fixture Plugin แบบ offline,
การอัปเดต Plugin และแพ็กเกจ Telegram ให้ทดสอบกับ tarball ที่ resolve เดียวกัน การตรวจรีลีสที่บล็อกจะใช้ baseline แพ็กเกจที่เผยแพร่ล่าสุด
ตามค่าเริ่มต้น; โปรไฟล์ beta ที่มี run_release_soak=true, release_profile=stable หรือ
release_profile=full จะขยายไปยัง baseline ที่เผยแพร่บน npm แบบ stable ทุกตัวตั้งแต่
2026.4.23 ถึง latest รวมถึง fixture ของปัญหาที่ถูกรายงาน ใช้
การยอมรับแพ็กเกจด้วย source=npm สำหรับ candidate ที่เผยแพร่แล้ว,
source=ref สำหรับ tarball npm ในเครื่องที่มี SHA รองรับก่อน publish,
source=trusted-url สำหรับ mirror ระดับองค์กร/ส่วนตัวที่ maintainer เป็นเจ้าของ หรือ
source=artifact สำหรับ tarball ที่เตรียมไว้ซึ่งอัปโหลดโดย GitHub Actions run อื่น
สิ่งนี้เป็นตัวแทนแบบเนทีฟของ GitHub
สำหรับ coverage ด้านแพ็กเกจ/update ส่วนใหญ่ที่ก่อนหน้านี้ต้องใช้
Parallels การตรวจรีลีสข้าม OS ยังสำคัญสำหรับพฤติกรรม onboarding,
installer และแพลตฟอร์มเฉพาะ OS แต่การตรวจสอบผลิตภัณฑ์ด้านแพ็กเกจ/update ควร
เลือกใช้การยอมรับแพ็กเกจ
เช็กลิสต์มาตรฐานสำหรับการตรวจสอบ update และ Plugin คือ
การทดสอบ update และ Plugin ใช้สิ่งนี้เมื่อ
ตัดสินใจว่า lane แบบ local, Docker, การยอมรับแพ็กเกจ หรือ release-check ใดพิสูจน์
การติดตั้ง/อัปเดต Plugin, การล้างข้อมูลโดย doctor หรือการเปลี่ยนแปลง migration ของ published-package
การ migration แบบ update ที่เผยแพร่ทั้งหมดจากแพ็กเกจ stable 2026.4.23+ ทุกตัว
เป็น workflow Update Migration แบบ manual แยกต่างหาก ไม่ใช่ส่วนหนึ่งของ Full Release CI
ความผ่อนปรนของ package-acceptance แบบ legacy ถูกจำกัดเวลาโดยตั้งใจ แพ็กเกจจนถึง
2026.4.25 อาจใช้ path compatibility สำหรับช่องว่าง metadata ที่เผยแพร่ไปยัง
npm แล้ว: รายการ inventory QA ส่วนตัวที่ขาดจาก tarball, ไม่มี
gateway install --wrapper, ไม่มีไฟล์ patch ใน git fixture ที่มาจาก tarball,
ไม่มี update.channel ที่ persist ไว้, ตำแหน่ง install-record ของ Plugin แบบ legacy,
ไม่มีการ persist install-record ของ marketplace และการ migration metadata ของ config
ระหว่าง plugins update แพ็กเกจ 2026.4.26 ที่เผยแพร่แล้วอาจเตือน
สำหรับไฟล์ stamp metadata ของ local build ที่เคยถูกส่งออกไปแล้ว แพ็กเกจถัดจากนั้น
ต้องตรงตามสัญญาแพ็กเกจสมัยใหม่; ช่องว่างเดียวกันเหล่านั้นจะทำให้การตรวจสอบรีลีสล้มเหลว
ใช้โปรไฟล์การยอมรับแพ็กเกจที่กว้างขึ้นเมื่อคำถามของรีลีสเกี่ยวกับ แพ็กเกจที่ติดตั้งได้จริง:
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 published_upgrade_survivor_baseline=openclaw@2026.4.26โปรไฟล์แพ็กเกจทั่วไป:
smoke: lane การติดตั้งแพ็กเกจ/channel/agent, เครือข่าย Gateway และการ reload config อย่างรวดเร็วpackage: สัญญาแพ็กเกจด้าน install/update/restart/Plugin พร้อมหลักฐานการติดตั้ง ClawHub skill แบบ live; นี่คือค่าเริ่มต้นของ release-checkproduct:packageรวมกับช่องทาง MCP, การล้าง cron/subagent, การค้นหาเว็บ OpenAI และ OpenWebUIfull: chunk ของ Docker release-path พร้อม OpenWebUIcustom: รายการdocker_lanesที่แน่นอนสำหรับการ rerun แบบเจาะจง
สำหรับหลักฐาน Telegram ของ package-candidate ให้เปิดใช้ telegram_mode=mock-openai หรือ
telegram_mode=live-frontier ในการยอมรับแพ็กเกจ workflow จะส่ง tarball
package-under-test ที่ resolve แล้วเข้าไปใน lane Telegram; workflow Telegram แบบ standalone
ยังยอมรับ spec npm ที่เผยแพร่แล้วสำหรับการตรวจหลัง publish
ระบบอัตโนมัติสำหรับ publish รีลีสปกติ
สำหรับ beta, latest, Plugin, GitHub Release และการเผยแพร่แพลตฟอร์ม
OpenClaw Release Publish คือ entrypoint แบบแก้ไขสถานะตามปกติ เส้นทาง extended-stable แบบ npm-only รายเดือน
.33+ ไม่ได้ใช้ orchestrator นี้ workflow ปกติ
orchestrate workflow trusted-publisher ตามลำดับที่รีลีสต้องใช้:
- Check out tag รีลีสและ resolve commit SHA ของ tag นั้น
- ตรวจสอบว่า tag เข้าถึงได้จาก
mainหรือrelease/* - เรียกใช้
pnpm plugins:sync:check - Dispatch
Plugin NPM Releaseด้วยpublish_scope=all-publishableและref=<release-sha> - Dispatch
Plugin ClawHub Releaseด้วย scope และ SHA เดียวกัน - Dispatch
OpenClaw NPM Releaseด้วย tag รีลีส, npm dist-tag และpreflight_run_idที่บันทึกไว้ หลังตรวจสอบfull_release_validation_run_idที่บันทึกไว้ - สำหรับรีลีส stable ให้สร้างหรืออัปเดต GitHub release เป็น draft, dispatch
Windows Node Releaseด้วยwindows_node_tagที่ระบุชัดเจนและwindows_node_installer_digestsที่ candidate อนุมัติแล้ว และตรวจสอบ asset installer/checksum มาตรฐานก่อนเผยแพร่ draft
ตัวอย่างการ publish beta:
gh workflow run openclaw-release-publish.yml \ --ref release/YYYY.M.PATCH \ -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 npm_dist_tag=betaการ publish stable ไปยัง beta dist-tag ค่าเริ่มต้น:
gh workflow run openclaw-release-publish.yml \ --ref release/YYYY.M.PATCH \ -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 npm_dist_tag=betaการ promote stable ไปยัง latest โดยตรงต้องระบุชัดเจน:
gh workflow run openclaw-release-publish.yml \ --ref release/YYYY.M.PATCH \ -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 npm_dist_tag=latestใช้ workflow ระดับล่าง Plugin NPM Release และ Plugin ClawHub Release
เฉพาะสำหรับงานซ่อมหรือ republish แบบเจาะจง OpenClaw Release Publish ปฏิเสธ
plugin_publish_scope=selected เมื่อ publish_openclaw_npm=true เพื่อให้แพ็กเกจ core
ไม่สามารถส่งออกโดยไม่มี Plugin ทางการทุกตัวที่ publish ได้ รวมถึง
@openclaw/diffs-language-pack สำหรับการซ่อม Plugin ที่เลือกไว้ ให้ตั้ง
publish_openclaw_npm=false พร้อม plugin_publish_scope=selected และ
plugins=@openclaw/name หรือ dispatch workflow ลูกโดยตรง
input ของ workflow NPM
OpenClaw NPM Release ยอมรับ input ที่ operator ควบคุมได้เหล่านี้:
tag: tag รีลีสที่จำเป็น เช่นv2026.4.2,v2026.4.2-1หรือv2026.4.2-beta.1; เมื่อpreflight_only=trueอาจเป็น commit SHA แบบเต็ม 40 อักขระ ปัจจุบันของ workflow-branch สำหรับ preflight เพื่อการตรวจสอบเท่านั้นได้ด้วยpreflight_only:trueสำหรับ validate/build/package เท่านั้น,falseสำหรับ path publish จริงpreflight_run_id: จำเป็นบน path publish จริง เพื่อให้ workflow ใช้ tarball ที่เตรียมไว้จาก preflight run ที่สำเร็จซ้ำfull_release_validation_run_id: จำเป็นสำหรับการเผยแพร่ monthly extended-stable และ regular non-beta จริง เพื่อให้ workflow ยืนยันตัวตนของ validation run ที่แน่นอนnpm_dist_tag: tag เป้าหมายของ npm สำหรับ path publish; ยอมรับalpha,beta,latestหรือextended-stableและมีค่าเริ่มต้นเป็นbetapatch สุดท้าย33ขึ้นไปต้อง ใช้extended-stable; โดยค่าเริ่มต้นextended-stableจะปฏิเสธ patch ก่อนหน้า และจะปฏิเสธ tag ที่ไม่ใช่ final เสมอbypass_extended_stable_guard: boolean สำหรับการทดสอบเท่านั้น ค่าเริ่มต้นfalse; เมื่อใช้npm_dist_tag=extended-stableจะ bypass eligibility ของ monthly extended-stable ขณะยังคงรักษา identity ของรีลีส, artifact, approval และ readback check
OpenClaw Release Publish ยอมรับ input ที่ operator ควบคุมได้เหล่านี้:
tag: tag รีลีสที่จำเป็น; ต้องมีอยู่แล้วpreflight_run_id: run id ของ preflightOpenClaw NPM Releaseที่สำเร็จ; จำเป็นเมื่อpublish_openclaw_npm=truefull_release_validation_run_id: run id ของFull Release Validationที่สำเร็จ; จำเป็นเมื่อpublish_openclaw_npm=truewindows_node_tag: tag รีลีสopenclaw/openclaw-windows-nodeแบบ non-prerelease ที่แน่นอน; จำเป็นสำหรับการ publish OpenClaw stablewindows_node_installer_digests: map JSON แบบกะทัดรัดที่ candidate อนุมัติแล้วของ ชื่อ installer Windows ปัจจุบันไปยัง digestsha256:ที่ pin ไว้; จำเป็น สำหรับการ publish OpenClaw stablenpm_dist_tag: tag เป้าหมายของ npm สำหรับแพ็กเกจ OpenClawplugin_publish_scope: ค่าเริ่มต้นคือall-publishable; ใช้selectedเฉพาะ สำหรับงานซ่อมแบบ plugin-only ที่เจาะจงพร้อมpublish_openclaw_npm=falseplugins: ชื่อแพ็กเกจ@openclaw/*คั่นด้วย comma เมื่อplugin_publish_scope=selectedpublish_openclaw_npm: ค่าเริ่มต้นคือtrue; ตั้งเป็นfalseเฉพาะเมื่อใช้ workflow เป็น orchestrator ซ่อมแบบ plugin-onlywait_for_clawhub: ค่าเริ่มต้นคือfalseเพื่อให้ความพร้อมใช้งานของ npm ไม่ถูกบล็อกโดย sidecar ของ ClawHub; ตั้งเป็นtrueเฉพาะเมื่อการเสร็จสิ้นของ workflow ต้องรวม การเสร็จสิ้นของ ClawHub
OpenClaw Release Checks ยอมรับ input ที่ operator ควบคุมได้เหล่านี้:
ref: branch, tag หรือ commit SHA แบบเต็มที่จะตรวจสอบ การตรวจที่มี secret ต้องให้ commit ที่ resolve แล้วเข้าถึงได้จาก branch หรือ tag รีลีสของ OpenClawrun_release_soak: เลือกใช้ live/E2E แบบ exhaustive, Docker release-path และ soak all-since upgrade-survivor สำหรับการตรวจรีลีส beta สิ่งนี้ถูกบังคับเปิดโดยrelease_profile=stableและrelease_profile=full
กฎ:
- เวอร์ชัน final และ correction ปกติที่ต่ำกว่า patch
33อาจ publish ไปยังbetaหรือlatestได้ เวอร์ชัน final ที่ patch33หรือสูงกว่าต้อง publish ไปยังextended-stableและเวอร์ชันที่มี suffix แบบ correction ที่ขอบเขตนั้นจะถูกปฏิเสธ - tag beta prerelease อาจ publish ได้เฉพาะไปยัง
beta - สำหรับ
OpenClaw NPM Releaseอนุญาตให้ใช้ input commit SHA แบบเต็มเฉพาะเมื่อpreflight_only=true OpenClaw Release ChecksและFull Release Validationเป็น validation-only เสมอ- path publish จริงต้องใช้
npm_dist_tagเดียวกับที่ใช้ระหว่าง preflight; workflow จะตรวจสอบว่า metadata นั้นยังคงต่อเนื่องก่อน publish
ลำดับรีลีส beta/latest stable ปกติ
ลำดับ legacy นี้มีไว้สำหรับรีลีสแบบ orchestrated ปกติที่เป็นเจ้าของ
Plugin, GitHub Release, Windows และงานแพลตฟอร์มอื่นด้วย ไม่ใช่
path extended-stable แบบ npm-only รายเดือน .33+ ที่บันทึกไว้ด้านบนของหน้านี้
เมื่อ cut รีลีส stable แบบ orchestrated ปกติ:
- เรียกใช้
OpenClaw NPM Releaseพร้อมpreflight_only=true- ก่อนมีแท็ก คุณอาจใช้ SHA ของคอมมิตปัจจุบันเต็มรูปแบบจาก workflow branch สำหรับการ dry run แบบตรวจสอบเท่านั้นของ preflight workflow
- เลือก
npm_dist_tag=betaสำหรับโฟลว์ beta-first ปกติ หรือlatestเฉพาะ เมื่อคุณตั้งใจต้องการเผยแพร่ stable โดยตรง - เรียกใช้
Full Release Validationบน release branch, release tag หรือ commit SHA แบบเต็ม เมื่อคุณต้องการ CI ปกติพร้อมความครอบคลุมของ live prompt cache, Docker, QA Lab, Matrix และ Telegram จาก manual workflow เดียว - หากคุณตั้งใจต้องการเฉพาะกราฟการทดสอบปกติที่กำหนดแน่นอน ให้เรียกใช้
manual
CIworkflow บน release ref แทน - เลือก release tag แบบ non-prerelease ที่ตรงของ
openclaw/openclaw-windows-nodeซึ่ง installer x64 และ ARM64 ที่ลงนามแล้วควรถูกเผยแพร่ บันทึกเป็นwindows_node_tagและบันทึกแผนที่ digest ที่ตรวจสอบแล้วของ installer เหล่านั้นเป็นwindows_node_installer_digestsตัวช่วย release-candidate จะบันทึกทั้งสองค่า และรวมไว้ในคำสั่ง publish ที่สร้างขึ้น - บันทึก
preflight_run_idและfull_release_validation_run_idที่สำเร็จ - เรียกใช้
OpenClaw Release Publishด้วยtagเดิม,npm_dist_tagเดิม,windows_node_tagที่เลือก,windows_node_installer_digestsที่บันทึกไว้,preflight_run_idที่บันทึกไว้ และfull_release_validation_run_idที่บันทึกไว้; workflow นี้จะเผยแพร่ Plugin ที่แยกออกมาภายนอกไปยัง npm และ ClawHub ก่อนเลื่อนสถานะ แพ็กเกจ npm ของ OpenClaw - หาก release ถูกลงที่
betaให้ใช้ workflowopenclaw/releases/.github/workflows/openclaw-npm-dist-tags.ymlเพื่อเลื่อนเวอร์ชัน stable นั้นจากbetaเป็นlatest - หาก release ตั้งใจเผยแพร่โดยตรงไปยัง
latestและbetaควรตาม build stable เดียวกันทันที ให้ใช้ release workflow เดียวกันนั้น เพื่อชี้ dist-tag ทั้งสองไปยังเวอร์ชัน stable หรือปล่อยให้การซิงก์ self-healing ตามกำหนดเวลาของ workflow ย้ายbetaในภายหลัง
การเปลี่ยน dist-tag อยู่ใน repo บัญชีแยกประเภทของ release เพราะยังต้องใช้
NPM_TOKEN ขณะที่ repo ต้นทางยังคงใช้การ publish แบบ OIDC-only
วิธีนี้ทำให้ทั้งเส้นทาง publish โดยตรงและเส้นทางโปรโมตแบบ beta-first ถูกบันทึกไว้ในเอกสารและผู้ปฏิบัติงานมองเห็นได้
หาก maintainer ต้องย้อนกลับไปใช้การยืนยันตัวตน npm ภายในเครื่อง ให้เรียกใช้คำสั่ง
1Password CLI (op) ใด ๆ เฉพาะภายในเซสชัน tmux ที่แยกไว้เท่านั้น อย่าเรียก op
โดยตรงจาก shell หลักของ agent; การเก็บไว้ใน tmux ทำให้ prompts,
alerts และการจัดการ OTP สังเกตได้ และป้องกันการแจ้งเตือน host ซ้ำ
อ้างอิงสาธารณะ
.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
Maintainer ใช้เอกสาร release ส่วนตัวใน
openclaw/maintainers/release/README.md
สำหรับ runbook จริง