Release and CI
سیاست انتشار
OpenClaw سه مسیر انتشار عمومی دارد:
- پایدار: انتشارهای برچسبخورده که بهصورت پیشفرض در npm با
betaمنتشر میشوند، یا وقتی صراحتا درخواست شود در npm باlatestمنتشر میشوند - بتا: برچسبهای پیشانتشار که در npm با
betaمنتشر میشوند - توسعه: سر متحرک
main
نامگذاری نسخه
- نسخه انتشار پایدار:
YYYY.M.D- برچسب Git:
vYYYY.M.D
- برچسب Git:
- نسخه انتشار اصلاحی پایدار قدیمی:
YYYY.M.D-N- برچسب Git:
vYYYY.M.D-N
- برچسب Git:
- نسخه پیشانتشار بتا:
YYYY.M.D-beta.N- برچسب Git:
vYYYY.M.D-beta.N
- برچسب Git:
- ماه یا روز را با صفر پیشوند نکنید
latestیعنی انتشار پایدار فعلی npm که ترویج شده استbetaیعنی هدف نصب بتای فعلی- انتشارهای پایدار و اصلاحی قدیمی بهصورت پیشفرض در npm با
betaمنتشر میشوند؛ گردانندگان انتشار میتوانند صراحتاlatestرا هدف بگیرند، یا بعدا یک ساخت بتای بررسیشده را ترویج کنند - هر انتشار پایدار OpenClaw بسته npm و برنامه macOS را با هم عرضه میکند؛ انتشارهای بتا معمولا ابتدا مسیر npm/بسته را اعتبارسنجی و منتشر میکنند، و ساخت/امضا/محضرسازی برنامه mac برای پایدار نگه داشته میشود مگر اینکه صراحتا درخواست شود
نسخهگذاری پشتیبانی ماهانه برنامهریزیشده
OpenClaw هنوز کانال LTS یا پشتیبانی ماهانه ندارد. نگهدارندگان در حال
حرکت بهسوی خطوط پشتیبانی ماهانه سازگار با SemVer هستند، اما کانالهای
بهروزرسانی عرضهشده امروز همچنان stable، beta و dev هستند.
شکل نسخه برنامهریزیشده YYYY.M.PATCH است:
YYYYسال است.Mخط انتشار ماهانه است، بدون صفر آغازین.PATCHدر همان خط ماهانه افزایش مییابد و میتواند تا هر مقدار لازم رشد کند.
برای مثال، 2026.6.0، 2026.6.1 و 2026.6.2 همگی روی خط ژوئن
۲۰۲۶ خواهند بود. یک dist-tag پشتیبانی ماهانه آینده مانند stable-2026-6 یا
lts-2026-6 ممکن است به آن خط اشاره کند، در حالی که latest همچنان سریع حرکت میکند.
این مدل آینده نیاز به انتشارهای اصلاحی جدید YYYY.M.D-N را جایگزین میکند.
نسخههای اصلاحی قدیمی موجود همچنان شناخته میشوند تا بستههای قدیمیتر و
مسیرهای ارتقا به کار خود ادامه دهند.
آهنگ انتشار
- انتشارها ابتدا از بتا عبور میکنند
- پایدار فقط پس از اعتبارسنجی آخرین بتا دنبال میشود
- نگهدارندگان معمولا انتشارها را از شاخه
release/YYYY.M.Dکه ازmainفعلی ساخته شده است انجام میدهند، تا اعتبارسنجی انتشار و اصلاحات توسعه جدید رویmainرا مسدود نکند - اگر یک برچسب بتا push یا منتشر شده باشد و به اصلاح نیاز داشته باشد، نگهدارندگان
بهجای حذف یا بازسازی برچسب بتای قدیمی، برچسب
-beta.Nبعدی را ایجاد میکنند - رویه دقیق انتشار، تاییدها، اعتبارنامهها و یادداشتهای بازیابی فقط مخصوص نگهدارندگان است
چکلیست گرداننده انتشار
این چکلیست شکل عمومی جریان انتشار است. اعتبارنامههای خصوصی، امضا، محضرسازی، بازیابی dist-tag و جزئیات بازگردانی اضطراری در runbook انتشار مخصوص نگهدارندگان باقی میمانند.
- از
mainفعلی شروع کنید: آخرین تغییرات را pull کنید، تایید کنید commit هدف push شده است، و تایید کنید CI فعلیmainبهاندازه کافی برای ساخت شاخه از آن سبز است. - بخش بالایی
CHANGELOG.mdرا از تاریخچه واقعی commit با/changelogبازنویسی کنید، ورودیها را کاربرمحور نگه دارید، آن را commit و push کنید، و پیش از ساخت شاخه یک بار دیگر rebase/pull کنید. - سوابق سازگاری انتشار را در
src/plugins/compat/registry.tsوsrc/commands/doctor/shared/deprecation-compat.tsمرور کنید. سازگاری منقضیشده را فقط وقتی حذف کنید که مسیر ارتقا همچنان پوشش داده میشود، یا ثبت کنید چرا عمدا نگه داشته شده است. release/YYYY.M.Dرا ازmainفعلی بسازید؛ کار عادی انتشار را مستقیما رویmainانجام ندهید.- هر محل نسخه لازم را برای برچسب مورد نظر افزایش دهید،
pnpm plugins:syncرا اجرا کنید تا بستههای Plugin قابل انتشار نسخه انتشار و فراداده سازگاری مشترک داشته باشند، سپس preflight قطعی محلی را اجرا کنید:pnpm check:test-types،pnpm check:architecture،pnpm build && pnpm ui:build،pnpm plugins:sync:checkوpnpm release:check. OpenClaw NPM Releaseرا باpreflight_only=trueاجرا کنید. پیش از وجود برچسب، SHA کامل ۴۰ کاراکتری شاخه انتشار برای preflight فقط-اعتبارسنجی مجاز است.preflight_run_idموفق را ذخیره کنید.- همه آزمونهای پیشانتشار را با
Full Release Validationبرای شاخه انتشار، برچسب یا SHA کامل commit آغاز کنید. این تنها نقطه ورود دستی برای چهار جعبه آزمون بزرگ انتشار است: Vitest، Docker، QA Lab و Package. - اگر اعتبارسنجی شکست خورد، روی شاخه انتشار اصلاح کنید و کوچکترین فایل، مسیر، job گردشکار، پروفایل بسته، provider یا allowlist مدل شکستخوردهای را که اصلاح را اثبات میکند دوباره اجرا کنید. umbrella کامل را فقط وقتی دوباره اجرا کنید که سطح تغییریافته شواهد قبلی را کهنه کند.
- برای بتا،
vYYYY.M.D-beta.Nرا برچسب بزنید، سپسOpenClaw Release Publishرا از شاخه مطابقrelease/YYYY.M.Dاجرا کنید. این workflow،pnpm plugins:sync:checkرا اعتبارسنجی میکند، همه بستههای Plugin قابل انتشار را همزمان به npm و همان مجموعه را به ClawHub dispatch میکند، و سپس بهمحض موفق شدن انتشار npm Plugin، artifact آمادهشده preflight مربوط به OpenClaw npm را با dist-tag مطابق ترویج میکند. انتشار ClawHub ممکن است همچنان هنگام انتشار OpenClaw npm در حال اجرا باشد، اما workflow انتشار تا زمانی که هر دو مسیر انتشار Plugin و مسیر انتشار OpenClaw npm با موفقیت کامل نشده باشند تمام نمیشود. پس از انتشار، پذیرش بسته پس از انتشار را روی بسته منتشرشده[email protected]یاopenclaw@betaاجرا کنید. اگر یک پیشانتشار push یا منتشرشده به اصلاح نیاز داشت، شماره پیشانتشار مطابق بعدی را ایجاد کنید؛ پیشانتشار قدیمی را حذف یا بازنویسی نکنید. - برای پایدار، فقط پس از اینکه بتای بررسیشده یا کاندید انتشار
شواهد اعتبارسنجی لازم را داشت ادامه دهید. انتشار پایدار npm نیز از مسیر
OpenClaw Release Publishانجام میشود و با استفاده ازpreflight_run_idاز artifact موفق preflight دوباره استفاده میکند؛ آمادگی انتشار پایدار macOS همچنین به.zip،.dmg،.dSYM.zipبستهبندیشده وappcast.xmlبهروزشده رویmainنیاز دارد. - پس از انتشار، تاییدکننده پس از انتشار npm، آزمون E2E اختیاری standalone
Telegram برای npm منتشرشده هنگامی که به اثبات کانال پس از انتشار نیاز دارید،
ترویج dist-tag در صورت نیاز، یادداشتهای انتشار/پیشانتشار GitHub از
بخش کامل و مطابق
CHANGELOG.md، و گامهای اعلام انتشار را اجرا کنید.
preflight انتشار
- پیش از پیشپرواز انتشار،
pnpm check:test-typesرا اجرا کنید تا TypeScript آزمونها بیرون از گیت سریعتر محلیpnpm checkهم پوشش داده شود - پیش از پیشپرواز انتشار،
pnpm check:architectureرا اجرا کنید تا بررسیهای گستردهتر چرخه import و مرزهای معماری بیرون از گیت سریعتر محلی سبز باشند - پیش از
pnpm release:check، دستورpnpm build && pnpm ui:buildرا اجرا کنید تا آرتیفکتهای انتشار مورد انتظارdist/*و باندل Control UI برای مرحله اعتبارسنجی بسته وجود داشته باشند - پس از افزایش نسخه ریشه و پیش از تگگذاری،
pnpm plugins:syncرا اجرا کنید. این دستور نسخههای بستههای Plugin قابل انتشار، فراداده سازگاری peer/API در OpenClaw، فراداده ساخت، و stubهای changelog مربوط به Plugin را بهروزرسانی میکند تا با نسخه انتشار هسته هماهنگ شوند.pnpm plugins:sync:checkنگهبان غیرتغییردهنده انتشار است؛ اگر این مرحله فراموش شده باشد، workflow انتشار پیش از هرگونه تغییر در registry شکست میخورد. - پیش از تأیید انتشار، workflow دستی
Full Release Validationرا اجرا کنید تا همه test boxهای پیش از انتشار از یک نقطه ورود آغاز شوند. این workflow یک branch، tag یا SHA کامل commit را میپذیرد،CIدستی را dispatch میکند، وOpenClaw Release Checksرا برای install smoke، package acceptance، بررسیهای package میانسیستمی، همترازی QA Lab، Matrix و laneهای Telegram dispatch میکند. اجراهای stable/default، soak کامل live/E2E و Docker release-path را پشتrun_release_soak=trueنگه میدارند؛release_profile=fullاجرای soak را اجباری میکند. باrelease_profile=fullوrerun_group=all، همچنین package Telegram E2E را روی آرتیفکتrelease-package-under-testاز release checks اجرا میکند. پس از انتشار، اگر همان Telegram E2E باید بسته منتشرشده npm را هم اثبات کند،npm_telegram_package_specرا ارائه کنید. پس از انتشار، اگر Package Acceptance باید ماتریس package/update خود را بهجای آرتیفکت ساختهشده از SHA روی بسته npm ارسالشده اجرا کند،package_acceptance_package_specرا ارائه کنید. وقتی گزارش private evidence باید ثابت کند که اعتبارسنجی با یک بسته npm منتشرشده همخوان است بدون اینکه Telegram E2E اجباری شود،evidence_package_specرا ارائه کنید. مثال:gh workflow run full-release-validation.yml --ref main -f ref=release/YYYY.M.D - وقتی میخواهید در حالی که کار انتشار ادامه دارد، برای یک نامزد بسته از مسیر جانبی proof بگیرید، workflow دستی
Package Acceptanceرا اجرا کنید. برایopenclaw@beta،openclaw@latestیا یک نسخه انتشار دقیق ازsource=npmاستفاده کنید؛ برای بستهبندی یک branch/tag/SHA قابل اعتمادpackage_refبا harness فعلیworkflow_refازsource=refاستفاده کنید؛ برای یک tarball HTTPS با SHA-256 الزامی ازsource=urlاستفاده کنید؛ یا برای tarball بارگذاریشده توسط یک اجرای دیگر GitHub Actions ازsource=artifactاستفاده کنید. این workflow نامزد را بهpackage-under-testresolve میکند، release scheduler مربوط به Docker E2E را روی همان tarball دوباره استفاده میکند، و میتواند QA مربوط به Telegram را باtelegram_mode=mock-openaiیاtelegram_mode=live-frontierروی همان tarball اجرا کند. وقتی laneهای Docker انتخابشده شاملpublished-upgrade-survivorباشند، آرتیفکت package همان نامزد است وpublished_upgrade_survivor_baselinebaseline منتشرشده را انتخاب میکند.update-restart-authاز بسته نامزد هم بهعنوان CLI نصبشده و هم بهعنوان package-under-test استفاده میکند تا مسیر managed restart دستور update نامزد را تمرین کند. مثال: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: laneهای install/channel/agent، شبکه Gateway، و reload پیکربندیpackage: laneهای بومی آرتیفکت برای package/update/restart/Plugin بدون OpenWebUI یا ClawHub زندهproduct: پروفایل package بهعلاوه کانالهای MCP، پاکسازی cron/subagent، جستوجوی وب OpenAI، و OpenWebUIfull: chunkهای Docker release-path همراه با OpenWebUIcustom: انتخاب دقیقdocker_lanesبرای rerun متمرکز
- وقتی فقط به پوشش کامل CI عادی برای نامزد انتشار نیاز دارید، workflow دستی
CIرا مستقیم اجرا کنید. dispatchهای CI دستی از scoping تغییرات عبور میکنند و shardهای Linux Node، shardهای bundled-plugin، قراردادهای channel، سازگاری Node 22،check،check-additional، build smoke، بررسیهای docs، Skills پایتون، Windows، macOS، Android و laneهای i18n مربوط به Control UI را اجباری میکنند. مثال:gh workflow run ci.yml --ref release/YYYY.M.D - هنگام اعتبارسنجی telemetry انتشار،
pnpm qa:otel:smokeرا اجرا کنید. این دستور QA-lab را از طریق یک گیرنده محلی OTLP/HTTP تمرین میکند و نام spanهای trace صادرشده، ویژگیهای محدود، و redaction محتوا/شناسه را بدون نیاز به Opik، Langfuse یا collector خارجی دیگر تأیید میکند. - پیش از هر انتشار تگشده،
pnpm release:checkرا اجرا کنید - پس از اینکه tag وجود داشت، برای توالی انتشار تغییردهنده
OpenClaw Release Publishرا اجرا کنید. آن را ازrelease/YYYY.M.Ddispatch کنید (یا هنگام انتشار tag قابل دسترسی از main، ازmain)، tag انتشار وpreflight_run_idموفق npm مربوط به OpenClaw را بدهید، و scope پیشفرض انتشار Plugin یعنیall-publishableرا نگه دارید مگر اینکه عمداً در حال اجرای یک تعمیر متمرکز باشید. این workflow انتشار npm مربوط به Plugin، انتشار ClawHub مربوط به Plugin، و انتشار npm مربوط به OpenClaw را serial میکند تا بسته هسته پیش از Pluginهای externalized خود منتشر نشود. - اکنون release checks در یک workflow دستی جداگانه اجرا میشوند:
OpenClaw Release Checks OpenClaw Release Checksهمچنین پیش از تأیید انتشار، lane همترازی mock مربوط به QA Lab بههمراه پروفایل live سریع Matrix و lane QA مربوط به Telegram را اجرا میکند. laneهای live از محیطqa-live-sharedاستفاده میکنند؛ Telegram همچنین از leaseهای credential مربوط به Convex CI استفاده میکند. وقتی موجودی کامل transport، media و E2EE مربوط به Matrix را بهصورت موازی میخواهید، workflow دستیQA-Lab - All Lanesرا باmatrix_profile=allوmatrix_shards=trueاجرا کنید.- اعتبارسنجی runtime نصب و upgrade میانسیستمی بخشی از
OpenClaw Release Checksعمومی وFull Release Validationاست که workflow قابل استفاده مجدد.github/workflows/openclaw-cross-os-release-checks-reusable.ymlرا مستقیم فراخوانی میکنند - این جداسازی عمدی است: مسیر انتشار واقعی npm را کوتاه، قطعی و آرتیفکتمحور نگه دارید، در حالی که بررسیهای کندتر live در lane خودشان باقی میمانند تا انتشار را متوقف یا مسدود نکنند
- release checkهای دارای secret باید از طریق
Full Release Validationیا از workflow ref مربوط بهmain/release dispatch شوند تا منطق workflow و secretها کنترلشده باقی بمانند OpenClaw Release Checksیک branch، tag یا SHA کامل commit را میپذیرد، تا زمانی که commit resolveشده از یک branch یا release tag متعلق به OpenClaw قابل دسترسی باشد- پیشپرواز validation-only مربوط به
OpenClaw NPM Releaseنیز SHA کامل ۴۰ کاراکتری commit در workflow-branch فعلی را بدون نیاز به tag pushشده میپذیرد - آن مسیر SHA فقط برای اعتبارسنجی است و نمیتواند به انتشار واقعی ارتقا داده شود
- در حالت SHA، workflow فقط برای بررسی فراداده package مقدار
v<package.json version>را میسازد؛ انتشار واقعی همچنان به یک release tag واقعی نیاز دارد - هر دو workflow مسیر انتشار و promotion واقعی را روی runnerهای GitHub-hosted نگه میدارند، در حالی که مسیر اعتبارسنجی غیرتغییردهنده میتواند از runnerهای بزرگتر Blacksmith Linux استفاده کند
- آن workflow دستور
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_CACHE_TEST=1 pnpm test:live:cacheرا با استفاده از secretهای workflow یعنیOPENAI_API_KEYوANTHROPIC_API_KEYاجرا میکند - پیشپرواز انتشار npm دیگر منتظر lane جداگانه release checks نمیماند
- پیش از تأیید، دستور
RELEASE_TAG=vYYYY.M.D node --import tsx scripts/openclaw-npm-release-check.tsرا اجرا کنید (یا tag متناظر beta/correction را) - پس از انتشار npm، دستور
node --import tsx scripts/openclaw-npm-postpublish-verify.ts YYYY.M.Dرا اجرا کنید (یا نسخه متناظر beta/correction را) تا مسیر نصب registry منتشرشده را در یک prefix موقت تازه تأیید کند - پس از انتشار beta، دستور
[email protected] OPENCLAW_NPM_TELEGRAM_CREDENTIAL_SOURCE=convex OPENCLAW_NPM_TELEGRAM_CREDENTIAL_ROLE=ci pnpm test:docker:npm-telegram-liveرا اجرا کنید تا onboarding بسته نصبشده، راهاندازی Telegram و Telegram E2E واقعی را در برابر بسته npm منتشرشده با استفاده از pool مشترک credentialهای leaseشده Telegram تأیید کند. اجرای موردی محلی maintainer میتواند متغیرهای Convex را حذف کند و سه credential محیطیOPENCLAW_QA_TELEGRAM_*را مستقیم بدهد. - برای اجرای smoke کامل beta پس از انتشار از ماشین maintainer، از
pnpm release:beta-smoke -- --beta betaNاستفاده کنید. helper اعتبارسنجی npm update/fresh-target در Parallels را اجرا میکند،NPM Telegram Beta E2Eرا dispatch میکند، اجرای دقیق workflow را poll میکند، آرتیفکت را دانلود میکند، و گزارش Telegram را چاپ میکند. - maintainerها میتوانند همان بررسی پس از انتشار را از GitHub Actions از طریق workflow دستی
NPM Telegram Beta E2Eاجرا کنند. این workflow عمداً فقط دستی است و روی هر merge اجرا نمیشود. - اتوماسیون انتشار maintainer اکنون از preflight-then-promote استفاده میکند:
- انتشار واقعی npm باید یک
preflight_run_idموفق npm داشته باشد - انتشار واقعی npm باید از همان branch یعنی
mainیاrelease/YYYY.M.Dکه اجرای پیشپرواز موفق از آن بوده، dispatch شود - انتشارهای stable npm بهصورت پیشفرض روی
betaقرار میگیرند - انتشار stable npm میتواند از طریق ورودی workflow صراحتاً
latestرا هدف بگیرد - mutation مبتنی بر token برای npm dist-tag اکنون برای امنیت در
openclaw/releases-private/.github/workflows/openclaw-npm-dist-tags.ymlقرار دارد، زیراnpm dist-tag addهمچنان بهNPM_TOKENنیاز دارد در حالی که repo عمومی فقط انتشار OIDC-only را نگه میدارد macOS Releaseعمومی فقط اعتبارسنجی است؛ وقتی tag فقط روی یک release branch قرار دارد اما workflow ازmaindispatch میشود،public_release_branch=release/YYYY.M.Dرا تنظیم کنید- انتشار واقعی private mac باید
preflight_run_idوvalidate_run_idموفق private mac را داشته باشد - مسیرهای انتشار واقعی، آرتیفکتهای آمادهشده را promote میکنند بهجای اینکه دوباره آنها را build کنند
- انتشار واقعی npm باید یک
- برای انتشارهای correction قدیمی stable مانند
YYYY.M.D-N، verifier پس از انتشار همچنین همان مسیر upgrade با prefix موقت را ازYYYY.M.DبهYYYY.M.D-Nبررسی میکند تا correctionهای انتشار نتوانند بیسروصدا نصبهای global قدیمیتر را روی payload پایه stable باقی بگذارند - پیشپرواز انتشار npm بهصورت fail-closed شکست میخورد مگر اینکه tarball هم
dist/control-ui/index.htmlو هم payload غیرخالیdist/control-ui/assets/را شامل شود تا دوباره داشبورد مرورگر خالی ارسال نکنیم - اعتبارسنجی پس از انتشار همچنین بررسی میکند که entrypointهای Plugin منتشرشده و فراداده package در layout نصبشده registry وجود داشته باشند. انتشاری که payloadهای runtime مربوط به Plugin را ناقص ارسال کند، verifier پس از انتشار را fail میکند و نمیتواند به
latestpromote شود. pnpm test:install:smokeهمچنین بودجهunpackedSizeمربوط به npm pack را روی tarball نامزد update enforce میکند، بنابراین installer e2e پیش از مسیر release publish، بزرگشدن تصادفی pack را میگیرد- اگر کار انتشار به برنامهریزی CI، manifestهای timing افزونه، یا ماتریسهای آزمون افزونه دست زده است، پیش از تأیید، خروجیهای ماتریس planner-owned مربوط به
plugin-prerelease-extension-shardرا از.github/workflows/plugin-prerelease.ymlدوباره تولید و review کنید تا یادداشتهای انتشار یک layout قدیمی CI را توصیف نکنند - آمادگی انتشار stable macOS شامل سطوح updater نیز میشود:
- release مربوط به GitHub باید در نهایت شامل
.zip،.dmgو.dSYM.zipبستهبندیشده باشد appcast.xmlرویmainباید پس از انتشار به zip جدید stable اشاره کند- app بستهبندیشده باید bundle id غیر-debug، URL feed غیرخالی Sparkle، و
CFBundleVersionبرابر یا بالاتر از کف canonical build مربوط به Sparkle برای آن نسخه انتشار را حفظ کند
- release مربوط به GitHub باید در نهایت شامل
test boxهای انتشار
Full Release Validation روشی است که operatorها همه آزمونهای پیش از انتشار را از یک نقطه ورود آغاز میکنند. برای proof مربوط به commit پینشده روی branch پرتحرک، از helper استفاده کنید تا هر workflow فرزند از یک branch موقت ثابتشده روی SHA هدف اجرا شود:
pnpm ci:full-release --sha <full-sha>
helper مقدار release-ci/<sha>-... را push میکند، Full Release Validation را از آن branch با ref=<sha> dispatch میکند، تأیید میکند که headSha هر workflow فرزند با هدف مطابقت دارد، سپس branch موقت را حذف میکند. این کار از اثبات تصادفی اجرای فرزند جدیدتر main جلوگیری میکند.
برای اعتبارسنجی release branch یا tag، آن را از workflow ref قابل اعتماد main اجرا کنید و release branch یا tag را بهعنوان ref بدهید:
gh workflow run full-release-validation.yml \
--ref main \
-f ref=release/YYYY.M.D \
-f provider=openai \
-f mode=both \
-f release_profile=stable \
-f [email protected]
این گردشکار مرجع هدف را resolve میکند، CI دستی را با
target_ref=<release-ref> dispatch میکند، OpenClaw Release Checks را dispatch میکند، یک
artifact والد release-package-under-test را برای بررسیهای بستهمحور آماده میکند، و
وقتی release_profile=full همراه با rerun_group=all باشد یا وقتی
npm_telegram_package_spec تنظیم شده باشد، E2E مستقل بسته Telegram را dispatch میکند. سپس OpenClaw Release Checks install smoke، بررسیهای انتشار بین سیستمعاملی، پوشش live/E2E Docker
در مسیر انتشار هنگام فعال بودن soak، Package Acceptance همراه با QA بسته Telegram،
همارزی QA Lab، Matrix زنده، و Telegram زنده را منشعب میکند. اجرای کامل فقط وقتی قابل قبول است که
خلاصهی Full Release Validation
normal_ci و release_checks را موفق نشان دهد. در حالت full/all،
فرزند npm_telegram نیز باید موفق باشد؛ خارج از full/all، مگر اینکه
npm_telegram_package_spec منتشرشده ارائه شده باشد، رد میشود. خلاصهی نهایی
verifier جدولهای کندترین job را برای هر اجرای فرزند شامل میشود، تا مدیر انتشار
بتواند مسیر بحرانی فعلی را بدون دانلود logها ببیند.
برای ماتریس کامل مرحلهها، نام دقیق jobهای گردشکار، تفاوتهای profile پایدار در برابر کامل،
artifactها، و handleهای rerun متمرکز، اعتبارسنجی کامل انتشار را ببینید.
گردشکارهای فرزند از مرجع قابل اعتماد اجراکنندهی Full Release Validation dispatch میشوند، معمولاً --ref main، حتی وقتی ref هدف به یک
branch یا tag انتشار قدیمیتر اشاره کند. ورودی workflow-ref جداگانهای برای Full Release Validation
وجود ندارد؛ harness قابل اعتماد را با انتخاب مرجع اجرای گردشکار انتخاب کنید.
برای اثبات commit دقیق روی main متحرک از --ref main -f ref=<sha> استفاده نکنید؛
SHAهای خام commit نمیتوانند مرجع workflow dispatch باشند، پس از
pnpm ci:full-release --sha <sha> برای ایجاد branch موقت pinشده استفاده کنید.
از release_profile برای انتخاب گسترهی live/provider استفاده کنید:
minimum: سریعترین مسیر Docker و live حیاتی انتشار برای OpenAI/corestable: minimum بهعلاوهی پوشش provider/backend پایدار برای تأیید انتشارfull: stable بهعلاوهی پوشش گستردهی provider/media مشورتی
وقتی laneهای مسدودکنندهی انتشار سبز هستند و پیش از promotion میخواهید جاروی جامع live/E2E، مسیر انتشار Docker، و
upgrade-survivor منتشرشدهی محدود را اجرا کنید، از run_release_soak=true همراه با stable استفاده کنید. آن sweep
چهار بستهی پایدار جدید بهعلاوهی baselineهای pinشدهی 2026.4.23 و 2026.5.2
و پوشش قدیمیتر 2026.4.15 را پوشش میدهد، baselineهای تکراری حذف میشوند و
هر baseline در job runner Docker خودش shard میشود. full بهطور ضمنی
run_release_soak=true را فعال میکند.
OpenClaw Release Checks از مرجع گردشکار قابل اعتماد استفاده میکند تا مرجع هدف را
یکبار بهعنوان release-package-under-test resolve کند و همان artifact را در بررسیهای بین سیستمعاملی،
Package Acceptance، و Docker مسیر انتشار هنگام اجرای soak بازاستفاده کند. این کار
همهی باکسهای بستهمحور را روی byteهای یکسان نگه میدارد و از buildهای تکراری بسته جلوگیری میکند.
install smoke بین سیستمعاملی OpenAI وقتی متغیر repo/org تنظیم شده باشد از
OPENCLAW_CROSS_OS_OPENAI_MODEL استفاده میکند، وگرنه openai/gpt-5.4، چون این lane
نصب بسته، onboarding، راهاندازی Gateway، و یک نوبت عامل زنده را اثبات میکند
نه benchmark کندترین مدل پیشفرض را. ماتریس گستردهتر provider زنده
جای پوشش مدلمحور باقی میماند.
بسته به مرحلهی انتشار از این variantها استفاده کنید:
# Validate an unpublished release candidate branch.
gh workflow run full-release-validation.yml \
--ref main \
-f ref=release/YYYY.M.D \
-f provider=openai \
-f mode=both \
-f release_profile=stable
# Validate an exact pushed commit.
gh workflow run full-release-validation.yml \
--ref main \
-f ref=<40-char-sha> \
-f provider=openai \
-f mode=both
# After publishing a beta, add published-package Telegram E2E.
gh workflow run full-release-validation.yml \
--ref main \
-f ref=release/YYYY.M.D \
-f provider=openai \
-f mode=both \
-f release_profile=full \
-f [email protected] \
-f [email protected] \
-f npm_telegram_provider_mode=mock-openai
پس از یک fix متمرکز، از umbrella کامل بهعنوان اولین rerun استفاده نکنید. اگر یک باکس
fail شد، برای proof بعدی از گردشکار فرزند failشده، job، lane Docker، profile بسته، provider مدل،
یا lane QA استفاده کنید. umbrella کامل را فقط وقتی دوباره اجرا کنید که
fix orchestration مشترک انتشار را تغییر داده باشد یا شواهد all-box قبلی را
کهنه کرده باشد. verifier نهایی umbrella شناسههای ثبتشدهی اجرای گردشکار فرزند را دوباره بررسی میکند،
پس پس از rerun موفق یک گردشکار فرزند، فقط job والد failشدهی
Verify full validation را rerun کنید.
برای بازیابی محدود، rerun_group را به umbrella بدهید. all اجرای واقعی
نامزد انتشار است، ci فقط فرزند CI معمول را اجرا میکند، plugin-prerelease
فقط فرزند Plugin مخصوص انتشار را اجرا میکند، release-checks هر باکس انتشار را اجرا میکند،
و گروههای انتشار محدودتر عبارتاند از install-smoke، cross-os،
live-e2e، package، qa، qa-parity، qa-live، و npm-telegram.
rerunهای متمرکز npm-telegram به npm_telegram_package_spec نیاز دارند؛ اجراهای full/all
با release_profile=full از artifact بستهی release-checks استفاده میکنند. rerunهای متمرکز
بین سیستمعاملی میتوانند cross_os_suite_filter=windows/packaged-upgrade یا
filter سیستمعامل/suite دیگری اضافه کنند. failureهای QA release-check مشورتی هستند؛ failure فقط QA
اعتبارسنجی انتشار را مسدود نمیکند.
Vitest
باکس Vitest همان گردشکار فرزند CI دستی است. CI دستی عمداً
scoping تغییرات را دور میزند و گراف تست معمول را برای نامزد انتشار
اجبار میکند: shardهای Linux Node، shardهای Pluginهای bundled، قراردادهای channel، سازگاری Node 22،
check، check-additional، build smoke، بررسیهای docs، Skills پایتون، Windows،
macOS، Android، و i18n Control UI.
از این باکس برای پاسخ به این پرسش استفاده کنید: «آیا درخت source، suite کامل تست معمول را پاس کرد؟» این همان اعتبارسنجی محصول در مسیر انتشار نیست. شواهدی که باید نگه دارید:
- خلاصهی
Full Release Validationکه URL اجرایCIdispatchشده را نشان میدهد - اجرای
CIسبز روی SHA هدف دقیق - نام shardهای failشده یا کند از jobهای CI هنگام بررسی regressionها
- artifactهای زمانبندی Vitest مانند
.artifacts/vitest-shard-timings.jsonوقتی یک اجرا به تحلیل performance نیاز دارد
CI دستی را فقط وقتی مستقیم اجرا کنید که انتشار به CI معمول deterministic نیاز دارد، اما نه به باکسهای Docker، QA Lab، live، بین سیستمعاملی، یا بسته:
gh workflow run ci.yml --ref main -f target_ref=release/YYYY.M.D
Docker
باکس Docker از طریق
openclaw-live-and-e2e-checks-reusable.yml در OpenClaw Release Checks قرار دارد،
بهعلاوهی گردشکار install-smoke در حالت انتشار. این باکس نامزد انتشار را از طریق محیطهای Docker بستهبندیشده
اعتبارسنجی میکند، نه فقط تستهای سطح source.
پوشش Docker انتشار شامل موارد زیر است:
- install smoke کامل با فعال بودن install smoke کند Bun global
- آمادهسازی/بازاستفادهی image smoke ریشهی Dockerfile بر اساس SHA هدف، با jobهای smoke مربوط به QR، root/gateway، و installer/Bun که بهعنوان shardهای install-smoke جدا اجرا میشوند
- laneهای E2E مخزن
- chunkهای Docker مسیر انتشار:
core،package-update-openai,package-update-anthropic،package-update-core،plugins-runtime-plugins,plugins-runtime-services,plugins-runtime-install-a،plugins-runtime-install-b,plugins-runtime-install-c،plugins-runtime-install-d,plugins-runtime-install-e،plugins-runtime-install-f,plugins-runtime-install-g، وplugins-runtime-install-h - پوشش OpenWebUI داخل chunk
plugins-runtime-servicesهنگام درخواست - laneهای split install/uninstall برای Plugin bundled
bundled-plugin-install-uninstall-0تاbundled-plugin-install-uninstall-23 - suiteهای provider زنده/E2E و پوشش مدل زندهی Docker وقتی release checks suiteهای زنده را شامل شود
پیش از rerun از artifactهای Docker استفاده کنید. scheduler مسیر انتشار
.artifacts/docker-tests/ را همراه با logهای lane، summary.json، failures.json,
زمانبندی phaseها، JSON برنامهی scheduler، و commandهای rerun upload میکند. برای بازیابی متمرکز،
بهجای rerun همهی chunkهای انتشار از docker_lanes=<lane[,lane]> روی گردشکار reusable live/E2E استفاده کنید.
commandهای rerun تولیدشده، وقتی در دسترس باشند، package_artifact_run_id قبلی و inputهای image Docker آمادهشده را شامل میشوند،
تا یک lane failشده بتواند همان tarball و imageهای GHCR را بازاستفاده کند.
QA Lab
باکس QA Lab نیز بخشی از OpenClaw Release Checks است. این باکس gate انتشار
رفتار عاملمحور و سطح channel است، جدا از مکانیک بستهی Vitest و Docker.
پوشش QA Lab انتشار شامل موارد زیر است:
- lane همارزی mock که lane نامزد OpenAI را با baseline Opus 4.6 با استفاده از agentic parity pack مقایسه میکند
- profile سریع QA زندهی Matrix با استفاده از محیط
qa-live-shared - lane QA زندهی Telegram با استفاده از leaseهای credential Convex CI
pnpm qa:otel:smokeوقتی telemetry انتشار به proof محلی صریح نیاز دارد
از این باکس برای پاسخ به این پرسش استفاده کنید: «آیا انتشار در سناریوهای QA و flowهای channel زنده درست رفتار میکند؟» هنگام تأیید انتشار، URLهای artifact را برای laneهای parity، Matrix، و Telegram نگه دارید. پوشش کامل Matrix همچنان بهعنوان اجرای QA-Lab دستی shardشده در دسترس است، نه lane پیشفرض حیاتی انتشار.
بسته
باکس بسته، gate محصول قابل نصب است. این باکس توسط
Package Acceptance و resolver
scripts/resolve-openclaw-package-candidate.mjs پشتیبانی میشود. resolver یک
candidate را به tarball package-under-test مصرفشده توسط Docker E2E normalize میکند، inventory بسته را اعتبارسنجی میکند،
نسخهی بسته و SHA-256 را ثبت میکند، و مرجع harness گردشکار را از مرجع source بسته جدا نگه میدارد.
منابع candidate پشتیبانیشده:
source=npm:openclaw@beta،openclaw@latest، یا یک نسخهی دقیق انتشار OpenClawsource=ref: یک branch، tag، یا SHA کامل commit درpackage_refقابل اعتماد را با harness انتخابشدهیworkflow_refpack کنیدsource=url: یک.tgzبا HTTPS وpackage_sha256الزامی download کنیدsource=artifact: از یک.tgzuploadشده توسط اجرای GitHub Actions دیگر بازاستفاده کنید
OpenClaw Release Checks، Package Acceptance را با source=artifact، artifact بستهی انتشار آمادهشده،
suite_profile=custom,
docker_lanes=doctor-switch update-channel-switch upgrade-survivor published-upgrade-survivor update-restart-auth plugins-offline plugin-update,
telegram_mode=mock-openai اجرا میکند. Package Acceptance، migration، update،
restart update با auth پیکربندیشده، cleanup وابستگی Plugin stale، fixtureهای Plugin offline،
update Plugin، و QA بسته Telegram را در برابر همان tarball resolveشده نگه میدارد.
release checks مسدودکننده از baseline پیشفرض آخرین بستهی منتشرشده استفاده میکنند؛
run_release_soak=true یا
release_profile=full به هر baseline پایدار منتشرشده در npm از
2026.4.23 تا latest بهعلاوهی fixtureهای issue گزارششده گسترش مییابد. برای یک candidate که قبلاً منتشر شده است،
از Package Acceptance با source=npm استفاده کنید، یا پیش از publish برای tarball npm محلی متکی به SHA
از source=ref/source=artifact استفاده کنید. این جایگزین native GitHub
برای بیشتر پوشش package/update است که قبلاً به Parallels نیاز داشت.
بررسیهای انتشار بین سیستمعاملی همچنان برای onboarding، installer، و رفتار platform ویژهی OS مهم هستند،
اما اعتبارسنجی محصول package/update باید Package Acceptance را ترجیح دهد.
چکلیست canonical برای اعتبارسنجی update و Plugin
تست updateها و Pluginها است. هنگام تصمیمگیری اینکه کدام lane محلی، Docker، Package Acceptance،
یا release-check یک install/update Plugin، cleanup doctor، یا تغییر migration بستهی منتشرشده را اثبات میکند،
از آن استفاده کنید.
migration جامع update منتشرشده از هر بستهی پایدار 2026.4.23+
یک گردشکار دستی جداگانهی Update Migration است، نه بخشی از Full Release CI.
مدارای قدیمی پذیرش بسته عمدا زمانبندی محدود دارد. بستهها تا
2026.4.25 میتوانند برای شکافهای فرادادهای که از قبل در npm منتشر شدهاند
از مسیر سازگاری استفاده کنند: ورودیهای موجودی QA خصوصی که در tarball وجود ندارند، نبود
gateway install --wrapper، نبود فایلهای patch در fixture گیت مشتقشده از tarball، نبود
update.channel پایدارشده، مکانهای قدیمی رکورد نصب plugin، نبود پایداری رکورد نصب marketplace، و مهاجرت فراداده پیکربندی هنگام plugins update. بسته منتشرشده 2026.4.26 ممکن است
برای فایلهای stamp فراداده ساخت محلی که از قبل منتشر شده بودند هشدار دهد. بستههای بعدی
باید قراردادهای مدرن بسته را برآورده کنند؛ همان شکافها اعتبارسنجی انتشار را ناموفق میکنند.
وقتی پرسش انتشار درباره یک بسته واقعا قابل نصب است، از پروفایلهای گستردهتر 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 بدون ClawHub زنده؛ این پیشفرض بررسی انتشار استproduct:packageبههمراه کانالهای MCP، پاکسازی cron/subagent، جستوجوی وب OpenAI، و OpenWebUIfull: قطعههای مسیر انتشار Docker با OpenWebUIcustom: فهرست دقیقdocker_lanesبرای اجرای دوباره متمرکز
برای اثبات Telegram نامزد بسته، telegram_mode=mock-openai یا
telegram_mode=live-frontier را در Package Acceptance فعال کنید. workflow،
tarball حلشده package-under-test را به مسیر Telegram میدهد؛ workflow مستقل
Telegram همچنان برای بررسیهای پس از انتشار یک مشخصات npm منتشرشده را میپذیرد.
خودکارسازی انتشار
OpenClaw Release Publish نقطه ورود معمول انتشار تغییردهنده است. این workflowهای trusted-publisher را به ترتیبی که انتشار نیاز دارد هماهنگ میکند:
- tag انتشار را checkout کرده و commit SHA آن را حل کنید.
- بررسی کنید tag از
mainیاrelease/*قابل دسترسی باشد. pnpm plugins:sync:checkرا اجرا کنید.Plugin NPM Releaseرا باpublish_scope=all-publishableوref=<release-sha>dispatch کنید.Plugin ClawHub Releaseرا با همان scope و SHA dispatch کنید.OpenClaw NPM Releaseرا با tag انتشار، dist-tag در npm، وpreflight_run_idذخیرهشده dispatch کنید.
نمونه انتشار بتا:
gh workflow run openclaw-release-publish.yml \
--ref release/YYYY.M.D \
-f tag=vYYYY.M.D-beta.N \
-f preflight_run_id=<successful-openclaw-npm-preflight-run-id> \
-f npm_dist_tag=beta
انتشار پایدار به dist-tag پیشفرض بتا:
gh workflow run openclaw-release-publish.yml \
--ref release/YYYY.M.D \
-f tag=vYYYY.M.D \
-f preflight_run_id=<successful-openclaw-npm-preflight-run-id> \
-f npm_dist_tag=beta
ارتقای پایدار مستقیما به latest صریح است:
gh workflow run openclaw-release-publish.yml \
--ref release/YYYY.M.D \
-f tag=vYYYY.M.D \
-f preflight_run_id=<successful-openclaw-npm-preflight-run-id> \
-f npm_dist_tag=latest
از workflowهای سطح پایینتر Plugin NPM Release و Plugin ClawHub Release
فقط برای کار تعمیر یا انتشار دوباره متمرکز استفاده کنید. برای تعمیر یک plugin انتخابشده،
plugin_publish_scope=selected و plugins=@openclaw/name را به
OpenClaw Release Publish بدهید، یا وقتی بسته OpenClaw نباید منتشر شود،
workflow فرزند را مستقیم dispatch کنید.
ورودیهای workflow مربوط به NPM
OpenClaw NPM Release این ورودیهای کنترلشده توسط اپراتور را میپذیرد:
tag: tag انتشار الزامی مانندv2026.4.2،v2026.4.2-1، یاv2026.4.2-beta.1؛ وقتیpreflight_only=trueباشد، برای preflight فقط جهت اعتبارسنجی میتواند SHA کامل ۴۰ کاراکتری commit فعلی شاخه workflow نیز باشدpreflight_only:trueبرای فقط اعتبارسنجی/ساخت/بسته،falseبرای مسیر انتشار واقعیpreflight_run_id: در مسیر انتشار واقعی الزامی است تا workflow از tarball آمادهشده از اجرای preflight موفق دوباره استفاده کندnpm_dist_tag: tag هدف npm برای مسیر انتشار؛ پیشفرضbetaاست
OpenClaw Release Publish این ورودیهای کنترلشده توسط اپراتور را میپذیرد:
tag: tag انتشار الزامی؛ باید از قبل وجود داشته باشدpreflight_run_id: شناسه اجرای preflight موفقOpenClaw NPM Release؛ وقتیpublish_openclaw_npm=trueباشد الزامی استnpm_dist_tag: tag هدف npm برای بسته OpenClawplugin_publish_scope: پیشفرضall-publishableاست؛ فقط برای کار تعمیر متمرکز ازselectedاستفاده کنیدplugins: نام بستههای@openclaw/*جداشده با ویرگول، وقتیplugin_publish_scope=selectedباشدpublish_openclaw_npm: پیشفرضtrueاست؛ فقط وقتی workflow را بهعنوان هماهنگکننده تعمیر فقط plugin به کار میبرید، آن راfalseتنظیم کنید
OpenClaw Release Checks این ورودیهای کنترلشده توسط اپراتور را میپذیرد:
ref: شاخه، tag، یا SHA کامل commit برای اعتبارسنجی. بررسیهای دارای secret نیاز دارند commit حلشده از یک شاخه OpenClaw یا tag انتشار قابل دسترسی باشد.run_release_soak: فعالسازی soak کامل live/E2E، مسیر انتشار Docker، و upgrade-survivor از ابتدای تاریخچه در بررسیهای انتشار پایدار/پیشفرض. باrelease_profile=fullاجباری فعال میشود.
قواعد:
- tagهای پایدار و اصلاحی میتوانند به
betaیاlatestمنتشر شوند - tagهای prerelease بتا فقط میتوانند به
betaمنتشر شوند - برای
OpenClaw NPM Release، ورودی SHA کامل commit فقط وقتی مجاز است کهpreflight_only=trueباشد OpenClaw Release ChecksوFull Release Validationهمیشه فقط اعتبارسنجی هستند- مسیر انتشار واقعی باید از همان
npm_dist_tagاستفاده کند که هنگام preflight استفاده شده است؛ workflow پیش از ادامه انتشار، آن فراداده را بررسی میکند
توالی انتشار پایدار npm
هنگام آمادهسازی یک انتشار پایدار npm:
OpenClaw NPM Releaseرا باpreflight_only=trueاجرا کنید- پیش از وجود tag، میتوانید برای اجرای آزمایشی بدون انتشار و فقط جهت اعتبارسنجی workflow preflight، از SHA کامل commit فعلی شاخه workflow استفاده کنید
- برای جریان معمول بتا-اول،
npm_dist_tag=betaرا انتخاب کنید، یا فقط وقتی عمدا انتشار مستقیم پایدار میخواهیدlatestرا انتخاب کنید - وقتی از یک workflow دستی پوشش عادی CI بههمراه live prompt cache، Docker، QA Lab،
Matrix، و Telegram میخواهید،
Full Release Validationرا روی شاخه انتشار، tag انتشار، یا SHA کامل commit اجرا کنید - اگر عمدا فقط به گراف آزمون عادی قطعی نیاز دارید، بهجای آن workflow دستی
CIرا روی ref انتشار اجرا کنید preflight_run_idموفق را ذخیره کنیدOpenClaw Release Publishرا با همانtag، همانnpm_dist_tag، وpreflight_run_idذخیرهشده اجرا کنید؛ این کار pluginهای externalized را پیش از ارتقای بسته npm OpenClaw به npm و ClawHub منتشر میکند- اگر انتشار روی
betaقرار گرفت، از workflow خصوصیopenclaw/releases-private/.github/workflows/openclaw-npm-dist-tags.ymlبرای ارتقای آن نسخه پایدار ازbetaبهlatestاستفاده کنید - اگر انتشار عمدا مستقیم به
latestمنتشر شد وbetaباید فورا همان ساخت پایدار را دنبال کند، از همان workflow خصوصی استفاده کنید تا هر دو dist-tag را به نسخه پایدار اشاره دهد، یا اجازه دهید همگامسازی خودترمیمی زمانبندیشده آن بعداbetaرا جابهجا کند
تغییر dist-tag بهدلیل امنیت در مخزن خصوصی قرار دارد، چون همچنان به
NPM_TOKEN نیاز دارد، درحالیکه مخزن عمومی انتشار فقط مبتنی بر OIDC را نگه میدارد.
این کار باعث میشود مسیر انتشار مستقیم و مسیر ارتقای بتا-اول، هر دو مستند و برای اپراتور قابل مشاهده باشند.
اگر maintainer ناچار شود به احراز هویت محلی npm برگردد، هر فرمان 1Password
CLI (op) را فقط داخل یک جلسه اختصاصی tmux اجرا کنید. op را مستقیم از shell اصلی agent
فراخوانی نکنید؛ نگهداشتن آن داخل tmux باعث میشود promptها، هشدارها، و رسیدگی به 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
Maintainerها برای runbook واقعی از مستندات انتشار خصوصی در
openclaw/maintainers/release/README.md
استفاده میکنند.