Um guia para GitHub Flow adaptado para mobile - integração contínua em main, branches de release para trens de loja e branches de hotfix paralelos aos canais OTA para que o JavaScript de produção e os binários da loja ao vivo permaneçam alinhados.
Cartão de receita de referência rápida - pronto para copiar e colar.
GitHub Flow (mobile adaptation) 1. Branch from main → feat/SHIP-220-dark-mode 2. Open PR → CI + device evidence required 3. Merge to main → squash preferred 4. Deploy → OTA to preview channel OR tag for store build
# Hotfix for live store version 2.4.x (parallel to 2.5 RC on release/2.5.0)git fetch --tagsgit checkout -b hotfix/2.4.2 v2.4.1git cherry-pick <fix-sha>git tag -a v2.4.2 -m "Hotfix: crash on cold start [SHIP-991]"git push origin hotfix/2.4.2 v2.4.2
# JS-only hotfix on same runtimeVersion - OTA from hotfix branchgit checkout hotfix/2.4.2eas update --branch production --channel production --environment production \ --message "hotfix: cold start crash [SHIP-991]"
Parallel lanes example main ← integration release/2.5.0 ← RC in TestFlight review hotfix/2.4.2 ← production store 2.4.x users (OTA production channel ← hotfix/2.4.2 commits only)
Quando usar isto:
Usuários em duas versões de loja simultaneamente (atraso na implantação escalonada).
O canal de produção OTA não deve receber commits destinados à próxima release da loja.
A equipe cresce além de "marcar tudo a partir de main", mas não quer o develop do GitFlow.
Hotfix necessário enquanto release/2.5.0 está congelado na Revisão de App.
Quando evitar:
Versão única no mercado, OTA desativado - um trunk + tags mais simples pode ser suficiente.
Hotfix requer um novo módulo nativo - deve ser um build de loja, não uma lane apenas OTA.
Cenário:v2.4.1 está ao vivo na produção (rollout de 50% no Play). release/2.5.0 aguarda na Revisão de App. Um crash na inicialização a frio afeta apenas usuários 2.4.x.
Passo 1 - Mapear branches Git para canais EAS
<!-- docs/branch-channel-map.md -->| Git branch | Store version | EAS Update branch | EAS channel ||------------------|---------------|-------------------|--------------|| main | (next) | preview | preview || release/2.5.0 | 2.5.0 RC | staging | staging || hotfix/2.4.2 | 2.4.2 live | production | production |
eas channel:view production# Confirm channel points at production branch - not main
OTA de main enquanto 2.4 e 2.5 diferem em código nativo - o binário 2.5 pode carregar JS incompatível. Correção: Publicar OTA de produção apenas de hotfix/* vinculado à runtimeVersion ao vivo.
Branch hotfix de release/2.5.0 para usuários 2.4 - Linha de base nativa errada. Correção:git checkout -b hotfix/2.4.2 v2.4.1.
Esquecer o cherry-pick para release/2.5.0 - A correção é enviada apenas para usuários antigos; 2.5 regride. Correção: Checklist de backport no template de PR.
Excluir branch hotfix antes de repontuar o canal - Canal de produção órfão. Correção:eas channel:edit apenas após a documentação da nova lane de tag.
Hotfixes paralelos para a mesma versão - Segundo branch a partir da tag errada. Correção: Tags sequenciais v2.4.2, v2.4.3; um hotfix aberto por vez por major.minor.
O GitHub Flow é suficiente sem branches de release?
Para aplicativos pequenos com submissão contínua para a loja - muitas vezes sim. Adicione release/* quando janelas de revisão, testes RC ou versões paralelas exigirem um branch candidato congelado.
Quantos branches hotfix podem estar abertos?
Um por minor da loja ao vivo (por exemplo, uma lane hotfix/2.4.x). Múltiplos patches se encadeiam como v2.4.2, v2.4.3. Um hotfix/2.3.x separado apenas se você ainda suportar essa coorte.
O hotfix faz merge para main ou apenas cherry-pick?
A correção é registrada em main via PR normal primeiro. O branch hotfix faz cherry-pick desse SHA - nunca faça merge de hotfix → main (traz ruído de bump de versão para trás).
Quem é o proprietário das publicações OTA de produção?
CI na tag ou gerente de release com EXPO_TOKEN - não desenvolvedores de recursos de laptops. Corresponde à política do Calendário de Trem de Release.
E se o hotfix precisar de código nativo?
Build de loja a partir de hotfix/*, nova tag, submissão acelerada - OTA sozinho é insuficiente. Incremente runtimeVersion se houver alterações na ABI nativa (Política de Runtime Version).