La governance è un elemento chiave in qualsiasi organizzazione, soprattutto in contesti enterprise dove i progetti possono crescere rapidamente in termini di utenti, repository e consumo di risorse. Oltre agli aspetti di compliance e policy, rientra a pieno titolo anche il controllo dei costi. Fino a poco tempo fa, però, l'estrazione dei report di billing da GitHub richiedeva un passaggio manuale tramite interfaccia grafica, seguito dall'attesa di un'email contenente il link per il download. Un approccio poco adatto a scenari moderni, in cui l'automazione è centrale e i dati devono essere integrati in modo continuo in strumenti di analisi come Power BI o altri sistemi di reporting. Proprio per rispondere a questa esigenza, è stata introdotta una nuova API che consente di generare e scaricare i report dei costi in modo completamente automatizzato.
La prima cosa da fare è quella di indicare il formato del report (un sommario di alto livello, dettagliato, oppure specifico per utente e prodotto) e il periodo del report (per esempio tutto il mese in corso, in formato YYYY-MM-DD):
RESPONSE=$(curl -s -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/vnd.github+json" \
-H "Content-Type: application/json" \
-d '{"report_type": "summarized", "start_date": "2026-01-01", "end_date": "2026-01-31"}' \
"https://api.github.com/enterprises/$ENTERPRISE/settings/billing/reports")
REPORT_ID=$(echo $RESPONSE | jq -r '.id')In questo momento, di fatto, non abbiamo ancora ottenuto niente. La richiesta è stata inviata a GitHub e verrà elaborata quanto prima con un processo asincrono. Possiamo quindi tentare di recuperarne lo stato in polling:
for i in $(seq 1 60); do RESULT=$(curl -s -X GET -H "Authorization: Bearer $TOKEN" -H "Accept: application/vnd.github+json" "https://api.github.com/enterprises/$ENTERPRISE/settings/billing/reports/$REPORT_ID") STATUS=$(echo "$RESULT" | jq -r '.status') echo "[$i] status=$STATUS" if [ "$STATUS" = "completed" ]; then # download report.... fi sleep 30 done
Solo quando lo status sarà "completed" allora potremmo farne il download:
DOWNLOAD_URL=$(echo "$RESULT" | jq -r '.download_urls[0]')
echo "Downloading report..."
curl -s -o "billing_report_${ENTERPRISE}.csv" "$DOWNLOAD_URL"
echo "Saved to billing_report_${ENTERPRISE}.csv"
breakA questo punto il report è salvato in locale, ma chiaramente possiamo andare ad importarlo in altri sistemi interni, come un database SQL, uno Storage Account in Azure o così via per il processing.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Integrare OpenTelemetry direttamente in Azure Monitor
GitHub Quick Review per la valutazione dello stato di compliance dell'organizzazione aziendale
Impostare il tipo di supporto dei campi Json in Entity Framework con Sql Server
Effettuare un clone parziale di un repository di GitHub
Evitare la compressione degli artefatti in un workflow di GitHub
Evitare il cache poisoning nei workflow di GitHub
Gestire trasferimenti cloud con Azure Storage Mover
Escludere alcuni file da GitHub Copilot
Integrare il Docker Model Runner in un workflow di GitHub
Gestione dei codeowners in GitHub
Gestione dei prompt file a livello di organizzazione aziendale in GitHub
Definire il colore di una scrollbar HTML tramite CSS


