@htgabriel/release-kit 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,66 @@
1
+ # @htgabriel/release-kit
2
+
3
+ Orquestrador de release reutilizável para apps Expo/EAS. Camada fina sobre `eas build`/`eas submit`/`eas update`, mais clientes Node puro (sem Ruby/fastlane) para App Store Connect e Android Publisher: App Review, notas de versão, promoção para produção e rollout.
4
+
5
+ ```bash
6
+ npx @htgabriel/release-kit init
7
+ ```
8
+
9
+ O wizard pede credencial após credencial — Expo/EAS, App Store Connect API Key, Google Play service account — valida cada uma contra a API real, e escreve `release-kit.config.json` + `.env.release` (gitignored) só no final. É idempotente: rodar de novo corrige só o que falta.
10
+
11
+ ## Comandos
12
+
13
+ | Comando | Efeito |
14
+ |---|---|
15
+ | `init` | Wizard completo de setup |
16
+ | `credentials [expo\|apple\|google\|sync]` | Refaz uma etapa isolada do wizard |
17
+ | `doctor [--channel] [--platform] [--deep]` | Preflight: git, toolchain, auth, versão remota, fingerprint, expo-doctor |
18
+ | `version <patch\|minor\|major\|x.y.z> [--push]` | Bump da versão, commit e tag |
19
+ | `notes [--version] [--edit]` | Rascunha (a partir dos commits feat/fix) e abre no `$EDITOR` |
20
+ | `build --channel <c> --platform <android\|ios> [--cloud]` | `eas build` local (default) ou cloud |
21
+ | `submit --channel <c> [--latest\|--path <arquivo>]` | `eas submit` para a faixa de teste |
22
+ | `ship --channel <c> --platform <p>` | doctor → build → submit |
23
+ | `promote --channel <c> [--platform]` | Play: teste → produção. Apple: cria e envia a Review Submission |
24
+ | `rollout --channel <c> --platform android --to <0-1\|complete\|halt>` | Controla o rollout percentual da Play |
25
+ | `status --channel <c>` | Estado da review Apple e das faixas/rollout da Play |
26
+ | `update --channel <c> [--message]` | OTA via `eas update` |
27
+ | `ci init github` | Gera `.github/workflows/release-kit.yml` |
28
+
29
+ Canais com `protected: true` (produção) são fail-closed: todo comando que os toca exige `--i-know-this-is-production` (não-interativo) ou `--confirm-version <versão exata>`. Sem uma dessas flags, nada publica em produção — nem `build`, nem `submit`, nem `update` OTA.
30
+
31
+ Sem subcomando, `release-kit` mostra um menu interativo (só com TTY); em CI/non-interactive mostra o help e nunca publica nada.
32
+
33
+ ## Modelo de canais
34
+
35
+ Cada canal em `release-kit.config.json` mapeia para um build profile do `eas.json` do projeto, mais os identificadores de loja:
36
+
37
+ ```jsonc
38
+ "production": {
39
+ "protected": true,
40
+ "buildProfile": "production",
41
+ "submitProfile": "local-validation", // build vai pra produção, submit fica em Internal/TestFlight até promote
42
+ "ios": { "bundleId": "com.example.app", "phasedRelease": true },
43
+ "android": { "package": "com.example.app", "testTrack": "internal", "productionTrack": "production", "initialRollout": 0.1 },
44
+ "ota": { "channel": "production" }
45
+ }
46
+ ```
47
+
48
+ Modelo: builda uma vez → `submit` para a faixa de teste → valida → `promote` copia para produção (Play) / cria a Review Submission (Apple), sem reupload de binário.
49
+
50
+ ## Suporte por sistema operacional
51
+
52
+ | Etapa | macOS | Linux | Windows |
53
+ |---|---|---|---|
54
+ | Build local iOS | ✅ | ❌ | ❌ |
55
+ | Build local Android | ✅ | ✅ | ⚠️ só via WSL2 |
56
+ | Build cloud, submit, OTA, review, notas, rollout, status | ✅ | ✅ | ✅ |
57
+
58
+ `doctor` detecta a limitação e sugere `--cloud` ou WSL2 antes de você tentar buildar.
59
+
60
+ ## Status do projeto
61
+
62
+ v0.x — extraído do release kit interno do Olho no Lance. Os clientes de App Store Connect e Android Publisher são implementações diretas contra a API pública (JWT assinado com `node:crypto`, sem SDK), e ainda **não foram validados ponta a ponta contra contas reais**. Rode `--dry-run` antes de qualquer `promote`/`review` em produção, e reporte discrepâncias.
63
+
64
+ ## Licença
65
+
66
+ MIT
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ declare function main(argv?: string[]): Promise<void>;
3
+
4
+ export { main };