@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 +66 -0
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.js +2900 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.d.ts +957 -0
- package/dist/index.js +1881 -0
- package/dist/index.js.map +1 -0
- package/package.json +72 -0
- package/schema.json +308 -0
- package/templates/release-kit.config.example.json +42 -0
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
|