Workflows do EAS
Um checklist para pipelines YAML que constroem, testam, enviam e atualizam aplicativos Expo SDK 57 na infraestrutura do EAS. Percorra cada item antes de considerar seu trem de lançamento pronto para produção.
Busque em todas as páginas da documentação
Um checklist para pipelines YAML que constroem, testam, enviam e atualizam aplicativos Expo SDK 57 na infraestrutura do EAS. Percorra cada item antes de considerar seu trem de lançamento pronto para produção.
workflow:run; Níveis 3–5 antes que a automação da loja entre em vigor.pr-quality.yml, preview-pr.yml, store-release.yml - não um mega-arquivo.eas build local verde não significa que o YAML do workflow está configurado corretamente.| Nível | Itens | Quando | Responsável |
|---|---|---|---|
| 1 | 1–6 | Primeiro workflow | Engenheiro mobile |
| 2 | 7–12 | Automação de PR + preview | Mobile + QA |
| 3 | 13–18 | Trem de lançamento para a loja | EM + líder mobile |
| 4 | 19–24 | Preparação para OTA + rollback | Mobile + backend |
| 5 | 25–30 | Operações + controle de custo | Plataforma / EM |
Projeto EAS vinculado - app.json / app.config.ts contém extra.eas.projectId após eas init.
eas workflow:run solicita a criação interativa de um projeto.npx eas-cli@latest init no SDK 57; comite o ID do projeto gerado.Perfis eas.json existem para cada intenção - no mínimo preview, production e e2e-test.
params.profile do workflow referencia uma chave ausente.Diretório .eas/workflows/ comitado - YAML é código fonte, revisado como alterações de aplicação.
quality-gates.yml primeiro; expanda a partir daí.Conta de robô EXPO_TOKEN em segredos do CI - não um token de acesso pessoal vinculado a um único desenvolvedor.
CLI do Workflow testado localmente - npx eas-cli@latest workflow:run .eas/workflows/quality-gates.yml.
on: pull_request.Grupo de concorrência configurado - cancela execuções substituídas em pushes rápidos de PR.
concurrency:
cancel_in_progress: true
group: ${{ workflow.filename }}-${{ github.ref }}type: build - lint, typecheck, teste em eas/checkout.
# .eas/workflows/quality-gates.yml
name: Quality Gates
on:
pull_request:
branches: [main]
jobs:
quality:
steps:
- uses: eas/checkout
- uses: eas/use_npm_token
- uses: eas/install_node_modules
- run: npx expo customize tsconfig.json
- run: npm run format:check
- run: npm run lint
- run: npm run typecheck
- run: npm run test -- --cineeds: [quality] em jobs de build downstream - builds esperam pelos scripts verdes.
build_ios e quality rodam em paralelo.needs em cada job type: build.Trigger de PR corresponde à política de branch - pull_request.branches: [main] ou release/*.
Perfil de build de preview para workflows de PR - distribution: internal ou simulator / apk conforme necessário.
production.preview separado em eas.json - Distribuição Interna.Job de build produz build_id consumido downstream - Maestro e submit referenciam o mesmo artefato.
--latest em vez de ID fixado. build_android:
needs: [quality]
type: build
params:
platform: android
profile: preview
maestro_smoke:
needs: [build_android]
type: maestro
params:
build_id: ${{ needs.build_android.outputs.build_id }}
flow_path: [".maestro/smoke.yml"]- **Prioridade:** P0 antes do submit automatizado.
12. appId do Maestro corresponde aos IDs de bundle do eas.json - fluxos iniciam o app construído, não o Expo Go.
- Sinal: Job do Maestro é bem-sucedido localmente, mas falha no workflow - appId incorreto.
- Correção: Maestro E2E.
- Prioridade: P0 no primeiro workflow de E2E.
Workflow de build de produção acionado por tag semver - on.push.tags: ["v*"].
main envia para as lojas.workflow_dispatch manual para hotfixes.type: build com profile: production e autoIncrement - números de build avançam sem edição manual de plists.
versionCode / número de build duplicado."autoIncrement": true no perfil de produção do eas.json.type: submit referencia build_id do job de build pareado - não --latest.
submit_ios:
needs: [smoke_ios]
type: submit
params:
platform: ios
build_id: ${{ needs.build_ios.outputs.build_id }}- **Prioridade:** P0 - [Promoção Automatizada para a Loja](./automated-store-promotion.md).
16. Smoke tests do Maestro controlam o submit - pelo menos login + um caminho crítico de receita.
- Sinal: Submit roda imediatamente após o build sem verificação em dispositivo.
- Correção: needs: [maestro_smoke] nos jobs de submit.
- Prioridade: P0 para promoção automatizada.
Jobs de submit iOS e Android em paralelo após smoke específico da plataforma - não serializar desnecessariamente.
Notificação Slack / email sobre falha do workflow - a equipe de plantão sabe antes dos usuários.
Job type: update visa canal explícito - production, staging, não o padrão implícito.
Workflow de OTA executa portões de qualidade primeiro - mesmo lint/tsc/test dos checks de PR.
needs: [quality] antes de type: update.Política de runtimeVersion documentada - OTA compatível apenas com binários da loja correspondentes.
Mensagem OTA inclui SHA do Git - rastreabilidade no dashboard do EAS.
message: ${{ github.sha }} nos parâmetros de update.Workflow de Rollback documentado e testado - eas update --roll-back ou republicação de canal.
Alterações que impactam o nativo bloqueadas de workflow apenas de OTA - edições de plugin de configuração disparam workflow de build.
expo-camera não presente no binário instalado.native-change.Tokens de skip documentados - [eas skip] na mensagem de commit para pushes apenas de documentação.
Builds de preview de PR com filtro por rótulo ou caminho - não cada erro de digitação aciona build do EAS.
Matriz de perfis de build documentada - qual perfil roda em PR, noturno, release.
Segredos rotacionados em agendamento - EXPO_TOKEN, chave da App Store Connect API, conta de serviço do Play.
Duração do workflow monitorada - qualidade + build + Maestro p95 rastreados.
install_node_modules.Simulação de desastre: Maestro falho bloqueia submit - verificado em staging, não assumido.
needs solta; falha de smoke ignorada.type | Propósito | params chave |
|---|---|---|
| (passos customizados) | lint, tsc, test, doctor | run: npm run … |
build | Binário nativo na nuvem | platform, profile |
maestro | E2E em artefato construído | build_id, flow_path |
submit | Upload para a loja | platform, build_id |
update | Bundle OTA | channel, message |
# .eas/workflows/store-release.yml
name: Store Release
on:
push:
tags: ["v*"]
jobs:
quality:
steps:
- uses: eas/checkout
- uses: eas/install_node_modules
- run: npm run lint && npm run typecheck && npm run test -- --ci
build_android:
needs: [quality]
type: build
params: { platform: android, profile: production }
smoke_android:
needs: [build_android]
type: maestro
params:
build_id: ${{ needs.build_android.outputs.build_id }}
flow_path: [".maestro/smoke.yml"]
submit_android:
needs: [smoke_android]
type: submit
params:
platform: android
build_id: ${{ needs.build_android.outputs.build_id }}
update_production:
needs: [submit_android]
type: update
params:
channel: production
message: "Post-release OTA sync ${{ github.sha }}".eas/workflows/*.yml na raiz do projeto (irmão do eas.json). Nomeie por intenção: quality-gates.yml, preview-pr.yml, store-release.yml.
npx eas-cli@latest workflow:run .eas/workflows/quality-gates.ymlUse workflow_dispatch em on: para triggers da interface do GitHub.
GitHub Actions se destaca em checks de PR a cada push. Workflows do EAS se destacam em cadeias de build → Maestro → submit na infraestrutura Expo. Muitas equipes usam ambos - mantenha os scripts npm idênticos.
Sim - encadeie type: build e depois type: update com needs. Hotfixes apenas de OTA podem usar um workflow separado com apenas jobs de qualidade + update.
e2e-testVersões da Stack: Esta página foi escrita para React 19.2.3, React Native 0.86.0 e Expo SDK 57 (
expo~57.0.4).
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026