릴리스 체크리스트 (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.tssrc/provider-web.ts의 Baileys 사용자 에이전트
  • 패키지 메타데이터 (name, description, repository, keywords, license) 확인 및 bin 맵이 openclawopenclaw.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.jsonfiles를 통해 게시 내용을 화이트리스트하여 수정 (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)도 명시해야 합니다.