当月のGitHub Actionsの利用量を取得するアクションを作った
作ったもの
タイトルの通りですが、当月の GitHub Actions の利用量を取得するアクションを作りました!
GitHub Marketplace にも公開してます。
Slack Notify Action と一緒に使うと、スクショのように GitHub Actions の利用量を流せます。
きっかけ
GitHub Actions を利用できる上限はプランごとに決まっています。例えば、GitHub Free プランであれば、毎月 2000 分(Linux ランナー基準)までです。この上限に達した場合、次回のリセット日まで GitHub Actions のワークフローを動かせなくなります。(追加で課金すれば動かせる)
GitHub Actions の利用量が一定の閾値を超えた場合、メールでお知らせしてくれるのですが、気づかず上限に達してしまうことがありました。その時は次回のリセット日が近い & ワークフローを動かせなくても特に問題なかったので、追加の課金はしませんでした。できるだけ追加の課金は避けたかったので、利用量を定期的に確認できる仕組みが欲しいと思い、今回紹介するアクションを作りました。
使い方
Get Billing for GitHub Actions アクションで取得できるもの
取得できるものは次の通りです。
名前 | 説明 |
---|---|
included-minutes | 使用中のプランで利用可能な上限 |
total-minutes-used | 当月の利用量 |
usable-minutes | 残りの利用量 |
days-left-in-billing-cycle | 次回のリセット日までの日数 |
GitHub Actions の利用量を Slack に通知できるワークフローを追加する
例として、Slack Notify Action と組み合わせて、GitHub Actions の利用量を Slack に通知するワークフローを追加していきます。本記事では個人用アカウントで利用する場合の使い方について説明していきます。(Organization アカウントで使用する場合は README の Usage セクションを参照ください)
事前準備
後ほど、Slack へ通知するために Webhook の URL と Personal Access Token(以下、PATと呼びます) が必要になるので事前に準備しておきます。
Slack の Webhook URL を取得する
下記のリンクから Webhook URL を取得して、控えておいてください。
PAT を作成する
下記の画面に遷移し、『Generate new token』をクリックします。
すると、下記のような画面に遷移するので、Token name などを入力していきます。ここは任意の名前でOKです。
『Permissions』 セクションまでスクロールして、Plan のアクセスレベルを Read/only に変更します。
『Overview』セクションに Plan が追加されていることを確認し、『Generate token』ボタンをクリックします。
すると、生成された PAT が表示されるので、それを控えておきます。
PAT と Slack の Webhook URL をシークレットに追加する
ワークフローを追加するリポジトリのシークレットに先ほど取得した Slack の Webhook URL と PAT を追加します。具体的な設定方法については下記のドキュメントを参考にしてください。
ここでは、ACCESS_TOKEN というシークレットに PAT を、SLACK_WEBHOOK というシークレットに Slack の Webhook URL をそれぞれ設定してます。
ワークフローファイルを追加する
Slack に通知する下記のワークフローを追加します。
name: get-billing-for-github-actions
on: push
jobs:
check-github-actions-usage:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3 # リポジトリをチェックアウト
- uses: actions/setup-node@v3
with:
node-version: 18
- name: Get billing for GitHub Actions
id: get-billing-for-github-actions
uses: keita-hino/get-billing-for-github-actions@v0.1.0
with:
account-type: user
github-token: ${{ secrets.ACCESS_TOKEN }}
- name: Slack Notification
uses: rtCamp/action-slack-notify@v2
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
SLACK_TITLE: 【当月】GitHub Actionsの利用量
SLACK_USERNAME: GitHubレポート
# 設定したいアイコンがあれば指定してください
# SLACK_ICON:
MSG_MINIMAL: true
SLACK_MESSAGE: >
現在使用しているプランの GitHub Actions の利用上限は `${{steps.get-billing-for-github-actions.outputs.included-minutes}}` 分です。
当月の利用量は `${{steps.get-billing-for-github-actions.outputs.total-minutes-used}}` 分で残り `${{steps.get-billing-for-github-actions.outputs.usable-minutes}}` 分です。
次回のリセット日まで `${{steps.get-billing-for-github-actions.outputs.days-left-in-billing-cycle}}` 日です。
上記のワークフローファイルを push して、指定した Slack のチャンネルに下記のような通知されれば成功です🎉
(おまけ)毎週自動で通知する
GitHub Actions の schedule トリガーを使用して、毎週月曜日の10時ごろに通知できるよう修正します。(GitHub のドキュメントにもある通り、実行するタイミングが遅延する場合もあります)
name: get-billing-for-github-actions
- on: push
+ on:
+ schedule:
+ # 分 時 日 月 曜日
+ - cron: '0 1 * * 1'
jobs:
check-github-actions-usage:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3 # リポジトリをチェックアウト
- uses: actions/setup-node@v3
with:
node-version: 18
- name: Get billing for GitHub Actions
id: get-billing-for-github-actions
uses: keita-hino/get-billing-for-github-actions@v0.1.0
with:
account-type: user
github-token: ${{ secrets.ACCESS_TOKEN }}
- name: Slack Notification
uses: rtCamp/action-slack-notify@v2
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
SLACK_TITLE: 【当月】GitHub Actionsの利用量
SLACK_USERNAME: GitHubレポート
# 設定したいアイコンがあれば指定してください
# SLACK_ICON:
MSG_MINIMAL: true
SLACK_MESSAGE: >
現在使用しているプランの GitHub Actions の利用上限は `${{steps.get-billing-for-github-actions.outputs.included-minutes}}` 分です。
当月の利用量は `${{steps.get-billing-for-github-actions.outputs.total-minutes-used}}` 分で残り `${{steps.get-billing-for-github-actions.outputs.usable-minutes}}` 分です。
次回のリセット日まで `${{steps.get-billing-for-github-actions.outputs.days-left-in-billing-cycle}}` 日です。
Discussion