OpenClaw Mac Release
Use com $openclaw-release-maintainer, $openclaw-release-ci e $one-password quando estiver envolvido com artefatos estáveis do macOS, preflight particular do macOS, notarização, promoção de appcast ou recuperação de release do macOS.
Credenciais
- Item Canonical ASC: cofre
Molty, títuloAPI Key - App Store Connect - Personal - Release. - Campos:
private_key_p8,key_id,issuer_id. - ID de chave conhecido atualmente bom:
AKVLXW849T. - Mirror legado: cofre
Private, títuloAPI Key - App Store Connect - Personal; mantenha-o sincronizado para referências antigas. - Sintoma de chave desatualizada/revogada:
xcrun notarytool submitfalha comHTTP status code: 401. Unauthenticated. - Valide as credenciais ASC candidatas com
xcrun notarytool historyantes de definir segredos do GitHub.
1Password
- Use
$one-password: todo trabalhoopdentro de uma sessão persistente do tmux, sem saída de segredos. - Prefira
OP_SERVICE_ACCOUNT_TOKENde~/.profilepara leituras do Molty. - Não presuma que
MOLTY_OP_SERVICE_ACCOUNT_TOKENesteja ativo; ele já apontou para uma conta de serviço excluída. - Se um token de serviço falhar, execute apenas verificações de status: token presente/comprimento e
op whoami; nunca imprima valores de token. - Se a autenticação do aplicativo de desktop for necessária, mas o Touch ID não estiver disponível, defina
OP_BIOMETRIC_UNLOCK_ENABLED=falsepara o caminho manual deop account add --signin.
Segredos do GitHub
Ambiente do repositório privado de destino: openclaw/releases-private, env mac-release.
Defina somente após validação de autenticação de notário local:
APP_STORE_CONNECT_API_KEY_P8APP_STORE_CONNECT_KEY_IDAPP_STORE_CONNECT_ISSUER_ID
Não atualize estes a partir de fontes mistas. Todos os três campos ASC devem vir do mesmo item do 1Password.
Forma do Workflow
- O branch de release público pode conter correções de empacotamento exclusivas do macOS após a tag estável/npm já estarem ao vivo.
- Use
source_ref=release/YYYY.M.Dpara preflight/validação particular do macOS ao construir essa variação de branch. - Mantenha
tag=vYYYY.M.Dapontando para o commit original da release estável. - A publicação real do macOS deve reutilizar:
- uma execução bem-sucedida de preflight particular do macOS para a mesma tag/SHA de origem
- uma execução bem-sucedida de validação particular do macOS para a mesma tag/SHA de origem
- Se o SHA de origem do preflight for diferente do SHA da tag, a validação também deve usar o mesmo
source_ref; a promoção rejeita prova incompatível.
Notarização
- OpenClaw usa
scripts/notarize-mac-artifact.sh. xcrun notarytool submitdeve usar--no-s3-acceleration; upload acelerado pode exibir 401s enganosos mesmo quandonotarytool historyé bem-sucedido.- Se a assinatura for bem-sucedida, mas a notarização falhar imediatamente com 401, verifique primeiro a frescura da chave ASC.
- Se a notarização permanecer em andamento por vários minutos após a escrita do arquivo de chave, isso é tempo de espera normal da Apple; não edite às cegas.
Despacho
Preflight particular:
gh workflow run openclaw-macos-publish.yml --repo openclaw/releases-private --ref main \
-f tag=vYYYY.M.D \
-f source_ref=release/YYYY.M.D \
-f preflight_only=true \
-f smoke_test_only=false \
-f allow_late_calver_recovery=false \
-f public_release_branch=release/YYYY.M.D
Validação particular para um preflight de variação de branch:
gh workflow run openclaw-macos-validate.yml --repo openclaw/releases-private --ref main \
-f tag=vYYYY.M.D \
-f source_ref=release/YYYY.M.D
Publicação real:
gh workflow run openclaw-macos-publish.yml --repo openclaw/releases-private --ref main \
-f tag=vYYYY.M.D \
-f preflight_only=false \
-f smoke_test_only=false \
-f preflight_run_id=<id-da-execucao-preflight-bem-sucedida> \
-f validate_run_id=<id-da-execucao-validacao-bem-sucedida> \
-f allow_late_calver_recovery=false \
-f public_release_branch=release/YYYY.M.D
Verificar
gh release view vYYYY.M.D --repo openclaw/openclawmostra zip, dmg, zip dSYM, não rascunho, não pré-lançamento.appcast.xmldomainpúblico aponta paraOpenClaw-YYYY.M.D.zip.- A entrada do appcast tem
sparkle:version,sparkle:shortVersionString, comprimento esparkle:edSignature.