Контрольный список релиза (npm + macOS)
Используйте pnpm (Node 22+) из корня репозитория. Сохраняйте рабочее дерево чистым перед тегированием/публикацией.
Триггер оператора
Когда оператор говорит «release», немедленно выполните эту предполетную проверку (никаких дополнительных вопросов, если не заблокировано):
- Прочитайте этот документ и docs/platforms/mac/release.md
- Загрузите переменные окружения из ~/.profile и подтвердите, что установлены SPARKLE_PRIVATE_KEY_FILE + переменные App Store Connect (SPARKLE_PRIVATE_KEY_FILE должен находиться в ~/.profile)
- При необходимости используйте ключи Sparkle из ~/Library/CloudStorage/Dropbox/Backup/Sparkle
Версия и метаданные
- Обновите версию в package.json (например, 2026.1.29)
- Запустите pnpm plugins:sync для выравнивания версий пакетов расширений + журналов изменений
- Обновите строки CLI/версии: src/cli/program.ts и пользовательский агент Baileys в src/provider-web.ts
- Подтвердите метаданные пакета (name, description, repository, keywords, license) и что карта bin указывает на openclaw.mjs для openclaw
- Если зависимости изменились, запустите pnpm install, чтобы pnpm-lock.yaml был актуальным
Сборка и артефакты
- Если входные данные A2UI изменились, запустите pnpm canvas:a2ui:bundle и закоммитьте обновленный src/canvas-host/a2ui/a2ui.bundle.js
- pnpm run build (регенерирует dist/)
- Убедитесь, что npm-пакет files включает все необходимые папки dist/* (особенно dist/node-host/** и dist/acp/** для headless node + ACP CLI)
- Подтвердите, что существует dist/build-info.json и включает ожидаемый хэш коммита (баннер CLI использует это для установок npm)
- Опционально: выполните npm pack --pack-destination /tmp после сборки; проверьте содержимое tarball и сохраните его для релиза GitHub (не коммитьте)
Журнал изменений и документация
- Обновите CHANGELOG.md с основными моментами для пользователей (создайте файл, если отсутствует); сохраняйте записи строго в порядке убывания версий
- Убедитесь, что примеры/флаги README соответствуют текущему поведению CLI (особенно новые команды или опции)
Проверка
- pnpm build
- pnpm check
- pnpm test (или pnpm test:coverage, если требуется вывод покрытия)
- pnpm release:check (проверяет содержимое npm pack)
- OPENCLAW_INSTALL_SMOKE_SKIP_NONROOT=1 pnpm test:install:smoke (дымовой тест установки Docker, быстрый путь; обязателен перед релизом)
Если известно, что предыдущий релиз npm сломан, установите OPENCLAW_INSTALL_SMOKE_PREVIOUS= или OPENCLAW_INSTALL_SMOKE_SKIP_PREVIOUS=1 для шага предустановки.
- (Опционально) Полный дымовой тест установщика (добавляет покрытие non-root + CLI): pnpm test:install:smoke
- (Опционально) E2E установщика (Docker, запускает curl -fsSL https://openclaw.ai/install.sh | bash, выполняет онбординг, затем запускает реальные вызовы инструментов):
- pnpm test:install:e2e:openai (требуется OPENAI_API_KEY)
- pnpm test:install:e2e:anthropic (требуется ANTHROPIC_API_KEY)
- pnpm test:install:e2e (требуются оба ключа; запускает обоих провайдеров)
- (Опционально) Выборочная проверка веб-шлюза, если ваши изменения влияют на пути отправки/получения
Приложение macOS (Sparkle)
- Соберите + подпишите приложение macOS, затем заархивируйте его для распространения
- Создайте Sparkle appcast (HTML-заметки через scripts/make_appcast.sh) и обновите appcast.xml
- Сохраните zip-файл приложения (и опциональный dSYM zip) для прикрепления к релизу GitHub
- Следуйте релизу macOS для точных команд и требуемых переменных окружения
APP_BUILD должен быть числовым + монотонно возрастающим (без -beta), чтобы Sparkle корректно сравнивал версии.
- При нотаризации используйте профиль связки ключей openclaw-notary, созданный из переменных окружения App Store Connect API (см. релиз macOS)
Публикация (npm)
- Подтвердите, что git status чист; закоммитьте и отправьте по мере необходимости
- При необходимости выполните npm login (проверьте 2FA)
- npm publish --access public (используйте --tag beta для предварительных релизов)
- Проверьте реестр: npm view openclaw version, npm view openclaw dist-tags и npx -y openclaw@latest --version (или --help)
Устранение неполадок (заметки из релиза 2.0.0-beta2)
-
npm pack/publish зависает или создает огромный tarball: пакет приложения macOS в dist/OpenClaw.app (и релизные zip-файлы) попадают в пакет. Исправьте, добавив содержимое публикации в белый список через package.json files (включите подкаталоги dist, docs, skills; исключите пакеты приложений). Подтвердите с помощью npm pack --dry-run, что dist/OpenClaw.app не указан.
-
Цикл веб-аутентификации npm для dist-tags: используйте устаревшую аутентификацию для получения запроса OTP:
NPM_CONFIG_AUTH_TYPE=legacy npm dist-tag add [email protected] latest -
Проверка npx завершается с ECOMPROMISED: Блокировка скомпрометирована: повторите с новым кэшем:
NPM_CONFIG_CACHE=/tmp/npm-cache-$(date +%s) npx -y openclaw@latest --version -
Тег требует переназначения после позднего исправления: принудительно обновите и отправьте тег, затем убедитесь, что ресурсы релиза GitHub все еще совпадают:
git tag -f vX.Y.Z && git push -f origin vX.Y.Z
Релиз GitHub + appcast
- Создайте тег и отправьте: git tag vX.Y.Z && git push origin vX.Y.Z (или git push --tags)
- Создайте/обновите релиз GitHub для vX.Y.Z с заголовком openclaw X.Y.Z (не только тег); тело должно включать полный раздел журнала изменений для этой версии (Основные моменты + Изменения + Исправления), встроенный (без голых ссылок), и не должно повторять заголовок внутри тела
- Прикрепите артефакты: npm pack tarball (опционально), OpenClaw-X.Y.Z.zip и OpenClaw-X.Y.Z.dSYM.zip (если создано)
- Закоммитьте обновленный appcast.xml и отправьте (Sparkle питается из main)
- Из чистого временного каталога (без package.json) запустите npx -y openclaw@latest send --help, чтобы подтвердить работу точек входа установки/CLI
- Объявите/поделитесь примечаниями к релизу
Область публикации плагинов (npm)
Мы публикуем только существующие npm-плагины в области @openclaw/*. Встроенные плагины, которых нет в npm, остаются только в дереве диска (все еще поставляются в extensions/**).
Процесс получения списка:
- Выполните npm search @openclaw --json и захватите имена пакетов
- Сравните с именами extensions/*/package.json
- Публикуйте только пересечение (уже в npm)
Текущий список npm-плагинов (обновляйте по мере необходимости):
- @openclaw/bluebubbles
- @openclaw/diagnostics-otel
- @openclaw/discord
- @openclaw/lobster
- @openclaw/matrix
- @openclaw/msteams
- @openclaw/nextcloud-talk
- @openclaw/nostr
- @openclaw/voice-call
- @openclaw/zalo
- @openclaw/zalouser
Примечания к релизу также должны указывать новые опциональные встроенные плагины, которые не включены по умолчанию (пример: tlon).