릴리스 체크리스트 (npm + macOS)
리포지토리 루트에서 pnpm (Node 22+)을 사용합니다. 태그/게시 전에 작업 트리를 깨끗하게 유지하세요.
운영자 트리거
운영자가 "release"라고 말하면 즉시 이 프리플라이트를 수행합니다 (차단되지 않는 한 추가 질문 없음):
- 이 문서와 docs/platforms/mac/release.md를 읽기
- ~/.profile에서 환경 변수를 로드하고 SPARKLE_PRIVATE_KEY_FILE + App Store Connect 변수가 설정되었는지 확인 (SPARKLE_PRIVATE_KEY_FILE은 ~/.profile에 있어야 함)
- 필요한 경우 ~/Library/CloudStorage/Dropbox/Backup/Sparkle에서 Sparkle 키 사용
버전 및 메타데이터
- package.json 버전 업데이트 (예: 2026.1.29)
- pnpm plugins:sync를 실행하여 확장 패키지 버전 + 변경 로그 정렬
- CLI/버전 문자열 업데이트: src/cli/program.ts 및 src/provider-web.ts의 Baileys 사용자 에이전트
- 패키지 메타데이터 (name, description, repository, keywords, license) 확인 및 bin 맵이 openclaw의 openclaw.mjs를 가리키는지 확인
- 종속성이 변경된 경우 pnpm install을 실행하여 pnpm-lock.yaml을 최신 상태로 유지
빌드 및 아티팩트
- A2UI 입력이 변경된 경우 pnpm canvas:a2ui:bundle을 실행하고 업데이트된 src/canvas-host/a2ui/a2ui.bundle.js를 커밋
- pnpm run build (dist/ 재생성)
- npm 패키지 files에 모든 필수 dist/* 폴더가 포함되어 있는지 확인 (특히 헤드리스 node + ACP CLI용 dist/node-host/** 및 dist/acp/**)
- 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 생성 (scripts/make_appcast.sh를 통한 HTML 노트) 및 appcast.xml 업데이트
- GitHub 릴리스에 첨부할 앱 zip (및 선택적 dSYM zip) 준비
- 정확한 명령 및 필수 환경 변수는 macOS 릴리스 참조
APP_BUILD는 숫자 + 단조 증가여야 합니다 (-beta 없음). 이렇게 해야 Sparkle이 버전을 올바르게 비교합니다.
- 공증하는 경우 App Store Connect API 환경 변수에서 생성된 openclaw-notary 키체인 프로필 사용 (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을 생성: dist/OpenClaw.app의 macOS 앱 번들 (및 릴리스 zip)이 패키지로 포함됩니다. package.json의 files를 통해 게시 내용을 화이트리스트하여 수정 (dist 하위 디렉터리, docs, skills 포함; 앱 번들 제외). npm pack --dry-run으로 dist/OpenClaw.app이 나열되지 않는지 확인합니다.
-
dist-tags에 대한 npm auth 웹 루프: 레거시 인증을 사용하여 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)
- vX.Y.Z에 대한 GitHub 릴리스를 생성/갱신, 제목은 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)
@openclaw/* 범위 아래의 기존 npm 플러그인만 게시합니다. 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)도 명시해야 합니다.