Release and CI
سیاست انتشار
OpenClaw در حال حاضر سه کانال بهروزرسانی روبهکاربر ارائه میکند:
- stable: کانال انتشار ترویجشدهٔ موجود که تا زمان تحقق نقطهعطف جداگانهٔ CLI/کانال، همچنان از طریق npm
latestتفکیک میشود - beta: برچسبهای پیشانتشار که در npm
betaمنتشر میشوند - dev: سرِ متحرک
main
بهطور جداگانه، اپراتورهای انتشار میتوانند بستهٔ هستهٔ آخرین ماه تکمیلشده را
از وصلهٔ 33 به بعد در npm extended-stable منتشر کنند. خط نهایی عادی
ماه جاری در npm latest ادامه مییابد؛ این تفکیک انتشار در سمت اپراتور
بهخودیخود تفکیک کانال بهروزرسانی CLI را تغییر نمیدهد.
ساختهای آلفای Tideclaw یک مسیر پیشانتشار داخلی جداگانه هستند (dist-tag در npm با نام alpha) که در ورودیهای گردشکار NPM و جعبههای آزمون انتشار پوشش داده شدهاند.
نامگذاری نسخه
- نسخهٔ انتشار extended-stable ماهانهٔ npm:
YYYY.M.PATCH، همراه باPATCH >= 33، برچسب git به نامvYYYY.M.PATCH - نسخهٔ انتشار نهایی روزانه/عادی:
YYYY.M.PATCH، همراه باPATCH < 33، برچسب git به نامvYYYY.M.PATCH - نسخهٔ انتشار اصلاحی جایگزین عادی:
YYYY.M.PATCH-N، برچسب git به نامvYYYY.M.PATCH-N - نسخهٔ پیشانتشار بتا:
YYYY.M.PATCH-beta.N، برچسب git به نامvYYYY.M.PATCH-beta.N - نسخهٔ پیشانتشار آلفا:
YYYY.M.PATCH-alpha.N، برچسب git به نامvYYYY.M.PATCH-alpha.N - هرگز ماه یا وصله را با صفر ابتدایی پُر نکنید
PATCHیک شمارهٔ ترتیبی برای قطار انتشار ماهانه است، نه روز تقویمی. انتشارهای نهایی عادی و بتا قطار جاری را پیش میبرند؛ برچسبهای صرفاً آلفا هرگز شمارهٔ وصلهٔ بتا/عادی را مصرف یا افزایش نمیدهند، بنابراین هنگام انتخاب قطار بتا یا عادی، برچسبهای قدیمیِ صرفاً آلفا با شمارهٔ وصلهٔ بالاتر را نادیده بگیرید.- ساختهای آلفا/شبانه از قطار وصلهٔ منتشرنشدهٔ بعدی استفاده میکنند و برای ساختهای تکراری فقط
alpha.Nرا افزایش میدهند. پس از آنکه آن وصله نسخهٔ بتا داشته باشد، ساختهای آلفای جدید به وصلهٔ بعدی منتقل میشوند. - نسخههای npm تغییرناپذیرند: هرگز یک برچسب منتشرشده را حذف، بازنشر یا دوباره استفاده نکنید. در عوض شمارهٔ پیشانتشار بعدی یا وصلهٔ ماهانهٔ بعدی را ایجاد کنید.
latestهمچنان از خط جاری عادی/روزانهٔ npm پیروی میکند؛betaهدف نصب بتای جاری استextended-stableبهمعنای بستهٔ پشتیبانیشدهٔ npm برای ماه پیشین است که از وصلهٔ33آغاز میشود؛ وصلهٔ34و نسخههای بعدی، انتشارهای نگهداری در آن خط ماهانه هستند- انتشارهای نهایی عادی و اصلاحی عادی بهطور پیشفرض در npm
betaمنتشر میشوند؛ اپراتورهای انتشار میتوانند صراحتاًlatestرا هدف قرار دهند یا بعداً یک ساخت بتای ارزیابیشده را ترویج کنند - مسیر اختصاصی extended-stable ماهانه، بستهٔ هستهٔ npm و همهٔ Pluginهای رسمی قابلانتشار در npm را دقیقاً با یک نسخه منتشر میکند. این مسیر Pluginها را در ClawHub منتشر نمیکند و مصنوعات macOS یا Windows، یک انتشار GitHub، dist-tagهای مخزن خصوصی، تصاویر Docker، مصنوعات موبایل یا بارگیریهای وبسایت را نیز منتشر نمیکند.
- هر انتشار نهایی عادی، بستهٔ npm، برنامهٔ macOS، فایل APK مستقل و امضاشدهٔ Android و نصبکنندههای امضاشدهٔ Windows Hub را با هم عرضه میکند. انتشارهای بتا معمولاً ابتدا مسیر npm/بسته را اعتبارسنجی و منتشر میکنند و ساخت/امضا/محضریسازی/ترویج برنامههای بومی، مگر آنکه صراحتاً درخواست شود، برای انتشار نهایی عادی محفوظ میماند.
آهنگ انتشار
- انتشارها ابتدا بهصورت بتا پیش میروند؛ stable فقط پس از اعتبارسنجی جدیدترین بتا ارائه میشود
- نگهدارندگان معمولاً انتشارها را از شاخهٔ
release/YYYY.M.PATCHکه ازmainجاری ایجاد شده است آماده میکنند تا اعتبارسنجی و اصلاحات انتشار، توسعهٔ جدید درmainرا مسدود نکند - اگر یک برچسب بتا فرستاده یا منتشر شده باشد و به اصلاح نیاز داشته باشد، نگهدارندگان بهجای حذف یا ایجاد دوبارهٔ برچسب قبلی، برچسب بعدی
-beta.Nرا ایجاد میکنند - جزئیات رویهٔ انتشار، تأییدها، اطلاعات اعتبارسنجی و یادداشتهای بازیابی فقط برای نگهدارندگان است
انتشار ماهانهٔ extended-stable فقط در npm
این یک استثنای اختصاصی برای رویهٔ انتشار عادی زیر است. برای ماه تکمیلشدهٔ
YYYY.M، extended-stable/YYYY.M.33 را ایجاد کنید؛
vYYYY.M.33 و وصلههای نگهداری بعدی را از همان شاخه منتشر کنید. برچسب
انتشار، نوک شاخه، نسخهٔ بررسیشده، نسخهٔ بسته، پیشبررسی npm و اجرای اعتبارسنجی کامل
انتشار باید همگی یک commit یکسان را مشخص کنند. main محافظتشده باید
از قبل شامل نسخهٔ نهاییِ یک ماه تقویمیِ اکیداً بعدتر با وصلهای کمتر از
33 باشد؛ وصلههای نگهداری پس از آنکه main بیش از یک
ماه جلو رفت نیز واجد شرایط باقی میمانند.
در شاخهٔ دقیق extended-stable، نسخهٔ بستهٔ ریشه را به YYYY.M.P افزایش دهید،
pnpm release:prep را اجرا کنید و تأیید کنید که همهٔ بستههای افزونهٔ قابلانتشار
نسخهٔ یکسانی دارند. همهٔ تغییرات تولیدشده را commit و push کنید، برچسب
تغییرناپذیر vYYYY.M.P را در همان commit ایجاد و push کنید و SHA کامل حاصل
را ثبت کنید. گردشکارها این درخت آمادهشده را مصرف میکنند؛ آنها نسخهها را برای
شما افزایش یا همگامسازی نمیکنند.
پیشبررسی npm و اعتبارسنجی کامل انتشار را از همان نوک دقیق شاخهٔ آمادهشده اجرا کنید، سپس هر دو شناسهٔ اجرا و تلاش موفق اجرای اعتبارسنجی کامل انتشار را ذخیره کنید:
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 جداست و عمداً
بدون تغییر باقی میماند.
پس از موفقیت هر دو اجرا، همهٔ Pluginهای رسمی قابلانتشار در npm را از همان نوک
دقیق شاخه منتشر کنید. وصلهٔ P باید 33 یا بیشتر
باشد. SHA کامل انتشار را بهعنوان ref ارسال کنید، منتظر تکمیل کامل
ماتریس و بازخوانی رجیستری بمانید، سپس شناسهٔ اجرای موفق 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 ارجاعشده در همان
شاخهٔ متعارف و SHA دقیق منبع، completed/success است:
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>برای یک fork یا تمرین غیرتولیدی که عمداً نمیتواند سیاست ماهانهٔ
.33 یا ماهِ main محافظتشده را برآورده کند،
-f bypass_extended_stable_guard=true را به هر دو dispatch پیشبررسی و انتشار npm
اضافه کنید. مقدار پیشفرض false است. این دورزدن فقط همراه با
npm_dist_tag=extended-stable پذیرفته میشود و در خلاصهٔ گردشکار ثبت میشود. این گزینه
ارجاع متعارف گردشکار extended-stable/YYYY.M.33، برابری نوک شاخه/برچسب/نسخهٔ بررسیشده،
نحو برچسب نهایی، برابری نسخهٔ بسته/برچسب، هویت اجرا و manifest ارجاعشده، منشأ
tarball، تأیید محیط، بازخوانی رجیستری یا شواهد اصلاح selector را دور نمیزند.
گردشکار انتشار، هویت اجراهای ارجاعشدهٔ پیشبررسی، اعتبارسنجی و Plugin، digest مربوط به tarball آمادهشده و selectorهای رجیستری هسته را تأیید میکند. پس از موفقیت گردشکار، نتیجه را بهطور مستقل تأیید کنید:
npm view [email protected] version --userconfig "$(mktemp)"npm view openclaw@extended-stable version --userconfig "$(mktemp)"هر دو فرمان باید YYYY.M.P را برگردانند. اگر انتشار موفق شد اما بازخوانی
selector ناموفق بود، نسخهٔ تغییرناپذیر بسته را دوباره منتشر نکنید. از تنها فرمان
اصلاح npm dist-tag add [email protected] extended-stable که در خلاصهٔ always-run گردشکار ناموفق چاپ شده است
استفاده کنید، سپس هر دو بازخوانی مستقل را تکرار کنید. بازگردانی به selector قبلی
یک تصمیم جداگانهٔ اپراتور است، نه مسیر اصلاح بازخوانی.
مستندات پشتیبانی عمومی در ابتدا Slack، Discord و Codex را بهعنوان سطوح Plugin تحت پوشش extended-stable مشخص میکنند. این فهرست یک بیانیهٔ پشتیبانی است، نه فهرست مجاز در کد انتشار: همهٔ Pluginهای رسمی قابلانتشار در npm از همان مسیر انتشار با نسخهٔ دقیق یکسان پیروی میکنند.
چکلیست عادی زیر همچنان انتشار بتا، latest، انتشار GitHub،
Pluginها، macOS، Windows و سایر پلتفرمها را بر عهده دارد. این مراحل را برای
این مسیر extended-stable فقط مخصوص npm اجرا نکنید.
چکلیست اپراتور انتشار عادی
این چکلیست ساختار عمومی جریان انتشار است. اطلاعات اعتبارسنجی خصوصی، امضا، محضریسازی، بازیابی dist-tag و جزئیات بازگردانی اضطراری در راهنمای انتشار مخصوص نگهدارندگان باقی میماند.
-
از
mainجاری شروع کنید: آخرین تغییرات را pull کنید، تأیید کنید commit هدف push شده است و تأیید کنید CI مربوط بهmainبهاندازهٔ کافی سبز است که بتوان از آن شاخه ایجاد کرد. -
release/YYYY.M.PATCHرا از آن commit ایجاد کنید. backportها اختیاری هستند؛ فقط مجموعهٔ انتخابشده توسط اپراتور را اعمال کنید. همهٔ محلهای الزامی نسخه را افزایش دهید،pnpm release:prepرا اجرا کنید، اصلاحات انتشار و forward-portهای الزامی را تکمیل کنید وsrc/plugins/compat/registry.tsبههمراهsrc/commands/doctor/shared/deprecation-compat.tsرا بازبینی کنید. -
commit کامل محصول پیش از changelog را بهعنوان SHA کد ثابت کنید. پیشبررسی قطعی منبع را اجرا کنید، سپس از
node scripts/full-release-validation-at-sha.mjs --sha <code-sha> --target-ref release/YYYY.M.PATCHاستفاده کنید. این کار ابزارهای مورداعتماد گردشکار را ثابت نگه میدارد، درحالیکه ماتریس کامل Vitest، Docker، QA، بسته و کارایی دقیقاً SHA کد را هدف قرار میدهد. -
پیش از ویرایش، شکستها را طبقهبندی کنید. شکست محصول/کد یک SHA کد جدید ایجاد میکند و به اعتبارسنجی کامل سبز برای آن SHA نیاز دارد. شکست گردشکار، harness، اطلاعات اعتبارسنجی، تأیید یا زیرساخت در سطح مالک خود اصلاح و دوباره در برابر همان SHA کد اجرا میشود.
-
فقط پس از سبزشدن SHA کد، بخش بالایی
CHANGELOG.mdرا از PRهای ادغامشده و commitهای مستقیم پس از آخرین برچسب عرضهشدهٔ قابلدسترسی تولید کنید. مدخلها را روبهکاربر و بدون تکرار نگه دارید. وقتی یک برچسب عرضهشدهٔ واگرا یا forward-port بعدی، PRهای ازقبلمنتشرشده را دوباره مرتبط میکند، آن را صراحتاً بهعنوان--shipped-refارسال کنید. -
فقط
CHANGELOG.mdرا commit کنید. این commit، SHA انتشار است. diff کامل از SHA کد تا SHA انتشار باید دقیقاًCHANGELOG.mdباشد؛ هر مسیر تغییرکردهٔ دیگری انتشار را به مرحلهٔ 2 بازمیگرداند. -
اعتبارسنجی کامل انتشارِ متصل به SHA را برای SHA انتشار، با استفادهٔ مجدد از شواهد فعال، اجرا کنید. والد سبکوزن باید
changelog-only-release-v1را ثبت کند، به SHA کد سبز اشاره کند و هیچ lane فرزند محصولی را dispatch نکند. این کار شواهد محصول را دوباره استفاده میکند؛ بایتهای بسته را دوباره استفاده نمیکند. -
OpenClaw NPM Releaseرا باpreflight_only=trueدر برابر SHA/برچسب انتشار اجرا کنید.preflight_run_idموفق را ذخیره کنید. این کار بایتهای دقیق بسته را که changelog نهایی را شامل میشوند، میسازد و بررسی میکند. -
SHA انتشار را برچسبگذاری کنید، سپس بهجای dispatch دوبارهٔ هرکدام، helper کاندیدا را با والد اعتبارسنجی موفق 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 انتخابشده یا همهٔ بستههای قابلانتشار را بهطور موازی به npm و همان مجموعه را به ClawHub ارسال میکند و پس از موفقیت انتشار Pluginها در npm، آرتیفکت آمادهشدهٔ پیشبررسی npm متعلق به OpenClaw را با dist-tag منطبق ترویج میدهد. checkout انتشار همچنان ریشهٔ محصول/داده باقی میماند، درحالیکه برنامهریزی و تأیید نهایی از checkout دقیق و مورداعتماد منبع workflow اجرا میشوند تا یک commit قدیمیتر انتشار نتواند بیسروصدا از ابزار انتشار منسوخ استفاده کند. پیش از شروع هر فرایند فرزند انتشار، متن دقیق انتشار GitHub را رندر و cache میکند. وقتی بخش کامل و منطبقCHANGELOG.mdدر محدودیت 125,000 نویسهای GitHub و سقف ایمنی منطبق 125,000 بایتی رندرکننده جای بگیرد، صفحه دقیقاً همان بخش## YYYY.M.PATCHرا همراه با عنوانش در بر میگیرد. وقتی بخش منبع جای نمیگیرد، صفحه یادداشتهای ویراستاری گروهبندیشده را دقیقاً حفظ میکند و سابقهٔ مشارکت بیشازحد بزرگ را با پیوندی پایدار به سابقهٔ کامل درCHANGELOG.mdسنجاقشده به tag جایگزین میکند؛ سوابق ناقص و موارد فهرستِ بریدهشده هرگز منتشر نمیشوند. workflow پیش از افزودن### Release verification، متن کامل یا فشرده را انتخاب میکند؛ اگر دنبالهٔ مدرک از محدودیت عبور کند، متن مرجع را حفظ میکند و در عوض به مدرک پیوستشده و تغییرناپذیر متکی میماند. انتشارهای پایدار منتشرشده در npmlatestبه آخرین انتشار GitHub تبدیل میشوند، درحالیکه انتشارهای نگهداری پایدار که در npm رویbetaنگه داشته میشوند، با GitHublatest=falseایجاد میشوند. workflow همچنین مدرک وابستگی پیشبررسی، manifest اعتبارسنجی کامل و مدرک تأیید registry پس از انتشار را برای پاسخگویی به رخدادهای پس از انتشار در انتشار GitHub بارگذاری میکند. این workflow شناسههای اجرای فرزند را بیدرنگ چاپ میکند، دروازههای محیط انتشار را که توکن workflow مجاز به تأییدشان است بهطور خودکار تأیید میکند، jobهای فرزند ناموفق را همراه با انتهای logها خلاصه میکند، صفحهٔ پیشنویس انتشار GitHub را از ابتدا میسازد و آرتیفکتهای Windows و Android را همزمان با انتشار npm متعلق به OpenClaw ترویج میکند، پس از موفقیت آن مراحل صفحهٔ انتشار و مدرک وابستگی را نهایی میکند، هرگاه npm متعلق به OpenClaw در حال انتشار باشد منتظر ClawHub میماند، سپس تأییدکنندهٔ beta روی main مورداعتماد را اجرا میکند و مدرک پس از انتشار مربوط به انتشار GitHub، بستهٔ npm، بستههای npm انتخابشدهٔ Plugin، بستههای انتخابشدهٔ ClawHub، شناسههای اجرای workflow فرزند و شناسهٔ اختیاری اجرای NPM Telegram را بارگذاری میکند. تأییدکنندهٔ راهاندازی ClawHub به مسیر و SHA دقیق workflow روی main مورداعتماد، تلاشهای اجرای تولیدکننده و پایانی، SHA انتشار، مجموعهٔ بستهٔ درخواستی، چندتایی تغییرناپذیر آرتیفکت بسته و آرتیفکت بازخوانی پایانی registry نیاز دارد؛ اجرای موفق قدیمی روی release-ref پذیرفته نمیشود.سپس پذیرش بستهٔ پس از انتشار را روی بستهٔ منتشرشدهٔ
[email protected]یاopenclaw@betaاجرا کنید. اگر یک پیشانتشار pushشده یا منتشرشده به اصلاح نیاز دارد، شمارهٔ پیشانتشار منطبق بعدی را ایجاد کنید؛ نسخهٔ قدیمی را هرگز حذف یا بازنویسی نکنید. -
در تلاش ناموفق انتشار، SHA انتشار را بدون تغییر نگه دارید، مگر اینکه شکست، نقصی در محصول یا changelog را اثبات کند. فرایندهای فرزند و آرتیفکتهای تغییرناپذیر موفق را از سر بگیرید؛ نسخهای از بسته را که پیشتر موفق شده است هرگز دوباره نسازید یا منتشر نکنید.
-
برای نسخهٔ پایدار، فقط پس از آن ادامه دهید که beta یا release candidate بررسیشده، مدارک اعتبارسنجی لازم را داشته باشد. انتشار پایدار npm نیز از
OpenClaw Release Publishعبور میکند و باpreflight_run_idاز آرتیفکت موفق پیشبررسی دوباره استفاده میکند. آمادگی انتشار پایدار macOS همچنین به.zip،.dmg،.dSYM.zipبستهبندیشده وappcast.xmlبهروزشده رویmainنیاز دارد؛ workflow انتشار macOS پس از تأیید آرتیفکتهای انتشار، appcast امضاشده را بهطور خودکار درmainعمومی منتشر میکند، یا اگر حفاظت branch مانع push مستقیم شود یک PR برای appcast باز میکند یا بهروزرسانی میکند. آمادگی پایدار Windows Hub به آرتیفکتهای امضاشدهٔOpenClawCompanion-Setup-x64.exe،OpenClawCompanion-Setup-arm64.exeوOpenClawCompanion-SHA256SUMS.txtدر انتشار GitHub متعلق به OpenClaw نیاز دارد. tag دقیق انتشار امضاشدهٔopenclaw/openclaw-windows-nodeرا بهعنوانwindows_node_tagو نگاشت digest نصبکنندهٔ تأییدشده توسط candidate آن را بهعنوانwindows_node_installer_digestsارسال کنید؛OpenClaw Release Publishپیشنویس انتشار را حفظ میکند،Windows Node Releaseرا ارسال میکند و هر سه آرتیفکت را پیش از انتشار تأیید میکند. -
پس از انتشار، تأییدکنندهٔ پس از انتشار npm، E2E مستقل و اختیاری Telegram روی npm منتشرشده در صورت نیاز به مدرک کانال پس از انتشار، و ترویج dist-tag در صورت نیاز را اجرا کنید، صفحهٔ تولیدشدهٔ انتشار GitHub را تأیید کنید، مراحل اعلان انتشار را اجرا کنید و سپس پیش از اعلام پایان یک انتشار پایدار، نهاییسازی main پایدار را کامل کنید.
نهاییسازی main پایدار
انتشار پایدار تا زمانی که main وضعیت واقعی انتشار عرضهشده را در بر نگیرد، کامل نیست.
- از آخرین نسخهٔ تازهٔ
mainشروع کنید.release/YYYY.M.PATCHرا نسبت به آن ممیزی کنید و اصلاحات واقعیِ موجودنبودن درmainرا forward-port کنید. سازگارکنندههای مختص انتشار برای سازگاری، آزمون یا اعتبارسنجی را کورکورانه درmainجدیدتر ادغام نکنید. - برای مسیر عادی،
mainرا روی نسخهٔ پایدار عرضهشده تنظیم کنید. نهاییسازی دیرهنگام میتواند پس از پیشرویmainبه CalVer پایدار جدیدتر OpenClaw از آن استفاده کند؛ یک قطار انتشارِ ازقبل آغازشده را صرفاً برای بستن انتشار قبلی downgrade نکنید. اعتبارسنج همچنان به بخش دقیق changelog عرضهشده و ورودی appcast نیاز دارد و نسخه و SHA واقعیmainرا ثبت میکند. پس از هر تغییر نسخهٔ ریشه،pnpm release:prepو سپسpnpm deps:shrinkwrap:generateرا اجرا کنید. - بخش
## YYYY.M.PATCHمتعلق بهCHANGELOG.mdرا رویmainدقیقاً با branch انتشار tagشده منطبق کنید. اگر انتشار Mac یک بهروزرسانی منتشر کرده است، بهروزرسانی پایدارappcast.xmlرا نیز بگنجانید. - تا زمانی که اپراتور صراحتاً آن قطار انتشار را آغاز نکرده است،
YYYY.M.PATCH+1، یک نسخهٔ beta یا بخش خالی changelog آینده را بهmainاضافه نکنید. - فرمانهای
pnpm release:generated:check،pnpm deps:shrinkwrap:checkوOPENCLAW_TESTBOX=1 pnpm check:changedرا اجرا کنید. push کنید، سپس پیش از اعلام پایان انتشار پایدار تأیید کنید کهorigin/mainشامل نسخه و changelog عرضهشده است. - متغیرهای مخزن
RELEASE_ROLLBACK_DRILL_IDوRELEASE_ROLLBACK_DRILL_DATEرا پس از هر تمرین rollback خصوصی بهروز نگه دارید.
OpenClaw Stable Main Closeout از push مربوط به main آغاز میشود که پس از انتشار پایدار، نسخه، changelog و appcast عرضهشده را در بر دارد. این فرایند مدرک تغییرناپذیر پس از انتشار را میخواند تا tag عرضهشده را به اجراهای Full Release Validation و Publish آن متصل کند، سپس وضعیت پایدار main، انتشار، دورهٔ پایدار soak اجباری و مدرک مسدودکنندهٔ کارایی را تأیید میکند. همچنین یک manifest تغییرناپذیر نهاییسازی و checksum آن را به انتشار GitHub پیوست میکند. محرک خودکار push، انتشارهای قدیمیتر از مدرک تغییرناپذیر پس از انتشار را رد میکند و هرگز این ردشدن را نهاییسازی کاملشده تلقی نمیکند.
یک نهاییسازی کامل به هر دو آرتیفکت و checksum منطبق نیاز دارد. یک manifest ناقص، SHA ثبتشدهٔ main و تمرین rollback خود را بازپخش میکند تا بایتهای یکسان را دوباره تولید کند و سپس checksum مفقود را پیوست میکند؛ یک جفت نامعتبر، یا checksum بدون manifest، همچنان مسدودکننده باقی میماند. اجرای ناشی از push بدون متغیرهای مخزن مربوط به تمرین rollback، بدون تکمیل نهاییسازی رد میشود؛ رکورد مفقود یا قدیمیتر از 90 روز تمرین نیز همچنان نهاییسازی دستیِ مبتنی بر مدرک را مسدود میکند. فرمانهای بازیابی خصوصی در runbook مخصوص نگهدارندگان باقی میمانند. dispatch دستی را فقط برای تعمیر یا بازپخش نهاییسازی پایدار مبتنی بر مدرک بهکار ببرید.
اگر والد Release Publish فقط پس از پیوستشدن مدرک تغییرناپذیر npm/Plugin شکست خورد، ابتدا همهٔ آرتیفکتهای پایدار پلتفرم را تعمیر و منتشر کنید. سپس یک نگهدارنده میتواند نهاییسازی را با allow_failed_publish_recovery=true بهصورت دستی dispatch کند؛ این حالت فقط یک والد ناموفقِ تکمیلشده را میپذیرد و افزون بر آن به قراردادهای دقیق آرتیفکت Android و Windows، digestهای SHA-256 در GitHub، تأیید checksum، منشأ Android و ترویج موفق Windows ارسالشده توسط والد نیاز دارد که بررسیهای Authenticode و digestهای تأییدشده توسط candidate آن با نصبکنندههای منتشرشده منطبق باشند؛ این موارد در کنار بررسیهای عادی macOS/appcast الزامیاند. نهاییسازی خودکار ناشی از push هرگز این حالت بازیابی را فعال نمیکند.
یک tag اصلاحی fallback قدیمی فقط زمانی میتواند از مدرک بستهٔ پایه دوباره استفاده کند که tag اصلاحی به همان commit منبع tag پایدار پایه resolve شود. انتشار Android آن، APK تأییدشدهٔ tag پایه را دوباره استفاده میکند و منشأ tag اصلاحی را میافزاید. اصلاحی با منبع متفاوت باید مدرک بستهٔ خودش را منتشر و تأیید کند و از versionCode بالاتر Android استفاده کند.
پیشبررسی انتشار
-
پیش از پیشبررسی انتشار،
pnpm check:test-typesرا اجرا کنید تا TypeScript آزمون خارج از دروازهٔ محلی سریعترpnpm checkنیز پوشش داده شود. -
پیش از پیشبررسی انتشار،
pnpm check:architectureرا اجرا کنید تا بررسیهای گستردهتر چرخهٔ import و مرز معماری خارج از دروازهٔ محلی سریعتر نیز سبز باشند. -
پیش از
pnpm release:check،pnpm build && pnpm ui:buildرا اجرا کنید تا آرتیفکتهای موردانتظار انتشارdist/*و bundle رابط کاربری Control برای مرحلهٔ اعتبارسنجی بسته وجود داشته باشند. -
پس از افزایش نسخهٔ ریشه و پیش از tagگذاری،
pnpm release:prepرا اجرا کنید. این فرمان همهٔ مولدهای قطعی انتشار را اجرا میکند که معمولاً پس از تغییر نسخه/config/API دچار انحراف میشوند: نسخههای Plugin، shrinkwrapهای npm، موجودی Plugin، schema پیکربندی پایه، metadata پیکربندی کانالهای bundleشده، baseline مستندات پیکربندی، exportهای SDK مربوط به Plugin و baseline API متعلق به SDK مربوط به Plugin.pnpm release:checkاین محافظها را در حالت بررسی دوباره اجرا میکند (بهعلاوهٔ بررسی بودجهٔ سطح SDK مربوط به Plugin) و پیش از اجرای بررسیهای انتشار بسته، همهٔ شکستهای انحراف تولیدشده را در یک گذر گزارش میدهد. -
همگامسازی نسخهٔ Plugin بهطور پیشفرض بستهٔ runtime قابلانتشار
@openclaw/ai، نسخههای بستهٔ Plugin رسمی و کفهای موجودopenclaw.compat.pluginApiرا به نسخهٔ انتشار OpenClaw بهروزرسانی میکند. آن فیلد را کف API مربوط به SDK/runtime متعلق به Plugin در نظر بگیرید، نه صرفاً نسخهای از شمارهٔ بسته: برای انتشارهای مختص Plugin که عمداً با میزبانهای قدیمیتر OpenClaw سازگار میمانند، کف را روی قدیمیترین API میزبان پشتیبانیشده نگه دارید و این انتخاب را در مدرک انتشار Plugin مستند کنید. -
workflow دستی
Full Release Validationرا پیش از تأیید انتشار اجرا کنید تا همهٔ test boxهای پیش از انتشار از یک نقطهٔ ورود آغاز شوند. این workflow یک branch، tag یا SHA کامل commit را میپذیرد،CIدستی را dispatch میکند وOpenClaw Release Checksرا برای smoke نصب، پذیرش بسته، بررسی بسته در چند سیستمعامل، همارزی QA Lab، Matrix و مسیرهای Telegram dispatch میکند. اجراهای پایدار و کامل همیشه soak جامع live/E2E و مسیر انتشار Docker را شامل میشوند؛run_release_soak=trueبرای یک soak صریح beta حفظ شده است. Package Acceptance در طول اعتبارسنجی candidate، E2E مرجع Telegram بسته را فراهم میکند و از یک poller زندهٔ همزمان دوم جلوگیری میکند.پس از انتشار یک beta،
release_package_specرا ارائه کنید تا بستهٔ npm عرضهشده بدون بازسازی tarball انتشار، در بررسیهای انتشار، Package Acceptance و E2E بستهٔ Telegram دوباره استفاده شود.npm_telegram_package_specرا فقط وقتی ارائه کنید که Telegram باید از بستهٔ منتشرشدهای متفاوت با بقیهٔ اعتبارسنجی انتشار استفاده کند.package_acceptance_package_specرا وقتی ارائه کنید که Package Acceptance باید از بستهٔ منتشرشدهای متفاوت با مشخصات بستهٔ انتشار استفاده کند.evidence_package_specرا وقتی ارائه کنید که گزارش مدرک انتشار باید بدون اجبار E2E مربوط به Telegram اثبات کند اعتبارسنجی با یک بستهٔ npm منتشرشده مطابقت دارد.bash 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برای بستهبندی یک شاخه/برچسب/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 دوباره بهکار میگیرد و میتواند باtelegram_mode=mock-openaiیاtelegram_mode=live-frontier، QA مربوط به Telegram را روی همان tarball اجرا کند. وقتی مسیرهای Docker انتخابشده شاملpublished-upgrade-survivorباشند، مصنوع بسته همان نامزد است وpublished_upgrade_survivor_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 از محدودهبندی بر اساس تغییرات عبور میکند و شاردهای Linux Node، شاردهای Pluginهای همراه، شاردهای قرارداد Plugin و کانال، سازگاری Node 22،check-*،check-additional-*، بررسیهای دود مصنوع ساختهشده، بررسیهای مستندات، Skills پایتون، Windows، macOS و مسیرهای بومیسازی Control UI را اجباری میکند. اجراهای مستقل و دستی CI فقط هنگام اجرا باinclude_android=true، Android را اجرا میکنند؛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 آزمایش میکند و بدون نیاز به Opik، Langfuse یا گردآورندهٔ خارجی دیگری، صدور ردگیری، معیار و گزارش را بههمراه محدودبودن ویژگیهای ردگیری و حذف محتوای حساس از محتوا/شناسه تأیید میکند. -
هنگام اعتبارسنجی سازگاری گردآورنده،
pnpm qa:otel:collector-smokeرا اجرا کنید. این مورد، همان خروجی OTLP مربوط به QA-lab را پیش از بررسیهای گیرندهٔ محلی، از یک کانتینر واقعی Docker مربوط به OpenTelemetry Collector عبور میدهد. -
هنگام اعتبارسنجی خزش محافظتشدهٔ Prometheus،
pnpm qa:prometheus:smokeرا اجرا کنید. این مورد QA-lab را آزمایش میکند، خزشهای بدون احراز هویت را رد میکند و تأیید میکند که خانوادههای معیار حیاتی برای انتشار فاقد محتوای پرامپت، شناسههای خام، توکنهای احراز هویت و مسیرهای محلی باقی میمانند. -
برای اجرای پشتسرهم مسیرهای بررسی دود OpenTelemetry و Prometheus از محل تسویهٔ کد منبع،
pnpm qa:observability:smokeرا اجرا کنید. -
پیش از هر انتشار برچسبگذاریشده،
pnpm release:checkرا اجرا کنید. -
پیشبررسی
OpenClaw NPM Releaseپیش از بستهبندی tarball مربوط به npm، شواهد انتشار وابستگیها را تولید میکند. دروازهٔ آسیبپذیری هشدارهای امنیتی npm، مانع انتشار است. گزارشهای ریسک مانیفستِ گذرا، مالکیت وابستگی/سطح نصب و تغییرات وابستگی فقط شواهد انتشار هستند. گزارش تغییرات وابستگی، نامزد انتشار را با برچسب انتشار قابلدسترسی قبلی مقایسه میکند. پیشبررسی، شواهد وابستگی را با نامopenclaw-release-dependency-evidence-<tag>بارگذاری میکند و همچنین آن را در مسیرdependency-evidence/داخل مصنوع آمادهشدهٔ پیشبررسی npm میگنجاند. مسیر انتشار واقعی همان مصنوع پیشبررسی را دوباره بهکار میگیرد و سپس همان شواهد را با نامopenclaw-<version>-dependency-evidence.zipبه انتشار GitHub پیوست میکند. -
پس از ایجاد برچسب، برای توالی انتشار تغییردهنده
OpenClaw Release Publishرا اجرا کنید. انتشارهای عادی بتا و پایدار را ازmainمورداعتماد اجرا کنید؛ برچسب انتشار همچنان commit هدف دقیق را انتخاب میکند و ممکن است بهrelease/YYYY.M.PATCHاشاره داشته باشد. انتشارهای آلفای Tideclaw روی شاخهٔ آلفای متناظر خود باقی میمانند.preflight_run_idموفق مربوط به npm در OpenClaw،full_release_validation_run_idموفق وfull_release_validation_run_attemptدقیق را وارد کنید و محدودهٔ پیشفرض انتشار Plugin یعنیall-publishableرا حفظ کنید، مگر اینکه عمداً یک تعمیر متمرکز را اجرا میکنید. گردشکار، انتشار npm مربوط به Pluginها، انتشار ClawHub مربوط به Pluginها و انتشار npm مربوط به OpenClaw را بهصورت ترتیبی اجرا میکند تا بستهٔ هسته پیش از Pluginهای خارجیشدهٔ خود منتشر نشود؛ ارتقای Windows و Android همزمان با انتشار npm هسته و در برابر صفحهٔ پیشنویس انتشار اجرا میشود. اجرای مجدد انتشارها قابلادامه است: اگر نسخهٔ npm هسته از قبل منتشر شده باشد، پس از اینکه گردشکار ثابت کند tarball رجیستری با مصنوع پیشبررسی برچسب مطابقت دارد، اجرای هسته رد میشود؛ همچنین وقتی انتشار از قبل قرارداد مصنوع تأییدشده را داشته باشد، ارتقای Windows/Android رد میشود تا تلاش مجدد فقط مراحل ناموفق را تکرار کند. تعمیرهای متمرکز و صرفاً مخصوص Plugin بهplugin_publish_scope=selectedو فهرستی غیرخالی از Pluginها نیاز دارند. اجراهای صرفاً مخصوص Plugin درall-publishableبه شواهد کامل و تغییرناپذیر پیشبررسی و Full Release Validation نیاز دارند؛ شواهد ناقص رد میشوند. -
OpenClaw Release Publishپایدار پس از ایجاد انتشار متناظر و غیرپیشانتشارopenclaw/openclaw-windows-node، بهwindows_node_tagدقیق و همچنین نگاشت تأییدشده توسط نامزد درwindows_node_installer_digestsنیاز دارد. پیش از اجرای هر فرزند انتشار، تأیید میکند که انتشار مبدأ منتشرشده و غیرپیشانتشار است، نصبکنندههای الزامی x64/ARM64 را دربر دارد و همچنان با نگاشت تأییدشده مطابقت دارد. سپس درحالیکه انتشار OpenClaw هنوز پیشنویس است،Windows Node Releaseرا با نگاشت بدونتغییر و سنجاقشدهٔ چکیدهٔ نصبکننده اجرا میکند. گردشکار فرزند، نصبکنندههای امضاشدهٔ Windows Hub را از همان برچسب دقیق بارگیری میکند، آنها را با چکیدههای سنجاقشده تطبیق میدهد، روی یک اجراکنندهٔ Windows تأیید میکند که امضاهای Authenticode آنها از امضاکنندهٔ موردانتظار OpenClaw Foundation استفاده میکنند، یک مانیفست SHA-256 مینویسد و نصبکنندهها را بههمراه مانیفست در انتشار مرجع GitHub مربوط به OpenClaw بارگذاری میکند؛ سپس مصنوعات ارتقایافته را دوباره بارگیری کرده و عضویت در مانیفست و هشها را تأیید میکند. والد پیش از انتشار، قرارداد فعلی مصنوعات x64، ARM64 و مجموعبررسی را تأیید میکند. بازیابی مستقیم، پیش از جایگزینی مصنوعات قراردادی موردانتظار با بایتهای سنجاقشدهٔ مبدأ، نامهای غیرمنتظرهٔ مصنوعاتOpenClawCompanion-*را رد میکند.Windows Node Releaseرا فقط برای بازیابی بهصورت دستی اجرا کنید و همیشه یک برچسب دقیق، نهlatest، بههمراه نگاشت JSON صریحexpected_installer_digestsاز انتشار مبدأ تأییدشده وارد کنید. پیوندهای بارگیری وبسایت باید به URLهای دقیق مصنوعات انتشار OpenClaw برای انتشار پایدار فعلی اشاره کنند، یا فقط پس از تأیید اینکه تغییرمسیر latest در GitHub به همان انتشار اشاره دارد، بهreleases/latest/download/...پیوند دهند؛ صرفاً به صفحهٔ انتشار مخزن همراه پیوند ندهید. -
بررسیهای انتشار اکنون در یک گردشکار دستی جداگانه اجرا میشوند:
OpenClaw Release Checks. این گردشکار همچنین پیش از تأیید انتشار، مسیر برابری ماک QA Lab، نمایه انتشار Matrix و مسیر QA مربوط به Telegram را اجرا میکند. مسیرهای زنده از محیطqa-live-sharedاستفاده میکنند؛ Telegram همچنین از اجاره اعتبارنامههای CI در Convex استفاده میکند. وقتی همه سناریوهای نگهداریشده Matrix را میخواهید، گردشکار دستیQA-Lab - All Lanesرا باmatrix_profile=allاجرا کنید؛ گردشکار این انتخاب را میان نمایههای انتقال، رسانه و 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 نگه میدارند، درحالیکه مسیر اعتبارسنجی بدون تغییر میتواند از اجراکنندههای بزرگتر Linux در Blacksmith استفاده کند.
-
آن گردشکار،
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، ساخت، ساخت رابط کاربری و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 باید یک
preflight_run_idموفق npm را پشت سر بگذارد. - هماهنگسازی و پیشبررسی انتشار معمول بتا و پایدار، از
mainقابلاعتماد در برابر برچسب هدف دقیق استفاده میکنند. انتشار و پیشبررسی آلفای Tideclaw از شاخه آلفای متناظر استفاده میکنند. - انتشارهای پایدار 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 باید
preflight_run_idوvalidate_run_idموفق macOS را پشت سر بگذارد. - مسیرهای انتشار واقعی، آرتیفکتهای آمادهشده را ارتقا میدهند و دوباره آنها را نمیسازند.
- انتشار واقعی 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 آن را بهطور خودکار کامیت میکند، یا وقتی ارسال مستقیم مسدود باشد یک PR برای appcast باز میکند)؛ برنامه بستهبندیشده باید شناسه بسته غیر دیباگ، 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 و در غیر این صورت stable را استنباط میکند، Full Release Validation را از شاخه موقت با ref=<target-sha> اعزام میکند، تطابق headSha هر گردشکار فرزند با SHA ثابتشده گردشکار والد را تأیید میکند و سپس شاخه موقت را حذف میکند. برای اجبار اجرای تازه، -f reuse_evidence=false، برای بررسی مشورتی گسترده، -f release_profile=full، یا برای تثبیت یک کامیت قدیمیتر که هنوز از origin/main فعلی قابلدسترسی است، --workflow-sha <trusted-main-sha> را ارائه دهید. خود گردشکار هرگز مراجع مخزن را نمینویسد. این روش ابزار انتشار مخصوص main را بدون افزودن کامیتهای ابزاری به نامزد در دسترس نگه میدارد و از اثبات تصادفی اجرای فرزند جدیدتر main جلوگیری میکند.
پس از سبز شدن SHA کد، فقط CHANGELOG.md را کامیت کنید و همان ابزار کمکی را با SHA انتشار اجرا کنید:
pnpm ci:full-release \ --sha <release-sha> \ --target-ref release/YYYY.M.PATCHوالد دوم فقط زمانی از شواهد محصول دوباره استفاده میکند که GitHub ثابت کند SHA انتشار از SHA کد منشعب شده و مجموعه کامل مسیرهای تغییرکرده دقیقاً CHANGELOG.md است. این والد changelog-only-release-v1 را ثبت میکند و هیچ فرزند محصولی را اعزام نمیکند. پیشبررسی Npm و پذیرش بسته/نصب همچنان روی SHA انتشار اجرا میشوند، زیرا بایتهای tarball آن تغییر کردهاند.
برای یک SHA کد تازه، گردشکار هدف را حل میکند، CI دستی را اعزام میکند و سپس OpenClaw Release Checks را اعزام میکند. OpenClaw Release Checks آزمون دود نصب، بررسیهای انتشار چندسیستمعاملی، پوشش زنده/E2E مسیر انتشار Docker در صورت فعال بودن soak، پذیرش بسته همراه با 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/هسته بهصورت زنده و Dockerstable: پوشش ارائهدهنده/بکاند بتا بهعلاوه پایدار برای تأیید انتشارfull: پوشش پایدار بهعلاوه گسترده و مشورتی ارائهدهنده/رسانه
اعتبارسنجی پایدار و کامل همیشه پیش از ارتقا، بررسی جامع زنده/E2E، مسیر انتشار Docker و جاروب محدود بقای ارتقای منتشرشده را اجرا میکنند. برای درخواست همین جاروب برای نسخه بتا از run_release_soak=true استفاده کنید. این جاروب چهار بسته پایدار آخر، خطوط پایه تثبیتشده 2026.4.23 و 2026.5.2، و پوشش قدیمیتر 2026.4.15 را در بر میگیرد؛ خطوط پایه تکراری حذف میشوند و هر خط پایه در کار اجراکننده Docker مستقل خود بخشبندی میشود.
OpenClaw Release Checks از مرجع قابلاعتماد گردشکار استفاده میکند تا مرجع هدف را یکبار بهصورت release-package-under-test حل کند و هنگام اجرای soak، همان آرتیفکت را در بررسیهای چندسیستمعاملی، پذیرش بسته و بررسیهای 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 مختص گزارش تغییرات با استفادهٔ مجدد از شواهد محصول Code SHA.pnpm ci:full-release \ --sha <release-sha> \ --target-ref release/YYYY.M.PATCH # پس از انتشار نسخهٔ بتا، E2E مربوط به Telegram را برای بستهٔ منتشرشده اضافه کنید.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پس از یک اصلاح متمرکز، در نخستین اجرای مجدد از چتر کامل استفاده نکنید. اگر یک باکس شکست خورد، برای اثبات بعدی از گردشکار فرزند، job، مسیر Docker، پروفایل بسته، ارائهدهندهٔ مدل یا مسیر QA شکستخورده استفاده کنید. چتر کامل را فقط زمانی دوباره اجرا کنید که اصلاح، هماهنگسازی مشترک انتشار را تغییر داده یا شواهد پیشین همهٔ باکسها را منسوخ کرده باشد. تأییدکنندهٔ نهایی چتر، شناسههای ثبتشدهٔ اجرای گردشکارهای فرزند را دوباره بررسی میکند؛ بنابراین پس از اجرای مجدد موفق یک گردشکار فرزند، فقط job والد شکستخوردهٔ Verify full validation را دوباره اجرا کنید.
rerun_group=all میتواند از یک اجرای سبز قبلی چتر دوباره استفاده کند، مشروط بر اینکه پروفایل انتشار،
تنظیم مؤثر soak و ورودیهای اعتبارسنجی یکسان باشند و SHA هدف
یا یکسان باشد، یا هدف جدید فرزندی باشد که مجموعهٔ کامل مسیرهای تغییریافتهٔ آن
دقیقاً 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 اجرای واقعی نامزد انتشار است، 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 نیاز دارند؛ اجراهای کامل/همه از E2E استاندارد Telegram بسته درون Package Acceptance استفاده میکنند. اجراهای مجدد متمرکز میانسیستمعاملی میتوانند cross_os_suite_filter=windows/packaged-upgrade یا فیلتر سیستمعامل/مجموعهٔ دیگری را اضافه کنند. شکستهای بررسی انتشار QA، اعتبارسنجی عادی انتشار، از جمله انحراف پویای الزامی ابزار OpenClaw در سطح استاندارد، را مسدود میکنند. اجراهای آلفای Tideclaw همچنان میتوانند مسیرهای بررسی انتشار غیرمرتبط با ایمنی بسته را مشورتی در نظر بگیرند. با release_profile=beta، مجموعههای ارائهدهندهٔ زندهٔ Run repo/live E2E validation مشورتی هستند (هشدار، نه مسدودکننده)؛ پروفایلهای پایدار و کامل همچنان آنها را مسدودکننده نگه میدارند. هنگامی که live_suite_filter صراحتاً یک مسیر زندهٔ QA کنترلشده مانند Discord، WhatsApp یا Slack را درخواست میکند، متغیر متناظر مخزن یعنی OPENCLAW_RELEASE_QA_*_LIVE_CI_ENABLED باید فعال باشد؛ در غیر این صورت، دریافت ورودی بهجای رد کردن بیسروصدای مسیر شکست میخورد.
Vitest
باکس Vitest، گردشکار فرزند دستی CI است. CI دستی عمداً از محدودهبندی تغییرات عبور میکند و گراف عادی آزمون را برای نامزد انتشار اجباری میسازد: shardهای Linux Node، shardهای Pluginهای همراه، shardهای قرارداد Plugin و کانال، سازگاری Node 22، check-*، check-additional-*، بررسیهای smoke مصنوع ساختهشده، بررسیهای مستندات، Skills پایتون، Windows، macOS و بومیسازی Control UI. هنگامی که Full Release Validation باکس را اجرا میکند، Android نیز گنجانده میشود، زیرا چتر include_android=true را ارسال میکند؛ CI دستی مستقل برای پوشش Android به include_android=true نیاز دارد.
از این باکس برای پاسخ به این پرسش استفاده کنید: «آیا درخت منبع، مجموعهٔ کامل آزمون عادی را با موفقیت گذراند؟» این با اعتبارسنجی محصول در مسیر انتشار یکسان نیست. شواهدی که باید نگه داشته شوند:
- خلاصهٔ
Full Release Validationکه URL اجرای اعزامشدهٔCIرا نشان میدهد - سبز بودن اجرای
CIروی SHA هدف دقیق - نام shardهای شکستخورده یا کند از jobهای CI هنگام بررسی پسرفتها
- مصنوعهای زمانبندی Vitest مانند
.artifacts/vitest-shard-timings.jsonهنگامی که یک اجرا به تحلیل عملکرد نیاز دارد
CI دستی را مستقیماً فقط زمانی اجرا کنید که انتشار به CI عادی قطعی نیاز دارد، اما به باکسهای Docker، QA Lab، زنده، میانسیستمعاملی یا بسته نیازی ندارد. برای CI مستقیم بدون Android از فرمان نخست استفاده کنید. هنگامی که CI مستقیم نامزد انتشار باید Android را پوشش دهد، include_android=true را اضافه کنید:
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 قرار دارد. این باکس نامزد انتشار را از طریق محیطهای بستهبندیشدهٔ Docker اعتبارسنجی میکند، نه فقط آزمونهای سطح منبع.
پوشش Docker انتشار شامل موارد زیر است:
- بررسی smoke نصب کامل با بررسی smoke کند نصب سراسری Bun فعال
- آمادهسازی/استفادهٔ مجدد از تصویر smoke مربوط به Dockerfile ریشه بر اساس SHA هدف، با jobهای smoke مربوط به QR، ریشه/Gateway و نصبکننده/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 روی اجراکنندهٔ اختصاصی با دیسک بزرگ، در صورت درخواست
- مسیرهای تفکیکشدهٔ نصب/حذف 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 انتشار شامل موارد زیر است:
- مسیر برابری mock که مسیر نامزد OpenAI را با خط مبنای
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هنگامی که تلهمتری انتشار به اثبات صریح محلی نیاز دارد
از این باکس برای پاسخ به این پرسش استفاده کنید: «آیا انتشار در سناریوهای QA و جریانهای زندهٔ کانال بهدرستی رفتار میکند؟» هنگام تأیید انتشار، URL مصنوعهای مسیرهای برابری، Matrix و Telegram را نگه دارید. پوشش کامل Matrix بهصورت اجرای دستی shardشدهٔ QA-Lab در دسترس میماند و مسیر پیشفرض حیاتی برای انتشار نیست.
بسته
باکس Package، دروازهٔ محصول قابلنصب است. این باکس بر Package Acceptance و حلکنندهٔ scripts/resolve-openclaw-package-candidate.mjs متکی است. حلکننده یک نامزد را به tarball مربوط به package-under-test که Docker E2E مصرف میکند نرمالسازی میکند، موجودی بسته را اعتبارسنجی میکند، نسخهٔ بسته و SHA-256 را ثبت میکند و ref مهار گردشکار را از ref منبع بسته جدا نگه میدارد.
منابع نامزد پشتیبانیشده:
source=npm:openclaw@beta،openclaw@latestیا یک نسخهٔ انتشار دقیق OpenClawsource=ref: بستهبندی یک شاخه، برچسب یا SHA کامل commit قابلاعتمادِpackage_refبا مهار انتخابشدهٔworkflow_refsource=url: بارگیری یک.tgzعمومی HTTPS باpackage_sha256الزامی؛ اعتبارنامههای URL، پورتهای غیراستاندارد HTTPS، نامهای میزبان یا نشانیهای حلشدهٔ خصوصی/داخلی/کاربرد ویژه و تغییرمسیرهای ناامن رد میشوند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 مهاجرت، بهروزرسانی، ارتقای VPS مدیریتشده از ریشه، راهاندازی مجدد پس از بهروزرسانی با احراز هویت پیکربندیشده، نصب زندهٔ skill از ClawHub، پاکسازی وابستگیهای منسوخ Plugin، fixtureهای آفلاین Plugin، بهروزرسانی Plugin، مقاومسازی گریز اتصال فرمان Plugin و QA بستهٔ Telegram را در برابر همان tarball حلشده نگه میدارد. بررسیهای مسدودکنندهٔ انتشار از جدیدترین خط مبنای پیشفرض بستهٔ منتشرشده استفاده میکنند؛ پروفایل بتا با run_release_soak=true، release_profile=stable یا release_profile=full، پیمایش بازماندگان ارتقا از نسخههای منتشرشده را به last-stable-4 بهعلاوهٔ خطوط مبنای سنجاقشدهٔ 2026.4.23، 2026.5.2 و 2026.4.15 با سناریوهای reported-issues گسترش میدهد. از Package Acceptance با source=npm برای نامزدی که قبلاً عرضه شده، با source=ref برای tarball محلی npm مبتنی بر SHA پیش از انتشار، با source=trusted-url برای آینهٔ سازمانی/خصوصی تحت مالکیت نگهدارنده، یا با source=artifact برای tarball آمادهشدهای که اجرای دیگری از GitHub Actions بارگذاری کرده است، استفاده کنید.
این، جایگزین بومی GitHub برای بخش عمدهٔ پوشش بسته/بهروزرسانی است که پیشتر به Parallels نیاز داشت. بررسیهای انتشار میانسیستمعاملی همچنان برای راهاندازی اولیه، نصبکننده و رفتارهای مختص پلتفرم اهمیت دارند، اما اعتبارسنجی محصول بسته/بهروزرسانی باید Package Acceptance را ترجیح دهد.
چکلیست استاندارد اعتبارسنجی بهروزرسانی و Plugin در آزمودن بهروزرسانیها و Pluginها قرار دارد. هنگام تصمیمگیری دربارهٔ اینکه کدام مسیر محلی، Docker، Package Acceptance یا بررسی انتشار، نصب/بهروزرسانی Plugin، پاکسازی doctor یا تغییر مهاجرت بستهٔ منتشرشده را اثبات میکند، از آن استفاده کنید. مهاجرت جامع بهروزرسانی منتشرشده از هر بستهٔ پایدار 2026.4.23+ یک گردشکار دستی جداگانهٔ Update Migration است و بخشی از Full Release CI نیست.
سهلگیری قدیمی Package Acceptance عمداً محدود به بازهٔ زمانی مشخصی است. بستهها تا 2026.4.25 میتوانند برای شکافهای فرادادهای که قبلاً در npm منتشر شدهاند از مسیر سازگاری استفاده کنند: ورودیهای خصوصی موجودی QA که در tarball وجود ندارند، نبود gateway install --wrapper، نبود فایلهای patch در fixture گیت مشتقشده از tarball، نبود update.channel پایدارشده، مکانهای قدیمی رکورد نصب Plugin، نبود پایداری رکورد نصب marketplace و مهاجرت فرادادهٔ پیکربندی هنگام plugins update. بستهٔ منتشرشدهٔ 2026.4.26 میتواند دربارهٔ فایلهای مهر فرادادهٔ ساخت محلی که قبلاً عرضه شدهاند هشدار دهد. بستههای بعدی باید قراردادهای مدرن بسته را برآورده کنند؛ همان شکافها باعث شکست اعتبارسنجی انتشار میشوند.
هنگامی که پرسش انتشار دربارهٔ یک بستهٔ واقعاً قابلنصب است، از پروفایلهای گستردهتر 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 بههمراه اثبات زنده نصب skill از 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 نقطه ورود معمول تغییردهنده است. مسیر ماهانه
و فقط-npm مربوط به extended-stable در .33+ از این هماهنگکننده استفاده نمیکند. گردشکار
معمول، گردشکارهای ناشر مورداعتماد را به ترتیبی که
انتشار نیاز دارد هماهنگ میکند:
- تگ انتشار را checkout کنید و SHA کامیت آن را بهدست آورید.
- بررسی کنید که تگ از
mainیاrelease/*قابلدسترسی است (یا برای پیشانتشارهای آلفا، از یک شاخه آلفای Tideclaw). pnpm plugins:sync:checkرا اجرا کنید.Plugin NPM Releaseرا باpublish_scope=all-publishableوref=<release-sha>dispatch کنید.Plugin ClawHub Releaseرا با همان دامنه و SHA dispatch کنید.OpenClaw NPM Releaseرا با تگ انتشار، dist-tag مربوط به npm وpreflight_run_idذخیرهشده، پس از تأییدfull_release_validation_run_idذخیرهشده و تلاش اجرای دقیق، dispatch کنید.- برای انتشارهای پایدار، انتشار GitHub را بهصورت پیشنویس ایجاد یا بهروزرسانی کنید،
Windows Node Releaseرا باwindows_node_tagصریح وwindows_node_installer_digestsتأییدشده توسط نامزد dispatch کنید و داراییهای متعارف نصبکننده/checksum ویندوز را تأیید کنید. همچنینAndroid Releaseرا برای ساخت APK امضاشده مربوط به تگ دقیق، بههمراه checksum و منشأ، dispatch کنید. پیش از انتشار پیشنویس، هر دو قرارداد دارایی بومی را تأیید کنید.
نمونه انتشار بتا:
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انتشار پایدار در 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 فقط برای تعمیر متمرکز یا انتشار مجدد استفاده کنید. هنگامی که publish_openclaw_npm=true است، OpenClaw Release Publish مقدار plugin_publish_scope=selected را رد میکند تا بسته اصلی بدون همه Pluginهای رسمی قابلانتشار، از جمله @openclaw/diffs-language-pack، منتشر نشود. برای تعمیر یک Plugin انتخابشده، publish_openclaw_npm=false را همراه با plugin_publish_scope=selected و plugins=@openclaw/name تنظیم کنید، یا گردشکار فرزند را مستقیماً dispatch کنید.
راهاندازی اولیه ClawHub برای نخستین انتشار یک استثنا است: Plugin ClawHub New
را از main مورداعتماد dispatch کنید و 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 را بارگذاری نمیکند، بایتهای بسته را منتشر نمیکند و پیکربندی
ناشر مورداعتماد را تغییر نمیدهد. گردشکار همچنان برنامه زنده رجیستری را حل میکند،
هدف را فقط در یک job بدون secret، checkout و بستهبندی میکند، زنجیرهابزار
قفلشده ClawHub را ایجاد میکند و پیش از وجود تگ انتشار، آرتیفکت تغییرناپذیر و
slug/هویت بسته را اعتبارسنجی میکند. محیط
clawhub-plugin-bootstrap را فقط پس از پایان jobهای بستهبندی بدون secret
تأیید کنید؛ این job اعتبارسنجی محافظتشده هیچ اعتبارنامه یا فرمان تغییردهندهای ندارد.
اجرای آزمایشی تأییدشده یا راهاندازی اولیه واقعی پس از تگگذاری باید شامل تگ دقیق
انتشار، بههمراه شناسه اجرا، تلاش و شاخه والد OpenClaw Release Publish باشد.
والد، SHA گردشکار خودش و یک SHA دقیق و مورداعتماد جداگانه
main برای Plugin ClawHub New را گواهی میکند؛ اجرای فرزند و هر تأیید
محیط محافظتشده باید با آن SHA فرزند تأییدشده مطابقت داشته باشد. تگ انتشار
پیش از هر تلاش انتشار و تغییر ناشر مورداعتماد دوباره بررسی میشود.
job بستهبندی
یک آرتیفکت تغییرناپذیر بارگذاری میکند که نام، شناسه/digest آرتیفکت Actions،
اجرا/تلاش تولیدکننده، SHA هدف و SHA-256/اندازه tarball هر بسته آن
به jobهای اعتبارسنجی و محافظتشده منتقل میشود. job محافظتشده فقط ابزارهای مورداعتماد main
را checkout میکند، چندتایی آرتیفکت را از طریق GitHub API اعتبارسنجی میکند، آن را
با شناسه دقیق آرتیفکت دانلود میکند، هر tarball را دوباره هش میکند و مسیرهای محلی TAR و
هویت بسته را با قواعد متعارفسازی USTAR مربوط به CLI سنجاقشده اعتبارسنجی میکند. سپس هر
نامزد از اجرای آزمایشی انتشار CLI سنجاقشده عبور میکند که پیش از
جستوجوی رجیستری یا احراز هویت بازمیگردد. پیشفیلتر job اعتبارنامه، ClawPackهای فشرده را
به 120 MiB، کل محتوای فایل را به 50 MiB، داده TAR گسترشیافته را به 64 MiB و
تعداد ورودیهای TAR را به 10,000 محدود میکند. تعمیر ناشر مورداعتماد برای بسته موجود
همچنان فقط-پیکربندی است، اما همچنان هدف را بستهبندی میکند و پیش از تغییر پیکربندی ناشر مورداعتماد،
به تگ درخواستی و برابری دقیق بایتها و فراداده رجیستری نیاز دارد.
تأیید پس از انتشار، آرتیفکت ClawHub را دانلود میکند و
همان SHA-256 و اندازه را الزامی میداند. بازیابی با اجرای مجدد jobهای ناموفق تنها زمانی میتواند از آرتیفکت بسته
یک تلاش قبلی دوباره استفاده کند که job دقیق تولیدکننده
با موفقیت تکمیل شده باشد. شواهد نهایی همچنین نسخه قفلشده 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: شناسه اجرای موفق و موجود پیشبررسی؛ در مسیر انتشار واقعی الزامی است تا گردشکار بهجای ساخت مجدد، از tarball آمادهشده دوباره استفاده کندfull_release_validation_run_id: شناسه اجرای موفقFull Release Validationبرای این تگ/SHA، برای انتشار واقعی الزامی است. انتشارهای بتا ممکن است تنها با پیشبررسی و همراه با هشدار ادامه یابند، اما ارتقای پایدار/latestهمچنان به آن نیاز دارد.full_release_validation_run_attempt: تلاش اجرای مثبت و دقیق جفتشده باfull_release_validation_run_id؛ هرگاه شناسه اجرا ارائه شود الزامی است تا اجراهای مجدد نتوانند شواهد مجوز را هنگام انتشار تغییر دهند.release_publish_run_id: شناسه اجرای تأییدشدهOpenClaw Release Publish؛ هنگامی که این گردشکار توسط آن والد dispatch شود الزامی است (فراخوانیهای انتشار واقعی توسط عامل ربات)plugin_npm_run_id: شناسه اجرای موفق و دقیق-head مربوط به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: شناسه اجرای موفق پیشبررسیOpenClaw NPM Release؛ هنگامی کهpublish_openclaw_npm=trueیاplugin_publish_scope=all-publishableاست الزامی استfull_release_validation_run_id: شناسه اجرای موفقFull Release Validation؛ هنگامی کهpublish_openclaw_npm=trueیاplugin_publish_scope=all-publishableاست الزامی استfull_release_validation_run_attempt: تلاش مثبت و دقیق جفتشده باfull_release_validation_run_id؛ هرگاه شناسه اجرا ارائه شود الزامی استwindows_node_tag: تگ انتشار دقیق و غیرپیشانتشارopenclaw/openclaw-windows-node؛ برای انتشار پایدار OpenClaw الزامی استwindows_node_installer_digests: نگاشت فشرده JSON تأییدشده توسط نامزد، از نامهای فعلی نصبکننده ویندوز به digestهای سنجاقشدهsha256:آنها؛ برای انتشار پایدار OpenClaw الزامی استnpm_telegram_run_id: شناسه اجرای موفق و اختیاریNPM Telegram Beta E2Eبرای درج در شواهد نهایی انتشارnpm_dist_tag: تگ هدف npm برای بسته OpenClaw، یکی ازalpha،betaیاlatestplugin_publish_scope: مقدار پیشفرضall-publishableاست؛ ازselectedفقط برای تعمیر متمرکز و صرفاً Plugin همراه باpublish_openclaw_npm=falseاستفاده کنیدplugins: نام بستههای@openclaw/*جداشده با ویرگول، هنگامی کهplugin_publish_scope=selectedpublish_openclaw_npm: مقدار پیشفرضtrueاست؛falseرا فقط هنگام استفاده از گردشکار بهعنوان هماهنگکننده تعمیر صرفاً Plugin تنظیم کنیدrelease_profile: نمایه پوشش انتشار مورد استفاده برای خلاصههای شواهد انتشار؛ مقدار پیشفرضfrom-validationاست که آن را از مانیفست اعتبارسنجی میخواند، یا آن را باbeta،stableیاfullجایگزین کنیدwait_for_clawhub: مقدار پیشفرضfalseاست تا دسترسپذیری npm توسط مؤلفه جانبی ClawHub مسدود نشود؛trueرا فقط هنگامی تنظیم کنید که تکمیل گردشکار باید شامل تکمیل ClawHub نیز باشد
OpenClaw Release Checks این ورودیهای تحتکنترل اپراتور را میپذیرد:
ref: شاخه، برچسب یا SHA کامل کامیت برای اعتبارسنجی. بررسیهای حاوی اسرار مستلزم آناند که کامیت حلشده از یک شاخه یا برچسب انتشار OpenClaw قابلدسترسی باشد.run_release_soak: برای بررسیهای انتشار بتا، اعتبارسنجی زنده/E2E جامع، مسیر انتشار Docker و آزمون ماندگاری ارتقا برای همه نسخههای پیشین را فعال کنید. این گزینه با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را انتخاب کنید. - هنگامی که CI عادی بههمراه پوشش کش پرامپت زنده، Docker، QA Lab، Matrix و Telegram را از یک گردشکار دستی میخواهید،
Full Release Validationرا روی شاخه انتشار، برچسب انتشار یا SHA کامل کامیت اجرا کنید. اگر عمداً فقط به گراف آزمون عادی و قطعی نیاز دارید، بهجای آن گردشکار دستیCIرا روی مرجع انتشار اجرا کنید. - برچسب انتشار دقیق و غیرپیشانتشار
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اجرا کنید. این فرایند پیش از ارتقای بسته npm مربوط به OpenClaw، Pluginهای خارجیسازیشده را در npm و ClawHub منتشر میکند.- اگر انتشار روی
betaانجام شد، از گردشکارopenclaw/releases/.github/workflows/openclaw-npm-dist-tags.ymlبرای ارتقای آن نسخه پایدار ازbetaبهlatestاستفاده کنید. - اگر انتشار عمداً مستقیماً در
latestانجام شد وbetaباید فوراً از همان بیلد پایدار پیروی کند، از همان گردشکار انتشار استفاده کنید تا هر دو dist-tag به نسخه پایدار اشاره کنند، یا اجازه دهید همگامسازی خودترمیم زمانبندیشده آن،betaرا بعداً جابهجا کند.
تغییر dist-tag در مخزن دفترکل انتشار انجام میشود، زیرا همچنان به NPM_TOKEN نیاز دارد؛ درحالیکه مخزن منبع انتشار را فقط با OIDC نگه میدارد. بهاینترتیب، هم مسیر انتشار مستقیم و هم مسیر ارتقای پس از بتا مستند و برای اپراتور قابلمشاهده باقی میمانند.
اگر نگهدارندهای ناچار باشد به احراز هویت محلی npm بازگردد، همه فرمانهای CLI مربوط به 1Password (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 استفاده میکنند.