OpenClaw Mac 릴리스
$release-openclaw-maintainer, $release-openclaw-ci, $one-password 및 (존재하는 경우) $release-private와 함께 사용하세요. 안정적인 macOS 자산, release-ops mac 사전 점검, 공증, 앱캐스트 프로모션 또는 mac 릴리스 복구가 포함될 때 사용합니다.
이것은 일반적인 안정 릴리스 스킬입니다. 확장 안정(stable) 트랙에는 호출하지 마세요. 해당 트랙의 GitHub 릴리스는 공유 검증 증거를 포함하지만 macOS 자산이나 앱캐스트 프로모션을 상속하지 않습니다.
릴리스 승인
명시적인 안정 릴리스 또는 전체 릴리스 요청에는 운영자가 범위를 제한하지 않는 한 macOS 게시가 포함됩니다. 별도의 macOS 동의를 구하지 않고 검증, 서명, 공증, 프로모션 및 확인을 계속 진행하세요. 정확한 릴리스 ID와 모든 아티팩트 검사를 유지하세요. macOS 게시는 npm과 병렬로 실행되며 npm을 차단하지 않습니다. macOS 실패는 npm/ClawHub 릴리스, GitHub 릴리스 마무리 또는 주요 종료를 지연시키지 않습니다. 병렬로 수정하세요.
현재 소유자가 구성한 환경 정책을 따르세요. 추가 검토자 요구 사항을 임의로 만들거나 오래된 요구 사항을 재현하지 마세요. GitHub에서 여전히 승인을 요구하는 경우 실제 규칙을 보고하고 해당 소유자를 통해 해결하세요. 정책 변경은 명시적인 조직 소유자의 지시와 확인된 활성 관리자 멤버십이 필요합니다. 검토자를 사칭하거나 승인을 위조하거나 강제된 규칙을 우회하기 위해 다른 서명 경로를 사용하지 마세요.
자격 증명
- Peter 소유의 ASC 항목 참조, 키 ID, 발급자 ID 및 서비스 토큰 출처를
$release-private에서 확인하세요. - 필드:
private_key_p8,key_id,issuer_id. - 만료/폐기된 키 증상:
xcrun notarytool submit이HTTP status code: 401. Unauthenticated오류로 실패합니다. - 후보 ASC 자격 증명은 GitHub 시크릿을 설정하기 전에
xcrun notarytool history로 검증하세요.
1Password
$one-password를 사용하세요. 모든op작업은 단일 영구 tmux 세션 내에서 수행되며 시크릿을 출력하지 않습니다.- 가능한 경우
$release-private의 서비스 토큰 지침을 사용하세요. - 서비스 토큰이 실패하면 상태 확인(토큰 존재/길이 및
op whoami)만 실행하고 토큰 값을 절대 출력하지 마세요. - 데스크톱 앱 인증이 필요하지만 Touch ID를 사용할 수 없는 경우 수동
op account add --signin경로를 위해OP_BIOMETRIC_UNLOCK_ENABLED=false를 설정하세요.
GitHub 시크릿
대상 release-ops 저장소 환경: openclaw/releases, 환경 mac-release.
로컬 공증 인증 검증 후에만 설정하세요:
APP_STORE_CONNECT_API_KEY_P8APP_STORE_CONNECT_KEY_IDAPP_STORE_CONNECT_ISSUER_ID
혼합 소스에서 이 값들을 업데이트하지 마세요. 세 가지 ASC 필드는 모두 동일한 1Password 항목에서 가져와야 합니다.
워크플로 구조
openclaw/openclaw는 공개 제품 저장소입니다. GitHub 릴리스 페이지는 macOS 자산이 최종적으로 첨부되는 곳입니다.openclaw/openclaw의macos-release.yml은 공개 핸드오프 검증 전용입니다.preflight_only값에 관계없이 macOS 자산에 서명, 공증 또는 업로드하지 않습니다.openclaw/releases는 제한된 릴리스-ops 저장소입니다. macOS 워크플로는 자산에 서명, 공증, 검증하고 이를openclaw/openclawGitHub 릴리스로 승격합니다.- 공개 릴리스 브랜치는 안정 태그/npm이 이미 라이브 상태인 후에 macOS 전용 패키징 수정 사항을 포함할 수 있습니다.
- 브랜치 변형을 빌드할 때 release-ops mac 사전 점검/검증에는
source_ref=release/YYYY.M.PATCH를 사용하세요. tag=vYYYY.M.PATCH를 원래 안정 릴리스 커밋을 가리키도록 유지하세요.- 실제 mac 게시는 다음을 재사용해야 합니다:
- 동일한 태그/소스 SHA에 대한 성공적인 release-ops mac 사전 점검 실행
- 동일한 태그/소스 SHA에 대한 성공적인 release-ops mac 검증 실행
- Release-ops 사전 점검 및 실제 게시는 서명 및 프로모션 시크릿과 메인 전용 배포 정책을 위해
mac-release환경을 사용합니다. 승인된 릴리스 운영자는 해당 환경의 현재 규칙에 따라 계속 작업합니다. - 사전 점검 소스 SHA가 태그 SHA와 다른 경우 검증도 동일한
source_ref를 사용해야 합니다. 프로모션은 불일치 증거를 거부합니다.
공증
- OpenClaw는
scripts/notarize-mac-artifact.sh를 사용합니다. xcrun notarytool submit은--no-s3-acceleration을 사용해야 합니다. 가속 업로드는notarytool history가 성공하더라도 오해의 소지가 있는 401 오류를 표시할 수 있습니다.- 서명은 성공했지만 공증이 401로 즉시 실패하면 ASC 키의 최신 상태를 먼저 확인하세요.
- 키 파일 작성 후 공증이 몇 분 동안 진행 중 상태로 유지되면 이는 정상적인 Apple 대기 시간이므로 맹목적으로 편집하지 마세요.
디스패치
공개 핸드오프 워크플로는 게시 전에 태그, 소스, 빌드 및 패키지 메타데이터를 검증합니다. 자산을 업로드하지 않으므로 GitHub 릴리스 페이지가 필요하지 않습니다. 이 검증을 실제 게시 워크플로 전에 유지하세요. 핵심 게시자는 GitHub 릴리스 마무리를 소유합니다. macOS 프로모션은 릴리스가 초안 상태인지 또는 이미 공개 상태인지에 관계없이 검증된 자산을 해당 릴리스에 첨부하므로 npm 전환을 기다리지 않습니다.
공개 핸드오프 검증:
gh workflow run macos-release.yml --repo openclaw/openclaw \
--ref release/YYYY.M.PATCH \
-f tag=vYYYY.M.PATCH \
-f preflight_only=true \
-f public_release_branch=release/YYYY.M.PATCH
- 워크플로 참조로 공개 릴리스 브랜치를 사용하여 Actions 목록에
release/YYYY.M.PATCH가 표시되어 이전의 안정적인 macOS 핸드오프 실행과 일치하도록 하세요. - 이 공개 핸드오프 검증에는
--ref main또는--ref vYYYY.M.PATCH를 사용하지 마세요. 워크플로는tag입력에서 내부적으로 태그를 체크아웃합니다.
Release-ops 사전 점검:
gh workflow run openclaw-macos-publish.yml --repo openclaw/releases --ref main \
-f tag=vYYYY.M.PATCH \
-f source_ref=release/YYYY.M.PATCH \
-f preflight_only=true \
-f smoke_test_only=false \
-f allow_late_calver_recovery=false \
-f public_release_branch=release/YYYY.M.PATCH
구성된 환경 정책에 따라 서명 및 공증을 통해 실행을 모니터링하세요. 성공적인 사전 점검 실행 ID를 기록하세요. 승인 일시 중지는 성공적인 사전 점검이 아닙니다.
재개가 기본값입니다. 실패(공증 중단, DMG 패키징, 수집기) 후 동일한 사전 점검 명령을 다시 디스패치하면 동일한 태그 및 소스 SHA에 대한 실패하거나 취소된 main 디스패치가 남긴 가장 최근 체크포인트에서 모든 변형이 재개됩니다. 체크포인트가 없는 변형만 다시 빌드됩니다. 실행 로그에 Resuming <variant> from run <id> attempt <n> 또는 Building <variant>가 출력됩니다. ignore_checkpoints=true는 강제로 새로 빌드합니다. resume_notarization_run_id, resume_notarization_run_attempt 및 resume_notarization_variant는 특정 실행 하나를 고정하거나 재개 인덱스가 존재하기 전에 만들어진 체크포인트(macos-resume-<tag>-<variant>-<sha> 아티팩트)에만 전달하세요. 실패한 작업이 현재 실행에 여전히 있는 경우 gh run rerun <run-id> --failed --repo openclaw/releases를 선호합니다.
브랜치 변형 사전 점검에 대한 Release-ops 검증:
gh workflow run openclaw-macos-validate.yml --repo openclaw/releases --ref main \
-f tag=vYYYY.M.PATCH \
-f source_ref=release/YYYY.M.PATCH
성공적인 검증 실행 ID를 기록하세요.
실제 게시:
gh workflow run openclaw-macos-publish.yml --repo openclaw/releases --ref main \
-f tag=vYYYY.M.PATCH \
-f preflight_only=false \
-f smoke_test_only=false \
-f preflight_run_id=<성공한-사전점검-실행> \
-f validate_run_id=<성공한-검증-실행> \
-f allow_late_calver_recovery=false \
-f public_release_branch=release/YYYY.M.PATCH
동일한 릴리스 승인 및 현재 환경 정책에 따라 자산 업로드 및 앱캐스트 게시를 통한 프로모션을 모니터링하세요.
- Release-ops
openclaw/releases게시/검증 워크플로는 자체 신뢰할 수 있는main워크플로 참조에서 실행됩니다. 실제 게시에는 다른 워크플로 참조를 거부하는 보호 장치가 있습니다. 표시된main참조는 예상된 것입니다. 공개 OpenClaw 소스는tag및 선택적source_ref로 선택됩니다.
확인
gh release view vYYYY.M.PATCH --repo openclaw/openclaw는 zip, dmg, dSYM zip을 표시합니다. npm 게시자가 전환한 후에는 초안도 사전 릴리스도 아닙니다.- 공개
mainappcast.xml은OpenClaw-YYYY.M.PATCH.zip을 가리킵니다. - 앱캐스트 항목에는
sparkle:version,sparkle:shortVersionString, 길이 및sparkle:edSignature가 있습니다.