{"id":34810480,"url":"https://github.com/4lessandrodev/capivarinha-cli","last_synced_at":"2026-05-25T09:34:09.470Z","repository":{"id":314958903,"uuid":"1057464412","full_name":"4lessandrodev/capivarinha-cli","owner":"4lessandrodev","description":"CLI em Python para pesquisar e exportar variáveis de Variable Groups no Azure DevOps.","archived":false,"fork":false,"pushed_at":"2025-09-15T20:52:44.000Z","size":19,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-15T22:33:50.610Z","etag":null,"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"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/4lessandrodev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-15T19:02:58.000Z","updated_at":"2025-09-15T20:51:47.000Z","dependencies_parsed_at":"2025-09-16T22:47:24.132Z","dependency_job_id":null,"html_url":"https://github.com/4lessandrodev/capivarinha-cli","commit_stats":null,"previous_names":["4lessandrodev/capivarinha-cli"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/4lessandrodev/capivarinha-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/4lessandrodev%2Fcapivarinha-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/4lessandrodev%2Fcapivarinha-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/4lessandrodev%2Fcapivarinha-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/4lessandrodev%2Fcapivarinha-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/4lessandrodev","download_url":"https://codeload.github.com/4lessandrodev/capivarinha-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/4lessandrodev%2Fcapivarinha-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33469412,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-25T06:32:55.349Z","status":"ssl_error","status_checked_at":"2026-05-25T06:32:35.322Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","azure-devops","azure-pipelines","capi-cli","cli","config-management","cross-platform","devops-tools","dotenv","env-exporter","environment-variables","open-source","python","variable-groups"],"created_at":"2025-12-25T12:44:10.195Z","updated_at":"2026-05-25T09:34:09.465Z","avatar_url":"https://github.com/4lessandrodev.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🐾 Capivarinha CLI (`capi-cli`)\n\nUma CLI em **Python puro** para interagir com **Variable Groups** do Azure DevOps.\n\n![Capivarinha executando um comando Azure](banner.jpg)\n\n---\n\n## ✨ Funcionalidades\n\n* 🔍 **Pesquisar**: encontra variáveis cujo **valor** contém um termo informado.  \n* 📥 **Baixar**: exporta todas as variáveis de um **Variable Group (lib)** para um arquivo `.env`.  \n* 📂 **Listar**: exibe os **grupos (libs)** disponíveis por projeto/ambiente, **sem variáveis**.  \n* 🔀 **Comparar**: compara **duas libs** e mostra as variáveis **exclusivas** de cada uma.\n\n---\n\n## ✅ Pré-requisitos\n\n* **Python 3.8+**\n* **Azure CLI (`az`)** instalada\n* Autenticação ativa:\n\n```bash\naz login\n````\n\nSe necessário, instale a extensão do DevOps:\n\n```bash\naz extension add --name azure-devops\n```\n\n---\n\n## ⚙️ Instalação\n\nVocê pode rodar direto o arquivo `capi-cli.py`, mas se preferir instalar globalmente:\n\n### Via Makefile (Linux/macOS)\n\n```bash\nmake instalar\n```\n\n### Manual\n\n```bash\nchmod +x capi-cli.py\nsudo cp capi-cli.py /usr/local/bin/capi-cli\n```\n\n### Windows (PowerShell como Admin)\n\n```powershell\nCopy-Item .\\capi-cli.py \"C:\\Windows\\System32\\capi-cli.py\"\npython C:\\Windows\\System32\\capi-cli.py ...\n```\n\n---\n\n## ▶️ Como usar\n\n### Pesquisar\n\n```bash\ncapi-cli pesquisar \\\n  --organizacao=https://dev.azure.com/minha-org \\\n  --termo=https://my-api \\\n  --projeto=TEST --ambiente=QAS \\\n  --salvar=resultado.txt --out\n```\n\n### Baixar\n\n```bash\ncapi-cli baixar \\\n  --organizacao=https://dev.azure.com/minha-org \\\n  --projeto=TEST \\\n  --lib=Meu-App.QAS \\\n  --ambiente=QAS \\\n  --salvar=.env --out\n```\n\n### Listar (somente grupos/libs)\n\n```bash\ncapi-cli listar \\\n  --organizacao=https://dev.azure.com/minha-org \\\n  --projeto=BOARD --ambiente=DEV \\\n  --salvar=grupos.txt --out\n```\n\n### Comparar (duas libs)\n\n```bash\ncapi-cli comparar \\\n  --organizacao=https://dev.azure.com/minha-org \\\n  --projeto=BOARD \\\n  --lib Meu-App.Backend.DEV \\\n  --lib Meu-App.Backend.QAS \\\n  --out\n```\n\nSaída de exemplo:\n\n```\n------ DEV -------\n+ HOST=localhost:300 (Existe em DEV mas não existe em QAS)\n------ QAS -------\n+ PORT=3000 (Existe em QAS mas não existe em DEV)\n------------------\n```\n\n---\n\n## 🔧 Comandos e parâmetros\n\n### 🔍 `pesquisar`\n\n| Parâmetro       | Obrigatório | Descrição                                                   |\n| --------------- | ----------- | ----------------------------------------------------------- |\n| `--organizacao` | ✅           | URL da organização (ex.: `https://dev.azure.com/minha-org`) |\n| `--termo`       | ✅           | Termo a ser buscado nos valores                             |\n| `--projeto`     | ❌           | Filtro por nome/substring de projeto                        |\n| `--ambiente`    | ❌           | Filtra pelo nome do grupo (ex.: `DEV`, `QAS`, etc.)         |\n| `--ignore-case` | ❌           | Busca sem diferenciar maiúsculas/minúsculas                 |\n| `--salvar`      | ❌           | Salvar saída em arquivo texto                               |\n| `--out`         | ❌           | Exibir resultados no terminal                               |\n\n---\n\n### 📥 `baixar`\n\n| Parâmetro       | Obrigatório | Descrição                                         |\n| --------------- | ----------- | ------------------------------------------------- |\n| `--organizacao` | ✅           | URL da organização                                |\n| `--projeto`     | ✅           | Nome/substring do projeto                         |\n| `--lib`         | ✅           | Nome do Variable Group (match exato ou substring) |\n| `--ambiente`    | ❌           | Filtra pelo nome do grupo contendo o ambiente     |\n| `--salvar`      | ❌           | Caminho do arquivo `.env`                         |\n| `--out`         | ❌           | Exibir `.env` no terminal                         |\n\n---\n\n### 📂 `listar` (somente grupos/libs)\n\n| Parâmetro       | Obrigatório | Descrição                                     |\n| --------------- | ----------- | --------------------------------------------- |\n| `--organizacao` | ✅           | URL da organização                            |\n| `--projeto`     | ❌           | Nome/substring do projeto                     |\n| `--ambiente`    | ❌           | Filtra pelo nome do grupo contendo o ambiente |\n| `--salvar`      | ❌           | Caminho do arquivo texto                      |\n| `--out`         | ❌           | Exibir lista no terminal                      |\n\n\u003e A saída lista **apenas** `Projeto`, `Grupo`, `Criado por` e `Modificado por`, sem variáveis.\n\n---\n\n### 🔀 `comparar`\n\n| Parâmetro       | Obrigatório | Descrição                                                                |\n| --------------- | ----------- | ------------------------------------------------------------------------ |\n| `--organizacao` | ✅           | URL da organização                                                       |\n| `--projeto`     | ❌           | Nome/substring do projeto                                                |\n| `--lib`         | ✅ (×2)      | Informe **duas vezes**: primeira e segunda lib (match exato \u003e substring) |\n| `--ambiente`    | ❌           | Filtra pelo nome do grupo contendo o ambiente                            |\n| `--salvar`      | ❌           | Caminho do arquivo texto para salvar a comparação                        |\n| `--out`         | ❌           | Exibir comparação no terminal                                            |\n\n\u003e A comparação mostra as **variáveis exclusivas** de cada lib. (Opcionalmente, você pode salvar essa saída em um arquivo via `--salvar`.)\n\n---\n\n## 📦 Saída\n\n* **pesquisar** → lista:\n\n  ```\n  projeto | grupo | chave | valor | criado_por | modificado_por\n  ```\n* **listar** → lista **apenas** grupos/libs:\n\n  ```\n  --------------------------------------------------------------------------------\n  Projeto: NOME_PROJETO\n  Grupo:   NOME_DO_GRUPO\n  Criado:  Nome \u003cemail\u003e\n  Modif.:  Nome \u003cemail\u003e\n  --------------------------------------------------------------------------------\n  ```\n* **baixar** → gera `.env`:\n\n  ```\n  KEY=VALUE\n  ```\n\n\u003e 🔒 **Segredos** não são retornados pela Azure CLI — aparecem como `***SECRET***`.\n\n---\n\n## 🖥️ Experiência no terminal\n\n* **Spinners discretos** (`Listando projetos...`, `Analisando grupos...`)\n* Linha limpa ao final → saída organizada\n\n---\n\n## ⚠️ Limitações atuais\n\n* Busca é **case-sensitive** por padrão (use `--ignore-case` para ignorar).\n* Segredos não podem ser exportados (limitação da Azure CLI).\n\n---\n\n## 📚 Boas práticas aplicadas\n\n* Arquitetura limpa (Clean Code \u0026 SOLID)\n* Fachada `AzureDevOps`, funções puras e separação de responsabilidades\n* **Docstrings + type hints** para manutenção simples\n* **Zero dependências externas** além da stdlib do Python\n\n---\n\n## 🚀 Roadmap\n\n* Exportar para JSON/YAML\n* Suporte a múltiplas libs no `baixar`\n* Mostrar diferenças de **valores** no `comparar` (quando a variável existe nas duas libs)\n* Otimizações de performance em grandes organizações\n\n---\n\n## ⚡ Instalação rápida via GitHub\n\n```bash\ngit clone https://github.com/4lessandrodev/capivarinha-cli.git \u0026\u0026 \\\ncd capivarinha-cli \u0026\u0026 \\\nmake instalar \u0026\u0026 \\\ncd .. \u0026\u0026 rm -rf capivarinha-cli\n```\n\n---\n\n## 🧾 Versão\n\n```bash\ncapi-cli --version\n```\n\nExemplo de saída: `v0.1.2`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F4lessandrodev%2Fcapivarinha-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F4lessandrodev%2Fcapivarinha-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F4lessandrodev%2Fcapivarinha-cli/lists"}