gh_map_pipelines v2 - Improved Version
📋 Principais Melhorias
1. Gravação Incremental
- Dados são salvos em lotes (batch) durante o processamento
- Não há perda de dados em caso de interrupção
- Arquivos Parquet são atualizados incrementalmente
- Batch size configurável (padrão: 10 itens)
2. Tratamento Inteligente de Rate Limit
- Detecta erro 429 automaticamente
- Aguarda tempo configurável (padrão: 60 segundos)
- Registra ocorrências em tabela
rate_limit_log - Verifica histórico antes de fazer novas requisições
- Retry automático com backoff
3. Sistema de Retomada (Resume)
- Rastreia progresso em tabelas de controle
- Permite retomar de onde parou com
--resume - Não reprocessa workflows já analisados
- Mantém contador de tentativas para cada item
4. Novos Comandos CLI
🚀 Uso
Instalação
# Se estiver usando poetry
poetry install
# Ou instale diretamente
pip install -e .
Comandos Disponíveis
1. Processamento Completo
# Processar organização do zero
gh_map process --org <nome-da-org>
# Com configurações customizadas
gh_map process --org <nome-da-org> --batch-size 20 --wait 120
2. Retomar Processamento
# Retomar de onde parou (após interrupção ou rate limit)
gh_map process --org <nome-da-org> --mode resume
# Ou use o atalho
gh_map resume --org <nome-da-org>
3. Processar Apenas Uses (após coletar repos e workflows)
# Útil quando repos e workflows já foram coletados
gh_map process --org <nome-da-org> --mode uses-only
4. Verificar Status
# Ver estatísticas do processamento
gh_map status --org <nome-da-org>
# Ou através do modo
gh_map process --org <nome-da-org> --mode status
5. Reset de Status (mantém dados)
# Reseta status de processamento mas mantém dados coletados
gh_map reset --org <nome-da-org> --confirm
6. Limpar Dados
# Limpar todos os dados
gh_map clean --org <nome-da-org> --confirm
# Limpar mas manter repositórios
gh_map clean --org <nome-da-org> --confirm --keep-repos
7. Exportar Dados
# Exportar para JSON
gh_map export --org <nome-da-org> --format json --output data.json
# Exportar para CSV (gera 3 arquivos)
gh_map export --org <nome-da-org> --format csv --output export
📊 Estrutura de Dados
Tabelas SQLite
1. repositorios
- Informações dos repositórios da organização
2. workflow_runs
- Workflows do GitHub Actions de cada repositório
3. uses_workflows
- Actions utilizadas em cada workflow
4. workflow_status (Nova)
- Controle de processamento de cada workflow
- Status:
completed,error,rate_limited,not_found,yaml_error,skipped - Contador de tentativas
5. processing_status (Nova)
- Estado geral do processamento
- Checkpoints para retomada
6. rate_limit_log (Nova)
- Histórico de rate limits encontrados
- Usado para evitar requisições durante período de espera
Arquivos Parquet
repos.parquet- Repositóriosworkflow_runs.parquet- Workflowsuses_workflows.parquet- Uses encontrados
🔄 Fluxo de Processamento
-
Coleta de Repositórios
- Lista páginas da API incrementalmente
- Salva em lotes no banco e parquet
- Checkpoint a cada página processada
-
Coleta de Workflows
- Processa repositório por repositório
- Pula repositórios já processados
- Salva incrementalmente
-
Extração de Uses
- Baixa YAMLs dos workflows
- Extrai actions recursivamente
- Marca status de cada workflow
- Retry automático em caso de falha
🛡️ Resiliência
Cenários Tratados:
- Rate Limit (429): Aguarda e tenta novamente
- Timeout: Retry automático
- Erro 404: Marca como
not_founde continua - YAML inválido: Marca como
yaml_errore continua - Interrupção: Use
--resumepara continuar
Limites de Retry:
- Máximo de 3 tentativas por workflow
- Workflows com muitos erros são pulados
- Rate limit reseta contador após sucesso
📈 Monitoramento
Status Report mostra:
- Total de repositórios coletados
- Total de workflows encontrados
- Total de uses extraídos
- Workflows processados com sucesso
- Workflows com erro
- Workflows aguardando retry (rate limited)
💡 Dicas de Uso
-
Para grandes organizações: Use batch size maior (ex:
--batch-size 50) -
Se encontrar muitos rate limits: Aumente tempo de espera (ex:
--wait 300) -
Para debug: Acompanhe os logs coloridos no console
-
Consulta durante processamento: Os dados são salvos incrementalmente, permitindo consultas SQL/Parquet mesmo durante a coleta
-
Processamento em etapas:
# Primeiro, colete apenas repositórios gh_map process --org myorg # (interrompa com Ctrl+C após coletar repos) # Depois, continue com workflows e uses gh_map resume --org myorg
🔍 Consultas SQL Úteis
-- Workflows pendentes de processamento
SELECT COUNT(*) FROM workflow_runs wr
LEFT JOIN workflow_status ws ON wr.node_id = ws.node_id
WHERE ws.status IS NULL OR ws.status != 'completed';
-- Top 10 actions mais usadas
SELECT use, COUNT(*) as count
FROM uses_workflows
GROUP BY use
ORDER BY count DESC
LIMIT 10;
-- Repositórios com mais workflows
SELECT r.name, COUNT(w.id) as workflow_count
FROM repositorios r
JOIN workflow_runs w ON r.id = w.id_repo
GROUP BY r.name
ORDER BY workflow_count DESC;
🐛 Troubleshooting
Problema: Rate limit constante
Solução: Aumente o tempo de espera ou execute em horários com menos tráfego
Problema: Memória insuficiente para grandes orgs
Solução: Reduza o batch size para processar menos itens por vez
Problema: Processo travado
Solução: Use Ctrl+C para interromper e depois gh_map resume para continuar
📝 Notas de Implementação
Diferenças da v1:
- Não carrega tudo em memória antes de salvar
- Salva incrementalmente em lotes configuráveis
- Rate limit com retry inteligente e backoff
- Sistema de checkpoint para retomada
- Múltiplos modos de operação
- Comandos auxiliares (status, reset, clean, export)
- Melhor tratamento de erros e edge cases
Release files for gh-map-pipelines 0.2.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| gh_map_pipelines-0.2.3.tar.gz | 30.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| gh_map_pipelines-0.2.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 63.6 kB
Release files / gh_map_pipelines-0.2.3.tar.gz
| Download URL | gh_map_pipelines-0.2.3.tar.gz |
|---|---|
| Size | 30.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9d3065e6bc8320aae2d3189a342264a286b981b75e36f18e8e112588863449d2
|
|
BLAKE2b-256 checksum How to use checksums |
c1d51a55ab5730467e5c2ab7e355c82123c672a8bcfd4ab5bc2d74a088142204
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.8.2 CPython/3.12.3 Linux/6.6.87.2-microsoft-standard-WSL2
|
Release files / gh_map_pipelines-0.2.3-py3-none-any.whl
| Download URL | gh_map_pipelines-0.2.3-py3-none-any.whl |
|---|---|
| Size | 32.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
11fa445a324c26807f7bcc02e7f7227730229c37b97923a24cab1a1d0814a089
|
|
BLAKE2b-256 checksum How to use checksums |
4630fdc3df7ee6e01b927fb974db1d450f1bda6ab4c613d992d1574354914295
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.8.2 CPython/3.12.3 Linux/6.6.87.2-microsoft-standard-WSL2
|