Come automatizzare il download dei report di billing da GitHub Enterprise

di Matteo Tumiati, in DevOps,

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"
break

A 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

Visualizza/aggiungi commenti

| Condividi su: LinkedIn, Facebook

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi