https://github.com/4lessandrodev/capivarinha-cli
CLI em Python para pesquisar e exportar variáveis de Variable Groups no Azure DevOps.
https://github.com/4lessandrodev/capivarinha-cli
automation azure-devops azure-pipelines capi-cli cli config-management cross-platform devops-tools dotenv env-exporter environment-variables open-source python variable-groups
Last synced: 10 days ago
JSON representation
CLI em Python para pesquisar e exportar variáveis de Variable Groups no Azure DevOps.
- Host: GitHub
- URL: https://github.com/4lessandrodev/capivarinha-cli
- Owner: 4lessandrodev
- License: mit
- Created: 2025-09-15T19:02:58.000Z (9 months ago)
- Default Branch: main
- Last Pushed: 2025-09-15T20:52:44.000Z (9 months ago)
- Last Synced: 2025-09-15T22:33:50.610Z (9 months ago)
- Topics: automation, azure-devops, azure-pipelines, capi-cli, cli, config-management, cross-platform, devops-tools, dotenv, env-exporter, environment-variables, open-source, python, variable-groups
- Language: Python
- Homepage:
- Size: 18.6 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 🐾 Capivarinha CLI (`capi-cli`)
Uma CLI em **Python puro** para interagir com **Variable Groups** do Azure DevOps.

---
## ✨ Funcionalidades
* 🔍 **Pesquisar**: encontra variáveis cujo **valor** contém um termo informado.
* 📥 **Baixar**: exporta todas as variáveis de um **Variable Group (lib)** para um arquivo `.env`.
* 📂 **Listar**: exibe os **grupos (libs)** disponíveis por projeto/ambiente, **sem variáveis**.
* 🔀 **Comparar**: compara **duas libs** e mostra as variáveis **exclusivas** de cada uma.
---
## ✅ Pré-requisitos
* **Python 3.8+**
* **Azure CLI (`az`)** instalada
* Autenticação ativa:
```bash
az login
````
Se necessário, instale a extensão do DevOps:
```bash
az extension add --name azure-devops
```
---
## ⚙️ Instalação
Você pode rodar direto o arquivo `capi-cli.py`, mas se preferir instalar globalmente:
### Via Makefile (Linux/macOS)
```bash
make instalar
```
### Manual
```bash
chmod +x capi-cli.py
sudo cp capi-cli.py /usr/local/bin/capi-cli
```
### Windows (PowerShell como Admin)
```powershell
Copy-Item .\capi-cli.py "C:\Windows\System32\capi-cli.py"
python C:\Windows\System32\capi-cli.py ...
```
---
## ▶️ Como usar
### Pesquisar
```bash
capi-cli pesquisar \
--organizacao=https://dev.azure.com/minha-org \
--termo=https://my-api \
--projeto=TEST --ambiente=QAS \
--salvar=resultado.txt --out
```
### Baixar
```bash
capi-cli baixar \
--organizacao=https://dev.azure.com/minha-org \
--projeto=TEST \
--lib=Meu-App.QAS \
--ambiente=QAS \
--salvar=.env --out
```
### Listar (somente grupos/libs)
```bash
capi-cli listar \
--organizacao=https://dev.azure.com/minha-org \
--projeto=BOARD --ambiente=DEV \
--salvar=grupos.txt --out
```
### Comparar (duas libs)
```bash
capi-cli comparar \
--organizacao=https://dev.azure.com/minha-org \
--projeto=BOARD \
--lib Meu-App.Backend.DEV \
--lib Meu-App.Backend.QAS \
--out
```
Saída de exemplo:
```
------ DEV -------
+ HOST=localhost:300 (Existe em DEV mas não existe em QAS)
------ QAS -------
+ PORT=3000 (Existe em QAS mas não existe em DEV)
------------------
```
---
## 🔧 Comandos e parâmetros
### 🔍 `pesquisar`
| Parâmetro | Obrigatório | Descrição |
| --------------- | ----------- | ----------------------------------------------------------- |
| `--organizacao` | ✅ | URL da organização (ex.: `https://dev.azure.com/minha-org`) |
| `--termo` | ✅ | Termo a ser buscado nos valores |
| `--projeto` | ❌ | Filtro por nome/substring de projeto |
| `--ambiente` | ❌ | Filtra pelo nome do grupo (ex.: `DEV`, `QAS`, etc.) |
| `--ignore-case` | ❌ | Busca sem diferenciar maiúsculas/minúsculas |
| `--salvar` | ❌ | Salvar saída em arquivo texto |
| `--out` | ❌ | Exibir resultados no terminal |
---
### 📥 `baixar`
| Parâmetro | Obrigatório | Descrição |
| --------------- | ----------- | ------------------------------------------------- |
| `--organizacao` | ✅ | URL da organização |
| `--projeto` | ✅ | Nome/substring do projeto |
| `--lib` | ✅ | Nome do Variable Group (match exato ou substring) |
| `--ambiente` | ❌ | Filtra pelo nome do grupo contendo o ambiente |
| `--salvar` | ❌ | Caminho do arquivo `.env` |
| `--out` | ❌ | Exibir `.env` no terminal |
---
### 📂 `listar` (somente grupos/libs)
| Parâmetro | Obrigatório | Descrição |
| --------------- | ----------- | --------------------------------------------- |
| `--organizacao` | ✅ | URL da organização |
| `--projeto` | ❌ | Nome/substring do projeto |
| `--ambiente` | ❌ | Filtra pelo nome do grupo contendo o ambiente |
| `--salvar` | ❌ | Caminho do arquivo texto |
| `--out` | ❌ | Exibir lista no terminal |
> A saída lista **apenas** `Projeto`, `Grupo`, `Criado por` e `Modificado por`, sem variáveis.
---
### 🔀 `comparar`
| Parâmetro | Obrigatório | Descrição |
| --------------- | ----------- | ------------------------------------------------------------------------ |
| `--organizacao` | ✅ | URL da organização |
| `--projeto` | ❌ | Nome/substring do projeto |
| `--lib` | ✅ (×2) | Informe **duas vezes**: primeira e segunda lib (match exato > substring) |
| `--ambiente` | ❌ | Filtra pelo nome do grupo contendo o ambiente |
| `--salvar` | ❌ | Caminho do arquivo texto para salvar a comparação |
| `--out` | ❌ | Exibir comparação no terminal |
> A comparação mostra as **variáveis exclusivas** de cada lib. (Opcionalmente, você pode salvar essa saída em um arquivo via `--salvar`.)
---
## 📦 Saída
* **pesquisar** → lista:
```
projeto | grupo | chave | valor | criado_por | modificado_por
```
* **listar** → lista **apenas** grupos/libs:
```
--------------------------------------------------------------------------------
Projeto: NOME_PROJETO
Grupo: NOME_DO_GRUPO
Criado: Nome
Modif.: Nome
--------------------------------------------------------------------------------
```
* **baixar** → gera `.env`:
```
KEY=VALUE
```
> 🔒 **Segredos** não são retornados pela Azure CLI — aparecem como `***SECRET***`.
---
## 🖥️ Experiência no terminal
* **Spinners discretos** (`Listando projetos...`, `Analisando grupos...`)
* Linha limpa ao final → saída organizada
---
## ⚠️ Limitações atuais
* Busca é **case-sensitive** por padrão (use `--ignore-case` para ignorar).
* Segredos não podem ser exportados (limitação da Azure CLI).
---
## 📚 Boas práticas aplicadas
* Arquitetura limpa (Clean Code & SOLID)
* Fachada `AzureDevOps`, funções puras e separação de responsabilidades
* **Docstrings + type hints** para manutenção simples
* **Zero dependências externas** além da stdlib do Python
---
## 🚀 Roadmap
* Exportar para JSON/YAML
* Suporte a múltiplas libs no `baixar`
* Mostrar diferenças de **valores** no `comparar` (quando a variável existe nas duas libs)
* Otimizações de performance em grandes organizações
---
## ⚡ Instalação rápida via GitHub
```bash
git clone https://github.com/4lessandrodev/capivarinha-cli.git && \
cd capivarinha-cli && \
make instalar && \
cd .. && rm -rf capivarinha-cli
```
---
## 🧾 Versão
```bash
capi-cli --version
```
Exemplo de saída: `v0.1.2`