Release process
سیاست انتشار
OpenClaw چهار کانال بهروزرسانی در معرض کاربر ارائه میکند:
- stable: انتشار عادی ترویجشده در npm
latest - extended-stable: خط نگهداشت ماه تکمیلشده قبلی
.33+در npmextended-stable - beta: برچسبهای پیشانتشار در npm
beta - dev: سر متغیر
main
extended-stable، Gateway ماه قبلی، Pluginهای رسمی npm و
تصاویر Docker را بدون جابهجایی انتخابگرهای عادی latest یا main منتشر میکند.
بیلدهای آلفای Tideclaw مسیر پیشانتشار داخلی جداگانهای هستند (dist-tag در npm با نام alpha) که در ورودیهای گردشکار NPM و باکسهای تست انتشار پوشش داده شدهاند.
نامگذاری نسخه
- نسخه انتشار ماهانه extended-stable برای Gateway:
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بهمعنای توزیع پشتیبانیشده Gateway برای ماه قبلی است که از پچ33آغاز میشود؛ پچ34و پچهای بعدی، انتشارهای نگهداشت آن خط ماهانه هستند- انتشارهای نهایی عادی و اصلاحی عادی بهطور پیشفرض در npm با
betaمنتشر میشوند؛ متصدیان انتشار میتوانندlatestرا صریحاً هدف بگیرند یا یک بیلد بتای ارزیابیشده را بعداً ترویج کنند - extended-stable برای Gateway، هسته، هر Plugin رسمی قابلانتشار در npm، و تصاویر Docker آن را با یک نسخه دقیق منتشر میکند؛ گردشکار اختصاصی زیر را ببینید.
- هر انتشار نهایی عادی، بسته npm، برنامه macOS، فایل APK مستقل و امضاشده Android و نصبکنندههای امضاشده Windows Hub را با هم عرضه میکند. انتشارهای بتا معمولاً ابتدا مسیر npm/بسته را اعتبارسنجی و منتشر میکنند و ساخت/امضا/محضریسازی/ترویج برنامه بومی، مگر در صورت درخواست صریح، برای انتشار نهایی عادی محفوظ میماند.
تناوب انتشار
- انتشارها ابتدا به بتا میروند؛ stable تنها پس از اعتبارسنجی آخرین بتا ارائه میشود
- نگهدارندگان معمولاً انتشارها را از شاخه
release/YYYY.M.PATCHکه ازmainجاری ایجاد شده است، انجام میدهند تا اعتبارسنجی و اصلاحات انتشار، توسعه جدید درmainرا مسدود نکند - اگر یک برچسب بتا push یا منتشر شده باشد و به اصلاح نیاز داشته باشد، نگهدارندگان بهجای حذف یا بازسازی برچسب قدیمی، برچسب
-beta.Nبعدی را ایجاد میکنند - رویه دقیق انتشار، تأییدها، اعتبارنامهها و یادداشتهای بازیابی فقط ویژه نگهدارندگان است
انتشار ماهانه extended-stable برای Gateway
برای ماه تکمیلشده YYYY.M، extended-stable/YYYY.M.33 را ایجاد و
.33+ را از آن شاخه منتشر کنید. برچسب، شاخه، checkout، نسخه بسته، پیشبررسی و
اعتبارسنجی باید یک commit را مشخص کنند. پیش از .33، شاخه محافظتشده main باید
نسخه نهایی ماهی بعدتر با پچی پایینتر از 33 را در بر داشته باشد؛ پچهای نگهداشت بعدی همچنان
واجد شرایط هستند.
آمادهسازی و پایدارسازی نامزد
بازه ممیزینشده خط اصلی را ممیزی کنید، کار امنیتی خصوصی را تطبیق دهید، مجموعهای محدود از backportها را تأیید کنید و یک PR هماهنگ را ادغام کنید. شاخه متعارف را مستقیماً push نکنید.
در شاخه متعارف، YYYY.M.P را تنظیم کنید، pnpm release:prep را اجرا کنید و آن
نسخه را در هر Plugin رسمی قابلانتشار الزامی کنید. از دفترکل تأییدشده،
یک بخش کامل ## YYYY.M.P را با ### Highlights،
### Changes و ### Fixes تولید و commit کنید و برای backportهای معادل، به PRهای اصلی ادغامشده main ارجاع دهید.
پیشبررسی، بخش مفقود یا خالی را رد میکند.
واحد کامل کانال انتشار Docker از main جاری را منتقل کنید: گردشکار، ترویجکننده، سیاست، طبقهبند مشترک، تستها و اعتبارسنجی گردشکار. GitHub گردشکارهای برچسب را از commit برچسبگذاریشده بارگیری میکند؛ یک کپی ناقص ممکن است پس از بیلد شکست بخورد یا نامهای مستعار عادی را جابهجا کند. بررسیهای متمرکز را اجرا کنید.
SHA کامل نوک شاخه را تثبیت کنید. پیش از برچسبگذاری، بایتهای دقیق npm آن را پیشبررسی کنید و Full Release Validation را روی آن SHA اجرا کنید:
RELEASE_SHA="$(git rev-parse HEAD)" gh workflow run openclaw-npm-release.yml \ --ref extended-stable/YYYY.M.33 \ -f tag="$RELEASE_SHA" \ -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=stableفرم SHA فقط برای پیشبررسی است. اعتبارسنجی را روی شاخه متعارف اجرا کنید؛ انتشار
ارجاع گردشکار، SHA سر/هدف، شناسه اجرا و تلاش آن را مقید میکند. هر دو شناسه و
run_attempt موفق را ذخیره کنید؛ شواهد release-ci/* را رد کنید.
پیش از ویرایش، شکستها را طبقهبندی کنید:
- محصول: یک PR دیگر برای backport تأییدشده ادغام کنید.
- ابزار هدف تثبیتشده: فقط کوچکترین اصلاح سازگاری را backport کنید که محصول قدیمی را بدون تغییر تست کند.
- ارائهدهنده، تأیید، اجراکننده یا سرویس: نامزد را بدون تغییر نگه دارید و از مسیر تلاش مجدد محدود استفاده کنید.
هر تغییر شاخه، هر دو دروازه را نامعتبر میکند. پس از عبور آنها، الزام کنید که نوک همچنان
برابر RELEASE_SHA باشد، سپس vYYYY.M.P امضاشده را push کنید. تغییرات بعدی به
پچ بعدی نیاز دارند؛ هرگز برچسب را جابهجا یا حذف نکنید. push آن، Docker Release را آغاز میکند.
انتشار بستههای npm
هر Plugin رسمی قابلانتشار در npm را از همان SHA منتشر کنید و شناسه اجرای موفق را ذخیره کنید:
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، از جمله بستههای بدون تغییر را
پوشش میدهد و هر نسخه دقیق و انتخابگر را تأیید میکند. اجرای مجدد از نسخههای منتشرشده دوباره استفاده میکند.
سپس tarball آمادهشده هسته را با هر سه هویت اجرای ذخیرهشده منتشر کنید:
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>فقط برای تمرین غیرتولیدی، -f bypass_extended_stable_guard=true را
به پیشبررسی و انتشار اضافه کنید. این گزینه فقط نگهبان ماه را دور میزند و هرگز
بررسیهای ارجاع متعارف، برابری SHA/برچسب/نسخه، منشأ، تأیید یا بازخوانی را دور نمیزند.
هرگز از آن در محیط تولید استفاده نکنید.
تأیید و بازیابی
از یک checkout تمیز و جداگانه از main جاری، نه شاخه تثبیتشده، اجرا کنید:
node --import tsx scripts/openclaw-npm-postpublish-verify.ts YYYY.M.Pnpm view openclaw@YYYY.M.P version --userconfig "$(mktemp)"npm view openclaw@extended-stable version --userconfig "$(mktemp)"برای شاخه متعارف، امضاها و منشأ npm و نیز اتصال انتشار،
پیشبررسی و digest فایل tarball به SHA انتشار را الزامی کنید. هر دو فرمان باید
YYYY.M.P را برگردانند. هر بسته آمادهشده هسته و هر Plugin رسمی all-publishable
را در نسخه و انتخابگر دقیق آن تأیید کنید.
اگر فقط انتخابگر ریشه شکست خورد، از فرمان تعمیر تولیدشده
npm dist-tag add openclaw@YYYY.M.P extended-stable که در خلاصه گردشکار چاپ شده است
استفاده کنید. انتخابگرهای Plugin موجود یا دیگر انتخابگرهای هسته آمادهشده را
با ابزار تأییدشده و ایزوله از اعتبارنامه تعمیر کنید؛ منبع OIDC نمیتواند آنها را
تغییر دهد. هرگز یک نسخه تغییرناپذیر را بازنشر نکنید.
الزام کنید Docker Release تصاویر دقیق پیشفرض، slim، مرورگر و معماری را
در GHCR و Docker Hub، از جمله گواهیها و نسخههای پلتفرم، تأیید کند. این مورد باید فقط
extended-stable، extended-stable-slim و extended-stable-browser را
بر اساس digest جلو ببرد؛ نامهای مستعار عادی بدون تغییر میمانند و بازگشت خودکار رد میشود.
برای تعمیر نام مستعار، Docker Channel Promotion نیازمند تأیید را از
main جاری و با برچسب اجرا کنید. این کار بررسیهای digest، گواهی و پلتفرم را تکرار میکند،
اجازه بازگشت صریح میدهد و هرگز تصاویر را دوباره نمیسازد.
Slack، Discord و Codex سطوح پشتیبانی مستند اولیه هستند، نه یک
فهرست مجاز انتشار: هر Plugin رسمی قابلانتشار در npm عرضه میشود. فقط
چکلیست عادی مالک beta/latest، GitHub Releases، ClawHub، برنامههای بومی، موبایل،
وبسایت و dist-tagهای خصوصی است؛ این مراحل را برای این مسیر Gateway اجرا نکنید.
چکلیست متصدی انتشار عادی
این چکلیست شکل عمومی جریان انتشار است. اعتبارنامههای خصوصی، امضا، محضریسازی، بازیابی 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 را بهعنوان Code SHA تثبیت کنید. پیشبررسی قطعی منبع را اجرا کنید، سپس از
node scripts/full-release-validation-at-sha.mjs --sha <code-sha> --target-ref release/YYYY.M.PATCHاستفاده کنید. این کار ابزار گردشکار مورداعتماد را ثابت میکند، درحالیکه ماتریس کامل Vitest، Docker، QA، بسته و عملکرد دقیقاً Code SHA را هدف میگیرد. -
پیش از ویرایش، شکستها را طبقهبندی کنید. شکست محصول/کد یک Code SHA جدید ایجاد میکند و برای آن SHA به اعتبارسنجی کامل سبز نیاز دارد. شکست گردشکار، چارچوب، اعتبارنامه، تأیید یا زیرساخت در سطح مالک خود اصلاح و در برابر همان Code SHA دوباره اجرا میشود.
-
تنها پس از سبزشدن Code SHA، بخش بالایی
CHANGELOG.mdرا از PRهای ادغامشده و commitهای مستقیم پس از آخرین برچسب عرضهشده قابلدسترسی تولید کنید. مدخلها را کاربرمحور و بدون تکرار نگه دارید. هنگامی که یک برچسب عرضهشده واگرا یا forward-port بعدی، PRهای ازپیشمنتشرشده را دوباره مرتبط میکند، آن را صریحاً بهصورت--shipped-refارسال کنید. -
فقط
CHANGELOG.mdرا commit کنید. این commit همان Release SHA است. تفاوت کامل از Code SHA تا Release SHA باید دقیقاًCHANGELOG.mdباشد؛ هر مسیر تغییریافته دیگر، انتشار را به مرحله 2 بازمیگرداند. -
Full Release Validation مقید به SHA را برای Release SHA و با استفاده مجدد از شواهد اجرا کنید. والد سبکوزن باید
changelog-only-release-v1را ثبت کند، به Code SHA سبز اشاره کند و هیچ مسیر فرزند محصولی را dispatch نکند. این کار از شواهد محصول دوباره استفاده میکند؛ از بایتهای بسته دوباره استفاده نمیکند. -
OpenClaw NPM Releaseرا باpreflight_only=trueدر برابر Release SHA/برچسب اجرا کنید.preflight_run_idموفق را ذخیره کنید. این کار بایتهای دقیق بسته را که changelog نهایی را در بر دارند، میسازد و بررسی میکند. -
Release SHA را برچسبگذاری کنید، سپس helper نامزد را با والد اعتبارسنجی موفق Release-SHA و پیشبررسی npm اجرا کنید، بهجای آنکه هرکدام را دوباره dispatch کنید:
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 منطبق ارتقا میدهد. محل پرداخت انتشار همچنان ریشهٔ محصول/داده باقی میماند، درحالیکه برنامهریزی و تأیید نهایی از محل پرداخت دقیق و مورداعتماد منبع گردشکار اجرا میشوند تا یک کامیت انتشار قدیمی نتواند بیسروصدا از ابزار انتشار منسوخ استفاده کند. پیش از شروع هر فرایند فرزند انتشار، متن دقیق انتشار GitHub را رندر و ذخیره میکند. وقتی بخش کامل و منطبقCHANGELOG.mdدر محدودیت 125,000 نویسهای GitHub و سقف ایمنی منطبق 125,000 بایتی رندرکننده جا شود، صفحه دقیقاً همان بخش## YYYY.M.PATCHرا همراه با عنوانش دربر میگیرد. وقتی بخش منبع جا نشود، صفحه یادداشتهای ویراستاری گروهبندیشده را عیناً نگه میدارد و سابقهٔ مشارکت بیشازحد بزرگ را با پیوندی پایدار به سابقهٔ کامل درCHANGELOG.mdسنجاقشده به تگ جایگزین میکند؛ سوابق ناقص و موارد فهرست بریدهشده هرگز منتشر نمیشوند. گردشکار پیش از افزودن### Release verificationمتن کامل یا فشرده را انتخاب میکند؛ اگر دنبالهٔ مدارک از محدودیت عبور کند، متن مرجع را نگه میدارد و به مدرک تغییرناپذیر پیوستشده متکی میشود. انتشارهای پایداری که با npmlatestمنتشر میشوند، به آخرین انتشار GitHub تبدیل میشوند، درحالیکه انتشارهای نگهداری پایدار که روی npmbetaنگه داشته میشوند، با GitHublatest=falseایجاد میشوند. گردشکار همچنین مدارک وابستگی پیشپرواز، مانیفست اعتبارسنجی کامل و مدارک تأیید رجیستری پس از انتشار را برای واکنش به رخدادهای پس از انتشار در انتشار GitHub بارگذاری میکند. شناسههای اجرای فرزند را فوراً نمایش میدهد، دروازههای محیط انتشار را که توکن گردشکار مجاز به تأییدشان است بهطور خودکار تأیید میکند، کارهای فرزند ناموفق را همراه با انتهای لاگها خلاصه میکند، صفحهٔ پیشنویس انتشار GitHub را از ابتدا میسازد و آرتیفکتهای Windows و Android را همزمان با انتشار npm مربوط به OpenClaw ارتقا میدهد، پس از موفقیت آن مراحل صفحهٔ انتشار و مدارک وابستگی را نهایی میکند، هرگاه OpenClaw در npm منتشر شود منتظر ClawHub میماند، سپس تأییدکنندهٔ بتای main مورداعتماد را اجرا میکند و مدارک پس از انتشار مربوط به انتشار GitHub، بستهٔ npm، بستههای انتخابشدهٔ Plugin در npm، بستههای انتخابشدهٔ ClawHub، شناسههای اجرای گردشکار فرزند و شناسهٔ اختیاری اجرای NPM مربوط به Telegram را بارگذاری میکند. تأییدکنندهٔ راهاندازی اولیهٔ ClawHub به مسیر و SHA دقیق گردشکار main مورداعتماد، تلاشهای اجرای تولیدکننده و پایانی، SHA انتشار، مجموعهٔ بستههای درخواستشده، چندتایی تغییرناپذیر آرتیفکت بسته و آرتیفکت بازخوانی پایانی رجیستری نیاز دارد؛ اجرای موفق قدیمی مبتنی بر مرجع انتشار پذیرفته نمیشود.سپس پذیرش بستهٔ پس از انتشار را برای بستهٔ منتشرشدهٔ
openclaw@YYYY.M.PATCH-beta.Nیاopenclaw@betaاجرا کنید. اگر یک پیشانتشار ارسالشده یا منتشرشده به اصلاح نیاز دارد، شمارهٔ پیشانتشار منطبق بعدی را ایجاد کنید؛ هرگز مورد قدیمی را حذف یا بازنویسی نکنید. -
در یک تلاش انتشار ناموفق، SHA انتشار را بدون تغییر نگه دارید، مگر اینکه شکست وجود نقصی در محصول یا تغییراتنامه را ثابت کند. فرزندان و آرتیفکتهای تغییرناپذیر موفق را از سر بگیرید؛ هرگز نسخهای از بسته را که قبلاً موفق شده است دوباره نسازید یا منتشر نکنید.
-
برای انتشار پایدار، فقط پس از آن ادامه دهید که نسخهٔ بتای بررسیشده یا نامزد انتشار، مدارک اعتبارسنجی لازم را داشته باشد. انتشار پایدار npm نیز از
OpenClaw Release Publishعبور میکند و آرتیفکت پیشپرواز موفق را از طریقpreflight_run_idدوباره بهکار میگیرد. آمادگی انتشار پایدار macOS همچنین به.zip،.dmg،.dSYM.zipبستهبندیشده وappcast.xmlبهروزشده رویmainنیاز دارد؛ گردشکار انتشار macOS پس از تأیید آرتیفکتهای انتشار، appcast امضاشده را بهطور خودکار درmainعمومی منتشر میکند، یا اگر حفاظت شاخه ارسال مستقیم را مسدود کند یک PR برای appcast باز یا بهروزرسانی میکند. آمادگی پایدار Windows Hub به آرتیفکتهای امضاشدهٔOpenClawCompanion-Setup-x64.exe،OpenClawCompanion-Setup-arm64.exeوOpenClawCompanion-SHA256SUMS.txtدر انتشار GitHub مربوط به OpenClaw نیاز دارد. تگ انتشار امضاشدهٔ دقیقopenclaw/openclaw-windows-nodeرا بهعنوانwindows_node_tagو نگاشت چکیدهٔ نصبکنندهٔ تأییدشده توسط نامزد آن را بهعنوانwindows_node_installer_digestsارسال کنید؛OpenClaw Release Publishپیشنویس انتشار را نگه میدارد،Windows Node Releaseرا ارسال میکند و هر سه آرتیفکت را پیش از انتشار تأیید میکند. -
پس از انتشار، تأییدکنندهٔ پس از انتشار npm، در صورت نیاز به مدرک کانال پس از انتشار E2E مستقل و اختیاری Telegram برای npm منتشرشده، ارتقای dist-tag در صورت نیاز، تأیید صفحهٔ تولیدشدهٔ انتشار GitHub و مراحل اعلام انتشار را اجرا کنید؛ سپس پیش از اعلام اتمام انتشار پایدار، نهاییسازی main پایدار را تکمیل کنید.
نهاییسازی main پایدار
انتشار پایدار تا زمانی که main وضعیت واقعی انتشار عرضهشده را دربر نگیرد، کامل نیست.
- از تازهترین
mainشروع کنید.release/YYYY.M.PATCHرا در برابر آن ممیزی کنید و اصلاحات واقعیِ موجودنبودن درmainرا به جلو منتقل کنید. سازگارکنندههای ویژهٔ انتشار برای سازگاری، آزمون یا اعتبارسنجی را کورکورانه درmainجدیدتر ادغام نکنید. - برای مسیر عادی،
mainرا روی نسخهٔ پایدار عرضهشده تنظیم کنید. نهاییسازی دیرهنگام میتواند پس از پیشروی آن به CalVer پایدار بعدی OpenClaw ازmainاستفاده کند؛ صرفاً برای بستن انتشار قبلی، قطار انتشاری را که از قبل شروع شده است به نسخهٔ پایینتر برنگردانید. اعتبارسنج همچنان بخش دقیق تغییراتنامهٔ عرضهشده و ورودی appcast را الزامی میداند و نسخه و SHA واقعیmainرا ثبت میکند. پس از هر تغییر نسخهٔ ریشه،pnpm release:prepو سپسpnpm deps:shrinkwrap:generateرا اجرا کنید. - بخش
## YYYY.M.PATCHدرCHANGELOG.mdرویmainرا دقیقاً با شاخهٔ انتشار تگشده منطبق کنید. اگر انتشار mac یک بهروزرسانی منتشر کرده است، بهروزرسانی پایدارappcast.xmlرا نیز دربر بگیرید. - تا زمانی که اپراتور صراحتاً آن قطار انتشار را آغاز نکرده است،
YYYY.M.PATCH+1، نسخهٔ بتا یا بخش خالی تغییراتنامهٔ آینده را بهmainاضافه نکنید. - فرمانهای
pnpm release:generated:check،pnpm deps:shrinkwrap:checkوOPENCLAW_TESTBOX=1 pnpm check:changedرا اجرا کنید. ارسال کنید، سپس پیش از اعلام اتمام انتشار پایدار تأیید کنید کهorigin/mainنسخهٔ عرضهشده و تغییراتنامه را دربر دارد. - متغیرهای مخزن
RELEASE_ROLLBACK_DRILL_IDوRELEASE_ROLLBACK_DRILL_DATEرا پس از هر تمرین خصوصی بازگردانی بهروز نگه دارید.
OpenClaw Stable Main Closeout از ارسال main که پس از انتشار پایدار نسخهٔ عرضهشده، تغییراتنامه و appcast را دربر دارد آغاز میشود. این فرایند مدارک تغییرناپذیر پس از انتشار را میخواند تا تگ عرضهشده را به اجراهای اعتبارسنجی کامل انتشار و انتشار آن متصل کند، سپس وضعیت پایدار main، انتشار، دورهٔ پایش پایدار الزامی و مدارک مسدودکنندهٔ کارایی را تأیید میکند. یک مانیفست نهاییسازی تغییرناپذیر و جمع مقابلهای آن را به انتشار GitHub پیوست میکند. راهانداز خودکار ارسال، انتشارهای قدیمیتر از مدارک تغییرناپذیر پس از انتشار را رد میکند و هرگز این ردشدن را نهاییسازی تکمیلشده محسوب نمیکند.
نهاییسازی کامل به هر دو آرتیفکت و جمع مقابلهای منطبق نیاز دارد. یک مانیفست ناقص، SHA ثبتشدهٔ main و تمرین بازگردانی خود را بازپخش میکند تا بایتهای یکسان دوباره تولید شوند، سپس جمع مقابلهای مفقود را پیوست میکند؛ یک جفت نامعتبر یا جمع مقابلهای بدون مانیفست همچنان مسدودکننده باقی میماند. اجرای راهاندازیشده با ارسال که متغیرهای مخزن تمرین بازگردانی را ندارد، بدون تکمیل نهاییسازی رد میشود؛ سابقهٔ تمرین مفقود یا قدیمیتر از 90 روز همچنان نهاییسازی دستی مبتنی بر مدرک را مسدود میکند. فرمانهای بازیابی خصوصی در راهنمای ویژهٔ نگهدارندگان باقی میمانند. ارسال دستی را فقط برای تعمیر یا بازپخش نهاییسازی پایدار مبتنی بر مدرک بهکار ببرید.
اگر والد انتشار تنها پس از پیوستشدن مدارک تغییرناپذیر npm/Plugin شکست خورد، ابتدا همهٔ آرتیفکتهای پلتفرم پایدار را تعمیر و منتشر کنید. سپس یک نگهدارنده میتواند نهاییسازی را بهصورت دستی با allow_failed_publish_recovery=true ارسال کند؛ این حالت فقط یک والد ناموفقِ تکمیلشده را میپذیرد و علاوه بر آن به قراردادهای دقیق آرتیفکت Android و Windows، چکیدههای SHA-256 مربوط به GitHub، تأیید جمع مقابلهای، منشأ Android و یک ارتقای موفق Windows ارسالشده توسط والد نیاز دارد که بررسیهای Authenticode و چکیدههای تأییدشده توسط نامزد آن با نصبکنندههای منتشرشده منطبق باشند، در کنار بررسیهای عادی macOS/appcast. نهاییسازی خودکار مبتنی بر ارسال هرگز این حالت بازیابی را فعال نمیکند.
یک تگ اصلاحی قدیمیِ بازگشت میتواند فقط زمانی مدارک بستهٔ پایه را دوباره بهکار گیرد که تگ اصلاحی به همان کامیت منبع تگ پایدار پایه حل شود. انتشار Android آن APK تأییدشدهٔ تگ پایه را دوباره بهکار میگیرد و منشأ مربوط به تگ اصلاحی را اضافه میکند. اصلاحی با منبع متفاوت باید مدارک بستهٔ خودش را منتشر و تأیید کند و از versionCode بالاتری برای Android استفاده کند.
پیشپرواز انتشار
-
پیش از پیشپرواز انتشار،
pnpm check:test-typesرا اجرا کنید تا TypeScript آزمون خارج از دروازهٔ محلی و سریعترpnpm checkهمچنان پوشش داده شود. -
پیش از پیشپرواز انتشار،
pnpm check:architectureرا اجرا کنید تا بررسیهای گستردهتر چرخهٔ import و مرز معماری خارج از دروازهٔ محلی سریعتر سبز باشند. -
پیش از
pnpm release:check،pnpm build && pnpm ui:buildرا اجرا کنید تا آرتیفکتهای انتشار موردانتظارdist/*و بستهٔ Control UI برای مرحلهٔ اعتبارسنجی بسته موجود باشند. -
پس از افزایش نسخهٔ ریشه و پیش از تگگذاری،
pnpm release:prepرا اجرا کنید. این فرمان همهٔ تولیدکنندههای قطعی انتشار را که معمولاً پس از تغییر نسخه/پیکربندی/API دچار واگرایی میشوند اجرا میکند: نسخههای Plugin، shrinkwrapهای npm، موجودی Plugin، طرحوارهٔ پیکربندی پایه، فرادادهٔ پیکربندی کانالهای بستهبندیشده، خط مبنای مستندات پیکربندی، exportهای SDK مربوط به Plugin، مانیفست قرارداد API مربوط به SDK مربوط به Plugin و بستههای زبان Control UI. همچنین تا زمانی مسدود میماند که ترجمههای برنامههای بومی و منابع زبان تولیدشدهٔ پلتفرم با موجودی منبع منطبق شوند؛ اگر عقب هستند، پیش از تثبیت SHA کد منتظرNative App Locale Refreshبمانید یا آن را ارسال کنید.pnpm release:checkآن محافظها را در حالت بررسی دوباره اجرا میکند (از جمله دروازههای سختگیرانهٔ زبان بههمراه بودجهٔ سطح SDK مربوط به Plugin) و پیش از اجرای بررسیهای انتشار بسته، همهٔ شکستهای واگرایی تولیدشده را در یک گذر گزارش میدهد. -
همگامسازی نسخهٔ Plugin بهطور پیشفرض بستهٔ زماناجرای قابلانتشار
@openclaw/ai، نسخههای بستهٔ Pluginهای رسمی و کفهای موجودopenclaw.compat.pluginApiرا به نسخهٔ انتشار OpenClaw بهروزرسانی میکند. آن فیلد را کف API مربوط به SDK/زماناجرای Plugin بدانید، نه صرفاً نسخهای کپیشده از بسته: برای انتشارهای فقط-Plugin که عمداً با میزبانهای قدیمیتر OpenClaw سازگار میمانند، کف را روی قدیمیترین API میزبان پشتیبانیشده نگه دارید و این انتخاب را در مدرک انتشار Plugin مستند کنید. -
گردشکار دستی
Full Release Validationرا پیش از تأیید انتشار اجرا کنید تا همهٔ جعبههای آزمون پیشانتشار از یک نقطهٔ ورود آغاز شوند. این گردشکار یک شاخه، تگ یا SHA کامل کامیت را میپذیرد،CIدستی را ارسال میکند وOpenClaw Release Checksرا برای آزمون دود نصب، پذیرش بسته، بررسیهای بسته در چند سیستمعامل، همارزی QA Lab، Matrix و مسیرهای Telegram ارسال میکند. اجراهای پایدار و کامل همیشه پایش جامع زنده/E2E و مسیر انتشار Docker را دربر میگیرند؛run_release_soak=trueبرای پایش صریح بتا حفظ شده است. پذیرش بسته، E2E مرجع Telegram برای بسته را هنگام اعتبارسنجی نامزد فراهم میکند و از اجرای همزمان نظرسنج زندهٔ دوم جلوگیری میکند.پس از انتشار بتا،
release_package_specرا ارائه کنید تا بستهٔ npm عرضهشده در بررسیهای انتشار، پذیرش بسته و E2E بستهٔ Telegram بدون ساخت دوبارهٔ tarball انتشار استفاده شود.npm_telegram_package_specرا فقط وقتی ارائه کنید که Telegram باید از بستهٔ منتشرشدهای متفاوت با بقیهٔ اعتبارسنجی انتشار استفاده کند.package_acceptance_package_specرا وقتی ارائه کنید که پذیرش بسته باید از بستهٔ منتشرشدهای متفاوت با مشخصات بستهٔ انتشار استفاده کند.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 published_upgrade_survivor_baseline=openclaw@2026.4.26 -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 و مسیرهای i18n رابط کاربری Control را اجباری میکنند. اجراهای دستی و مستقل CI فقط زمانی Android را اجرا میکنند که باinclude_android=trueراهاندازی شده باشند؛Full Release Validationاین ورودی را به فرزند CI خود میفرستد.bash gh workflow run ci.yml --ref release/YYYY.M.PATCH -f include_android=true -
هنگام اعتبارسنجی تلهمتری انتشار،
pnpm qa:otel:smokeرا اجرا کنید. این مورد QA-lab را از طریق یک گیرندهٔ محلی OTLP/HTTP آزمایش میکند و بدون نیاز به 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>بارگذاری میکند و همچنین آن را در آرتیفکت آمادهشدهٔ پیشبررسی npm، زیرdependency-evidence/، میگنجاند. مسیر واقعی انتشار همان آرتیفکت پیشبررسی را دوباره بهکار میگیرد و سپس همان شواهد را با نامopenclaw-<version>-dependency-evidence.zipبه انتشار GitHub پیوست میکند. -
پس از ایجاد تگ، برای توالی انتشار تغییردهنده
OpenClaw Release Publishرا اجرا کنید. انتشارهای عادی بتا و پایدار را ازmainمورداعتماد راهاندازی کنید؛ تگ انتشار همچنان کامیت هدف دقیق را انتخاب میکند و ممکن است به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ها نیاز دارند. اجراهایall-publishableمختص Plugin به شواهد کامل و تغییرناپذیر پیشبررسی و اعتبارسنجی کامل انتشار نیاز دارند؛ شواهد ناقص رد میشوند. -
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 همچنین از اجاره اعتبارنامههای Convex CI استفاده میکند. هنگامی که همه سناریوهای نگهداریشده Matrix را میخواهید، گردشکار دستیQA-Lab - All Lanesرا باmatrix_profile=allاجرا کنید؛ گردشکار این انتخاب را میان نمایههای انتقال، رسانه و E2EE توزیع میکند تا اثبات کامل در محدوده مهلت زمانی هر job باقی بماند. -
اعتبارسنجی زمان اجرای نصب و ارتقا در سیستمعاملهای مختلف بخشی از
OpenClaw Release ChecksوFull Release Validationعمومی است که گردشکار قابلاستفادهمجدد.github/workflows/openclaw-cross-os-release-checks-reusable.ymlرا مستقیماً فراخوانی میکنند. این جداسازی عمدی است: مسیر واقعی انتشار npm را کوتاه، قطعی و متمرکز بر artifact نگه میدارد، درحالیکه بررسیهای زنده کندتر در مسیر خود باقی میمانند تا انتشار را متوقف یا مسدود نکنند. -
بررسیهای انتشار حاوی secret باید از طریق
Full Release Validationیا از ref گردشکارmain/release اعزام شوند تا منطق گردشکار و secretها تحت کنترل باقی بمانند. -
OpenClaw Release Checksیک شاخه، tag یا SHA کامل commit را میپذیرد، مشروط بر اینکه commit حلشده از یک شاخه یا tag انتشار OpenClaw قابلدسترسی باشد. -
پیشبررسی صرفاً اعتبارسنجی
OpenClaw NPM Releaseنیز SHA کامل 40 نویسهای commit فعلی شاخه گردشکار را بدون نیاز به tag پوششده میپذیرد. این مسیر SHA فقط برای اعتبارسنجی است و نمیتوان آن را به انتشار واقعی ارتقا داد. در حالت SHA، گردشکارv<package.json version>را فقط برای بررسی فراداده بسته ایجاد میکند؛ انتشار واقعی همچنان به یک tag انتشار واقعی نیاز دارد. -
هر دو گردشکار، مسیر انتشار و ارتقای واقعی را روی runnerهای میزبانیشده GitHub نگه میدارند، درحالیکه مسیر اعتبارسنجی بدون تغییر میتواند از runnerهای بزرگتر Blacksmith Linux استفاده کند.
-
آن گردشکار
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_CACHE_TEST=1 pnpm test:live:cacheرا با استفاده از هر دو secret گردشکارOPENAI_API_KEYوANTHROPIC_API_KEYاجرا میکند. -
پیشبررسی انتشار npm دیگر منتظر مسیر جداگانه بررسیهای انتشار نمیماند.
-
پیش از tag کردن محلی یک نامزد انتشار،
RELEASE_TAG=vYYYY.M.PATCH-beta.N pnpm release:fast-pretag-checkرا اجرا کنید. این ابزار کمکی محافظهای سریع انتشار، بررسیهای انتشار npm/ClawHub مربوط به plugin، build، build رابط کاربری وrelease:openclaw:npm:checkرا به ترتیبی اجرا میکند که خطاهای رایج مسدودکننده تأیید را پیش از شروع گردشکار انتشار GitHub تشخیص دهد. -
پیش از تأیید،
RELEASE_TAG=vYYYY.M.PATCH node --import tsx scripts/openclaw-npm-release-check.ts(یا tag پیشانتشار/اصلاحی متناظر) را اجرا کنید. -
پس از انتشار npm،
node --import tsx scripts/openclaw-npm-postpublish-verify.ts YYYY.M.PATCH(یا نسخه بتا/اصلاحی متناظر) را اجرا کنید تا مسیر نصب رجیستری منتشرشده در یک پیشوند موقت تازه اعتبارسنجی شود. -
پس از انتشار بتا،
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 و E2E واقعی Telegram در برابر بسته منتشرشده npm با استفاده از مخزن مشترک اجارهای اعتبارنامه Telegram اعتبارسنجی شوند. برای اجراهای موردی محلی نگهدارندگان میتوان متغیرهای Convex را حذف کرد و سه اعتبارنامه محیطیOPENCLAW_QA_TELEGRAM_*را مستقیماً ارائه داد. -
برای اجرای آزمون دود کامل بتا پس از انتشار از دستگاه یک نگهدارنده، از
pnpm release:beta-smoke -- --beta betaNاستفاده کنید. این ابزار کمکی اعتبارسنجی بهروزرسانی npm و هدف تازه Parallels را اجرا میکند،NPM Telegram Beta E2Eرا اعزام میکند، اجرای دقیق گردشکار را پایش میکند، artifact را بارگیری میکند و گزارش Telegram را چاپ میکند. -
نگهدارندگان میتوانند همان بررسی پس از انتشار را از GitHub Actions و از طریق گردشکار دستی
NPM Telegram Beta E2Eاجرا کنند. این گردشکار عمداً فقط دستی است و در هر merge اجرا نمیشود. -
خودکارسازی انتشار نگهدارندگان از الگوی پیشبررسی-سپس-ارتقا استفاده میکند:
- انتشار واقعی npm باید یک
preflight_run_idموفق npm را پشت سر بگذارد. - هماهنگسازی انتشار و پیشبررسی معمول بتا و پایدار،
mainمورداعتماد را در برابر tag هدف دقیق بهکار میگیرد. انتشار و پیشبررسی آلفای Tideclaw از شاخه آلفای متناظر استفاده میکند. - انتشارهای پایدار npm بهطور پیشفرض از
betaاستفاده میکنند؛ انتشار پایدار npm میتواند از طریق ورودی گردشکار صراحتاًlatestرا هدف بگیرد. - تغییر dist-tag مبتنی بر token در npm در
openclaw/releases/.github/workflows/openclaw-npm-dist-tags.ymlقرار دارد، زیراnpm dist-tag addهمچنان بهNPM_TOKENنیاز دارد، درحالیکه مخزن منبع انتشار را فقط مبتنی بر OIDC نگه میدارد. macOS Releaseعمومی فقط برای اعتبارسنجی است؛ هنگامی که یک tag فقط روی شاخه انتشار قرار دارد اما گردشکار ازmainاعزام میشود،public_release_branch=release/YYYY.M.PATCHرا تنظیم کنید.- انتشار واقعی macOS باید
preflight_run_idوvalidate_run_idموفق macOS را پشت سر بگذارد. - مسیرهای انتشار واقعی بهجای build مجدد، artifactهای آمادهشده را ارتقا میدهند.
- انتشار واقعی npm باید یک
-
برای انتشارهای اصلاحی پایدار مانند
YYYY.M.PATCH-N، اعتبارسنج پس از انتشار همان مسیر ارتقای پیشوند موقت ازYYYY.M.PATCHبهYYYY.M.PATCH-Nرا نیز بررسی میکند تا اصلاحات انتشار نتوانند نصبهای سراسری قدیمیتر را بیسروصدا روی محتوای پایه پایدار باقی بگذارند. -
پیشبررسی انتشار npm بهصورت بسته ناموفق میشود، مگر اینکه tarball هم
dist/control-ui/index.htmlو هم محتوای غیرخالیdist/control-ui/assets/را در بر داشته باشد تا دوباره داشبورد مرورگر خالی منتشر نکنیم. -
اعتبارسنجی پس از انتشار همچنین بررسی میکند که entrypointهای plugin منتشرشده و فراداده بسته در چیدمان رجیستری نصبشده موجود باشند. انتشاری که محتوای زمان اجرای plugin را نداشته باشد، در اعتبارسنج پس از انتشار ناموفق میشود و نمیتواند به
latestارتقا یابد. -
pnpm test:install:smokeهمچنین بودجهunpackedSizeمربوط به npm pack را روی tarball بهروزرسانی نامزد اعمال میکند تا e2e نصبکننده افزایش ناخواسته حجم بسته را پیش از مسیر انتشار تشخیص دهد. -
اگر کار انتشار برنامهریزی CI، manifestهای زمانبندی افزونه یا ماتریسهای آزمون افزونه را تغییر داده است، پیش از تأیید، خروجیهای ماتریس
plugin-prerelease-extension-shardتحت مالکیت برنامهریز را از.github/workflows/plugin-prerelease.ymlبازتولید و بازبینی کنید تا یادداشتهای انتشار یک چیدمان قدیمی CI را توصیف نکنند. -
آمادگی انتشار پایدار macOS سطوح بهروزرسان را نیز شامل میشود: انتشار GitHub باید در نهایت شامل
.zip،.dmgو.dSYM.zipبستهبندیشده باشد؛appcast.xmlدرmainباید پس از انتشار به zip پایدار جدید اشاره کند (گردشکار انتشار macOS آن را بهطور خودکار commit میکند، یا هنگامی که push مستقیم مسدود باشد یک PR برای appcast باز میکند)؛ برنامه بستهبندیشده باید شناسه bundle غیر debug، نشانی feed غیرخالی Sparkle وCFBundleVersionبرابر یا بالاتر از حداقل build معیار Sparkle برای آن نسخه انتشار را حفظ کند.
جعبههای آزمون انتشار
Full Release Validation روشی است که اپراتورها ماتریس کامل محصول را از یک entrypoint آغاز میکنند. از ابزار کمکی استفاده کنید تا هر گردشکار فرزند از یک شاخه موقت ثابتشده روی یک SHA مورداعتماد گردشکار main اجرا شود، درحالیکه commit درخواستی همچنان نامزد تحت آزمون باقی میماند:
pnpm ci:full-release \ --sha <code-sha> \ --target-ref release/YYYY.M.PATCHابزار کمکی origin/main فعلی را fetch میکند، release-ci/<workflow-sha>-... را در آن commit مورداعتماد گردشکار push میکند، برای نسخههای بسته آلفا/بتا beta و در غیر این صورت stable را استنباط میکند، Full Release Validation را با ref=<target-sha> از شاخه موقت اعزام میکند، تأیید میکند که headSha هر گردشکار فرزند با SHA سنجاقشده گردشکار والد مطابقت دارد و سپس شاخه موقت را حذف میکند. برای اجبار یک اجرای تازه، -f reuse_evidence=false، برای بررسی گسترده مشورتی، -f release_profile=full، یا برای سنجاق کردن commit قدیمیتری که همچنان از origin/main فعلی قابلدسترسی است، --workflow-sha <trusted-main-sha> را ارائه دهید. خود گردشکار هرگز refهای مخزن را نمینویسد. این کار ابزار انتشار مخصوص main را بدون افزودن commitهای ابزار به نامزد در دسترس نگه میدارد و از اثبات تصادفی اجرای فرزند جدیدتر main جلوگیری میکند.
پس از سبز شدن SHA کد، فقط CHANGELOG.md را commit کنید و همان ابزار کمکی را با 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/all فقط هنگامی قابلقبول است که خلاصه Full Release Validation، normal_ci، plugin_prerelease و release_checks را موفق نشان دهد، مگر اینکه اجرای مجدد متمرکز عمداً فرزند جداگانه Plugin Prerelease را رد کرده باشد. از فرزند مستقل npm-telegram فقط برای اجرای مجدد متمرکز بسته منتشرشده با release_package_spec یا npm_telegram_package_spec استفاده کنید. خلاصه نهایی اعتبارسنج شامل جدولهای کندترین job برای هر اجرای فرزند است تا مدیر انتشار بتواند مسیر بحرانی فعلی را بدون بارگیری logها ببیند.
فرزند عملکرد محصول در این مسیر انتشار فقط artifact تولید میکند. گردشکار
چتری آن را با publish_reports=false اعزام میکند و اعتبارسنجی رد میشود،
مگر اینکه محافظ صرفاً artifact آن ثابت کند ناشر گزارش Clawgrit همچنان
رد شده است.
برای ماتریس کامل مراحل، نام دقیق jobهای گردشکار، تفاوت نمایههای پایدار و کامل، artifactها و کنترلهای اجرای مجدد متمرکز، به اعتبارسنجی کامل انتشار مراجعه کنید.
گردشکارهای فرزند از ref مورداعتماد سنجاقشده به SHA که Full Release Validation را اجرا میکند اعزام میشوند. هر اجرای فرزند باید از SHA دقیق گردشکار والد استفاده کند. برای اثبات انتشار از اعزامهای خام --ref main -f ref=<sha> استفاده نکنید؛ از pnpm ci:full-release --sha <target-sha> --target-ref release/YYYY.M.PATCH استفاده کنید.
برای انتخاب گستره زنده/provider از release_profile استفاده کنید:
beta: سریعترین مسیر حیاتی انتشار برای مسیر زنده و Docker مربوط به OpenAI/corestable: پوشش provider/backend بتا بهعلاوه پایدار برای تأیید انتشارfull: پوشش پایدار بهعلاوه گسترده مشورتی provider/رسانه
اعتبارسنجی پایدار و کامل همیشه پیش از ارتقا، بررسی جامع زنده/E2E، مسیر انتشار Docker و بازماندن ارتقای منتشرشده محدود را اجرا میکند. برای درخواست همان بررسی برای یک بتا، از run_release_soak=true استفاده کنید. این بررسی چهار بسته پایدار اخیر، بهعلاوه مبناهای سنجاقشده 2026.4.23 و 2026.5.2 و نیز پوشش قدیمیتر 2026.4.15 را در بر میگیرد؛ مبناهای تکراری حذف میشوند و هر مبنا در job مستقل runner مربوط به Docker توزیع میشود.
OpenClaw Release Checks از ref مورداعتماد گردشکار استفاده میکند تا ref هدف را یکبار بهصورت release-package-under-test حل کند و هنگام اجرای soak همان artifact را در بررسیهای سیستمعاملهای مختلف، پذیرش بسته و Docker مسیر انتشار دوباره بهکار گیرد. این کار همه جعبههای مرتبط با بسته را روی بایتهای یکسان نگه میدارد و از buildهای تکراری بسته جلوگیری میکند. پس از اینکه یک بتا از قبل روی npm قرار گرفت، release_package_spec=openclaw@YYYY.M.PATCH-beta.N را تنظیم کنید تا بررسیهای انتشار بسته عرضهشده را یکبار بارگیری کنند، SHA منبع build آن را از dist/build-info.json استخراج کنند و همان artifact را برای مسیرهای سیستمعاملهای مختلف، پذیرش بسته، Docker مسیر انتشار و Telegram بسته دوباره بهکار گیرند.
آزمون دود نصب OpenAI در سیستمعاملهای مختلف، در صورت تنظیم بودن متغیر مخزن/سازمان از OPENCLAW_CROSS_OS_OPENAI_MODEL و در غیر این صورت از openai/gpt-5.6-luna استفاده میکند، زیرا این مسیر در حال اثبات نصب بسته، راهاندازی اولیه، شروع Gateway و یک نوبت زنده agent است، نه سنجش عملکرد توانمندترین مدل. ماتریس گستردهتر provider زنده همچنان محل پوشش ویژه مدل است.
بسته به مرحله انتشار، از این گونهها استفاده کنید:
# اعتبارسنجی 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 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پس از یک اصلاح متمرکز، در نخستین اجرای مجدد از چتر کامل استفاده نکنید. اگر یک باکس شکست خورد، برای اثبات بعدی از گردشکار فرزند، 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-*، بررسیهای دودِ مصنوعات ساختهشده، بررسیهای مستندات، 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 انتشار شامل موارد زیر است:
- بررسی دودِ نصب کامل با فعال بودن بررسی دودِ کند نصب سراسری Bun
- آمادهسازی/استفادهٔ مجدد از تصویر بررسی دودِ Dockerfile ریشه بر اساس SHA هدف، با اجرای jobهای بررسی دودِ QR، ریشه/Gateway و نصبکننده/Bun بهصورت shardهای جداگانهٔ بررسی دودِ نصب
- مسیرهای 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 انتشار شامل موارد زیر است:
- مسیر برابری ساختگی که مسیر نامزد 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=url، از این گزینه استفاده کنیدsource=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، برای tarball محلی npm متکی به SHA پیش از انتشار از source=ref، برای آینهٔ سازمانی/خصوصی تحت مالکیت نگهدارنده از source=trusted-url یا برای tarball آمادهشدهای که اجرای دیگری از GitHub Actions بارگذاری کرده است از source=artifact استفاده کنید.
این جایگزین بومی 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 published_upgrade_survivor_baseline=openclaw@2026.4.26پروفایلهای رایج بسته:
smoke: مسیرهای نصب سریع بسته/کانال/عامل، شبکه Gateway و بارگذاری مجدد پیکربندیpackage: قراردادهای نصب/بهروزرسانی/راهاندازی مجدد/بسته Plugin بههمراه اثبات زنده نصب مهارت ClawHub؛ این گزینه پیشفرض بررسی انتشار استproduct:packageبههمراه کانالهای MCP، پاکسازی cron/زیرعامل، جستوجوی وب OpenAI و OpenWebUIfull: بخشهای مسیر انتشار Docker بههمراه OpenWebUIcustom: فهرست دقیقdocker_lanesبرای اجرای مجدد متمرکز
برای اثبات Telegram نامزد بسته، telegram_mode=mock-openai یا telegram_mode=live-frontier را در پذیرش بسته فعال کنید. گردشکار، tarball حلشده package-under-test را به مسیر Telegram منتقل میکند؛ گردشکار مستقل Telegram همچنان یک مشخصه npm منتشرشده را برای بررسیهای پس از انتشار میپذیرد.
خودکارسازی انتشار عادی
برای انتشار بتا، latest، Plugin، GitHub Release و پلتفرم،
OpenClaw Release Publish نقطه ورود عادی تغییردهنده است. مسیر extended-stable ماهانه
Gateway در .33+ از این هماهنگکننده استفاده نمیکند. گردشکار
عادی، گردشکارهای ناشر مورداعتماد را بهترتیب موردنیاز انتشار هماهنگ میکند:
- تگ انتشار را دریافت و SHA کامیت آن را تعیین کنید.
- بررسی کنید که تگ از
mainیاrelease/*قابلدسترسی باشد (یا برای پیشانتشارهای آلفا، از یک شاخه آلفای Tideclaw). pnpm plugins:sync:checkرا اجرا کنید.Plugin NPM Releaseرا باpublish_scope=all-publishableوref=<release-sha>اعزام کنید.Plugin ClawHub Releaseرا با همان دامنه و SHA اعزام کنید.- پس از تأیید
full_release_validation_run_idذخیرهشده و تلاش دقیق اجرا،OpenClaw NPM Releaseرا با تگ انتشار، dist-tag مربوط به npm وpreflight_run_idذخیرهشده اعزام کنید. - برای انتشارهای پایدار، GitHub release را بهصورت پیشنویس ایجاد یا بهروزرسانی کنید،
Windows Node Releaseرا باwindows_node_tagصریح وwindows_node_installer_digestsتأییدشده برای نامزد اعزام کنید و داراییهای متعارف نصبکننده/checksum ویندوز را بررسی کنید. همچنینAndroid Releaseرا برای ساخت APK امضاشده تگ دقیق بههمراه checksum و منشأ اعزام کنید. پیش از انتشار پیشنویس، هر دو قرارداد دارایی بومی را بررسی کنید.
نمونه انتشار بتا:
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 تنظیم کنید، یا گردشکار فرزند را مستقیماً اعزام کنید.
راهاندازی اولیه ClawHub در نخستین انتشار یک استثنا است: Plugin ClawHub New
را از main مورداعتماد اعزام کنید و SHA کامل انتشار هدف را از طریق ref منتقل کنید.
هرگز خود گردشکار راهاندازی اولیه را از تگ یا شاخه انتشار اجرا نکنید:
gh workflow run plugin-clawhub-new.yml \ --ref main \ -f plugins=@openclaw/name \ -f ref=<full-40-character-release-sha> \ -f pretag_validation=true \ -f dry_run=trueاعتبارسنجی پیش از تگ به dry_run=true نیاز دارد، ورودیهای تگ انتشار و اجرای والد
را رد میکند و فقط هدف دقیقی را میپذیرد که از main یا release/* قابلدسترسی باشد.
این فرایند اعتبارنامههای ClawHub را بارگذاری نمیکند، بایتهای بسته را منتشر نمیکند و پیکربندی
ناشر مورداعتماد را تغییر نمیدهد. گردشکار همچنان برنامه زنده رجیستری را تعیین میکند،
هدف را فقط در یک job بدون secret دریافت و بستهبندی میکند، زنجیرهابزار قفلشده
ClawHub را آماده میسازد و پیش از وجود تگ انتشار، artifact تغییرناپذیر و
slug/هویت بسته را اعتبارسنجی میکند. محیط
clawhub-plugin-bootstrap را فقط پس از پایان jobهای بستهبندی بدون secret تأیید کنید؛
این job اعتبارسنجی محافظتشده هیچ اعتبارنامه یا فرمان تغییردهندهای ندارد.
اجرای آزمایشی تأییدشده یا راهاندازی اولیه واقعی پس از تگگذاری باید شامل تگ دقیق
انتشار، شناسه اجرای والد OpenClaw Release Publish، تلاش و شاخه باشد.
والد، SHA گردشکار خودش و یک SHA دقیق و مجزای مورداعتماد
main را برای Plugin ClawHub New گواهی میکند؛ اجرای فرزند و هر تأیید محیط
محافظتشده باید با SHA فرزند تأییدشده مطابقت داشته باشد. تگ انتشار
پیش از هر تلاش انتشار و تغییر ناشر مورداعتماد دوباره بررسی میشود.
job بستهبندی
یک artifact تغییرناپذیر بارگذاری میکند که نام، شناسه/digest آن در Actions،
اجرا/تلاش تولیدکننده، SHA هدف و SHA-256/اندازه tarball هر بسته
به jobهای اعتبارسنجی و محافظتشده منتقل میشوند. job محافظتشده فقط ابزار
مورداعتماد main را دریافت میکند، چندتایی artifact را از طریق GitHub API اعتبارسنجی میکند، آن را
با شناسه دقیق artifact بارگیری میکند، همه tarballها را دوباره هش میکند و مسیرهای محلی TAR و
هویت بسته را با قواعد متعارفسازی USTAR در CLI سنجاقشده اعتبارسنجی میکند. سپس هر
نامزد از اجرای آزمایشی انتشار CLI سنجاقشده عبور میکند که پیش از
جستوجوی رجیستری یا احراز هویت بازمیگردد. پیشفیلتر job اعتبارنامه، ClawPackهای فشرده را
به 120 MiB، کل payload فایل را به 50 MiB، داده TAR گسترشیافته را به 64 MiB و
تعداد ورودیهای TAR را به 10,000 محدود میکند. ترمیم ناشر مورداعتماد برای بسته موجود
همچنان فقط پیکربندی است، اما باز هم هدف را بستهبندی میکند و پیش از تغییر پیکربندی
ناشر مورداعتماد، به تگ درخواستی و برابری دقیق بایت و فراداده رجیستری نیاز دارد.
اعتبارسنجی پس از انتشار، artifact را از ClawHub بارگیری میکند و
همان SHA-256 و اندازه را الزامی میداند. بازیابی با اجرای مجدد موارد ناموفق تنها زمانی میتواند از
artifact بسته متعلق به تلاش قبلی دوباره استفاده کند که job دقیق تولیدکننده
با موفقیت کامل شده باشد. شواهد نهایی همچنین نسخه قفلشده ClawHub،
SHA-256 قفل و integrity مربوط به 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؛ هنگامی که این گردشکار توسط آن والد اعزام شده باشد الزامی است (فراخوانیهای انتشار واقعی با عامل ربات)plugin_npm_run_id: شناسه اجرای موفقPlugin NPM Releaseبا head دقیق؛ برای انتشار واقعی هسته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 ماهانه را دور میزند و در عین حال بررسیهای هویت انتشار، artifact، تأیید و بازخوانی را حفظ میکند.
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 توسط sidecar مربوط به 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 و سایر کارهای پلتفرمی نیز هست. این مسیر، مسیر ماهانه پایدارِ تمدیدشده Gateway در .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.yml.github/workflows/docker-release.ymlscripts/resolve-openclaw-package-candidate.mjsscripts/openclaw-npm-release-check.tsscripts/package-mac-dist.shscripts/make_appcast.sh
نگهدارندگان برای راهنمای اجرایی واقعی از مستندات خصوصی انتشار در openclaw/maintainers/release/README.md استفاده میکنند.