Raccolta di script Python per analizzare attività su GitHub, inclusi Pull Request e Issues.
Script per analizzare le Pull Request mergiate di un autore specifico in un'organizzazione GitHub, distinguendo tra PR approvate senza bocciature e PR bocciate e poi approvate.
Script per ottenere il numero di "bug" e "non-bug" aperti e risolti su GitHub per un'organizzazione in un determinato periodo di tempo.
Questo script utilizza l'API di GitHub per:
- Cercare tutte le PR mergiate di un autore specifico in un'organizzazione
- Analizzare le review di ciascuna PR
- Classificare le PR in due categorie:
- PR approvate senza bocciature: PR che sono state approvate senza mai ricevere una review con stato
CHANGES_REQUESTED - PR bocciate e poi approvate: PR che hanno ricevuto almeno una review con stato
CHANGES_REQUESTEDprima di essere approvate
- PR approvate senza bocciature: PR che sono state approvate senza mai ricevere una review con stato
- Python 3.x
- Un token di accesso personale GitHub con i permessi necessari per leggere le informazioni dell'organizzazione
- Clona o scarica questo repository
- Installa le dipendenze richieste:
pip install -r requirements.txtOppure installa manualmente:
pip install requests click richPrima di utilizzare lo script, devi configurare un token di accesso GitHub:
- Crea un Personal Access Token su GitHub con i permessi necessari per leggere le informazioni dell'organizzazione
- Imposta la variabile d'ambiente
GITHUB_TOKEN:
export GITHUB_TOKEN=tuo_token_personalePer rendere la variabile permanente, aggiungi la riga al tuo file ~/.zshrc o ~/.bashrc.
Alternativa: Puoi passare il token direttamente come parametro CLI con --token.
Questo script utilizza l'API di GitHub per:
- Cercare tutte le issues (non Pull Request) create in un'organizzazione nel periodo specificato
- Classificare le issues come "bug" (se hanno la label
bug) o "non-bug" (se non hanno la labelbug) - Contare le issues aperte e risolte nel periodo specificato
- Fornire statistiche aggregate per bug e non-bug
Le issues sono classificate come:
- Bug: Issues che hanno la label
bugsu GitHub - Non-Bug: Issues che non hanno la label
bug(tutte le altre issues)
- Aperte: Issues create nel periodo specificato che risultano ancora aperte
- Risolte: Issues chiuse nel periodo specificato (indipendentemente da quando sono state create)
Esegui lo script con i seguenti parametri obbligatori:
python pr_analytics.py --org ORGANIZZAZIONE --author AUTORE --from-date YYYY-MM-DD --to-date YYYY-MM-DD--org: Nome dell'organizzazione GitHub (es.Gamindo)--author: Username GitHub dell'autore delle PR (es.pacoogle)--from-date: Data di inizio del periodo da analizzare (formato:YYYY-MM-DD)--to-date: Data di fine del periodo da analizzare (formato:YYYY-MM-DD)
--token: Token GitHub (alternativa aGITHUB_TOKENenv var)--output: Formato di output (table,json,csv) - default:table--export: File di esportazione per JSON/CSV (es.results.json,results.csv)--verbose/-v: Mostra informazioni dettagliate durante l'esecuzione--no-details: Non mostrare il dettaglio delle singole PR (solo statistiche)
Esempio base con output tabella:
python pr_analytics.py --org Gamindo --author pacoogle --from-date 2024-01-01 --to-date 2024-12-31Esempio con output JSON:
python pr_analytics.py --org Gamindo --author pacoogle --from-date 2024-01-01 --to-date 2024-12-31 --output jsonEsempio con esportazione CSV:
python pr_analytics.py --org Gamindo --author pacoogle --from-date 2024-01-01 --to-date 2024-12-31 --output csv --export risultati.csvEsempio con modalità verbose:
python pr_analytics.py --org Gamindo --author pacoogle --from-date 2024-01-01 --to-date 2024-12-31 --verboseEsempio senza dettagli (solo statistiche):
python pr_analytics.py --org Gamindo --author pacoogle --from-date 2024-01-01 --to-date 2024-12-31 --no-detailsEsempio con token passato come parametro:
python pr_analytics.py --org Gamindo --author pacoogle --from-date 2024-01-01 --to-date 2024-12-31 --token ghp_tuo_token_quiLo script supporta tre formati di output:
Mostra una tabella formattata con:
- Statistiche riassuntive (numero di PR per categoria)
- Dettaglio delle PR divise per categoria (se
--no-detailsnon è specificato) - Formattazione colorata e leggibile grazie a Rich
Formato strutturato JSON con tutte le informazioni:
- Lista completa delle PR con dettagli (numero, titolo, URL, repository, data merge)
- Statistiche aggregate
File CSV esportabile con colonne:
- Categoria
- Numero PR
- Titolo
- Repository
- URL
- Data Merge
La CLI moderna include:
- ✅ Validazione automatica delle date - Verifica che le date siano nel formato corretto
- ✅ Progress bar - Indicatori di avanzamento durante l'elaborazione (con
--verbose) - ✅ Gestione errori migliorata - Messaggi di errore chiari e informativi
- ✅ Output formattato - Tabelle colorate e leggibili con Rich
- ✅ Export multipli - Supporto per JSON e CSV
- ✅ Verbosity configurabile - Controllo dettaglio output
- ✅ Help integrato -
python pr_analytics.py --helpper vedere tutte le opzioni
Esegui lo script con i seguenti parametri obbligatori:
python bug_analytics.py --org ORGANIZZAZIONE --from-date YYYY-MM-DD --to-date YYYY-MM-DD--org: Nome dell'organizzazione GitHub (es.Gamindo)--from-date: Data di inizio del periodo da analizzare (formato:YYYY-MM-DD)--to-date: Data di fine del periodo da analizzare (formato:YYYY-MM-DD)
--token: Token GitHub (alternativa aGITHUB_TOKENenv var)--output: Formato di output (table,json,csv) - default:table--export: File di esportazione per JSON/CSV (es.bug_results.json,bug_results.csv)--verbose/-v: Mostra informazioni dettagliate durante l'esecuzione--no-details: Non mostrare il dettaglio delle singole issues (solo statistiche)
Esempio base con output tabella:
python bug_analytics.py --org Gamindo --from-date 2024-01-01 --to-date 2024-12-31Esempio con output JSON:
python bug_analytics.py --org Gamindo --from-date 2024-01-01 --to-date 2024-12-31 --output jsonEsempio con esportazione CSV:
python bug_analytics.py --org Gamindo --from-date 2024-01-01 --to-date 2024-12-31 --output csv --export bug_risultati.csvEsempio con modalità verbose:
python bug_analytics.py --org Gamindo --from-date 2024-01-01 --to-date 2024-12-31 --verboseEsempio senza dettagli (solo statistiche):
python bug_analytics.py --org Gamindo --from-date 2024-01-01 --to-date 2024-12-31 --no-detailsLo script supporta tre formati di output:
Mostra una tabella formattata con:
- Statistiche riassuntive (numero di PR per categoria)
- Dettaglio delle PR divise per categoria (se
--no-detailsnon è specificato) - Formattazione colorata e leggibile grazie a Rich
Formato strutturato JSON con tutte le informazioni:
- Lista completa delle PR con dettagli (numero, titolo, URL, repository, data merge)
- Statistiche aggregate
File CSV esportabile con colonne:
- Categoria
- Numero PR
- Titolo
- Repository
- URL
- Data Merge
Lo script supporta tre formati di output:
Mostra una tabella formattata con:
- Statistiche riassuntive per Bug e Non-Bug
- Colonne separate per "Aperti" e "Risolti"
- Dettaglio delle issues divise per categoria e stato (se
--no-detailsnon è specificato) - Formattazione colorata e leggibile grazie a Rich
Formato strutturato JSON con tutte le informazioni:
- Lista completa delle issues con dettagli (numero, titolo, URL, repository, stato, date, labels)
- Statistiche aggregate per bug e non-bug
- Informazioni sul periodo analizzato
File CSV esportabile con colonne:
- Tipo (Bug/Non-Bug)
- Stato (Aperto/Risolto)
- Numero Issue
- Titolo
- Repository
- URL
- Data Creazione
- Data Chiusura
- Labels
- Entrambi gli script utilizzano la GitHub Search API che ha limiti di rate limiting
- Le date devono essere nel formato
YYYY-MM-DD pr_analytics.pyanalizza solo le PR che sono state effettivamente mergiate nel periodo specificatobug_analytics.pyclassifica le issues come bug se hanno la labelbugsu GitHub. Assicurati che le issues siano etichettate correttamente nell'organizzazionebug_analytics.pyconta le issues aperte create nel periodo e le issues chiuse nel periodo (indipendentemente da quando sono state create)