⚠️ PRODUCTION USE WARNING / AVISO DE USO EM PRODUÇÃO⚠️ Production use is NOT recommended yet.
O uso em produção ainda NÃO é recomendado.
Um gerador de código que cria automaticamente o código fonte da CLI baseado no SDK do MagaluCloud.
O cligen é uma ferramenta de linha de comando desenvolvida em Go que automatiza a criação de CLIs (Command Line Interfaces) baseadas no SDK do MagaluCloud. Ele gera código estruturado e funcional a partir de configurações YAML, facilitando o desenvolvimento de interfaces de linha de comando para serviços cloud.
- Clone do SDK: Baixa automaticamente a versão mais recente do SDK do MagaluCloud
- Geração de Código: Cria código Go estruturado baseado em templates
- Base CLI: Gera uma estrutura base de CLI usando Cobra
- Configuração Flexível: Suporte a configurações via YAML para personalização
- Go 1.25.3 ou superior
- Git
- Make
- Acesso à internet (para clonar o SDK)
Baixe o binário pré-compilado para sua plataforma na página de releases:
# Linux/macOS
curl -L -o cligen https://github.com/magaluCloud/cligen/releases/latest/download/cligen-$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m)
chmod +x cligen
sudo mv cligen /usr/local/bin/- Clone o repositório:
git clone https://github.com/magaluCloud/cligen.git
cd cligen- Instale as dependências e compile:
make installOu manualmente:
go mod tidy
make build./cligen clone-sdkBaixa o SDK do MagaluCloud para o diretório tmp-sdk/ com a versão configurada em config/config.yaml.
./cligen gen-cli-codeGera o código da CLI baseado nas configurações do arquivo config/config.yaml.
./cligen gen-cli-baseCopia os arquivos base da CLI para o diretório tmp-cli/.
make new-runExecuta todo o fluxo: clone do SDK, geração de código e base da CLI.
- Primeira execução (com clone do SDK):
make new-run- Execuções subsequentes (apenas geração):
make run- Testar a CLI gerada:
make run-cli- Limpar arquivos temporários:
make cleanO arquivo config/config.yaml define a estrutura da CLI gerada:
version: v0.3.42
menus:
- name: "profile"
menus:
- name: "availability-zones"
alias: ["azs", "az"]
sdk_package: "availabilityzones"
- name: "ssh-keys"
alias: ["ssh-keys", "ssh"]
sdk_package: "sshkeys"
- name: "virtual-machine"
alias: ["vm", "virtual-machines", "vms", "compute"]
sdk_package: "compute"- version: Versão do SDK a ser utilizada
- menus: Lista de menus/comandos da CLI
- name: Nome do comando
- alias: Aliases alternativos para o comando
- sdk_package: Pacote do SDK correspondente
- menus: Subcomandos aninhados
cligen/
├── base-cli/ # Código base da CLI
├── base-cli-gen/ # Código gerado
├── commands/ # Comandos do cligen
│ ├── gen_cli_code/ # Lógica de geração de código
│ └── sdk_structure/ # Estrutura do SDK
├── config/ # Configurações
├── cobra_utils/ # Utilitários do Cobra
├── str_utils/ # Utilitários de string
├── main.go # Ponto de entrada
├── Makefile # Comandos de build
└── README.md # Este arquivo
O projeto utiliza o framework Cobra para gerenciar os comandos:
clone-sdk: Clona o SDK do MagaluCloudgen-cli-code: Gera o código da CLIgen-cli-base: Gera a base da CLIgen-cli-sdk-structure: Analisa a estrutura do SDK
Os templates de código estão localizados em commands/gen_cli_code/ e incluem:
- Templates para comandos raiz
- Templates para grupos de serviços
- Templates para pacotes
- Templates para produtos
Para testar a CLI gerada:
make run-cliIsso irá:
- Compilar a CLI gerada
- Executar a CLI com os comandos disponíveis
Para limpar arquivos temporários:
make cleanRemove os diretórios:
tmp-cli/tmp-sdk/base-cli-gen/- Executável
cligen
- github.com/spf13/cobra: Framework para criação de CLIs
- github.com/MagaluCloud/mgc-sdk-go: SDK do MagaluCloud
- gopkg.in/yaml.v3: Parser YAML
O projeto inclui um Makefile profissional com diversos comandos úteis. Para ver todos os comandos disponíveis:
make help| Comando | Descrição |
|---|---|
make build |
Compila o binário |
make test |
Executa os testes |
make check |
Executa fmt, vet e test |
make clean |
Remove arquivos temporários |
make ci-full |
Pipeline completo de CI |
make ci-release |
Prepara release multi-plataforma |
O projeto utiliza GitHub Actions para CI/CD:
-
CI (
.github/workflows/ci.yml): Executado em cada push/PR- Lint e formatação
- Testes com cobertura
- Build para verificação
-
Release (
.github/workflows/release.yml): Executado em tags- Build multi-plataforma
- Geração de checksums
- Criação automática de release
Para criar uma nova release:
# Criar e push da tag
git tag -a v1.0.0 -m "Release v1.0.0"
git push origin v1.0.0
# O GitHub Actions irá automaticamente:
# 1. Compilar para todas as plataformas
# 2. Gerar checksums
# 3. Criar a release no GitHubAo contribuir para o projeto, siga estas diretrizes:
- Faça um fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Garanta que o código passa nas verificações:
make check
- Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
- Use
go fmtpara formatar o código - Execute
go vetantes de fazer commit - Mantenha a cobertura de testes acima de 70%
- Documente funções e pacotes públicos
Este projeto está sob a licença especificada no arquivo LICENSE.