CLI oficial para projetos Flutter da STMR, baseado na arquitetura limpa e padrões estabelecidos.
- 🏗️ Criar projetos completos baseados no skeleton STMR
- 📦 Criar módulos com arquitetura limpa
- 🔧 Gerar componentes individuais (pages, controllers, repositories, DTOs)
- 🔄 Auto-update integrado
- 💡 Sistema de help completo para todos os comandos
dart pub global activate --source git https://github.com/moreirawebmaster/stmr_cli.gitgit clone https://github.com/moreirawebmaster/stmr_cli.git
cd stmr_cli
dart pub global activate --source path .- Dart SDK >= 3.0.0
- Flutter >= 3.10.0
- Node.js >= 16.0.0 (para Husky)
- Git configurado
# 1. Clone o repositório
git clone https://github.com/moreirawebmaster/stmr_cli.git
cd stmr_cli
# 2. Instalar dependências Dart
dart pub get
# 3. Instalar dependências Node.js (para Husky)
npm install
# 4. Configurar Husky (hooks automáticos)
npm run prepare
# 5. Verificar se tudo está funcionando
dart analyze
dart testO projeto usa Husky para hooks automáticos que garantem qualidade de código:
- Localização:
.husky/pre-commit - Função: Valida qualidade do código antes de cada commit
- Verificações:
- ✅
dart analyze- Análise estática - ❌ Bloqueia commits com problemas de lint
- ✅
- Localização:
.husky/pre-push - Status: Desabilitado (versionamento delegado para CI/CD)
- Função: Apenas informa sobre a mudança de responsabilidade
O Husky funciona redirecionando os hooks do Git para seus próprios scripts:
# Quando você executa 'npm run prepare', o Husky configura:
git config core.hooksPath .husky/_.husky/
├── _/ # Hooks internos do Husky
│ ├── husky.sh # Script principal (deprecated)
│ ├── h # Helper script atual
│ ├── pre-commit # Redirecionador para .husky/pre-commit
│ ├── pre-push # Redirecionador para .husky/pre-push
│ └── ... # Outros hooks disponíveis
├── pre-commit # SEU script de pre-commit
└── pre-push # SEU script de pre-push
git commit
↓
Git executa: .husky/_/pre-commit
↓
Husky helper (.husky/_/h) executa: .husky/pre-commit
↓
SEU script: dart analyze
↓
✅ Sucesso: commit prossegue
❌ Falha: commit bloqueado
# Ver onde o Git está buscando os hooks
git config core.hooksPath
# Output: .husky/_
# Ver hooks padrão do Git (não utilizados)
ls .git/hooks/
# Output: *.sample (arquivos de exemplo)
# Ver hooks ativos do Husky
ls .husky/
# Output: pre-commit, pre-push, _/| Aspecto | Git Nativo | Husky |
|---|---|---|
| Localização | .git/hooks/ |
.husky/ |
| Versionamento | ❌ Não versionado | ✅ Versionado no repo |
| Compartilhamento | ❌ Manual | ✅ Automático |
| Configuração | Manual por dev | npm run prepare |
| Manutenção | Individual | Centralizada |
# Instalar e configurar Husky (automático)
npm install # Instala Husky
npm run prepare # Configura git config core.hooksPath
# Verificar configuração
git config core.hooksPath # Deve mostrar: .husky/_
ls .husky/_/ # Ver hooks internos
ls .husky/ # Ver seus scripts
# Resetar configuração (se necessário)
git config --unset core.hooksPath # Remove configuração
rm -rf .husky/_ # Remove hooks internos
npm run prepare # ReconfiguraO projeto também mantém hooks alternativos em .githooks/ como backup:
# Se Husky não funcionar, use hooks Git nativos:
git config core.hooksPath .githooks
chmod +x .githooks/pre-commit# 1. Criar branch para feature
git checkout -b feature/nova-funcionalidade
# 2. Fazer alterações no código
# ... desenvolvimento ...
# 3. Verificar qualidade (opcional - hook fará automaticamente)
dart analyze
dart test
# 4. Commit (hook pre-commit validará automaticamente)
git add .
git commit -m "feat: adiciona nova funcionalidade"
# ✅ Hook pre-commit: dart analyze executado automaticamente
# 5. Push (sem validações extras - pipeline CI/CD assumiu)
git push origin feature/nova-funcionalidade
# ✅ Pipeline CI/CD executará testes e validações
# 6. Criar Pull Request
# ✅ Pipeline de PR validará código automaticamente# Ver problemas específicos
dart analyze
# Corrigir automaticamente (quando possível)
dart fix --apply
# Tentar commit novamente
git commit -m "sua mensagem"# Reinstalar Husky
rm -rf node_modules
npm install
npm run prepare
# Verificar permissões
chmod +x .husky/pre-commit
chmod +x .husky/pre-push# Verificar configuração atual
git config core.hooksPath
# Deve mostrar: .husky/_
# Se estiver incorreto, reconfigurar
git config --unset core.hooksPath
npm run prepare
# Verificar se hooks internos existem
ls .husky/_/
# Deve mostrar: h, pre-commit, pre-push, etc.
# Se pasta _/ não existir, reinstalar
rm -rf .husky/_
npm run prepare# Testar hook manualmente
.husky/pre-commit
# Deve executar: dart analyze
# Verificar se Git está usando Husky
git config core.hooksPath
# Output esperado: .husky/_
# Se não estiver, reconfigurar
npm run prepare
git config core.hooksPath # Verificar novamente# Se Husky falhar completamente, usar hooks nativos
git config core.hooksPath .githooks
chmod +x .githooks/pre-commit
# Para voltar ao Husky
git config core.hooksPath .husky/_# Limpar cache Dart
dart pub cache clean
dart pub get
# Limpar cache Node
npm cache clean --force
npm installO projeto possui pipeline automatizada que:
- Executa
dart analyze - Executa
dart test - Comenta automaticamente no PR com resultados
- Dependências Dart: Verificação semanal (segundas 09:00)
- Dependências Node.js: Verificação semanal (segundas 10:00)
- GitHub Actions: Verificação semanal (segundas 11:00)
- Auto-merge: Updates patch/minor aprovados automaticamente
- Review manual: Updates major requerem aprovação
- Executa testes completos
- Versionamento automático (bump patch)
- Atualiza
pubspec.yamlelib/src/version.dart - Cria tag automaticamente
- Cria release no GitHub
# Executar CLI localmente
dart run bin/stmr.dart --help
# Executar testes
dart test
# Análise de código
dart analyze
# Corrigir problemas automaticamente
dart fix --apply
# Sincronização manual (opcional)
dart run tool/push_and_sync.dart
# Verificar versão atual
grep "version:" pubspec.yamlstmr_cli/
├── .github/workflows/ # Pipeline CI/CD
│ ├── auto-release.yml # Pipeline principal
│ └── pr-validation.yml # Validação de PRs
├── .husky/ # Hooks do Husky
│ ├── pre-commit # Validação de lint
│ └── pre-push # Desabilitado
├── .githooks/ # Hooks alternativos (Git nativo)
│ └── pre-commit # Backup do hook de lint
├── bin/ # Executável principal
├── lib/ # Código fonte
├── test/ # Testes
├── tool/ # Ferramentas auxiliares
├── package.json # Configuração Node.js/Husky
└── pubspec.yaml # Configuração Dart
Obtenha ajuda sobre qualquer comando:
stmr --help # Ajuda geral
stmr create --help # Ajuda do comando create
stmr feature --help # Ajuda do comando feature
stmr generate --help # Ajuda do comando generate
stmr upgrade --help # Ajuda do comando upgradeCria um novo projeto Flutter baseado no skeleton STMR:
stmr create meu_app
stmr create meu_app --name "Meu App" --org com.minhaempresaOpções:
--name: Nome do projeto (substitui "skeleton" nos arquivos)--org: Organização (substitui "tech.stmr") [padrão: tech.stmr]
Cria uma nova feature com estrutura completa seguindo a arquitetura limpa:
stmr feature auth # Módulo de autenticação
stmr feature user # Módulo de usuário
stmr feature dashboard # Módulo de dashboardEstrutura criada:
lib/modules/<modulo>/
├── presentations/
│ ├── pages/
│ └── controllers/
├── repositories/
│ └── dtos/
├── <modulo>_routes.dart
├── <modulo>_bindings.dart
└── <modulo>_constants.dart
Gera componentes individuais dentro de módulos existentes:
stmr generate page login # Gera LoginPage + LoginController
stmr generate page profile # Gera ProfilePage + ProfileControllerstmr generate controller user # Gera UserController
stmr generate controller auth # Gera AuthControllerstmr generate repository api # Gera ApiRepository + IApiRepository
stmr generate repository user # Gera UserRepository + IUserRepositorystmr generate dto user '{"id": 1, "name": "John", "email": "john@example.com"}'
stmr generate dto product '{"id": 1, "title": "Produto", "price": 99.99, "active": true}'Mantém o CLI sempre atualizado:
stmr upgrade # Atualiza para a versão mais recente
stmr upgrade --check # Apenas verifica se há atualizações
stmr upgrade --force # Força a reinstalaçãomeu_app/
├── lib/
│ ├── core/ # Recursos compartilhados
│ ├── modules/ # Features modulares
│ ├── data/ # Dados globais
│ └── routes/ # Sistema de rotas
├── android/ # Configuração Android
├── ios/ # Configuração iOS
└── pubspec.yaml # Dependencies
Todos os componentes gerados seguem os padrões STMR:
- Pages: Extendem
EngineBasePagecom estrutura responsiva - Controllers: Extendem
EngineBaseControllercom estados de loading/erro - Repositories: Implementam interfaces e extendem
EngineBaseRepository - DTOs: Extendem
EngineBaseModelcomfromJson,toJsonecopyWith
O CLI gera código seguindo a Clean Architecture:
- Presentation: Controllers + Pages
- Domain: Use Cases + Models
- Data: Repositories + DTOs
Padrão MVVM com GetX:
- Model: Validação e representação de dados
- View: Interface do usuário (Pages)
- ViewModel: Lógica de apresentação (Controllers)
# 1. Criar novo projeto
stmr create loja_virtual --name "Loja Virtual" --org com.minhaempresa
# 2. Navegar para o projeto
cd loja_virtual
# 3. Criar módulos
stmr feature auth
stmr feature products
stmr feature cart
# 4. Gerar componentes específicos
stmr generate page login
stmr generate page register
stmr generate controller user
stmr generate repository api
stmr generate dto product '{"id": 1, "name": "Produto", "price": 99.99}'
# 5. Executar projeto
flutter pub get
flutter runloja_virtual/
├── lib/
│ └── modules/
│ ├── auth/
│ │ ├── presentations/
│ │ │ ├── pages/
│ │ │ │ ├── login_page.dart
│ │ │ │ └── register_page.dart
│ │ │ └── controllers/
│ │ │ ├── login_controller.dart
│ │ │ ├── register_controller.dart
│ │ │ └── user_controller.dart
│ │ └── repositories/
│ │ ├── api_repository.dart
│ │ └── dtos/responses/
│ │ └── product_response_dto.dart
│ ├── products/
│ └── cart/
git clone https://github.com/moreirawebmaster/stmr_cli.git
cd stmr_cli
dart pub get
dart run bin/stmr.dart --helpdart test # Executar todos os testes
dart analyze # Análise estática- Fork o projeto
- Crie uma branch:
git checkout -b feature/nova-funcionalidade - Commit:
git commit -m 'feat: adiciona nova funcionalidade' - Push:
git push origin feature/nova-funcionalidade - Abra um Pull Request
Este projeto está licenciado sob a licença MIT - veja o arquivo LICENSE para detalhes.
Para suporte e dúvidas:
- 📧 Email: suporte@stmr.com
- 🐛 Issues: GitHub Issues
- 📖 Documentação: Wiki
Desenvolvido pela equipe STMR 🚀