aarin-graviton-cli
v1.0.0
Published
CLI tool for adapting Helm charts and Kubernetes APIs to use ARM Graviton CPU architecture
Maintainers
Readme
🚀 Adapt Graviton CLI
Adapte seus Helm charts e APIs Kubernetes para ARM Graviton em um único comando!
Um CLI para adaptar completamente suas aplicações para usar a arquitetura ARM Graviton em clusters Kubernetes, com suporte a versionamento automático, adaptação de Dockerfiles, configuração de environments e pipelines GitLab CI otimizadas.
⚡ Quick Start
1. Executar a Adaptação Completa
npx graviton-cli run2. Responder as Perguntas Interativas
📦 URL SSH do Helm GitLab: [email protected]:seu-usuario/helm.git
🔌 URL SSH da API GitLab: [email protected]:seu-usuario/api.git3. Pronto! 🎉
- ✅ Dockerfiles adaptados para ARM64
- ✅ Chart.yaml versionado
- ✅ Values files com affinity configurado
- ✅ Pipeline GitLab CI otimizada
- ✅ Branch
feat/gravitoncriada com todas as mudanças - ✅ MRs automáticas criadas:
- Helm →
maincom título(PRD) feat: change to use ARM CPU - API →
dev,sandbox,maincom títulos correspondentes(DEV),(SDX),(PRD)
- Helm →
- ✅ VSCode aberto com os arquivos adaptados (opcional)
📋 O que o Comando run Faz?
O comando run é um orquestrador completo que:
1️⃣ Clone Automático
- Clona repositório Helm
- Clona repositório API
- Cria branch feat/graviton em ambos2️⃣ Adaptação Completa
📦 Dockerfiles
- Remove ferramentas x86-específicas
- Remove Datadog
- Garante compatibilidade ARM64
📊 Chart.yaml
- Incrementa versão (minor+1, patch=0)
- Adiciona dependência
helm-aarin-base 2.2.0
⚙️ Values Files (values-[env].yaml)
- Adiciona
affinitypara ARM64 - Força agendamento em nodes ARM64:
affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: "kubernetes.io/arch" operator: "In" values: ["arm64"]
🔄 Pipeline GitLab CI
- Remove
security-pipelineinclude - Remove jobs com "release" no nome
- Atualiza para GitOps com ARM64 build:
include: - project: aarintechfin/devops/gitops ref: main file: infrastructure/gitlab-pipelines/templates/aws-eks/eks-deployment.yaml inputs: build_apps: - name: myapp target_archs: linux/arm64 #...ENVS dockerfile_path: "./src/MyApp/Dockerfile" chart_version: "0.2.0"
3️⃣ Commit & Push Automático
git add -A
git commit -m "feat: adapt for ARM Graviton" --no-verify
git push origin feat/graviton --no-verify4️⃣ MRs Automáticas
Cria 4 MRs no GitLab:
- Helm: 1 MR para
main - API: 3 MRs para
dev,sandbox,main
Comando reduce - Redução de Recursos de CPU e Memory em Lote
Reduz recursos (CPU: 50m, Memory: 256Mi) em arquivos values-dev.yaml e values-sdx.yaml de múltiplos repositórios Helm com um único comando. Automaticamente cria branch feat/reduce-cpu-memory, faz commit com a mensagem [DEV,SDX] feat: reduce resource CPU and Memory, faz push e cria MRs automaticamente (com token GitLab).
🚀 Uso
Processar repositórios com MRs automáticas
export GITLAB_TOKEN="seu-token-aqui"
graviton reduce --urls "[email protected]:grupo/helm1.git,[email protected]:grupo/helm2.git"Caso queira fazer em lote, basta fornecer uma lista de URLs SSH dos repositórios separados por vírgula. O CLI irá processar cada um sequencialmente, aplicando as mudanças, fazendo commit, push e criando MRs automaticamente.
export GITLAB_TOKEN="seu-token-aqui"
graviton reduce --urls "[email protected]:grupo/helm1.git,[email protected]:grupo/helm2.git,[email protected]:grupo/helm3.git"✨ Recursos
- ✅ Clonagem Automática: Clona repositórios diretamente via SSH
- ✅ Branch Automática: Cria/usa branch
feat/reduce-cpu-memory - ✅ Processamento em Lote: Processa múltiplos repositórios sequencialmente
- ✅ Commit Automático: Mensagem padrão
[DEV,SDX] feat: reduce resource CPU and Memory - ✅ Push Automático: Faz push para a branch
- ✅ MRs Automáticas: Cria Merge Requests abertas (requer
GITLAB_TOKEN) - ✅ Tolerações: Adiciona
nodeSelectoretolerationspara Graviton - ✅ Relatório Final: Mostra sucesso/falhas e URLs das MRs criadas
📝 Alterações Realizadas
Para cada ambiente (dev e sdx), reduz os requests:
# Antes
resources:
customResource:
requests:
cpu: "200m"
memory: "512Mi"
# Depois
nodeSelector:
kubernetes.io/arch: "arm64"
tolerations:
- effect: NoExecute
operator: Equal
key: graviton
value: "true"
resources:
customResource:
requests:
cpu: "50m"
memory: "256Mi"📊 Exemplo com 34 Repositórios do Consórcio
# Com MRs automáticas abertas
export GITLAB_TOKEN="glpat-..."
graviton reduce --urls "[email protected]:aarintechfin/consorcio/helms-consorcio/backoffice-self-contemplation/customer-query-api-helm.git,[email protected]:aarintechfin/consorcio/helms-consorcio/consorcio-public-sales-proxy-helm.git"Ou use o script preparado:
export GITLAB_TOKEN="seu-token"
bash examples/reduce-consorcio-helms.sh📋 Configurar GITLAB_TOKEN para MRs Automáticas
- Acesse GitLab: https://gitlab.com/-/user_settings/personal_access_tokens
- Crie um novo token com permissões:
api,read_repository,write_repository - Configure no shell:
export GITLAB_TOKEN="glpat-..." - Execute o comando
reducenormalmente
🔧 Opções
--dry-run: Simular alterações sem fazer mudanças--urls <urls>: URLs SSH separadas por vírgula (obrigatório para lote)
📚 Todos os Comandos Disponíveis
| Comando | Descrição |
|---------|-----------|
| run | 🚀 Adaptação completa (Helm + API) para ARM Graviton |
| reduce | ⚙️ Reduzir recursos em múltiplos Helms (Dev/SDX) |
| adapt-chart | 📊 Adaptar Helm chart para ARM Graviton |
| adapt-dockerfile | 🐳 Adaptar Dockerfiles para ARM Graviton |
| adapt-pipeline | 🔄 Adaptar pipelines GitLab CI para ARM Graviton |
| validate | ✅ Validar compatibilidade do chart |
| detect-image | 🔍 Detectar arquiteturas suportadas por imagem Docker |
| update-projects | 📦 Atualizar versões do Chart.yaml |
| update-environments | ⚙️ Adicionar nodeSelector e tolerations |
| deploy | 🚀 Deploy em cluster Kubernetes |
| clone-repos | 📥 Clonar repositórios do GitLab |
| config | ⚙️ Gerenciar configurações |
Instalação
Global (Recomendado)
npm install -g graviton-cli
graviton runVia npx (Sem Instalação)
npx graviton-cli runLocal (Desenvolvimento)
clone o repositório e instale dependências:
npm install
npm run build
npm install -g .
graviton run📝 Usando o Comando run
Pré-requisitos
Git SSH configurado
ssh -T [email protected] # Deve responder: "Welcome to GitLab..."URLs SSH dos repositórios
- Helm:
[email protected]:grupo/helm.git - API:
[email protected]:grupo/api.git
- Helm:
(Opcional) Token GitLab para MRs automáticas
export GITLAB_TOKEN="glpat-..."
Executando
# Com npx
npx graviton-cli@latest run
# Ou com instalação global
graviton runFluxo Interativo
╭─────────────────────────────────────────────╮
│ 🚀 Use Graviton CLI - Full Adaptation │
╰─────────────────────────────────────────────╯
📦 URL SSH do Helm GitLab:
> [email protected]:seu-usuario/helm-repo.git
🔌 URL SSH da API GitLab:
> [email protected]:seu-usuario/api-repo.git
[Clone] ✓ Helm clonado em ./.graviton-work-xxx/helm
[Clone] ✓ API clonada em ./.graviton-work-xxx/api
[Adapt] 📦 Adaptando Dockerfiles...
[Adapt] ✓ 2 Dockerfile(s) processado(s)
[Adapt] 📊 Atualizando Chart.yaml...
[Adapt] ✓ chart: 0.1.5 → 0.2.0
[Adapt] ⚙️ Atualizando environments...
[Adapt] ✓ 3 arquivo(s) de environment atualizado(s)
[Adapt] 🔄 Adaptando pipelines...
[Adapt] ✓ 1 pipeline(s) adaptada(s)
[Push] ✓ Helm: Push concluído
[Push] ✓ API: Push concluído
[MRs] 📦 Helm:
[MRs] ✓ MR criada: https://gitlab.com/.../helm/-/merge_requests/42
[MRs] 🔌 API:
[MRs] ✓ MR para dev: https://gitlab.com/.../api/-/merge_requests/123
[MRs] ✓ MR para sandbox: https://gitlab.com/.../api/-/merge_requests/124
[MRs] ✓ MR para main: https://gitlab.com/.../api/-/merge_requests/125
✅ Adaptação completa! Tudo pronto para revisão.
📂 Abrir pasta no VSCode? (s/n): s🔍 O Que Mudou?
Após executar graviton run, você terá:
Branch feat/graviton
helm/
├── chart/
│ ├── Chart.yaml ← Versão incrementada
│ ├── values-dev.yaml ← Affinity adicionada
│ ├── values-sandbox.yaml ← Affinity adicionada
│ └── values-main.yaml ← Affinity adicionada
└── .git/
└── feat/graviton branch ← Criada automaticamente
api/
├── src/
│ ├── App.Api/
│ │ └── Dockerfile ← x86 removido, ARM64 otimizado
│ └── Domain/
│ └── Dockerfile ← Adapatado
├── .gitlab-ci.yml ← GitOps configurada
└── .git/
└── feat/graviton branch ← Criada automaticamenteMRs no GitLab
| Repositório | Branch Origem | Branch Destino | Título | Status | |------------|---------------|----------------|--------|--------| | Helm | feat/graviton | main | (PRD) feat: change to use ARM CPU | ✅ Criada | | API | feat/graviton | dev | (DEV) feat: change to use ARM CPU | ✅ Criada | | API | feat/graviton | sandbox | (SDX) feat: change to use ARM CPU | ✅ Criada | | API | feat/graviton | main | (PRD) feat: change to use ARM CPU | ✅ Criada |
🐛 Troubleshooting
❌ "Git SSH não configurado"
Solução:
# Gerar chave SSH
ssh-keygen -t ed25519 -C "[email protected]"
# Adicionar ao GitLab
cat ~/.ssh/id_ed25519.pub
# Copiar e colar em: GitLab > Settings > SSH Keys
# Testar
ssh -T [email protected]❌ "MR failed com 404"
Causa: Path do projeto incorreto
Solução:
# Verificar URL correto
git remote -v
# Use: [email protected]:grupo/projeto.git❌ "Dockerfile não encontrado"
Causa: Estrutura de pastas diferente
Solução:
# Verificar estrutura
find repo -name "Dockerfile"
# Pode estar em src/, docker/, etc.❌ "VSCode não abriu"
Cause: Comando code não disponível
Solução:
# Instalar Command Line Tools
# macOS: Cmd + Shift + P > Shell Command: Install 'code' command in PATH✨ Recursos Adicionais
Variáveis de Ambiente
# Para MRs automáticas (opcional)
export GITLAB_TOKEN="seu-token-aqui"
# Usar CLI
npx graviton-cli runTemporizações Típicas
| Operação | Tempo | |----------|-------| | Clone | 30-60s | | Adaptação | 5-10s | | Commit & Push | 10-20s | | MRs | 5-15s | | Total | ~2 min |
Arquivos Gerados
.graviton-work-YYYY-MM-DDTHH-MM-SS/
├── helm/ ← Repositório Helm clonado
├── api/ ← Repositório API clonado
└── summary.log ← Log de todas as mudanças🤝 Suporte
Problemas?
- Verifique o Troubleshooting
- Verifique o log de erros
📄 Licença
MIT
🎓 Versão
@latest - Sempre recomendado usar a versão mais recente:
npx graviton-cli runPronto para adaptar para ARM Graviton? Execute agora:
npx graviton-cli run🚀 Boa sorte!
