Release and CI
Політика випусків
OpenClaw має три публічні канали випусків:
- stable: теговані випуски, які за замовчуванням публікуються в npm
beta, або в npmlatest, коли це явно запитано - beta: теги попередніх випусків, які публікуються в npm
beta - dev: рухома верхівка
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означає поточну ціль установлення beta- Стабільні та застарілі коригувальні випуски за замовчуванням публікуються в npm
beta; оператори випуску можуть явно націлитиlatestабо пізніше просунути перевірену beta-збірку - Кожен стабільний випуск OpenClaw постачається разом із npm-пакетом і застосунком macOS; beta-випуски зазвичай спершу перевіряють і публікують npm/package-шлях, а збирання/підписування/нотаризацію застосунку Mac залишають для стабільних випусків, якщо інше явно не запитано
Заплановане щомісячне версіонування підтримки
OpenClaw ще не має LTS або щомісячного каналу підтримки. Супровідники
працюють над щомісячними лініями підтримки, сумісними із SemVer, але поточні
канали оновлень, що постачаються сьогодні, усе ще є stable, beta і dev.
Запланована форма версії: YYYY.M.PATCH:
YYYY— це рік.M— це місячна лінія випуску, без початкового нуля.PATCHзбільшується в межах цієї місячної лінії й може зростати настільки, наскільки потрібно.
Наприклад, 2026.6.0, 2026.6.1 і 2026.6.2 усі були б у червневій
лінії 2026 року. Майбутній щомісячний dist-tag підтримки, як-от stable-2026-6 або
lts-2026-6, може вказувати на цю лінію, тоді як latest і надалі швидко рухатиметься.
Ця майбутня модель замінює потребу в нових коригувальних випусках YYYY.M.D-N.
Наявні застарілі коригувальні версії залишаються розпізнаваними, щоб старіші пакети та
шляхи оновлення продовжували працювати.
Каденція випусків
- Випуски рухаються спершу через beta
- Stable іде лише після перевірки останньої beta
- Супровідники зазвичай створюють випуски з гілки
release/YYYY.M.D, створеної з поточногоmain, щоб перевірка випуску та виправлення не блокували нову розробку вmain - Якщо beta-тег уже надіслано або опубліковано й він потребує виправлення, супровідники створюють
наступний тег
-beta.Nзамість видалення або повторного створення старого beta-тега - Докладна процедура випуску, затвердження, облікові дані та нотатки з відновлення доступні лише супровідникам
Контрольний список оператора випуску
Цей контрольний список є публічною формою потоку випуску. Приватні облікові дані, підписування, нотаризація, відновлення dist-tag і деталі аварійного відкату залишаються в runbook випуску лише для супровідників.
- Почніть із поточного
main: витягніть останні зміни, підтвердьте, що цільовий коміт надіслано, і підтвердьте, що поточний CImainдостатньо зелений, щоб створити від нього гілку. - Перепишіть верхній розділ
CHANGELOG.mdз реальної історії комітів за допомогою/changelog, залишайте записи орієнтованими на користувача, закомітьте його, надішліть його й виконайте rebase/pull ще раз перед створенням гілки. - Перегляньте записи сумісності випуску в
src/plugins/compat/registry.tsіsrc/commands/doctor/shared/deprecation-compat.ts. Видаляйте прострочену сумісність лише тоді, коли шлях оновлення лишається покритим, або зафіксуйте, чому її навмисно збережено. - Створіть
release/YYYY.M.Dз поточногоmain; не виконуйте звичайну роботу з випуску безпосередньо вmain. - Підвищте версію в кожному потрібному місці для запланованого тега, запустіть
pnpm plugins:sync, щоб пакети Plugin, доступні для публікації, мали спільну версію випуску та метадані сумісності, потім запустіть локальну детерміновану попередню перевірку: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. До існування тега для перевірки-only попередньої перевірки дозволено повний 40-символьний SHA гілки випуску. Збережіть успішнийpreflight_run_id. - Запустіть усі передрелізні тести через
Full Release Validationдля гілки випуску, тега або повного SHA коміту. Це єдина ручна точка входу для чотирьох великих тестових боксів випуску: Vitest, Docker, QA Lab і Package. - Якщо перевірка не пройшла, виправте в гілці випуску й повторно запустіть найменший невдалий файл, канал, завдання workflow, профіль пакета, провайдера або allowlist моделей, що доводить виправлення. Повторно запускайте повну парасольку лише тоді, коли змінена поверхня робить попередні докази застарілими.
- Для beta позначте
vYYYY.M.D-beta.N, потім запустітьOpenClaw Release Publishз відповідної гілкиrelease/YYYY.M.D. Він перевіряєpnpm plugins:sync:check, паралельно відправляє всі пакети Plugin, доступні для публікації, у npm і той самий набір у ClawHub, а потім просуває підготовлений артефакт попередньої перевірки OpenClaw npm з відповідним dist-tag, щойно публікація Plugin в npm успішно завершується. Публікація в ClawHub усе ще може виконуватися, поки OpenClaw npm публікується, але workflow публікації випуску не завершується, доки обидва шляхи публікації Plugin і шлях публікації OpenClaw npm не завершаться успішно. Після публікації запустіть післяпублікаційне приймання пакета для опублікованого пакета[email protected]абоopenclaw@beta. Якщо надісланий або опублікований попередній випуск потребує виправлення, створіть наступний відповідний номер попереднього випуску; не видаляйте й не перезаписуйте старий попередній випуск. - Для stable продовжуйте лише після того, як перевірена beta або release candidate має
потрібні докази перевірки. Публікація stable в npm також проходить через
OpenClaw Release Publish, повторно використовуючи успішний артефакт попередньої перевірки черезpreflight_run_id; готовність stable-випуску macOS також потребує упакованих.zip,.dmg,.dSYM.zipі оновленогоappcast.xmlуmain. - Після публікації запустіть післяпублікаційний перевіряльник npm, необов’язковий окремий
E2E Telegram для опублікованого npm, коли вам потрібен післяпублікаційний доказ каналу,
просування dist-tag за потреби, нотатки GitHub release/prerelease з
повного відповідного розділу
CHANGELOG.mdі кроки оголошення випуску.
Попередня перевірка випуску
- Запустіть
pnpm check:test-typesперед передрелізним preflight, щоб тестовий TypeScript залишався покритим поза швидшим локальним gatepnpm check - Запустіть
pnpm check:architectureперед передрелізним preflight, щоб ширші перевірки циклів імпортів і архітектурних меж були зеленими поза швидшим локальним gate - Запустіть
pnpm build && pnpm ui:buildпередpnpm release:check, щоб очікувані релізні артефактиdist/*і bundle Control UI існували для кроку валідації pack - Запустіть
pnpm plugins:syncпісля bump версії в корені та перед тегуванням. Він оновлює версії пакетів Plugin, які можна публікувати, metadata сумісності OpenClaw peer/API, build metadata і stub-и changelog Plugin відповідно до версії core-релізу.pnpm plugins:sync:checkє немутувальним release guard; publish workflow падає до будь-якої мутації registry, якщо цей крок було забуто. - Запустіть ручний workflow
Full Release Validationперед схваленням релізу, щоб запустити всі передрелізні test boxes з однієї точки входу. Він приймає branch, tag або повний commit SHA, dispatch-ить ручнийCIі dispatch-итьOpenClaw Release Checksдля install smoke, package acceptance, cross-OS package checks, QA Lab parity, Matrix і Telegram lanes. Stable/default runs тримають вичерпні live/E2E і Docker release-path soak заrun_release_soak=true;release_profile=fullпримусово вмикає soak. Зrelease_profile=fullіrerun_group=allвін також запускає package Telegram E2E проти артефактуrelease-package-under-testз release checks. Надайтеnpm_telegram_package_specпісля публікації, коли той самий Telegram E2E має також підтвердити опублікований npm-пакет. Надайтеpackage_acceptance_package_specпісля публікації, коли Package Acceptance має виконати свою package/update matrix проти відвантаженого npm-пакета замість артефакту, зібраного з SHA. Надайтеevidence_package_spec, коли приватний evidence report має підтвердити, що валідація відповідає опублікованому npm-пакету, без примусового Telegram E2E. Приклад:gh workflow run full-release-validation.yml --ref main -f ref=release/YYYY.M.D - Запустіть ручний workflow
Package Acceptance, коли потрібне side-channel підтвердження для package candidate, поки релізна робота триває. Використовуйтеsource=npmдляopenclaw@beta,openclaw@latestабо точної релізної версії;source=refдля pack довіреного branch/tag/SHApackage_refз поточним harnessworkflow_ref;source=urlдля HTTPS tarball з обов’язковим SHA-256; абоsource=artifactдля tarball, завантаженого іншим GitHub Actions run. Workflow resolve-ить candidate уpackage-under-test, повторно використовує Docker E2E release scheduler проти цього tarball і може запускати Telegram QA проти того самого tarball зtelegram_mode=mock-openaiабоtelegram_mode=live-frontier. Коли вибрані Docker lanes містятьpublished-upgrade-survivor, package artifact є candidate, аpublished_upgrade_survivor_baselineвибирає опублікований baseline.update-restart-authвикористовує candidate package як встановлений CLI і як package-under-test, щоб перевірити managed restart path команди update candidate. Приклад:gh workflow run package-acceptance.yml --ref main -f workflow_ref=main -f source=npm -f package_spec=openclaw@beta -f suite_profile=product -f [email protected] -f telegram_mode=mock-openaiПоширені profiles:smoke: install/channel/agent, gateway network і config reload lanespackage: artifact-native package/update/restart/plugin lanes без OpenWebUI або live ClawHubproduct: package profile плюс MCP channels, cron/subagent cleanup, OpenAI web search і OpenWebUIfull: Docker release-path chunks з OpenWebUIcustom: точний вибірdocker_lanesдля сфокусованого rerun
- Запустіть ручний workflow
CIнапряму, коли потрібне лише повне звичайне CI coverage для release candidate. Ручні CI dispatch-и обходять changed scoping і примусово запускають Linux Node shards, bundled-plugin shards, channel contracts, Node 22 compatibility,check,check-additional, build smoke, docs checks, Python skills, Windows, macOS, Android і Control UI i18n lanes. Приклад:gh workflow run ci.yml --ref release/YYYY.M.D - Запустіть
pnpm qa:otel:smokeпід час валідації release telemetry. Він перевіряє QA-lab через локальний OTLP/HTTP receiver і верифікує експортовані імена trace span, bounded attributes і редагування content/identifier без потреби в Opik, Langfuse або іншому зовнішньому collector. - Запускайте
pnpm release:checkперед кожним tagged release - Запустіть
OpenClaw Release Publishдля мутувальної послідовності publish після того, як tag існує. Dispatch-іть його зrelease/YYYY.M.D(абоmain, коли публікується tag, reachable з main), передайте release tag і успішний OpenClaw npmpreflight_run_id, і залишайте стандартний plugin publish scopeall-publishable, якщо ви не запускаєте свідомо сфокусований repair. Workflow серіалізує plugin npm publish, plugin ClawHub publish і OpenClaw npm publish, щоб core package не був опублікований раніше за свої externalized plugins. - Release checks тепер виконуються в окремому ручному workflow:
OpenClaw Release Checks OpenClaw Release Checksтакож запускає QA Lab mock parity lane плюс швидкий live Matrix profile і Telegram QA lane перед схваленням релізу. Live lanes використовують середовищеqa-live-shared; Telegram також використовує Convex CI credential leases. Запустіть ручний workflowQA-Lab - All Lanesзmatrix_profile=allіmatrix_shards=true, коли потрібен повний Matrix transport, media і E2EE inventory паралельно.- Cross-OS install і upgrade runtime validation є частиною публічних
OpenClaw Release ChecksіFull Release Validation, які викликають reusable workflow.github/workflows/openclaw-cross-os-release-checks-reusable.ymlнапряму - Цей поділ навмисний: тримайте реальний npm release path коротким, deterministic і зосередженим на artifact, тоді як повільніші live checks залишаються у власному lane, щоб вони не затримували й не блокували publish
- Release checks, що містять secrets, слід dispatch-ити через
Full Release Validationабо з workflow refmain/release, щоб workflow logic і secrets залишалися контрольованими OpenClaw Release Checksприймає branch, tag або повний commit SHA, якщо resolved commit reachable з branch OpenClaw або release tag- Validation-only preflight
OpenClaw NPM Releaseтакож приймає поточний повний 40-символьний workflow-branch commit SHA без вимоги pushed tag - Цей SHA path призначений лише для validation і не може бути promoted у реальний publish
- У SHA mode workflow синтезує
v<package.json version>лише для package metadata check; real publish усе одно вимагає реального release tag - Обидва workflows залишають реальний publish і promotion path на GitHub-hosted runners, тоді як немутувальний validation path може використовувати більші Blacksmith Linux runners
- Цей workflow запускає
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_CACHE_TEST=1 pnpm test:live:cacheз використанням обох workflow secretsOPENAI_API_KEYіANTHROPIC_API_KEY - npm release preflight більше не чекає на окремий release checks lane
- Запустіть
RELEASE_TAG=vYYYY.M.D node --import tsx scripts/openclaw-npm-release-check.ts(або відповідний beta/correction tag) перед схваленням - Після npm publish запустіть
node --import tsx scripts/openclaw-npm-postpublish-verify.ts YYYY.M.D(або відповідну beta/correction version), щоб перевірити published registry install path у свіжому temp prefix - Після beta publish запустіть
[email protected] OPENCLAW_NPM_TELEGRAM_CREDENTIAL_SOURCE=convex OPENCLAW_NPM_TELEGRAM_CREDENTIAL_ROLE=ci pnpm test:docker:npm-telegram-liveщоб перевірити installed-package onboarding, налаштування Telegram і реальний Telegram E2E проти опублікованого npm-пакета з використанням спільного leased Telegram credential pool. Локальні одноразові запуски maintainer-ів можуть опустити Convex vars і передати три env credentialsOPENCLAW_QA_TELEGRAM_*напряму. - Щоб запустити повний post-publish beta smoke з машини maintainer-а, використовуйте
pnpm release:beta-smoke -- --beta betaN. Helper запускає Parallels npm update/fresh-target validation, dispatch-итьNPM Telegram Beta E2E, poll-ить точний workflow run, завантажує artifact і друкує Telegram report. - Maintainer-и можуть запустити той самий post-publish check з GitHub Actions через
ручний workflow
NPM Telegram Beta E2E. Він навмисно manual-only і не виконується на кожному merge. - Maintainer release automation тепер використовує preflight-then-promote:
- real npm publish має пройти успішний npm
preflight_run_id - real npm publish має бути dispatched з того самого branch
mainабоrelease/YYYY.M.D, що й успішний preflight run - stable npm releases за замовчуванням використовують
beta - stable npm publish може цілитися в
latestявно через workflow input - token-based npm dist-tag mutation тепер міститься в
openclaw/releases-private/.github/workflows/openclaw-npm-dist-tags.ymlз міркувань безпеки, оскількиnpm dist-tag addдосі потребуєNPM_TOKEN, тоді як public repo зберігає OIDC-only publish - public
macOS Releaseє validation-only; коли tag існує лише на release branch, але workflow dispatched зmain, задайтеpublic_release_branch=release/YYYY.M.D - real private mac publish має пройти успішні private mac
preflight_run_idіvalidate_run_id - real publish paths promote-ять підготовлені artifacts замість того, щоб rebuild-ити їх знову
- real npm publish має пройти успішний npm
- Для legacy stable correction releases на кшталт
YYYY.M.D-Npost-publish verifier також перевіряє той самий temp-prefix upgrade path зYYYY.M.DдоYYYY.M.D-N, щоб release corrections не могли непомітно залишити старіші global installs на базовому stable payload - npm release preflight fail-иться closed, якщо tarball не містить обидва
dist/control-ui/index.htmlі непорожній payloaddist/control-ui/assets/, щоб ми знову не відвантажили порожній browser dashboard - Post-publish verification також перевіряє, що published plugin entrypoints і
package metadata присутні у встановленому registry layout. Release, який
відвантажує відсутні plugin runtime payloads, провалює postpublish verifier і
не може бути promoted до
latest. pnpm test:install:smokeтакож enforce-ить budget npm packunpackedSizeна candidate update tarball, тому installer e2e ловить випадкове pack bloat до release publish path- Якщо release work торкалася CI planning, extension timing manifests або
extension test matrices, regenerate і review planner-owned
outputs matrix
plugin-prerelease-extension-shardз.github/workflows/plugin-prerelease.ymlперед схваленням, щоб release notes не описували застарілий CI layout - Готовність stable macOS release також включає updater surfaces:
- GitHub release має зрештою містити packaged
.zip,.dmgі.dSYM.zip appcast.xmlнаmainмає вказувати на новий stable zip після publish- packaged app має зберігати non-debug bundle id, непорожній Sparkle feed
URL і
CFBundleVersionна рівні або вище canonical Sparkle build floor для цієї release version
- GitHub release має зрештою містити packaged
Release test boxes
Full Release Validation — це спосіб, яким operators запускають усі передрелізні tests з
однієї точки входу. Для pinned commit proof на branch, що швидко рухається, використовуйте
helper, щоб кожен child workflow запускався з тимчасового branch, зафіксованого на target
SHA:
pnpm ci:full-release --sha <full-sha>
Helper push-ить release-ci/<sha>-..., dispatch-ить Full Release Validation
з цього branch з ref=<sha>, перевіряє, що кожен child workflow headSha
відповідає target, а потім видаляє тимчасовий branch. Це запобігає випадковому підтвердженню
новішого child run з main.
Для validation 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]
Workflow визначає цільовий ref, запускає ручний CI з
target_ref=<release-ref>, запускає OpenClaw Release Checks, готує
батьківський артефакт release-package-under-test для перевірок, орієнтованих
на пакет, і запускає окремий пакетний Telegram E2E, коли release_profile=full з
rerun_group=all або коли задано npm_telegram_package_spec. Далі OpenClaw Release Checks розгалужується на install smoke, міжплатформні перевірки релізу,
live/E2E Docker-покриття шляху релізу, коли ввімкнено soak, Package Acceptance з
пакетним QA Telegram, QA Lab parity, live Matrix і live Telegram. Повний запуск прийнятний лише тоді, коли
підсумок Full Release Validation
показує normal_ci і release_checks як успішні. У режимі full/all
дочірній npm_telegram також має бути успішним; поза full/all його пропускають,
якщо не було надано опублікований npm_telegram_package_spec. Фінальний
підсумок verifier містить таблиці найповільніших завдань для кожного дочірнього
запуску, щоб release manager міг бачити поточний критичний шлях без завантаження
логів.
Див. Повна валідація релізу, щоб переглянути
повну матрицю етапів, точні назви завдань workflow, відмінності між профілями
stable і full, артефакти та цільові механізми повторного запуску.
Дочірні workflows запускаються з довіреного ref, який запускає Full Release Validation, зазвичай --ref main, навіть коли цільовий ref указує на
старішу релізну гілку або тег. Окремого workflow-ref входу для Full Release Validation
немає; вибирайте довірений harness, вибираючи ref запуску workflow.
Не використовуйте --ref main -f ref=<sha> для точного доказу коміту на рухомому main;
сирі SHA комітів не можуть бути workflow dispatch refs, тому використовуйте
pnpm ci:full-release --sha <sha>, щоб створити зафіксовану тимчасову гілку.
Використовуйте release_profile, щоб вибрати ширину live/provider-покриття:
minimum: найшвидший релізно-критичний live і Docker шлях OpenAI/corestable: minimum плюс стабільне покриття provider/backend для схвалення релізуfull: stable плюс широке advisory-покриття provider/media
Використовуйте run_release_soak=true зі stable, коли релізно-блокувальні лінії
зелені й потрібен вичерпний live/E2E, Docker release-path і
обмежений sweep published upgrade-survivor перед просуванням. Цей sweep покриває
останні чотири stable-пакети плюс зафіксовані базові лінії 2026.4.23 і 2026.5.2
плюс старіше покриття 2026.4.15, із вилученими дубльованими базовими лініями та
шардуванням кожної базової лінії в окреме завдання Docker runner. full передбачає
run_release_soak=true.
OpenClaw Release Checks використовує довірений workflow ref, щоб один раз визначити цільовий
ref як release-package-under-test і повторно використовує цей артефакт у cross-OS,
Package Acceptance і Docker-перевірках release-path, коли виконується soak. Це утримує
всі бокси, орієнтовані на пакет, на тих самих байтах і уникає повторних збірок пакета.
Cross-OS OpenAI install smoke використовує OPENCLAW_CROSS_OS_OPENAI_MODEL, коли
змінну repo/org задано, інакше openai/gpt-5.4, бо ця лінія
доводить інсталяцію пакета, onboarding, запуск Gateway і один live-хід агента,
а не бенчмарк найповільнішої моделі за замовчуванням. Ширша live-матриця provider
залишається місцем для model-specific покриття.
Використовуйте ці варіанти залежно від етапу релізу:
# 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
Не використовуйте повну парасольку як перший повторний запуск після цільового виправлення. Якщо один box
падає, використовуйте невдалий дочірній workflow, завдання, Docker-лінію, профіль пакета, model
provider або QA-лінію для наступного доказу. Запускайте повну парасольку знову лише тоді,
коли виправлення змінило спільну оркестрацію релізу або зробило попередні докази all-box
застарілими. Фінальний verifier парасольки повторно перевіряє записані id запусків дочірніх workflow,
тому після успішного повторного запуску дочірнього workflow повторно запускайте лише невдале
батьківське завдання Verify full validation.
Для обмеженого відновлення передайте rerun_group у парасольку. all є справжнім
запуском release-candidate, ci запускає лише звичайний дочірній CI, plugin-prerelease
запускає лише release-only дочірній Plugin, release-checks запускає кожен release
box, а вужчі релізні групи: install-smoke, cross-os,
live-e2e, package, qa, qa-parity, qa-live і npm-telegram.
Цільові повторні запуски npm-telegram потребують npm_telegram_package_spec; запуски full/all
з release_profile=full використовують пакетний артефакт release-checks. Цільові
cross-OS повторні запуски можуть додавати cross_os_suite_filter=windows/packaged-upgrade або
інший фільтр OS/suite. Невдачі QA release-check є advisory; QA-only
невдача не блокує валідацію релізу.
Vitest
Vitest box — це ручний дочірній workflow CI. Ручний CI навмисно
оминає changed scoping і примусово запускає звичайний тестовий граф для release
candidate: Linux Node shards, bundled-plugin shards, channel contracts, сумісність Node 22,
check, check-additional, build smoke, docs checks, Python
skills, Windows, macOS, Android і Control UI i18n.
Використовуйте цей box, щоб відповісти на запитання "чи пройшло дерево вихідного коду повний звичайний набір тестів?" Це не те саме, що product validation release-path. Докази, які слід зберігати:
- підсумок
Full Release Validation, що показує URL запущеногоCI - зелений запуск
CIна точному цільовому SHA - назви невдалих або повільних шардів із завдань CI під час розслідування регресій
- артефакти таймінгів Vitest, як-от
.artifacts/vitest-shard-timings.json, коли запуск потребує аналізу продуктивності
Запускайте ручний CI напряму лише тоді, коли релізу потрібен детермінований звичайний CI, але не Docker, QA Lab, live, cross-OS або package boxes:
gh workflow run ci.yml --ref main -f target_ref=release/YYYY.M.D
Docker
Docker box живе в OpenClaw Release Checks через
openclaw-live-and-e2e-checks-reusable.yml, а також у release-mode
workflow install-smoke. Він валідовує release candidate через packaged
Docker-середовища, а не лише source-level тести.
Покриття Release Docker включає:
- повний install smoke із увімкненим повільним Bun global install smoke
- підготовку/повторне використання root Dockerfile smoke image за цільовим SHA, де QR, root/gateway і installer/Bun smoke завдання виконуються як окремі install-smoke shards
- E2E-лінії репозиторію
- Docker chunks release-path:
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, коли його запитано - розділені bundled Plugin install/uninstall лінії
bundled-plugin-install-uninstall-0throughbundled-plugin-install-uninstall-23 - live/E2E provider suites і Docker live model покриття, коли release checks включають live suites
Використовуйте артефакти Docker перед повторним запуском. Планувальник release-path завантажує
.artifacts/docker-tests/ з логами ліній, summary.json, failures.json,
таймінгами фаз, JSON плану планувальника та командами повторного запуску. Для цільового відновлення
використовуйте docker_lanes=<lane[,lane]> у reusable live/E2E workflow замість
повторного запуску всіх release chunks. Згенеровані команди повторного запуску включають попередні
package_artifact_run_id і підготовлені входи Docker image, коли доступні, щоб
невдала лінія могла повторно використати той самий tarball і GHCR images.
QA Lab
QA Lab box також є частиною OpenClaw Release Checks. Це agentic
behavior і channel-level release gate, окремий від Vitest і Docker
package mechanics.
Покриття Release QA Lab включає:
- лінію mock parity, що порівнює OpenAI candidate lane з базовою лінією Opus 4.6 за допомогою agentic parity pack
- швидкий live Matrix QA profile із використанням середовища
qa-live-shared - live Telegram QA lane із використанням оренд облікових даних Convex CI
pnpm qa:otel:smoke, коли release telemetry потребує явного локального доказу
Використовуйте цей box, щоб відповісти на запитання "чи реліз поводиться правильно у QA-сценаріях і live channel flows?" Зберігайте URL артефактів для parity, Matrix і Telegram ліній під час схвалення релізу. Повне покриття Matrix залишається доступним як ручний sharded QA-Lab run, а не як стандартна release-critical лінія.
Пакет
Package box — це gate інстальованого продукту. Він спирається на
Package Acceptance і resolver
scripts/resolve-openclaw-package-candidate.mjs. Resolver нормалізує
candidate у tarball package-under-test, який споживає Docker E2E, валідовує
інвентар пакета, записує версію пакета та SHA-256 і зберігає
workflow harness ref окремо від package source ref.
Підтримувані джерела candidate:
source=npm:openclaw@beta,openclaw@latestабо точна версія релізу OpenClawsource=ref: pack довірену гілкуpackage_ref, тег або повний SHA коміту з вибраним harnessworkflow_refsource=url: завантажити HTTPS.tgzз обов'язковимpackage_sha256source=artifact: повторно використати.tgz, завантажений іншим запуском GitHub Actions
OpenClaw Release Checks запускає Package Acceptance із source=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,
configured-auth update restart, stale Plugin dependency cleanup, offline Plugin
fixtures, Plugin update і Telegram package QA на тому самому визначеному
tarball. Блокувальні release checks використовують стандартну latest published package
baseline; run_release_soak=true або
release_profile=full розширює покриття до кожної stable npm-published baseline від
2026.4.23 до latest плюс reported-issue fixtures. Використовуйте
Package Acceptance із source=npm для вже випущеного candidate або
source=ref/source=artifact для SHA-backed local npm tarball перед
публікацією. Це GitHub-native
заміна для більшості package/update покриття, яке раніше потребувало
Parallels. Cross-OS release checks досі важливі для OS-specific onboarding,
installer і platform behavior, але product validation package/update має
надавати перевагу Package Acceptance.
Канонічний checklist для update і Plugin validation:
Тестування оновлень і плагінів. Використовуйте його, коли
вирішуєте, яка локальна, Docker, Package Acceptance або release-check лінія доводить
Plugin install/update, doctor cleanup або published-package migration change.
Вичерпна published update migration з кожного stable пакета 2026.4.23+ є
окремим ручним workflow Update Migration, а не частиною Full Release CI.
Поблажливість для застарілого приймання пакетів навмисно обмежена в часі. Пакети до
2026.4.25 можуть використовувати шлях сумісності для прогалин у метаданих, уже опублікованих
у npm: приватні записи інвентарю QA, відсутні в tarball, відсутній
gateway install --wrapper, відсутні файли patch у git-фікстурі, отриманій із tarball,
відсутній збережений update.channel, застарілі розташування записів встановлення Plugin,
відсутнє збереження записів встановлення marketplace та міграція метаданих конфігурації
під час plugins update. Опублікований пакет 2026.4.26 може попереджати
про локальні файли штампів метаданих збірки, які вже були випущені. Пізніші пакети
мають відповідати сучасним контрактам пакетів; ті самі прогалини спричиняють помилку
перевірки релізу.
Використовуйте ширші профілі Package Acceptance, коли питання релізу стосується фактичного встановлюваного пакета:
gh workflow run package-acceptance.yml \
--ref main \
-f workflow_ref=main \
-f source=npm \
-f package_spec=openclaw@beta \
-f suite_profile=product \
-f [email protected]
Поширені профілі пакетів:
smoke: швидкі lanes для встановлення пакета, каналу й агента, мережі Gateway та перезавантаження конфігураціїpackage: контракти встановлення, оновлення, перезапуску й пакета Plugin без live ClawHub; це стандарт для перевірки релізуproduct:packageплюс канали MCP, очищення cron/subagent, вебпошук OpenAI і OpenWebUIfull: фрагменти Docker release-path з OpenWebUIcustom: точний списокdocker_lanesдля сфокусованих повторних запусків
Для package-candidate доказу Telegram увімкніть telegram_mode=mock-openai або
telegram_mode=live-frontier у Package Acceptance. Workflow передає
розв’язаний tarball package-under-test у lane Telegram; окремий workflow
Telegram і далі приймає опубліковану npm-специфікацію для післяпублікаційних перевірок.
Автоматизація публікації релізу
OpenClaw Release Publish є звичайною мутувальною точкою входу для публікації. Вона
оркеструє workflow trusted-publisher у порядку, потрібному релізу:
- Отримати release tag і визначити його commit SHA.
- Перевірити, що tag досяжний із
mainабоrelease/*. - Запустити
pnpm plugins:sync:check. - Запустити
Plugin NPM Releaseзpublish_scope=all-publishableіref=<release-sha>. - Запустити
Plugin ClawHub Releaseз тим самим scope і SHA. - Запустити
OpenClaw NPM Releaseз release tag, npm dist-tag і збереженимpreflight_run_id.
Приклад публікації beta:
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
Стабільна публікація до стандартного 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, або запустіть дочірній workflow напряму, коли
пакет OpenClaw не потрібно публікувати.
Вхідні дані workflow NPM
OpenClaw NPM Release приймає такі керовані оператором вхідні дані:
tag: обов’язковий release tag, як-отv2026.4.2,v2026.4.2-1абоv2026.4.2-beta.1; колиpreflight_only=true, це також може бути поточний повний 40-символьний commit SHA гілки workflow лише для validation-only preflightpreflight_only:trueлише для перевірки, збірки й пакування,falseдля реального шляху публікаціїpreflight_run_id: обов’язковий на реальному шляху публікації, щоб workflow повторно використав підготовлений tarball з успішного preflight runnpm_dist_tag: цільовий npm tag для шляху публікації; за замовчуваннямbeta
OpenClaw Release Publish приймає такі керовані оператором вхідні дані:
tag: обов’язковий release tag; має вже існуватиpreflight_run_id: успішний run id preflightOpenClaw NPM Release; обов’язковий, колиpublish_openclaw_npm=truenpm_dist_tag: цільовий npm tag для пакета OpenClawplugin_publish_scope: за замовчуваннямall-publishable; використовуйтеselectedлише для сфокусованого ремонтуplugins: розділені комами назви пакетів@openclaw/*, колиplugin_publish_scope=selectedpublish_openclaw_npm: за замовчуваннямtrue; встановлюйтеfalseлише коли використовуєте workflow як оркестратор ремонту тільки для Plugin
OpenClaw Release Checks приймає такі керовані оператором вхідні дані:
ref: branch, tag або повний commit SHA для перевірки. Перевірки із секретами вимагають, щоб розв’язаний commit був досяжний із гілки OpenClaw або release tag.run_release_soak: увімкнути вичерпні live/E2E, Docker release-path і all-since upgrade-survivor soak для стабільних/стандартних перевірок релізу. Це примусово вмикаєтьсяrelease_profile=full.
Правила:
- Stable і correction tags можуть публікуватися або до
beta, або доlatest - Beta prerelease tags можуть публікуватися лише до
beta - Для
OpenClaw NPM Releaseвведення повного commit SHA дозволене лише колиpreflight_only=true OpenClaw Release ChecksіFull Release Validationзавжди є validation-only- Реальний шлях публікації має використовувати той самий
npm_dist_tag, який використовувався під час preflight; workflow перевіряє ці метадані перед продовженням публікації
Послідовність стабільного npm-релізу
Коли готуєте стабільний npm-реліз:
- Запустіть
OpenClaw NPM Releaseзpreflight_only=true- До створення tag можна використати поточний повний commit SHA гілки workflow для validation-only dry run workflow preflight
- Виберіть
npm_dist_tag=betaдля звичайного потоку beta-first абоlatestлише коли ви навмисно хочете пряму стабільну публікацію - Запустіть
Full Release Validationна release branch, release tag або повному commit SHA, коли потрібні звичайний CI плюс покриття live prompt cache, Docker, QA Lab, Matrix і Telegram з одного ручного workflow - Якщо вам навмисно потрібен лише детермінований звичайний граф тестів, запустіть
ручний workflow
CIна release ref - Збережіть успішний
preflight_run_id - Запустіть
OpenClaw Release Publishз тим самимtag, тим самимnpm_dist_tagі збереженимpreflight_run_id; він публікує зовнішні Plugin в npm і ClawHub перед просуванням npm-пакета OpenClaw - Якщо реліз потрапив у
beta, використайте приватний workflowopenclaw/releases-private/.github/workflows/openclaw-npm-dist-tags.ymlдля просування цієї стабільної версії зbetaдоlatest - Якщо реліз навмисно опубліковано безпосередньо до
latest, аbetaмає негайно вказувати на ту саму стабільну збірку, використайте той самий приватний workflow, щоб спрямувати обидва dist-tags на стабільну версію, або дозвольте його запланованій самовідновлювальній синхронізації переміститиbetaпізніше
Мутація dist-tag розташована в приватному repo з міркувань безпеки, оскільки вона все ще
потребує NPM_TOKEN, тоді як публічний repo зберігає публікацію лише через OIDC.
Це зберігає і прямий шлях публікації, і шлях beta-first promotion задокументованими та видимими для оператора.
Якщо maintainer мусить повернутися до локальної npm-автентифікації, запускайте будь-які команди 1Password
CLI (op) лише всередині спеціальної сесії tmux. Не викликайте op
безпосередньо з основного shell агента; утримання його всередині tmux робить prompts,
alerts і обробку OTP спостережуваними та запобігає повторним host alerts.
Публічні посилання
.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
Maintainers використовують приватну документацію релізів у
openclaw/maintainers/release/README.md
для фактичного runbook.