Appearance
Runbook: Pipeline EAS (build + submit às lojas)
A cada push na branch
main— depois quelint,format,testetypecheckpassam — o jobeas-publishdoci.ymldispara um build nativo de Android + iOS (perfilproduction) nos servidores do EAS e, ao terminar, submete automaticamente às lojas (--auto-submit).Primeiro envio / configuração manual das lojas: ver publicacao-lojas-mobile.
Arquivos envolvidos
.github/workflows/ci.yml— jobeas-publish(build + submit).eas.json— perfisbuild.production(autoIncrement) esubmit.production(Android no trackinternal).app.json—extra.eas.projectId,owner: contrasync,runtimeVersion.policy: appVersion.
Projeto EAS: @contrasync/contrasync-app (409313df-bb14-45e4-a689-87c83d3edf7d).
Setup (uma vez)
1. Token de acesso do Expo (obrigatório p/ o CI)
O login do eas na máquina local não vale no GitHub Actions. Crie um token robô:
- Acesse https://expo.dev/accounts/contrasync/settings/access-tokens.
- Gere um token e copie o valor.
- No GitHub: Settings → Secrets and variables → Actions → New repository secret, nome
EXPO_TOKEN.
2. Credenciais de assinatura do build
- Android: o EAS gera/gerencia o keystore automaticamente no primeiro
eas build. Nada a fazer. - iOS: rode uma vez localmente
eas build --platform ios --profile productione deixe o EAS gerenciar os certificados/provisioning (precisa de uma conta Apple Developer paga). Ficam guardados no EAS e o CI reaproveita.
3. Credenciais de submissão às lojas (para o --auto-submit)
As lojas exigem que o primeiro envio de cada app seja manual (criar o registro do app na Play Console / App Store Connect). Depois disso:
Android (Play Store):
- Crie uma Service Account no Google Cloud com acesso à Play Console e baixe o JSON.
- Armazene no EAS:
eas credentials→ plataforma Android → Google Service Account Key for Play Store submissions → upload do JSON. - O
submit.production.android.trackestá eminternal; altere paraproductionnoeas.jsonquando quiser publicar direto.
iOS (App Store Connect):
- Em App Store Connect, gere uma App Store Connect API Key (.p8) e anote Key ID + Issuer ID.
- Armazene no EAS:
eas credentials→ plataforma iOS → App Store Connect API Key → upload.
Com as credenciais guardadas no EAS, o --auto-submit --non-interactive do CI funciona sem arquivos secretos no repositório.
Operação
- Disparo automático: push/merge na
main. - Disparo manual local:
eas build --platform all --profile production --auto-submit. - Acompanhar: https://expo.dev/accounts/contrasync/projects/contrasync-app/builds.
O job usa --no-wait: ele apenas enfileira o build no EAS e encerra rápido (não gasta minutos do Actions esperando ~30-40 min de build). O build e o submit prosseguem no servidor do EAS; falhas aparecem no dashboard/notificações do Expo, não no GitHub. Remova --no-wait se quiser que o job do Actions falhe junto com o build.
Notas
build.production.autoIncrement+cli.appVersionSource: remoteincrementam oversionCode/buildNumbera cada build — sem conflito de versão nas lojas.- Por publicar a cada push na
main, o track Android padrão éinternal(teste interno) para evitar enviar todo commit direto à produção. Considere migrar o gatilho para tags de release se quiser builds de produção mais controlados.
Troubleshooting
iOS: Apple 403 detected - Access forbidden / PLA Update available
Mensagem completa:
✖ Failed to register bundle identifier com.contrasync
Apple 403 detected - Access forbidden.
Unable to process request - PLA Update available - You currently don't
have access to this membership resource. To resolve this issue, agree to
the latest Program License Agreement in your developer account.Não é erro de configuração — a Apple bloqueia qualquer operação (inclusive registrar o bundle id) enquanto houver um Program License Agreement (PLA) novo pendente de aceite.
Como resolver:
- Acesse https://developer.apple.com/account com o Apple ID que é o Account Holder do time. ⚠️ Só o titular consegue aceitar o PLA — papéis Admin/Developer não conseguem.
- Aceite o contrato no banner "Review Agreement / Updated Agreement" no topo da página.
- Confira também em https://appstoreconnect.apple.com → Business → Agreements, Tax, and Banking se há contrato pendente.
- Confirme que a assinatura do Apple Developer Program está ativa (paga, não expirada).
- Rode o build de novo:
eas build --platform ios --profile production.