chore(i18n): refresh uk translations
This commit is contained in:
parent
c64d7119e6
commit
9871fcf516
@ -1,26 +1,26 @@
|
||||
---
|
||||
read_when:
|
||||
- Підготовка звіту про помилку або запиту на підтримку
|
||||
- Налагодження аварійних завершень Gateway, перезапусків, тиску на пам’ять або надмірно великих корисних навантажень
|
||||
- Налагодження аварійних завершень Gateway, перезапусків, тиску на пам’ять або завеликих корисних навантажень
|
||||
- Перегляд того, які діагностичні дані записуються або приховуються
|
||||
summary: Створюйте поширювані діагностичні пакети Gateway для звітів про помилки
|
||||
summary: Створюйте діагностичні пакети Gateway для звітів про помилки, якими можна ділитися
|
||||
title: Експорт діагностики
|
||||
x-i18n:
|
||||
generated_at: "2026-05-02T04:01:30Z"
|
||||
generated_at: "2026-05-03T18:32:10Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 4d1f7c1e1d96aeeebe30b30c8a23ec3c7b0fb4938f15a3783bf22e861770bf78
|
||||
source_hash: f6cf8e00fe8033e339b5c947ce3dd10fdee736048a358ad3a0c2ccb77e939f4b
|
||||
source_path: gateway/diagnostics.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
OpenClaw може створити локальний zip-файл діагностики для звітів про помилки. Він об’єднує
|
||||
очищені стан Gateway, працездатність, журнали, форму конфігурації та нещодавні
|
||||
події стабільності без вмісту payload.
|
||||
OpenClaw може створити локальний zip-архів діагностики для звітів про помилки. Він поєднує
|
||||
санітизований стан Gateway, справність, журнали, форму конфігурації та нещодавні події
|
||||
стабільності без payload.
|
||||
|
||||
Ставтеся до діагностичних пакетів як до секретів, доки не переглянете їх. Вони
|
||||
спроєктовані так, щоб пропускати або редагувати payload і облікові дані, але все одно підсумовують
|
||||
локальні журнали Gateway і стан runtime на рівні хоста.
|
||||
спроєктовані так, щоб пропускати або редагувати payload і облікові дані, але все одно узагальнюють
|
||||
локальні журнали Gateway і стан середовища виконання на рівні хоста.
|
||||
|
||||
## Швидкий старт
|
||||
|
||||
@ -28,7 +28,7 @@ OpenClaw може створити локальний zip-файл діагно
|
||||
openclaw gateway diagnostics export
|
||||
```
|
||||
|
||||
Команда друкує шлях до записаного zip-файлу. Щоб вибрати шлях:
|
||||
Команда виводить шлях до записаного zip-архіву. Щоб вибрати шлях:
|
||||
|
||||
```bash
|
||||
openclaw gateway diagnostics export --output openclaw-diagnostics.zip
|
||||
@ -43,91 +43,92 @@ openclaw gateway diagnostics export --json
|
||||
## Команда чату
|
||||
|
||||
Власники можуть використовувати `/diagnostics [note]` у чаті, щоб запросити локальний експорт Gateway.
|
||||
Використовуйте це, коли помилка сталася в реальній розмові і вам потрібен один
|
||||
звіт для підтримки, який можна скопіювати й вставити:
|
||||
Використовуйте це, коли помилка сталася в реальній розмові й потрібен один
|
||||
звіт для підтримки, який можна скопіювати та вставити:
|
||||
|
||||
1. Надішліть `/diagnostics` у розмові, де ви помітили проблему. Додайте
|
||||
коротку нотатку, якщо це допоможе, наприклад `/diagnostics bad tool choice`.
|
||||
2. OpenClaw надсилає вступ до діагностики та просить одне явне схвалення exec.
|
||||
Схвалення запускає `openclaw gateway diagnostics export --json`.
|
||||
Не схвалюйте діагностику через правило allow-all.
|
||||
3. Після схвалення OpenClaw відповідає звітом для вставлення, що містить локальний
|
||||
шлях пакета, підсумок маніфесту, примітки щодо приватності та відповідні ідентифікатори сесій.
|
||||
2. OpenClaw надсилає преамбулу діагностики й просить одне явне підтвердження exec.
|
||||
Підтвердження запускає `openclaw gateway diagnostics export --json`.
|
||||
Не підтверджуйте діагностику через правило allow-all.
|
||||
3. Після підтвердження OpenClaw відповідає звітом для вставлення, який містить локальний
|
||||
шлях до пакета, підсумок маніфесту, нотатки про приватність і відповідні ідентифікатори сеансів.
|
||||
|
||||
У групових чатах власник усе ще може запустити `/diagnostics`, але OpenClaw не
|
||||
публікує діагностичні подробиці назад у спільний чат. Він надсилає вступ,
|
||||
запити схвалення, результат експорту Gateway і розбір сесії/треду Codex
|
||||
власнику через приватний маршрут схвалення. Група отримує лише коротке повідомлення
|
||||
про те, що діагностичний потік було надіслано приватно. Якщо OpenClaw не може знайти приватний
|
||||
У групових чатах власник усе ще може запускати `/diagnostics`, але OpenClaw не
|
||||
публікує діагностичні деталі назад у спільний чат. Він надсилає преамбулу,
|
||||
запити підтвердження, результат експорту Gateway і розбивку сеансів/потоків Codex
|
||||
власнику через приватний маршрут підтвердження. Група отримує лише коротке сповіщення
|
||||
про те, що діагностичний процес було надіслано приватно. Якщо OpenClaw не може знайти приватний
|
||||
маршрут до власника, команда завершується безпечною відмовою і просить власника запустити її з DM.
|
||||
|
||||
Коли активна сесія OpenClaw використовує нативний harness OpenAI Codex,
|
||||
те саме схвалення exec також покриває завантаження відгуку OpenAI для тредів runtime
|
||||
Codex, про які знає OpenClaw. Це завантаження окреме від локального zip-файлу
|
||||
Gateway і з’являється лише для сесій harness Codex. Перед схваленням
|
||||
запит пояснює, що схвалення діагностики також надішле відгук Codex, але він
|
||||
не перелічує ідентифікатори сесій або тредів Codex. Після схвалення відповідь у чаті перелічує
|
||||
канали, ідентифікатори сесій OpenClaw, ідентифікатори тредів Codex і локальні команди resume
|
||||
для тредів, надісланих на сервери OpenAI. Якщо ви відхилите або проігноруєте
|
||||
схвалення, OpenClaw не запускає експорт, не надсилає відгук Codex і
|
||||
не друкує ідентифікатори Codex.
|
||||
Коли активний сеанс OpenClaw використовує нативний OpenAI Codex harness,
|
||||
те саме підтвердження exec також охоплює завантаження відгуку OpenAI для потоків
|
||||
середовища виконання Codex, про які знає OpenClaw. Це завантаження є окремим від локального
|
||||
zip-архіву Gateway і з'являється лише для сеансів Codex harness. Перед підтвердженням
|
||||
запит пояснює, що підтвердження діагностики також надішле відгук Codex, але він
|
||||
не перелічує ідентифікатори сеансів або потоків Codex. Після підтвердження відповідь у чаті перелічує
|
||||
канали, ідентифікатори сеансів OpenClaw, ідентифікатори потоків Codex і локальні команди відновлення
|
||||
для потоків, надісланих на сервери OpenAI. Якщо ви відхилите або проігноруєте
|
||||
підтвердження, OpenClaw не запускає експорт, не надсилає відгук Codex і
|
||||
не виводить ідентифікатори Codex.
|
||||
|
||||
Це робить звичний цикл налагодження Codex коротким: помітили погану поведінку в
|
||||
Telegram, Discord або іншому каналі, запустили `/diagnostics`, один раз схвалили, поділилися
|
||||
звітом із підтримкою, а потім локально запустили надруковану команду `codex resume <thread-id>`,
|
||||
якщо хочете самостійно перевірити нативний тред Codex. Див.
|
||||
[Harness Codex](/uk/plugins/codex-harness#inspect-a-codex-thread-from-the-cli) для
|
||||
цього робочого процесу перевірки.
|
||||
Це робить типовий цикл налагодження Codex коротким: помітили неправильну поведінку в
|
||||
Telegram, Discord або іншому каналі, запустили `/diagnostics`, один раз підтвердили, поділилися
|
||||
звітом із підтримкою, а потім локально запустили виведену команду `codex resume <thread-id>`,
|
||||
якщо хочете самостійно перевірити нативний потік Codex. Див.
|
||||
[Codex harness](/uk/plugins/codex-harness#inspect-a-codex-thread-from-the-cli) для
|
||||
цього процесу перевірки.
|
||||
|
||||
## Що містить експорт
|
||||
|
||||
Zip-файл містить:
|
||||
Zip-архів містить:
|
||||
|
||||
- `summary.md`: зручний для людини огляд для підтримки.
|
||||
- `diagnostics.json`: машиночитний підсумок конфігурації, журналів, стану, працездатності
|
||||
- `summary.md`: зручний для читання огляд для підтримки.
|
||||
- `diagnostics.json`: машинозчитуваний підсумок конфігурації, журналів, стану, справності
|
||||
та даних стабільності.
|
||||
- `manifest.json`: метадані експорту та список файлів.
|
||||
- Очищену форму конфігурації та несекретні подробиці конфігурації.
|
||||
- Очищені підсумки журналів і нещодавні відредаговані рядки журналів.
|
||||
- Best-effort знімки стану та працездатності Gateway.
|
||||
- `stability/latest.json`: найновіший збережений пакет стабільності, коли він доступний.
|
||||
- `manifest.json`: метадані експорту й список файлів.
|
||||
- Санітизовану форму конфігурації та несекретні деталі конфігурації.
|
||||
- Санітизовані підсумки журналів і нещодавні відредаговані рядки журналів.
|
||||
- Найкращі можливі знімки стану й справності Gateway.
|
||||
- `stability/latest.json`: найновіший збережений пакет стабільності, коли доступний.
|
||||
|
||||
Експорт корисний навіть тоді, коли Gateway непрацездатний. Якщо Gateway не може
|
||||
відповісти на запити стану або працездатності, локальні журнали, форма конфігурації та найновіший
|
||||
пакет стабільності все одно збираються, коли вони доступні.
|
||||
Експорт корисний навіть тоді, коли Gateway несправний. Якщо Gateway не може
|
||||
відповісти на запити стану або справності, локальні журнали, форма конфігурації та найновіший
|
||||
пакет стабільності все одно збираються, коли доступні.
|
||||
|
||||
## Модель приватності
|
||||
|
||||
Діагностику спроєктовано так, щоб нею можна було ділитися. Експорт зберігає операційні дані,
|
||||
Діагностика спроєктована так, щоб нею можна було ділитися. Експорт зберігає операційні дані,
|
||||
які допомагають налагодженню, як-от:
|
||||
|
||||
- назви підсистем, ідентифікатори plugin, ідентифікатори провайдерів, ідентифікатори каналів і налаштовані режими
|
||||
- коди стану, тривалості, кількість байтів, стан черги та показники пам’яті
|
||||
- очищені метадані журналів і відредаговані операційні повідомлення
|
||||
- назви підсистем, ідентифікатори Plugin, ідентифікатори провайдерів, ідентифікатори каналів і налаштовані режими
|
||||
- коди стану, тривалості, кількість байтів, стан черги та показники пам'яті
|
||||
- санітизовані метадані журналів і відредаговані операційні повідомлення
|
||||
- форму конфігурації та несекретні налаштування функцій
|
||||
|
||||
Експорт пропускає або редагує:
|
||||
|
||||
- текст чату, промпти, інструкції, тіла webhook і результати інструментів
|
||||
- текст чатів, промпти, інструкції, тіла webhook і результати інструментів
|
||||
- облікові дані, API-ключі, токени, cookies і секретні значення
|
||||
- сирі тіла запитів або відповідей
|
||||
- ідентифікатори облікових записів, ідентифікатори повідомлень, сирі ідентифікатори сесій, імена хостів і локальні імена користувачів
|
||||
- необроблені тіла запитів або відповідей
|
||||
- ідентифікатори облікових записів, ідентифікатори повідомлень, необроблені ідентифікатори сеансів, імена хостів і локальні імена користувачів
|
||||
|
||||
Коли повідомлення журналу схоже на текст користувача, чату, промпта або payload інструмента,
|
||||
експорт зберігає лише те, що повідомлення було пропущено, і кількість байтів.
|
||||
Коли повідомлення журналу схоже на текст payload користувача, чату, промпта або інструмента,
|
||||
експорт зберігає лише факт пропуску повідомлення та кількість байтів.
|
||||
|
||||
## Реєстратор стабільності
|
||||
|
||||
Gateway типово записує обмежений потік стабільності без payload, коли
|
||||
Gateway за замовчуванням записує обмежений потік стабільності без payload, коли
|
||||
діагностику ввімкнено. Він призначений для операційних фактів, а не для вмісту.
|
||||
|
||||
Той самий діагностичний heartbeat записує зразки життєздатності, коли Gateway продовжує
|
||||
працювати, але event loop Node.js або CPU виглядає перевантаженим. Ці
|
||||
події `diagnostic.liveness.warning` містять затримку event loop, використання event loop,
|
||||
співвідношення CPU-core і кількість активних/очікуваних/поставлених у чергу сесій. Неактивні
|
||||
зразки залишаються в телеметрії на рівні `info`; вони логуються як попередження Gateway
|
||||
лише коли діагностична робота активна, очікує або стоїть у черзі. Вони самі по собі
|
||||
не перезапускають Gateway.
|
||||
Той самий діагностичний heartbeat записує зразки активності, коли Gateway продовжує
|
||||
працювати, але event loop Node.js або CPU здаються перевантаженими. Ці події
|
||||
`diagnostic.liveness.warning` містять затримку event loop, використання event loop,
|
||||
співвідношення ядер CPU та кількість активних/очікувальних/поставлених у чергу сеансів. Неактивні
|
||||
зразки залишаються в телеметрії на рівні `info`. Зразки активності стають попередженнями Gateway
|
||||
лише тоді, коли робота очікує або стоїть у черзі, або коли активна робота збігається зі
|
||||
сталою затримкою event loop. Тимчасові піки максимальної затримки під час загалом справної
|
||||
фонової роботи залишаються в журналах debug. Вони самі по собі не перезапускають Gateway.
|
||||
|
||||
Перевірити активний реєстратор:
|
||||
|
||||
@ -137,22 +138,22 @@ openclaw gateway stability --type payload.large
|
||||
openclaw gateway stability --json
|
||||
```
|
||||
|
||||
Перевірити найновіший збережений пакет стабільності після фатального виходу, тайм-ауту завершення роботи
|
||||
або помилки запуску після перезапуску:
|
||||
Перевірити найновіший збережений пакет стабільності після фатального завершення, тайм-ауту
|
||||
завершення роботи або помилки запуску після перезапуску:
|
||||
|
||||
```bash
|
||||
openclaw gateway stability --bundle latest
|
||||
```
|
||||
|
||||
Створити zip-файл діагностики з найновішого збереженого пакета:
|
||||
Створити zip-архів діагностики з найновішого збереженого пакета:
|
||||
|
||||
```bash
|
||||
openclaw gateway stability --bundle latest --export
|
||||
```
|
||||
|
||||
Збережені пакети розташовані в `~/.openclaw/logs/stability/`, коли події існують.
|
||||
Збережені пакети розміщуються в `~/.openclaw/logs/stability/`, коли події існують.
|
||||
|
||||
## Корисні параметри
|
||||
## Корисні опції
|
||||
|
||||
```bash
|
||||
openclaw gateway diagnostics export \
|
||||
@ -161,20 +162,20 @@ openclaw gateway diagnostics export \
|
||||
--log-bytes 1000000
|
||||
```
|
||||
|
||||
- `--output <path>`: записати до конкретного шляху zip-файлу.
|
||||
- `--log-lines <count>`: максимальна кількість очищених рядків журналу для включення.
|
||||
- `--output <path>`: записати в конкретний шлях zip-архіву.
|
||||
- `--log-lines <count>`: максимальна кількість санітизованих рядків журналу для включення.
|
||||
- `--log-bytes <bytes>`: максимальна кількість байтів журналу для перевірки.
|
||||
- `--url <url>`: URL WebSocket Gateway для знімків стану та працездатності.
|
||||
- `--token <token>`: токен Gateway для знімків стану та працездатності.
|
||||
- `--password <password>`: пароль Gateway для знімків стану та працездатності.
|
||||
- `--timeout <ms>`: тайм-аут знімків стану та працездатності.
|
||||
- `--url <url>`: WebSocket URL Gateway для знімків стану й справності.
|
||||
- `--token <token>`: токен Gateway для знімків стану й справності.
|
||||
- `--password <password>`: пароль Gateway для знімків стану й справності.
|
||||
- `--timeout <ms>`: тайм-аут знімків стану й справності.
|
||||
- `--no-stability-bundle`: пропустити пошук збереженого пакета стабільності.
|
||||
- `--json`: надрукувати машиночитні метадані експорту.
|
||||
- `--json`: вивести машинозчитувані метадані експорту.
|
||||
|
||||
## Вимкнення діагностики
|
||||
## Вимкнути діагностику
|
||||
|
||||
Діагностику ввімкнено типово. Щоб вимкнути реєстратор стабільності та
|
||||
збирання діагностичних подій:
|
||||
Діагностику ввімкнено за замовчуванням. Щоб вимкнути реєстратор стабільності та
|
||||
збір діагностичних подій:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -184,13 +185,13 @@ openclaw gateway diagnostics export \
|
||||
}
|
||||
```
|
||||
|
||||
Вимкнення діагностики зменшує деталізацію звіту про помилку. Воно не впливає на звичайне
|
||||
логування Gateway.
|
||||
Вимкнення діагностики зменшує деталізацію звіту про помилку. Це не впливає на звичайне
|
||||
журналювання Gateway.
|
||||
|
||||
## Пов’язане
|
||||
## Пов'язане
|
||||
|
||||
- [Перевірки працездатності](/uk/gateway/health)
|
||||
- [Перевірки справності](/uk/gateway/health)
|
||||
- [CLI Gateway](/uk/cli/gateway#gateway-diagnostics-export)
|
||||
- [Протокол Gateway](/uk/gateway/protocol#system-and-identity)
|
||||
- [Логування](/uk/logging)
|
||||
- [Експорт OpenTelemetry](/uk/gateway/opentelemetry) — окремий потік для передавання діагностики до колектора
|
||||
- [Журналювання](/uk/logging)
|
||||
- [Експорт OpenTelemetry](/uk/gateway/opentelemetry) — окремий процес для потокової передачі діагностики до колектора
|
||||
|
||||
@ -1,284 +1,284 @@
|
||||
---
|
||||
read_when:
|
||||
- Пошук визначень публічних каналів випуску
|
||||
- Запуск перевірки релізу або приймального тестування пакета
|
||||
- Шукаєте іменування версій і періодичність випусків
|
||||
summary: Релізні лінії, контрольний список оператора, валідаційні бокси, іменування версій і періодичність
|
||||
- Запуск валідації релізу або приймання пакета
|
||||
- Пошук відомостей про найменування версій і періодичність випусків
|
||||
summary: Релізні доріжки, контрольний список оператора, середовища валідації, іменування версій і ритм
|
||||
title: Політика випусків
|
||||
x-i18n:
|
||||
generated_at: "2026-05-03T11:28:46Z"
|
||||
generated_at: "2026-05-03T18:32:10Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: edfd7d6a17da68c76d7196856702c59d1e3c2749907f591fe18b4f9df2eb097d
|
||||
source_hash: 566088d826e1e2bac21b11443b82b62cb73ed1fd9c508c3fb865149cf8a428ba
|
||||
source_path: reference/RELEASING.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
OpenClaw має три публічні канали випусків:
|
||||
|
||||
- stable: теговані випуски, які типово публікуються в npm `beta`, або в npm `latest` за явним запитом
|
||||
- beta: передвипускні теги, які публікуються в npm `beta`
|
||||
- stable: теговані випуски, які за замовчуванням публікуються в npm `beta`, або в npm `latest`, коли це явно запитано
|
||||
- beta: теги попередніх випусків, які публікуються в npm `beta`
|
||||
- dev: рухома вершина `main`
|
||||
|
||||
## Іменування версій
|
||||
## Назви версій
|
||||
|
||||
- Версія стабільного випуску: `YYYY.M.D`
|
||||
- Git-тег: `vYYYY.M.D`
|
||||
- Версія стабільного коригувального випуску: `YYYY.M.D-N`
|
||||
- Git-тег: `vYYYY.M.D-N`
|
||||
- Версія beta-передвипуску: `YYYY.M.D-beta.N`
|
||||
- Версія beta-попереднього випуску: `YYYY.M.D-beta.N`
|
||||
- Git-тег: `vYYYY.M.D-beta.N`
|
||||
- Не додавайте початкові нулі до місяця чи дня
|
||||
- Не додавайте нулі на початку місяця або дня
|
||||
- `latest` означає поточний просунутий стабільний випуск npm
|
||||
- `beta` означає поточну ціль встановлення beta
|
||||
- Стабільні та стабільні коригувальні випуски типово публікуються в npm `beta`; оператори випуску можуть явно націлитися на `latest` або пізніше просунути перевірену beta-збірку
|
||||
- Кожен стабільний випуск OpenClaw постачається разом із пакетом npm і застосунком macOS;
|
||||
beta-випуски зазвичай спочатку перевіряють і публікують шлях npm/пакета, а
|
||||
збирання/підписування/нотаризацію застосунку mac залишають для стабільних випусків, якщо це явно не запитано
|
||||
- Стабільні та стабільні коригувальні випуски за замовчуванням публікуються в npm `beta`; оператори випуску можуть явно націлитися на `latest` або просунути перевірену збірку beta пізніше
|
||||
- Кожен стабільний випуск OpenClaw постачає пакет npm і застосунок macOS разом;
|
||||
beta-випуски зазвичай спершу перевіряють і публікують шлях npm/пакета, а
|
||||
збирання/підписування/нотаризацію застосунку mac залишають для stable, якщо це явно не запитано
|
||||
|
||||
## Ритм випусків
|
||||
## Періодичність випусків
|
||||
|
||||
- Випуски рухаються спочатку через beta
|
||||
- Випуски рухаються спершу через beta
|
||||
- Stable виходить лише після перевірки останньої beta
|
||||
- Maintainers зазвичай створюють випуски з гілки `release/YYYY.M.D`, створеної
|
||||
з поточного `main`, щоб перевірка випуску та виправлення не блокували нову
|
||||
- Maintainers зазвичай готують випуски з гілки `release/YYYY.M.D`, створеної
|
||||
з поточної `main`, щоб перевірка випуску та виправлення не блокували нову
|
||||
розробку в `main`
|
||||
- Якщо beta-тег уже надіслано або опубліковано і він потребує виправлення, maintainers створюють
|
||||
наступний тег `-beta.N` замість видалення чи повторного створення старого beta-тега
|
||||
- Докладна процедура випуску, погодження, облікові дані та нотатки щодо відновлення
|
||||
- Якщо тег beta було надіслано або опубліковано і він потребує виправлення, maintainers створюють
|
||||
наступний тег `-beta.N` замість видалення або повторного створення старого тегу beta
|
||||
- Детальна процедура випуску, затвердження, облікові дані та нотатки з відновлення
|
||||
доступні лише maintainers
|
||||
|
||||
## Контрольний список оператора випуску
|
||||
|
||||
Цей контрольний список описує публічну форму процесу випуску. Приватні облікові дані,
|
||||
підписування, нотаризація, відновлення dist-tag і деталі екстреного відкату залишаються в
|
||||
runbook випуску, доступному лише maintainers.
|
||||
Цей контрольний список є публічною формою процесу випуску. Приватні облікові дані,
|
||||
підписування, нотаризація, відновлення dist-tag і подробиці екстреного відкату залишаються в
|
||||
runbook випуску лише для maintainers.
|
||||
|
||||
1. Почніть із поточного `main`: підтягніть останні зміни, підтвердьте, що цільовий коміт надіслано,
|
||||
і підтвердьте, що поточний CI `main` достатньо зелений, щоб відгалужуватися від нього.
|
||||
2. Перепишіть верхній розділ `CHANGELOG.md` на основі реальної історії комітів за допомогою
|
||||
`/changelog`, залишайте записи орієнтованими на користувача, закомітьте їх, надішліть і виконайте rebase/pull
|
||||
1. Почніть з поточної `main`: отримайте останні зміни, підтвердьте, що цільовий коміт надіслано,
|
||||
і підтвердьте, що поточний CI `main` достатньо зелений, щоб створити з нього гілку.
|
||||
2. Перепишіть верхній розділ `CHANGELOG.md` з реальної історії комітів за допомогою
|
||||
`/changelog`, залиште записи орієнтованими на користувача, закомітьте їх, надішліть і виконайте rebase/pull
|
||||
ще раз перед створенням гілки.
|
||||
3. Перегляньте записи сумісності випуску в
|
||||
`src/plugins/compat/registry.ts` і
|
||||
`src/commands/doctor/shared/deprecation-compat.ts`. Видаляйте прострочену
|
||||
сумісність лише тоді, коли шлях оновлення залишається покритим, або зафіксуйте, чому її
|
||||
сумісність лише тоді, коли шлях оновлення лишається покритим, або зафіксуйте, чому її
|
||||
навмисно збережено.
|
||||
4. Створіть `release/YYYY.M.D` з поточного `main`; не виконуйте звичайну роботу над випуском
|
||||
4. Створіть `release/YYYY.M.D` з поточної `main`; не виконуйте звичайну роботу над випуском
|
||||
безпосередньо в `main`.
|
||||
5. Підвищте версію в кожному потрібному місці для запланованого тега, запустіть
|
||||
`pnpm plugins:sync`, щоб пакети Plugin, придатні до публікації, мали спільну версію випуску
|
||||
5. Оновіть кожне обов’язкове місце з версією для запланованого тегу, запустіть
|
||||
`pnpm plugins:sync`, щоб придатні до публікації пакети Plugin мали спільну версію випуску
|
||||
та метадані сумісності, потім запустіть локальний детермінований preflight:
|
||||
`pnpm check:test-types`, `pnpm check:architecture`,
|
||||
`pnpm build && pnpm ui:build`, `pnpm plugins:sync:check` і
|
||||
`pnpm release:check`.
|
||||
6. Запустіть `OpenClaw NPM Release` з `preflight_only=true`. До існування тега
|
||||
повний 40-символьний SHA гілки випуску дозволений для preflight лише для перевірки.
|
||||
Збережіть успішний `preflight_run_id`.
|
||||
6. Запустіть `OpenClaw NPM Release` з `preflight_only=true`. До появи тегу
|
||||
повний 40-символьний SHA гілки випуску дозволений для validation-only
|
||||
preflight. Збережіть успішний `preflight_run_id`.
|
||||
7. Запустіть усі передрелізні тести через `Full Release Validation` для
|
||||
гілки випуску, тега або повного SHA коміту. Це єдина ручна точка входу
|
||||
для чотирьох великих тестових середовищ випуску: Vitest, Docker, QA Lab і Package.
|
||||
8. Якщо перевірка не пройшла, виправте в гілці випуску та повторно запустіть найменший файл,
|
||||
канал, завдання workflow, профіль пакета, провайдера або allowlist моделі, що
|
||||
гілки випуску, тегу або повного SHA коміту. Це єдина ручна точка входу
|
||||
для чотирьох великих тестових боксів випуску: Vitest, Docker, QA Lab і Package.
|
||||
8. Якщо перевірка не проходить, виправте в гілці випуску й повторно запустіть найменший невдалий
|
||||
файл, канал, завдання workflow, профіль пакета, provider або allowlist моделей, який
|
||||
доводить виправлення. Повторно запускайте повну парасольку лише тоді, коли змінена поверхня робить
|
||||
попередні докази застарілими.
|
||||
9. Для beta позначте тегом `vYYYY.M.D-beta.N`, потім запустіть `OpenClaw Release Publish` з
|
||||
9. Для beta позначте `vYYYY.M.D-beta.N`, потім запустіть `OpenClaw Release Publish` з
|
||||
відповідної гілки `release/YYYY.M.D`. Він перевіряє `pnpm plugins:sync:check`,
|
||||
спочатку публікує всі придатні до публікації пакети Plugin у npm, потім публікує той самий
|
||||
набір у ClawHub, а після цього просуває підготовлений preflight-артефакт npm OpenClaw
|
||||
з відповідним dist-tag. Після публікації запустіть package
|
||||
acceptance після публікації для опублікованого пакета `openclaw@YYYY.M.D-beta.N` або
|
||||
`openclaw@beta`. Якщо надісланий або опублікований передвипуск потребує виправлення,
|
||||
створіть наступний відповідний номер передвипуску; не видаляйте й не переписуйте старий
|
||||
передвипуск.
|
||||
10. Для stable продовжуйте лише після того, як перевірена beta або release candidate має
|
||||
потрібні докази перевірки. Публікація stable в npm також проходить через
|
||||
`OpenClaw Release Publish`, повторно використовуючи успішний preflight-артефакт через
|
||||
`preflight_run_id`; готовність стабільного випуску macOS також потребує
|
||||
запакованих `.zip`, `.dmg`, `.dSYM.zip` та оновленого `appcast.xml` у `main`.
|
||||
11. Після публікації запустіть verifier npm після публікації, необов’язковий автономний
|
||||
E2E Telegram для опублікованого npm, коли потрібен доказ каналу після публікації,
|
||||
спершу публікує всі придатні до публікації пакети Plugin в npm, потім публікує той самий
|
||||
набір у ClawHub як tarball-и ClawPack npm-pack, а далі просуває
|
||||
підготовлений артефакт preflight npm OpenClaw з відповідним dist-tag. Після
|
||||
публікації запустіть post-publish package
|
||||
acceptance для опублікованого пакета `openclaw@YYYY.M.D-beta.N` або
|
||||
`openclaw@beta`. Якщо надісланий або опублікований попередній випуск потребує виправлення,
|
||||
створіть наступний відповідний номер попереднього випуску; не видаляйте і не переписуйте старий
|
||||
попередній випуск.
|
||||
10. Для stable продовжуйте лише після того, як перевірена beta або release candidate матиме
|
||||
потрібні докази перевірки. Публікація stable npm також проходить через
|
||||
`OpenClaw Release Publish`, повторно використовуючи успішний артефакт preflight через
|
||||
`preflight_run_id`; готовність stable macOS-випуску також потребує
|
||||
упакованих `.zip`, `.dmg`, `.dSYM.zip` і оновленого `appcast.xml` у `main`.
|
||||
11. Після публікації запустіть npm post-publish verifier, необов’язковий standalone
|
||||
published-npm Telegram E2E, коли потрібен доказ каналу після публікації,
|
||||
просування dist-tag за потреби, нотатки GitHub release/prerelease з
|
||||
повного відповідного розділу `CHANGELOG.md` і кроки оголошення випуску.
|
||||
|
||||
## Preflight випуску
|
||||
|
||||
- Запустіть `pnpm check:test-types` перед передрелізною перевіркою, щоб тестовий TypeScript залишався
|
||||
покритим поза швидшим локальним gate `pnpm check`
|
||||
покритим поза швидшим локальним шлюзом `pnpm check`
|
||||
- Запустіть `pnpm check:architecture` перед передрелізною перевіркою, щоб ширші перевірки циклів
|
||||
імпорту та меж архітектури були зеленими поза швидшим локальним gate
|
||||
імпорту та архітектурних меж були зеленими поза швидшим локальним шлюзом
|
||||
- Запустіть `pnpm build && pnpm ui:build` перед `pnpm release:check`, щоб очікувані
|
||||
релізні артефакти `dist/*` і bundle Control UI існували для етапу
|
||||
перевірки пакування
|
||||
- Запустіть `pnpm plugins:sync` після підняття версії в корені та перед тегуванням. Він
|
||||
оновлює версії публіковних пакетів plugin, метадані сумісності peer/API
|
||||
OpenClaw, метадані збірки та заготовки changelog plugin, щоб вони відповідали версії
|
||||
релізу core. `pnpm plugins:sync:check` — це немутуючий релізний запобіжник;
|
||||
workflow публікації завершується помилкою до будь-якої мутації registry, якщо цей крок було
|
||||
релізні артефакти `dist/*` і бандл Control UI існували для кроку
|
||||
валідації пакування
|
||||
- Запустіть `pnpm plugins:sync` після підняття версії в корені та перед створенням тега. Він
|
||||
оновлює версії пакетів публіковних plugins, метадані сумісності OpenClaw peer/API,
|
||||
метадані збірки та заготовки журналів змін plugins, щоб вони відповідали версії
|
||||
основного релізу. `pnpm plugins:sync:check` — це немутувальний релізний запобіжник;
|
||||
workflow публікації завершується з помилкою до будь-якої мутації реєстру, якщо цей крок було
|
||||
забуто.
|
||||
- Запустіть ручний workflow `Full Release Validation` перед схваленням релізу, щоб
|
||||
запустити всі передрелізні test boxes з однієї точки входу. Він приймає branch,
|
||||
tag або повний SHA commit, dispatch ручний `CI` і dispatch
|
||||
запустити всі передрелізні тестові бокси з однієї точки входу. Він приймає гілку,
|
||||
тег або повний SHA коміту, запускає ручний `CI` і запускає
|
||||
`OpenClaw Release Checks` для install smoke, package acceptance, Docker
|
||||
release-path suite, live/E2E, OpenWebUI, QA Lab parity, Matrix і Telegram
|
||||
lanes. З `release_profile=full` і `rerun_group=all` він також запускає package
|
||||
Telegram E2E проти артефакту `release-package-under-test` із release
|
||||
Telegram E2E проти артефакта `release-package-under-test` із release
|
||||
checks. Надайте `npm_telegram_package_spec` після публікації, коли той самий
|
||||
Telegram E2E має також підтвердити опублікований npm package. Надайте
|
||||
Telegram E2E також має підтвердити опублікований npm-пакет. Надайте
|
||||
`package_acceptance_package_spec` після публікації, коли Package Acceptance
|
||||
має запускати свою матрицю package/update проти відвантаженого npm package замість
|
||||
артефакту, зібраного за SHA. Надайте
|
||||
`evidence_package_spec`, коли приватний evidence report має підтвердити, що
|
||||
валідація відповідає опублікованому npm package, без примусового Telegram E2E.
|
||||
має запускати свою матрицю package/update проти доставленого npm-пакета замість
|
||||
артефакта, зібраного з SHA. Надайте
|
||||
`evidence_package_spec`, коли приватний звіт доказів має підтвердити, що
|
||||
валідація відповідає опублікованому npm-пакету без примусового Telegram E2E.
|
||||
Приклад:
|
||||
`gh workflow run full-release-validation.yml --ref main -f ref=release/YYYY.M.D`
|
||||
- Запустіть ручний workflow `Package Acceptance`, коли потрібне side-channel підтвердження
|
||||
для кандидата package, поки релізна робота триває. Використовуйте `source=npm` для
|
||||
`openclaw@beta`, `openclaw@latest` або точної релізної версії; `source=ref`,
|
||||
щоб спакувати довірений branch/tag/SHA `package_ref` з поточним
|
||||
- Запустіть ручний workflow `Package Acceptance`, коли вам потрібне побічне підтвердження
|
||||
для кандидата пакета, поки релізна робота триває. Використовуйте `source=npm` для
|
||||
`openclaw@beta`, `openclaw@latest` або точної версії релізу; `source=ref`,
|
||||
щоб запакувати довірену гілку/тег/SHA `package_ref` з поточним
|
||||
harness `workflow_ref`; `source=url` для HTTPS tarball з обов’язковим
|
||||
SHA-256; або `source=artifact` для tarball, завантаженого іншим run GitHub
|
||||
Actions. Workflow resolves кандидата в
|
||||
SHA-256; або `source=artifact` для tarball, завантаженого іншим запуском GitHub
|
||||
Actions. Workflow розв’язує кандидата до
|
||||
`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 є кандидатом, а `published_upgrade_survivor_baseline` вибирає
|
||||
опублікований baseline.
|
||||
Docker lanes містять `published-upgrade-survivor`, артефакт пакета є кандидатом, а `published_upgrade_survivor_baseline` вибирає
|
||||
опубліковану базову версію.
|
||||
Приклад: `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`: lanes install/channel/agent, gateway network і config reload
|
||||
- `package`: artifact-native lanes package/update/plugin без OpenWebUI або live ClawHub
|
||||
- `product`: профіль package плюс MCP channels, cron/subagent cleanup,
|
||||
OpenAI web search і OpenWebUI
|
||||
- `full`: chunks Docker release-path з OpenWebUI
|
||||
- `custom`: точний вибір `docker_lanes` для сфокусованого rerun
|
||||
- Запустіть ручний workflow `CI` напряму, коли потрібне лише повне звичайне покриття CI
|
||||
для релізного кандидата. Ручні CI dispatches обходять changed
|
||||
- `smoke`: lanes для install/channel/agent, мережі Gateway і перезавантаження конфігурації
|
||||
- `package`: artifact-native lanes для package/update/plugin без OpenWebUI або live ClawHub
|
||||
- `product`: профіль package плюс MCP channels, очищення cron/subagent,
|
||||
вебпошук OpenAI і OpenWebUI
|
||||
- `full`: фрагменти Docker release-path з OpenWebUI
|
||||
- `custom`: точний вибір `docker_lanes` для сфокусованого повторного запуску
|
||||
- Запустіть ручний workflow `CI` напряму, коли вам потрібне лише повне звичайне CI
|
||||
покриття для кандидата релізу. Ручні dispatch CI обходять changed
|
||||
scoping і примусово запускають 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
|
||||
перевірки документації, Python skills, Windows, macOS, Android і Control UI i18n
|
||||
lanes.
|
||||
Приклад: `gh workflow run ci.yml --ref release/YYYY.M.D`
|
||||
- Запустіть `pnpm qa:otel:smoke` під час валідації релізної telemetry. Він проганяє
|
||||
QA-lab через локальний OTLP/HTTP receiver і перевіряє експортовані імена trace
|
||||
span, обмежені attributes і редагування content/identifier без
|
||||
потреби в Opik, Langfuse або іншому зовнішньому collector.
|
||||
- Запускайте `pnpm release:check` перед кожним tagged release
|
||||
- Запустіть `OpenClaw Release Publish` для мутуючої послідовності публікації після того, як
|
||||
tag існує. Dispatch його з `release/YYYY.M.D` (або `main`, коли публікується
|
||||
tag, reachable з main), передайте release tag і успішний OpenClaw npm
|
||||
`preflight_run_id`, і залиште стандартну область публікації plugin
|
||||
`all-publishable`, якщо ви не виконуєте навмисно сфокусований repair. Цей
|
||||
workflow серіалізує plugin npm publish, plugin ClawHub publish і OpenClaw
|
||||
npm publish, щоб core package не було опубліковано раніше за його externalized
|
||||
- Запустіть `pnpm qa:otel:smoke` під час валідації релізної телеметрії. Він проганяє
|
||||
QA-lab через локальний OTLP/HTTP receiver і перевіряє експортовані назви trace
|
||||
span, обмежені атрибути та редагування вмісту/ідентифікаторів без
|
||||
потреби в Opik, Langfuse або іншому зовнішньому колекторі.
|
||||
- Запускайте `pnpm release:check` перед кожним релізом із тегом
|
||||
- Запустіть `OpenClaw Release Publish` для мутувальної послідовності публікації після того, як
|
||||
тег існує. Запускайте його з `release/YYYY.M.D` (або `main`, коли публікуєте
|
||||
тег, досяжний з main), передайте релізний тег і успішний OpenClaw npm
|
||||
`preflight_run_id`, а scope публікації plugins за замовчуванням
|
||||
`all-publishable` залишайте, якщо тільки ви навмисно не виконуєте сфокусований ремонт. Workflow
|
||||
серіалізує публікацію plugin npm, публікацію plugin ClawHub і публікацію OpenClaw
|
||||
npm, щоб основний пакет не було опубліковано перед його екстерналізованими
|
||||
plugins.
|
||||
- Release checks тепер запускаються в окремому ручному workflow:
|
||||
`OpenClaw Release Checks`
|
||||
- `OpenClaw Release Checks` також запускає QA Lab mock parity lane плюс швидкий
|
||||
live Matrix profile і Telegram QA lane перед схваленням релізу. Live
|
||||
lanes використовують environment `qa-live-shared`; Telegram також використовує Convex CI
|
||||
credential leases. Запустіть ручний workflow `QA-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 коротким,
|
||||
детермінованим і сфокусованим на артефактах, тоді як повільніші live checks залишаються у своєму
|
||||
окремому lane, щоб вони не затримували й не блокували publish
|
||||
- Release checks із secrets слід dispatch через `Full Release
|
||||
lanes використовують середовище `qa-live-shared`; Telegram також використовує leases облікових даних Convex CI. Запустіть ручний workflow `QA-Lab - All Lanes` з
|
||||
`matrix_profile=all` і `matrix_shards=true`, коли вам потрібна повна інвентаризація Matrix
|
||||
transport, media та E2EE паралельно.
|
||||
- Cross-OS валідація runtime для встановлення та оновлення є частиною публічних
|
||||
`OpenClaw Release Checks` і `Full Release Validation`, які напряму викликають
|
||||
багаторазовий workflow
|
||||
`.github/workflows/openclaw-cross-os-release-checks-reusable.yml`
|
||||
- Цей поділ навмисний: тримайте реальний шлях npm-релізу коротким,
|
||||
детермінованим і зосередженим на артефактах, тоді як повільніші live checks залишаються у своєму
|
||||
окремому lane, щоб вони не затримували й не блокували публікацію
|
||||
- Release checks із секретами слід запускати через `Full Release
|
||||
Validation` або з workflow ref `main`/release, щоб логіка workflow і
|
||||
secrets залишалися контрольованими
|
||||
- `OpenClaw Release Checks` приймає branch, tag або повний commit SHA, доки
|
||||
resolved commit reachable з OpenClaw branch або release tag
|
||||
- validation-only preflight `OpenClaw NPM Release` також приймає поточний
|
||||
повний 40-символьний SHA commit workflow-branch без потреби в pushed tag
|
||||
- Цей шлях SHA призначений лише для validation і не може бути promoted у реальний publish
|
||||
секрети залишалися контрольованими
|
||||
- `OpenClaw Release Checks` приймає гілку, тег або повний SHA коміту, доки
|
||||
розв’язаний коміт досяжний з гілки OpenClaw або релізного тега
|
||||
- Validation-only preflight `OpenClaw NPM Release` також приймає поточний
|
||||
повний 40-символьний SHA коміту гілки workflow без вимоги запушеного тега
|
||||
- Цей шлях SHA призначений лише для валідації й не може бути підвищений до реальної публікації
|
||||
- У режимі SHA workflow синтезує `v<package.json version>` лише для
|
||||
перевірки package metadata; реальний publish усе ще потребує справжнього release tag
|
||||
- Обидва workflows тримають реальний шлях publish і promotion на GitHub-hosted
|
||||
runners, тоді як немутуючий validation path може використовувати більші
|
||||
перевірки метаданих пакета; реальна публікація все одно потребує справжнього релізного тега
|
||||
- Обидва workflows тримають реальний шлях публікації та promotion на GitHub-hosted
|
||||
runners, тоді як немутувальний шлях валідації може використовувати більші
|
||||
Blacksmith Linux runners
|
||||
- Цей workflow запускає
|
||||
`OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_CACHE_TEST=1 pnpm test:live:cache`
|
||||
з використанням workflow secrets `OPENAI_API_KEY` і `ANTHROPIC_API_KEY`
|
||||
- npm release preflight більше не чекає на окремий release checks lane
|
||||
- npm release preflight більше не чекає на окремий lane release checks
|
||||
- Запустіть `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), щоб перевірити опублікований шлях registry
|
||||
install у свіжому temp prefix
|
||||
(або відповідну beta/correction version), щоб перевірити шлях встановлення з опублікованого registry
|
||||
у свіжому тимчасовому prefix
|
||||
- Після beta publish запустіть `OPENCLAW_NPM_TELEGRAM_PACKAGE_SPEC=openclaw@YYYY.M.D-beta.N OPENCLAW_NPM_TELEGRAM_CREDENTIAL_SOURCE=convex OPENCLAW_NPM_TELEGRAM_CREDENTIAL_ROLE=ci pnpm test:docker:npm-telegram-live`
|
||||
щоб перевірити installed-package onboarding, Telegram setup і реальний Telegram E2E
|
||||
проти опублікованого npm package з використанням спільного leased Telegram credential
|
||||
pool. Локальні одноразові запуски maintainer можуть omit Convex vars і передати три
|
||||
щоб перевірити onboarding встановленого пакета, налаштування Telegram і справжній Telegram E2E
|
||||
проти опублікованого npm-пакета з використанням спільного leased pool облікових даних Telegram.
|
||||
Локальні одноразові перевірки maintainer можуть пропускати Convex vars і передавати три
|
||||
env credentials `OPENCLAW_QA_TELEGRAM_*` напряму.
|
||||
- Maintainers можуть запускати ту саму post-publish check з GitHub Actions через
|
||||
ручний workflow `NPM Telegram Beta E2E`. Він навмисно manual-only і
|
||||
не запускається на кожен merge.
|
||||
- Автоматизація release для maintainer тепер використовує preflight-then-promote:
|
||||
- реальний npm publish має пройти успішний npm `preflight_run_id`
|
||||
- реальний npm publish має бути dispatched з тієї самої branch `main` або
|
||||
ручний workflow `NPM Telegram Beta E2E`. Він навмисно лише ручний і
|
||||
не запускається під час кожного merge.
|
||||
- Автоматизація релізів maintainer тепер використовує preflight-then-promote:
|
||||
- реальна npm publish має пройти успішний npm `preflight_run_id`
|
||||
- реальна npm publish має запускатися з тієї самої гілки `main` або
|
||||
`release/YYYY.M.D`, що й успішний preflight run
|
||||
- stable npm releases стандартно використовують `beta`
|
||||
- stable npm publish може явно target `latest` через workflow input
|
||||
- token-based npm dist-tag mutation тепер живе в
|
||||
- стабільні npm-релізи за замовчуванням спрямовуються на `beta`
|
||||
- stable npm publish може явно націлюватися на `latest` через workflow input
|
||||
- token-based мутація npm dist-tag тепер живе в
|
||||
`openclaw/releases-private/.github/workflows/openclaw-npm-dist-tags.yml`
|
||||
з міркувань безпеки, тому що `npm dist-tag add` все ще потребує `NPM_TOKEN`, тоді як
|
||||
публічний repo зберігає OIDC-only publish
|
||||
- public `macOS Release` є validation-only; коли tag існує лише на
|
||||
release branch, але workflow dispatched з `main`, встановіть
|
||||
публічний repo зберігає publish лише через OIDC
|
||||
- публічний `macOS Release` призначений лише для валідації; коли тег існує лише в
|
||||
release branch, але workflow запускається з `main`, задайте
|
||||
`public_release_branch=release/YYYY.M.D`
|
||||
- реальний private mac publish має пройти успішні private mac
|
||||
`preflight_run_id` і `validate_run_id`
|
||||
- реальні publish paths promote підготовлені артефакти замість повторної
|
||||
збірки
|
||||
- Для stable correction releases на кшталт `YYYY.M.D-N` post-publish verifier
|
||||
- реальні шляхи публікації просувають підготовлені артефакти замість повторної
|
||||
їхньої збірки
|
||||
- Для стабільних correction releases на кшталт `YYYY.M.D-N` post-publish verifier
|
||||
також перевіряє той самий temp-prefix upgrade path з `YYYY.M.D` до `YYYY.M.D-N`,
|
||||
щоб release corrections не могли непомітно залишити старіші global installs на
|
||||
щоб release corrections не могли непомітно залишити старіші глобальні встановлення на
|
||||
базовому stable payload
|
||||
- npm release preflight fails closed, якщо tarball не містить одночасно
|
||||
- npm release preflight завершується закрито, якщо tarball не містить одночасно
|
||||
`dist/control-ui/index.html` і непорожній payload `dist/control-ui/assets/`,
|
||||
щоб ми знову не відвантажили порожній browser dashboard
|
||||
- Post-publish verification також перевіряє, що опубліковані plugin entrypoints і
|
||||
package metadata присутні в установленому registry layout. Реліз, який
|
||||
відвантажує відсутні plugin runtime payloads, fails postpublish verifier і
|
||||
не може бути promoted до `latest`.
|
||||
- `pnpm test:install:smoke` також забезпечує budget npm pack `unpackedSize` для
|
||||
candidate update tarball, тож installer e2e ловить випадкове pack bloat
|
||||
до release publish path
|
||||
- Якщо release work торкалася CI planning, extension timing manifests або
|
||||
extension test matrices, згенеруйте повторно й перегляньте planner-owned
|
||||
outputs matrix `plugin-prerelease-extension-shard` з
|
||||
`.github/workflows/plugin-prerelease.yml` перед схваленням, щоб release notes не
|
||||
описували застарілий CI layout
|
||||
- Готовність stable macOS release також включає updater surfaces:
|
||||
- GitHub release має зрештою містити спаковані `.zip`, `.dmg` і `.dSYM.zip`
|
||||
щоб ми знову не доставили порожню browser dashboard
|
||||
- Post-publish verification також перевіряє, що опубліковані entrypoints plugins і
|
||||
package metadata присутні у встановленому registry layout. Реліз, який
|
||||
доставляє відсутні runtime payloads plugins, провалює postpublish verifier і
|
||||
не може бути просунутий до `latest`.
|
||||
- `pnpm test:install:smoke` також застосовує бюджет npm pack `unpackedSize` до
|
||||
candidate update tarball, тож installer e2e ловить випадкове роздування пакета
|
||||
до шляху release publish
|
||||
- Якщо релізна робота торкалася CI planning, extension timing manifests або
|
||||
extension test matrices, перед схваленням перегенеруйте й перегляньте outputs матриці
|
||||
`plugin-prerelease-extension-shard`, якими володіє planner, з
|
||||
`.github/workflows/plugin-prerelease.yml`, щоб release notes не описували
|
||||
застарілий CI layout
|
||||
- Готовність стабільного macOS release також включає updater surfaces:
|
||||
- GitHub release має зрештою містити запаковані `.zip`, `.dmg` і `.dSYM.zip`
|
||||
- `appcast.xml` на `main` має вказувати на новий stable zip після publish
|
||||
- спакований app має зберігати non-debug bundle id, непорожній Sparkle feed
|
||||
URL і `CFBundleVersion` на рівні або вище канонічного Sparkle build floor
|
||||
для цієї release version
|
||||
- запакований app має зберігати non-debug bundle id, непорожній Sparkle feed
|
||||
URL і `CFBundleVersion` на рівні або вище канонічної Sparkle build floor
|
||||
для цієї версії релізу
|
||||
|
||||
## Release test boxes
|
||||
## Релізні тестові бокси
|
||||
|
||||
`Full Release Validation` — це спосіб, яким operators запускають усі pre-release tests з
|
||||
однієї точки входу. Для pinned commit proof на швидкозмінній branch використовуйте
|
||||
helper, щоб кожен child workflow запускався з тимчасової branch, зафіксованої на target
|
||||
`Full Release Validation` — це спосіб, у який оператори запускають усі передрелізні тести з
|
||||
однієї точки входу. Для pinned commit proof на швидкозмінній гілці використовуйте
|
||||
helper, щоб кожен дочірній workflow запускався з тимчасової гілки, зафіксованої на цільовому
|
||||
SHA:
|
||||
|
||||
```bash
|
||||
pnpm ci:full-release --sha <full-sha>
|
||||
```
|
||||
|
||||
Helper pushes `release-ci/<sha>-...`, dispatches `Full Release Validation`
|
||||
з цієї branch з `ref=<sha>`, перевіряє, що кожен child workflow `headSha`
|
||||
відповідає target, а потім видаляє тимчасову branch. Це запобігає випадковому підтвердженню
|
||||
новішого child run `main`.
|
||||
Helper пушить `release-ci/<sha>-...`, запускає `Full Release Validation`
|
||||
з цієї гілки з `ref=<sha>`, перевіряє, що кожен дочірній workflow `headSha`
|
||||
відповідає цільовому, а потім видаляє тимчасову гілку. Це запобігає випадковому підтвердженню
|
||||
новішого дочірнього запуску `main`.
|
||||
|
||||
Для валідації release branch або tag запустіть його з довіреного workflow
|
||||
ref `main` і передайте release branch або tag як `ref`:
|
||||
Для валідації release branch або tag запускайте його з довіреного workflow
|
||||
ref `main` і передавайте release branch або tag як `ref`:
|
||||
|
||||
```bash
|
||||
gh workflow run full-release-validation.yml \
|
||||
@ -290,46 +290,48 @@ gh workflow run full-release-validation.yml \
|
||||
-f evidence_package_spec=openclaw@YYYY.M.D-beta.N
|
||||
```
|
||||
|
||||
Робочий процес розв’язує цільовий ref, запускає ручний `CI` з
|
||||
Робочий процес визначає цільовий 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
|
||||
покриття релізного шляху, Package Acceptance з пакетним Telegram QA, QA Lab
|
||||
parity, live Matrix і live Telegram. Повний запуск прийнятний лише тоді, коли
|
||||
підсумок `Full Release Validation`
|
||||
показує `normal_ci` і `release_checks` як успішні. У режимі full/all
|
||||
дочірній `npm_telegram` також має бути успішним; поза full/all його пропускають,
|
||||
якщо не було надано опублікований `npm_telegram_package_spec`. Фінальний
|
||||
підсумок верифікатора містить таблиці найповільніших завдань для кожного дочірнього запуску, щоб release
|
||||
manager міг бачити поточний критичний шлях без завантаження логів.
|
||||
Див. [Повна релізна валідація](/uk/reference/full-release-validation) для
|
||||
повної матриці етапів, точних назв завдань workflow, відмінностей між stable і full
|
||||
профілями, артефактів і точкових механізмів повторного запуску.
|
||||
Дочірні workflow запускаються з довіреного ref, який запускає `Full Release
|
||||
Validation`, зазвичай `--ref main`, навіть коли цільовий `ref` вказує на
|
||||
старішу релізну гілку або тег. Окремого входу Full Release Validation
|
||||
workflow-ref немає; вибирайте довірений harness, вибираючи ref запуску workflow.
|
||||
Не використовуйте `--ref main -f ref=<sha>` для доказу точного коміту на рухомій `main`;
|
||||
сирі SHA комітів не можуть бути refs для workflow dispatch, тому використовуйте
|
||||
батьківський артефакт `release-package-under-test` для перевірок, пов’язаних із
|
||||
пакунком, і запускає автономний package Telegram E2E, коли `release_profile=full`
|
||||
з `rerun_group=all` або коли задано `npm_telegram_package_spec`. Потім `OpenClaw Release
|
||||
Checks` розгалужується на install smoke, cross-OS release checks, покриття
|
||||
release-path для live/E2E Docker, Package Acceptance з package 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`. Підсумок фінального
|
||||
верифікатора містить таблиці найповільніших завдань для кожного дочірнього
|
||||
запуску, щоб менеджер релізу міг бачити поточний критичний шлях без завантаження
|
||||
логів.
|
||||
Див. [Повна перевірка релізу](/uk/reference/full-release-validation) для повної
|
||||
матриці етапів, точних назв завдань workflow, відмінностей між профілями stable
|
||||
і full, артефактів і цільових ідентифікаторів повторного запуску.
|
||||
Дочірні workflow запускаються з довіреного ref, який виконує `Full Release
|
||||
Validation`, зазвичай `--ref main`, навіть коли цільовий `ref` вказує на старішу
|
||||
release-гілку або тег. Окремого вхідного параметра workflow-ref для Full Release
|
||||
Validation немає; вибирайте довірений harness, вибираючи ref запуску workflow.
|
||||
Не використовуйте `--ref main -f ref=<sha>` для доказу точного коміту на рухомій
|
||||
`main`; сирі commit SHA не можуть бути workflow dispatch refs, тому використовуйте
|
||||
`pnpm ci:full-release --sha <sha>`, щоб створити закріплену тимчасову гілку.
|
||||
|
||||
Використовуйте `release_profile`, щоб вибрати ширину live/provider:
|
||||
|
||||
- `minimum`: найшвидший release-critical OpenAI/core live і Docker шлях
|
||||
- `stable`: minimum плюс stable provider/backend покриття для затвердження релізу
|
||||
- `full`: stable плюс широке advisory provider/media покриття
|
||||
- `minimum`: найшвидший release-critical OpenAI/core live і Docker path
|
||||
- `stable`: minimum плюс stable provider/backend coverage для схвалення релізу
|
||||
- `full`: stable плюс broad advisory provider/media coverage
|
||||
|
||||
`OpenClaw Release Checks` використовує довірений ref workflow, щоб один раз розв’язати цільовий
|
||||
ref як `release-package-under-test`, і повторно використовує цей артефакт як у
|
||||
release-path Docker перевірках, так і в Package Acceptance. Це тримає всі
|
||||
package-facing бокси на тих самих байтах і уникає повторних збірок пакета.
|
||||
Кросплатформний OpenAI install smoke використовує `OPENCLAW_CROSS_OS_OPENAI_MODEL`, коли
|
||||
задано repo/org змінну, інакше `openai/gpt-5.4`, бо ця lane
|
||||
доводить встановлення пакета, onboarding, запуск Gateway і один live agent turn,
|
||||
а не бенчмаркує найповільнішу модель за замовчуванням. Ширша live provider
|
||||
matrix лишається місцем для model-specific покриття.
|
||||
`OpenClaw Release Checks` використовує довірений workflow ref, щоб один раз
|
||||
визначити цільовий ref як `release-package-under-test`, і повторно використовує
|
||||
цей артефакт як у release-path Docker checks, так і в Package Acceptance. Це
|
||||
утримує всі package-facing box на однакових байтах і уникає повторних збірок
|
||||
пакунка.
|
||||
Cross-OS OpenAI install smoke використовує `OPENCLAW_CROSS_OS_OPENAI_MODEL`, коли
|
||||
задано repo/org variable, інакше `openai/gpt-5.4`, тому що ця lane доводить
|
||||
інсталяцію пакунка, onboarding, запуск Gateway і один live agent turn, а не
|
||||
бенчмарк найповільнішої моделі за замовчуванням. Ширша матриця live provider
|
||||
залишається місцем для model-specific coverage.
|
||||
|
||||
Використовуйте ці варіанти залежно від етапу релізу:
|
||||
|
||||
@ -361,41 +363,45 @@ gh workflow run full-release-validation.yml \
|
||||
-f npm_telegram_provider_mode=mock-openai
|
||||
```
|
||||
|
||||
Не використовуйте повну umbrella як перший повторний запуск після точкового виправлення. Якщо один box
|
||||
падає, використовуйте невдалий дочірній workflow, job, Docker lane, package profile, model
|
||||
provider або QA lane для наступного доказу. Запускайте повну umbrella знову лише тоді,
|
||||
коли виправлення змінило спільну релізну оркестрацію або зробило попередні all-box докази
|
||||
застарілими. Фінальний верифікатор umbrella повторно перевіряє записані child workflow run
|
||||
ids, тому після успішного повторного запуску дочірнього workflow перезапускайте лише невдалий
|
||||
батьківський job `Verify full validation`.
|
||||
Не використовуйте повну umbrella як перший повторний запуск після цільового
|
||||
виправлення. Якщо один box не проходить, використовуйте failed child workflow,
|
||||
job, Docker lane, package profile, model provider або QA lane для наступного
|
||||
доказу. Запускайте повну umbrella знову лише тоді, коли виправлення змінило
|
||||
спільну release orchestration або зробило попередні all-box докази застарілими.
|
||||
Фінальний верифікатор umbrella повторно перевіряє записані ідентифікатори
|
||||
запусків дочірніх workflow, тому після успішного повторного запуску дочірнього
|
||||
workflow повторно запускайте лише failed parent job `Verify full validation`.
|
||||
|
||||
Для обмеженого відновлення передайте `rerun_group` до umbrella. `all` — це справжній
|
||||
запуск release-candidate, `ci` запускає лише звичайний дочірній CI, `plugin-prerelease`
|
||||
запускає лише release-only дочірній Plugin, `release-checks` запускає кожен release
|
||||
box, а вужчі release groups — це `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.
|
||||
Для обмеженого відновлення передайте `rerun_group` до umbrella. `all` є справжнім
|
||||
запуском release-candidate, `ci` запускає лише дочірній normal CI,
|
||||
`plugin-prerelease` запускає лише release-only plugin child, `release-checks`
|
||||
запускає кожен release box, а вужчі release groups — це `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` використовують package artifact із
|
||||
release-checks.
|
||||
|
||||
### Vitest
|
||||
|
||||
Vitest box — це ручний дочірній workflow `CI`. Ручний CI навмисно
|
||||
обходить changed scoping і примусово запускає звичайний тестовий граф для release
|
||||
candidate: Linux Node shards, bundled-plugin shards, channel contracts, Node 22
|
||||
Vitest box — це ручний дочірній workflow `CI`. Ручний CI навмисно обходить
|
||||
changed scoping і примусово виконує звичайний test graph для release candidate:
|
||||
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.
|
||||
skills, Windows, macOS, Android і Control UI i18n.
|
||||
|
||||
Використовуйте цей box, щоб відповісти: «чи пройшло дерево source повний звичайний test suite?»
|
||||
Це не те саме, що release-path продуктова валідація. Докази, які треба зберегти:
|
||||
Використовуйте цей box, щоб відповісти: «чи пройшло дерево вихідного коду повний
|
||||
звичайний набір тестів?» Це не те саме, що release-path product validation.
|
||||
Докази, які слід зберегти:
|
||||
|
||||
- підсумок `Full Release Validation`, що показує URL запущеного `CI` run
|
||||
- зелений `CI` run на точному target SHA
|
||||
- назви невдалих або повільних shards із CI jobs під час розслідування регресій
|
||||
- артефакти таймінгів Vitest, як-от `.artifacts/vitest-shard-timings.json`, коли
|
||||
- зелений `CI` run на точному цільовому SHA
|
||||
- назви failed або slow shard із CI jobs під час дослідження регресій
|
||||
- артефакти часу Vitest, як-от `.artifacts/vitest-shard-timings.json`, коли
|
||||
запуск потребує аналізу продуктивності
|
||||
|
||||
Запускайте ручний CI напряму лише тоді, коли релізу потрібен детермінований звичайний CI, але
|
||||
не потрібні Docker, QA Lab, live, cross-OS або package boxes:
|
||||
Запускайте manual CI напряму лише тоді, коли релізу потрібен deterministic normal
|
||||
CI, але не Docker, QA Lab, live, cross-OS або package boxes:
|
||||
|
||||
```bash
|
||||
gh workflow run ci.yml --ref main -f target_ref=release/YYYY.M.D
|
||||
@ -403,16 +409,16 @@ 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 через упаковані
|
||||
Docker середовища, а не лише source-level тести.
|
||||
Docker box міститься в `OpenClaw Release Checks` через
|
||||
`openclaw-live-and-e2e-checks-reusable.yml`, а також release-mode workflow
|
||||
`install-smoke`. Він перевіряє release candidate через packaged Docker
|
||||
environments, а не лише source-level tests.
|
||||
|
||||
Release Docker покриття включає:
|
||||
Release Docker coverage включає:
|
||||
|
||||
- повний install smoke з увімкненим повільним Bun global install smoke
|
||||
- підготовку/повторне використання root Dockerfile smoke image за target SHA, з QR,
|
||||
root/gateway і installer/Bun smoke jobs, що запускаються як окремі install-smoke
|
||||
root/gateway і installer/Bun smoke jobs, що виконуються як окремі install-smoke
|
||||
shards
|
||||
- repository E2E lanes
|
||||
- release-path Docker chunks: `core`, `package-update-openai`,
|
||||
@ -422,54 +428,54 @@ Release Docker покриття включає:
|
||||
`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`, коли запитано
|
||||
- OpenWebUI coverage всередині chunk `plugins-runtime-services`, коли це запитано
|
||||
- розділені bundled plugin install/uninstall lanes
|
||||
`bundled-plugin-install-uninstall-0` through
|
||||
`bundled-plugin-install-uninstall-0` до
|
||||
`bundled-plugin-install-uninstall-23`
|
||||
- live/E2E provider suites і Docker live model coverage, коли release checks
|
||||
включають live suites
|
||||
|
||||
Використовуйте Docker артефакти перед повторним запуском. Release-path scheduler завантажує
|
||||
`.artifacts/docker-tests/` з lane logs, `summary.json`, `failures.json`,
|
||||
phase timings, scheduler plan JSON і rerun commands. Для точкового відновлення
|
||||
Використовуйте Docker artifacts перед повторним запуском. Release-path scheduler
|
||||
завантажує `.artifacts/docker-tests/` з lane logs, `summary.json`, `failures.json`,
|
||||
phase timings, scheduler plan JSON і rerun commands. Для цільового відновлення
|
||||
використовуйте `docker_lanes=<lane[,lane]>` у reusable live/E2E workflow замість
|
||||
повторного запуску всіх release chunks. Згенеровані rerun commands включають попередній
|
||||
`package_artifact_run_id` і підготовлені Docker image inputs, коли доступні, щоб
|
||||
невдала lane могла повторно використати той самий tarball і GHCR images.
|
||||
повторного запуску всіх release chunks. Згенеровані rerun commands включають
|
||||
попередній `package_artifact_run_id` і підготовлені Docker image inputs, коли
|
||||
вони доступні, тому failed lane може повторно використати той самий tarball і
|
||||
GHCR images.
|
||||
|
||||
### QA Lab
|
||||
|
||||
QA Lab box також є частиною `OpenClaw Release Checks`. Це агентний
|
||||
behavior і channel-level release gate, окремий від Vitest і Docker
|
||||
package mechanics.
|
||||
QA Lab box також є частиною `OpenClaw Release Checks`. Це release gate для
|
||||
agentic behavior і channel-level, окремий від Vitest і Docker package mechanics.
|
||||
|
||||
Release QA Lab покриття включає:
|
||||
Release QA Lab coverage включає:
|
||||
|
||||
- mock parity lane, що порівнює OpenAI candidate lane з Opus 4.6
|
||||
baseline за допомогою agentic parity pack
|
||||
- швидкий live Matrix QA profile з використанням середовища `qa-live-shared`
|
||||
- mock parity lane, що порівнює OpenAI candidate lane з Opus 4.6 baseline за
|
||||
допомогою agentic parity pack
|
||||
- fast live Matrix QA profile з використанням середовища `qa-live-shared`
|
||||
- live Telegram QA lane з використанням Convex CI credential leases
|
||||
- `pnpm qa:otel:smoke`, коли release telemetry потребує явного local proof
|
||||
- `pnpm qa:otel:smoke`, коли release telemetry потребує явного локального доказу
|
||||
|
||||
Використовуйте цей box, щоб відповісти: «чи реліз поводиться коректно в QA scenarios і
|
||||
live channel flows?» Зберігайте artifact URLs для parity, Matrix і Telegram
|
||||
lanes під час затвердження релізу. Повне Matrix покриття лишається доступним як
|
||||
ручний sharded QA-Lab run, а не default release-critical lane.
|
||||
Використовуйте цей box, щоб відповісти: «чи поводиться реліз правильно в QA
|
||||
scenarios і live channel flows?» Зберігайте URL артефактів для parity, Matrix і
|
||||
Telegram lanes під час схвалення релізу. Full Matrix coverage залишається
|
||||
доступним як ручний sharded QA-Lab run, а не як default release-critical lane.
|
||||
|
||||
### Package
|
||||
### Пакунок
|
||||
|
||||
Package box — це installable-product gate. Його підтримують
|
||||
Package box — це gate для installable-product. Він підтримується
|
||||
`Package Acceptance` і resolver
|
||||
`scripts/resolve-openclaw-package-candidate.mjs`. Resolver нормалізує
|
||||
candidate у tarball `package-under-test`, який споживає Docker E2E, валідовує
|
||||
package inventory, записує package version і SHA-256 та тримає
|
||||
workflow harness ref окремо від package source ref.
|
||||
`scripts/resolve-openclaw-package-candidate.mjs`. Resolver нормалізує candidate
|
||||
у tarball `package-under-test`, який споживає Docker E2E, перевіряє package
|
||||
inventory, записує package version і SHA-256, а також тримає workflow harness ref
|
||||
окремо від package source ref.
|
||||
|
||||
Підтримувані джерела candidate:
|
||||
|
||||
- `source=npm`: `openclaw@beta`, `openclaw@latest` або точна OpenClaw release
|
||||
version
|
||||
- `source=ref`: пакує довірену гілку `package_ref`, тег або повний commit SHA
|
||||
- `source=ref`: пакує довірену `package_ref` branch, tag або full commit SHA
|
||||
з вибраним `workflow_ref` harness
|
||||
- `source=url`: завантажує HTTPS `.tgz` з обов’язковим `package_sha256`
|
||||
- `source=artifact`: повторно використовує `.tgz`, завантажений іншим GitHub Actions run
|
||||
@ -481,35 +487,36 @@ workflow harness ref окремо від package source ref.
|
||||
`published_upgrade_survivor_scenarios=reported-issues` і
|
||||
`telegram_mode=mock-openai`. Package Acceptance тримає migration, update, stale
|
||||
plugin dependency cleanup, offline plugin fixtures, plugin update і Telegram
|
||||
package QA проти того самого розв’язаного tarball. Upgrade matrix покриває кожен stable npm-published baseline від `2026.4.23` до `latest`; використовуйте
|
||||
Package Acceptance з `source=npm` для вже shipped candidate або
|
||||
package QA проти того самого resolved tarball. Матриця upgrade охоплює кожен stable npm-published baseline від `2026.4.23` до `latest`; використовуйте
|
||||
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, але package/update product validation має
|
||||
надавати перевагу Package Acceptance.
|
||||
заміна для більшості package/update coverage, що раніше вимагало Parallels.
|
||||
Cross-OS release checks усе ще важливі для OS-specific onboarding, installer і
|
||||
platform behavior, але package/update product validation має надавати перевагу
|
||||
Package Acceptance.
|
||||
|
||||
Канонічний checklist для update і plugin validation —
|
||||
[Тестування оновлень і Plugin](/uk/help/testing-updates-plugins). Використовуйте його, коли
|
||||
вирішуєте, яка local, Docker, Package Acceptance або release-check lane доводить
|
||||
plugin install/update, doctor cleanup або published-package migration change.
|
||||
Вичерпна published update migration з кожного stable пакета `2026.4.23+` — це
|
||||
окремий ручний workflow `Update Migration`, а не частина Full Release CI.
|
||||
[Тестування оновлень і плагінів](/uk/help/testing-updates-plugins). Використовуйте
|
||||
його, коли вирішуєте, яка local, Docker, Package Acceptance або release-check
|
||||
lane доводить plugin install/update, doctor cleanup або published-package
|
||||
migration change.
|
||||
Вичерпна published update migration з кожного stable пакунка `2026.4.23+` є
|
||||
окремим ручним workflow `Update Migration`, а не частиною Full Release CI.
|
||||
|
||||
Legacy package-acceptance leniency навмисно обмежена в часі. Пакети до
|
||||
`2026.4.25` можуть використовувати compatibility path для metadata gaps, уже опублікованих
|
||||
у npm: private QA inventory entries, відсутні в tarball, відсутній
|
||||
`gateway install --wrapper`, відсутні patch files у tarball-derived git
|
||||
Legacy package-acceptance leniency навмисно обмежена в часі. Пакунки до
|
||||
`2026.4.25` включно можуть використовувати compatibility path для metadata gaps,
|
||||
уже опублікованих у npm: private QA inventory entries, відсутні в tarball,
|
||||
відсутній `gateway install --wrapper`, відсутні patch files у tarball-derived git
|
||||
fixture, відсутній persisted `update.channel`, legacy plugin install-record
|
||||
locations, відсутня marketplace install-record persistence і config metadata
|
||||
migration під час `plugins update`. Опублікований пакет `2026.4.26` може попереджати
|
||||
про local build metadata stamp files, які вже були shipped. Пізніші пакети
|
||||
мають задовольняти сучасні package contracts; ті самі gaps провалюють release
|
||||
validation.
|
||||
migration під час `plugins update`. Опублікований пакунок `2026.4.26` може
|
||||
попереджати про local build metadata stamp files, які вже були випущені. Пізніші
|
||||
пакунки мають задовольняти modern package contracts; ті самі gaps провалюють
|
||||
release validation.
|
||||
|
||||
Використовуйте ширші Package Acceptance profiles, коли release question стосується
|
||||
фактичного installable package:
|
||||
реального installable package:
|
||||
|
||||
```bash
|
||||
gh workflow run package-acceptance.yml \
|
||||
@ -523,35 +530,32 @@ gh workflow run package-acceptance.yml \
|
||||
|
||||
Поширені package profiles:
|
||||
|
||||
- `smoke`: швидкі лінії встановлення пакета/каналу/агента, мережі Gateway та
|
||||
перезавантаження конфігурації
|
||||
- `package`: контракти встановлення/оновлення/пакета Plugin без живого ClawHub; це типове значення
|
||||
release-check
|
||||
- `product`: `package` плюс канали MCP, очищення cron/субагентів, вебпошук OpenAI
|
||||
та OpenWebUI
|
||||
- `full`: фрагменти шляху Docker-релізу з OpenWebUI
|
||||
- `custom`: точний список `docker_lanes` для сфокусованих повторних запусків
|
||||
- `smoke`: швидке встановлення пакета/каналу/агента, мережа Gateway і смуги перезавантаження конфігурації
|
||||
- `package`: контракти встановлення/оновлення/пакета Plugin без live ClawHub; це типовий release-check
|
||||
- `product`: `package` плюс канали MCP, очищення cron/subagent, вебпошук OpenAI і OpenWebUI
|
||||
- `full`: частини шляху Docker-релізу з OpenWebUI
|
||||
- `custom`: точний список `docker_lanes` для цільових повторних запусків
|
||||
|
||||
Для підтвердження Telegram кандидата пакета увімкніть `telegram_mode=mock-openai` або
|
||||
`telegram_mode=live-frontier` у Package Acceptance. Робочий процес передає
|
||||
розв’язаний tarball `package-under-test` у лінію Telegram; окремий робочий процес
|
||||
Telegram все ще приймає опубліковану npm-специфікацію для перевірок після публікації.
|
||||
Для підтвердження кандидата пакета в Telegram увімкніть `telegram_mode=mock-openai` або
|
||||
`telegram_mode=live-frontier` у Package Acceptance. Workflow передає
|
||||
розв’язаний tarball `package-under-test` у смугу Telegram; окремий
|
||||
workflow Telegram усе ще приймає опубліковану npm-специфікацію для перевірок після публікації.
|
||||
|
||||
## Автоматизація публікації релізу
|
||||
|
||||
`OpenClaw Release Publish` є звичайною змінною точкою входу для публікації. Він
|
||||
оркеструє робочі процеси trusted-publisher у порядку, потрібному для релізу:
|
||||
`OpenClaw Release Publish` є звичайною мутувальною точкою входу для публікації. Він
|
||||
оркеструє workflows довіреного видавця в порядку, потрібному релізу:
|
||||
|
||||
1. Витягнути тег релізу та визначити його SHA коміту.
|
||||
2. Перевірити, що тег досяжний з `main` або `release/*`.
|
||||
1. Отримати release tag і визначити його commit SHA.
|
||||
2. Перевірити, що tag досяжний із `main` або `release/*`.
|
||||
3. Запустити `pnpm plugins:sync:check`.
|
||||
4. Запустити `Plugin NPM Release` з `publish_scope=all-publishable` і
|
||||
`ref=<release-sha>`.
|
||||
5. Запустити `Plugin ClawHub Release` з тією самою областю та SHA.
|
||||
6. Запустити `OpenClaw NPM Release` з тегом релізу, npm dist-tag і
|
||||
5. Запустити `Plugin ClawHub Release` з тією самою областю дії та SHA.
|
||||
6. Запустити `OpenClaw NPM Release` з release tag, npm dist-tag і
|
||||
збереженим `preflight_run_id`.
|
||||
|
||||
Приклад публікації бета-версії:
|
||||
Приклад публікації beta:
|
||||
|
||||
```bash
|
||||
gh workflow run openclaw-release-publish.yml \
|
||||
@ -561,7 +565,7 @@ gh workflow run openclaw-release-publish.yml \
|
||||
-f npm_dist_tag=beta
|
||||
```
|
||||
|
||||
Стабільна публікація до типового бета-dist-tag:
|
||||
Стабільна публікація в типовий beta dist-tag:
|
||||
|
||||
```bash
|
||||
gh workflow run openclaw-release-publish.yml \
|
||||
@ -581,91 +585,91 @@ gh workflow run openclaw-release-publish.yml \
|
||||
-f npm_dist_tag=latest
|
||||
```
|
||||
|
||||
Використовуйте нижчорівневі робочі процеси `Plugin NPM Release` і `Plugin ClawHub Release`
|
||||
лише для сфокусованого виправлення або повторної публікації. Для виправлення вибраного plugin передайте
|
||||
Використовуйте нижчорівневі workflows `Plugin NPM Release` і `Plugin ClawHub Release`
|
||||
лише для цільового ремонту або повторної публікації. Для ремонту вибраного Plugin передайте
|
||||
`plugin_publish_scope=selected` і `plugins=@openclaw/name` до
|
||||
`OpenClaw Release Publish`, або запускайте дочірній робочий процес безпосередньо, коли
|
||||
`OpenClaw Release Publish` або запустіть дочірній workflow напряму, коли
|
||||
пакет OpenClaw не має бути опублікований.
|
||||
|
||||
## Вхідні дані робочого процесу NPM
|
||||
## Вхідні параметри workflow NPM
|
||||
|
||||
`OpenClaw NPM Release` приймає такі керовані оператором вхідні дані:
|
||||
`OpenClaw NPM Release` приймає такі вхідні параметри, керовані оператором:
|
||||
|
||||
- `tag`: обов’язковий тег релізу, наприклад `v2026.4.2`, `v2026.4.2-1` або
|
||||
- `tag`: обов’язковий release tag, як-от `v2026.4.2`, `v2026.4.2-1` або
|
||||
`v2026.4.2-beta.1`; коли `preflight_only=true`, це також може бути поточний
|
||||
повний 40-символьний SHA коміту гілки робочого процесу для preflight лише з валідацією
|
||||
- `preflight_only`: `true` лише для валідації/збірки/пакета, `false` для
|
||||
повний 40-символьний commit SHA гілки workflow для preflight лише з перевіркою
|
||||
- `preflight_only`: `true` для лише перевірки/збірки/пакування, `false` для
|
||||
справжнього шляху публікації
|
||||
- `preflight_run_id`: обов’язковий у справжньому шляху публікації, щоб робочий процес повторно використовував
|
||||
- `preflight_run_id`: обов’язковий на справжньому шляху публікації, щоб workflow повторно використав
|
||||
підготовлений tarball з успішного preflight-запуску
|
||||
- `npm_dist_tag`: цільовий npm-тег для шляху публікації; типово `beta`
|
||||
|
||||
`OpenClaw Release Publish` приймає такі керовані оператором вхідні дані:
|
||||
`OpenClaw Release Publish` приймає такі вхідні параметри, керовані оператором:
|
||||
|
||||
- `tag`: обов’язковий тег релізу; має вже існувати
|
||||
- `preflight_run_id`: ідентифікатор успішного preflight-запуску `OpenClaw NPM Release`;
|
||||
- `tag`: обов’язковий release tag; уже має існувати
|
||||
- `preflight_run_id`: id успішного preflight-запуску `OpenClaw NPM Release`;
|
||||
обов’язковий, коли `publish_openclaw_npm=true`
|
||||
- `npm_dist_tag`: цільовий npm-тег для пакета OpenClaw
|
||||
- `plugin_publish_scope`: типово `all-publishable`; використовуйте `selected` лише
|
||||
для сфокусованого виправлення
|
||||
для цільового ремонту
|
||||
- `plugins`: розділені комами назви пакетів `@openclaw/*`, коли
|
||||
`plugin_publish_scope=selected`
|
||||
- `publish_openclaw_npm`: типово `true`; встановлюйте `false` лише під час використання
|
||||
робочого процесу як оркестратора виправлення тільки для plugin
|
||||
- `publish_openclaw_npm`: типово `true`; встановлюйте `false` лише коли використовуєте
|
||||
workflow як оркестратор ремонту тільки Plugin
|
||||
|
||||
`OpenClaw Release Checks` приймає такі керовані оператором вхідні дані:
|
||||
`OpenClaw Release Checks` приймає такі вхідні параметри, керовані оператором:
|
||||
|
||||
- `ref`: гілка, тег або повний SHA коміту для валідації. Перевірки із секретами
|
||||
вимагають, щоб визначений коміт був досяжний з гілки OpenClaw або
|
||||
тегу релізу.
|
||||
- `ref`: гілка, tag або повний commit SHA для перевірки. Перевірки,
|
||||
що містять секрети, вимагають, щоб розв’язаний коміт був досяжний з гілки OpenClaw або
|
||||
release tag.
|
||||
|
||||
Правила:
|
||||
|
||||
- Стабільні теги та теги виправлень можуть публікуватися або до `beta`, або до `latest`
|
||||
- Бета-теги попереднього релізу можуть публікуватися лише до `beta`
|
||||
- Для `OpenClaw NPM Release` вхідний повний SHA коміту дозволений лише коли
|
||||
- Стабільні та корекційні tags можуть публікуватися або до `beta`, або до `latest`
|
||||
- Beta prerelease tags можуть публікуватися лише до `beta`
|
||||
- Для `OpenClaw NPM Release` введення повного commit SHA дозволене лише коли
|
||||
`preflight_only=true`
|
||||
- `OpenClaw Release Checks` і `Full Release Validation` завжди є
|
||||
лише валідаційними
|
||||
- Справжній шлях публікації має використовувати той самий `npm_dist_tag`, який використовувався під час preflight;
|
||||
робочий процес перевіряє ці метадані перед продовженням публікації
|
||||
- `OpenClaw Release Checks` і `Full Release Validation` завжди
|
||||
лише перевіряють
|
||||
- Справжній шлях публікації має використовувати той самий `npm_dist_tag`, що використовувався під час preflight;
|
||||
workflow перевіряє ці metadata перед продовженням публікації
|
||||
|
||||
## Послідовність стабільного npm-релізу
|
||||
|
||||
Під час підготовки стабільного npm-релізу:
|
||||
|
||||
1. Запустіть `OpenClaw NPM Release` з `preflight_only=true`
|
||||
- До існування тегу можна використати поточний повний SHA коміту гілки робочого процесу
|
||||
для валідаційного dry run робочого процесу preflight
|
||||
- До появи tag можна використати поточний повний commit SHA гілки workflow
|
||||
для пробного запуску preflight workflow лише з перевіркою
|
||||
2. Виберіть `npm_dist_tag=beta` для звичайного потоку beta-first або `latest` лише
|
||||
коли ви навмисно хочете пряме стабільне публікування
|
||||
3. Запустіть `Full Release Validation` на гілці релізу, тегу релізу або повному
|
||||
SHA коміту, коли потрібні звичайний CI плюс live prompt cache, Docker, QA Lab,
|
||||
Matrix і покриття Telegram з одного ручного робочого процесу
|
||||
коли ви навмисно хочете пряму стабільну публікацію
|
||||
3. Запустіть `Full Release Validation` на release branch, release tag або повному
|
||||
commit SHA, коли вам потрібні звичайний CI плюс live prompt cache, Docker, QA Lab,
|
||||
Matrix і покриття Telegram з одного ручного workflow
|
||||
4. Якщо вам навмисно потрібен лише детермінований звичайний граф тестів, запустіть
|
||||
ручний робочий процес `CI` на ref релізу натомість
|
||||
ручний workflow `CI` на release ref натомість
|
||||
5. Збережіть успішний `preflight_run_id`
|
||||
6. Запустіть `OpenClaw Release Publish` з тим самим `tag`, тим самим `npm_dist_tag`
|
||||
і збереженим `preflight_run_id`; він публікує externalized plugins до npm
|
||||
і збереженим `preflight_run_id`; він публікує зовнішні plugins до npm
|
||||
і ClawHub перед просуванням npm-пакета OpenClaw
|
||||
7. Якщо реліз потрапив до `beta`, використовуйте приватний робочий процес
|
||||
`openclaw/releases-private/.github/workflows/openclaw-npm-dist-tags.yml`
|
||||
для просування цієї стабільної версії з `beta` до `latest`
|
||||
8. Якщо реліз навмисно опублікований безпосередньо до `latest`, а `beta`
|
||||
має негайно наслідувати ту саму стабільну збірку, використовуйте той самий приватний
|
||||
робочий процес, щоб спрямувати обидва dist-tags на стабільну версію, або дозвольте його запланованій
|
||||
self-healing синхронізації перемістити `beta` пізніше
|
||||
7. Якщо реліз потрапив у `beta`, використайте приватний
|
||||
workflow `openclaw/releases-private/.github/workflows/openclaw-npm-dist-tags.yml`,
|
||||
щоб просунути цю стабільну версію з `beta` до `latest`
|
||||
8. Якщо реліз навмисно опубліковано безпосередньо до `latest` і `beta`
|
||||
має негайно вказувати на ту саму стабільну збірку, використайте той самий приватний
|
||||
workflow, щоб спрямувати обидва dist-tags на стабільну версію, або дозвольте його запланованій
|
||||
самовідновлювальній синхронізації перемістити `beta` пізніше
|
||||
|
||||
Зміна dist-tag розміщена в приватному репозиторії з міркувань безпеки, тому що вона все ще
|
||||
вимагає `NPM_TOKEN`, тоді як публічний репозиторій зберігає OIDC-only публікацію.
|
||||
Мутація dist-tag розміщена в приватному репозиторії з міркувань безпеки, бо вона все ще
|
||||
потребує `NPM_TOKEN`, тоді як публічний репозиторій зберігає публікацію лише через OIDC.
|
||||
|
||||
Це робить як шлях прямої публікації, так і шлях beta-first просування
|
||||
Це зберігає і шлях прямої публікації, і шлях beta-first promotion
|
||||
задокументованими та видимими для оператора.
|
||||
|
||||
Якщо супровідник мусить повернутися до локальної npm-автентифікації, запускайте будь-які команди 1Password
|
||||
CLI (`op`) лише всередині виділеної tmux-сесії. Не викликайте `op`
|
||||
безпосередньо з основної оболонки агента; утримання цього всередині tmux робить підказки,
|
||||
сповіщення та обробку OTP спостережуваними й запобігає повторним сповіщенням хоста.
|
||||
Якщо maintainer мусить повернутися до локальної npm-автентифікації, запускайте будь-які команди 1Password
|
||||
CLI (`op`) лише всередині спеціальної сесії tmux. Не викликайте `op`
|
||||
безпосередньо з основної оболонки агента; утримання його всередині tmux робить prompts,
|
||||
alerts і обробку OTP спостережуваними та запобігає повторним alerts на хості.
|
||||
|
||||
## Публічні посилання
|
||||
|
||||
@ -679,7 +683,7 @@ CLI (`op`) лише всередині виділеної tmux-сесії. Не
|
||||
- [`scripts/package-mac-dist.sh`](https://github.com/openclaw/openclaw/blob/main/scripts/package-mac-dist.sh)
|
||||
- [`scripts/make_appcast.sh`](https://github.com/openclaw/openclaw/blob/main/scripts/make_appcast.sh)
|
||||
|
||||
Супровідники використовують приватну документацію релізу в
|
||||
Maintainers використовують приватну документацію релізів у
|
||||
[`openclaw/maintainers/release/README.md`](https://github.com/openclaw/maintainers/blob/main/release/README.md)
|
||||
для фактичного runbook.
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user