chrome_f7jZOAgGLU.mp4
Get Copilot usage data as:
- Md Job Summary
- CSV
- XML
- JSON
Powered by the REST API endpoints for GitHub Copilot usage metrics.
Tip
🚀 Get this running FAST by using the template
Create a workflow (eg: .github/workflows/copilot-usage.yml). See Creating a Workflow file.
You will need to create a PAT(Personal Access Token) that has the manage_billing:copilot, read:org, or read:enterprise scopes to use this endpoint.
Add this PAT as a secret so we can use it as input github-token, see Creating encrypted secrets for a repository.
The default behavior is to get the usage for the repository owner which is likely the organization.
Important
You need to set the secret TOKEN in your repository settings.
name: Copilot Usage
on:
schedule:
- cron: '0 0 * * *'
workflow_dispatch:
jobs:
run:
name: Run Action
runs-on: ubuntu-latest
steps:
- uses: austenstone/[email protected]
with:
github-token: ${{ secrets.TOKEN }}
time-zone: 'EST' - uses: austenstone/[email protected]
with:
github-token: ${{ secrets.TOKEN }}
organization: 'org-slug'
team: 'team-slug' - uses: austenstone/[email protected]
with:
github-token: ${{ secrets.TOKEN }}
csv: true strategy:
matrix:
team:
- 'team-slug1'
- 'team-slug2'
steps:
- uses: actions/checkout@v4
- uses: austenstone/[email protected]
with:
github-token: ${{ secrets.TOKEN }}
organization: 'org-slug'
team: ${{ matrix.team }}You probably want to specify the timezone to get the usage in your local time. The default is UTC.
EX: EST, PST, CST, etc.
- uses: austenstone/[email protected]
with:
github-token: ${{ secrets.TOKEN }}
organization: 'org-slug'
time-zone: 'EST'Important
You must set secrets for EMAIL and PASSWORD to send the email. You must use an App Password for Gmail.
name: Email Copilot Report
on:
workflow_dispatch:
schedule:
- cron: '0 0 * * *'
jobs:
run:
runs-on: ubuntu-latest
steps:
- uses: austenstone/[email protected]
with:
github-token: ${{ secrets.TOKEN }}
- uses: austenstone/[email protected]
id: pdf
with:
name: copilot-usage
- uses: dawidd6/action-send-mail@v4
with:
server_address: smtp.gmail.com
server_port: 465
username: ${{ secrets.EMAIL }}
password: ${{ secrets.PASSWORD }}
from: ${{ secrets.EMAIL }}
to: ${{ secrets.EMAIL }} # Recipient email
subject: "Copilot Usage Report (${{ steps.usage.outputs.since }} - ${{ steps.usage.outputs.until }})"
html_body: |
<!DOCTYPE html>
<html>
<body>
<h1>Copilot Usage Report</h1>
<p>Attached is the Copilot Usage Report for ${{ steps.usage.outputs.since }} - ${{ steps.usage.outputs.until }}!</p>
<p>
<a href="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}#:~:text=Copilot%20Usage%20summary">View the full report on
GitHub.com</a>
</p>
${{ steps.pdf.outputs.job-summary-html }}
</body>
</html>
attachments: ${{ steps.pdf.outputs.pdf-file }}If no organization or team input are provided, we default to the repository owner which is likely the organization.
Various inputs are defined in action.yml:
| Name | Description | Default |
|---|---|---|
| github-token | The GitHub token used to create an authenticated client | |
| organization | The organization slug | ${{ github.repository_owner }} |
| job-summary | Whether to generate a report | true |
| csv | Whether to generate a CSV as a workflow artifact | false |
| csv-options | The options for the CSV report | |
| xml | Whether to generate an XML as a workflow artifact | false |
| xml-options | The options for the XML report | |
| team | The team slug | |
| days | The number of days to show usage metrics for | |
| since | Show usage metrics since this date. This is a timestamp, in YYYY-MM-DD format. Maximum value is 28 days ago |
|
| until | Show usage metrics until this date. This is a timestamp, in YYYY-MM-DD format. Maximum value is 28 days ago |
|
| time-zone | The time zone to use for the report | UTC |
| Name | Description |
|---|---|
| result | The copilot usage as a JSON string |
| since | The date since which the usage metrics are shown |
| until | The date until which the usage metrics are shown |
The endpoints used by this action...
- GET /orgs/{org}/team/{team}/copilot/usage
- GET /orgs/{org}/copilot/usage
- GET /orgs/{org}/copilot/billing
- GET /orgs/{org}/copilot/billing/seats
