当サイトの一部ページには、アフィリエイト・アドセンス・アソシエイト・プロモーション広告を掲載しています。

Amazonのアソシエイトとして、Security Akademeiaは適格販売により収入を得ています。

広告配信等の詳細については、プライバシーポリシーページに掲載しています。

消費者庁が、2023年10月1日から施行する景品表示法の規制対象(通称:ステマ規制)にならないよう、配慮して記事を作成しています。もし問題の表現がありましたら、問い合わせページよりご連絡ください。

参考:令和5年10月1日からステルスマーケティングは景品表示法違反となります。 | 消費者庁

GitHub Actions Freeプランのストレージ上限に達したときの対処法

GitHub Actionsのストレージ使用量を削減する方法を紹介します。

事の発端

ある日、GitHubから"You have used 90% of the Actions storage included for the ipusiron account"というメールが届きました。

GitHub Actionsのストレージ使用量が90%(0.45GB / 0.5GB)に達したという警告のようです。

あと8日で月次リセットされるとはいえ、その間もガンガンとGitHub Actionsを使う予定です。つまり、解決策としては課金するか、GitHub Actionsの使用量を圧迫している不必要なファイルを削減するかになります。今回は後者の方法を選択しました。

アーティファクトはデフォルトで90日間保持され、その後自動的に削除されます。
頻繁にpushしていると90日経って古いものが消えるより先に新しいものが積み上がってストレージ上限に達しそうになり警告メールがきたというわけです。

Actions storageとは何か?

GitHub Actionsには2つの使用量メトリクスがあります。混同しやすいので注意が必要です。

メトリクス内容Freeプランの上限
Actions minutesワークフローの実行にかかるCPU時間月2,000分
Actions storageワークフローが生成したキャッシュやアーティファクト(ビルド成果物)の保存容量月0.5Gバイト

今回の警告は後者のActions storageです。つまり、ワークフローの「実行時間」ではなく、ビルドで生成されたPDFなどの「成果物の容量」が積み上がっていたわけです。

私の環境

私はRe:VIEWで技術同人誌を執筆しており、GitHubにpushするたびにGitHub ActionsでDockerベースのPDFビルドが走ります。具体的には、1回のビルドで印刷所入稿用PDF(トンボあり)と読者配布用PDF(トンボなし)の2つのアーティファクトが生成されます。

たとえば、120回のpushで240個のPDFが溜まっていた計算になります。

ちなみに、GitHub Actionsでアーティファクトを生成する方法は、以下の記事で紹介しています。

ストレージ使用量の確認方法

1:GitHubのアイコンを押して、「Settings」を選びます。

2:「Setting」画面が表示されますので、「Billing and licensing」>「Overview」を選びます。

真ん中にある「Metered usage」で、Actionsタブを選びます。

すると、以下の2つの使用量が表示されます。

  • Actions minutes:実行時間の使用量(例:212 min / 2,000 min)
  • Actions storage:ストレージの使用量(例:0.5 GB / 0.5 GB)

また、その下の「Usage by repository」セクションで、どのリポジトリがどれだけストレージを消費しているかも確認できます。

警告メールのとおり、残り0.5GBとなっています。
バーを見ても、空き残量が残り少ないことも一目瞭然です。

キャッシュとアーティファクトの違い

ストレージを消費するのは主に以下の2つです。

種類説明確認場所
Caches依存関係などのキャッシュリポジトリ → Actions → 左サイドバー「Caches」
Artifactsビルド成果物(PDF、ログなど)リポジトリ → Actions → 各ワークフロー実行の詳細ページ下部

私の場合、Cachesは0件でした。
つまり、ストレージを圧迫していたのはすべてアーティファクト(PDF)だったわけです。

アーティファクトの手動削除

GUIで1件ずつ削除する方法

  1. リポジトリの「Actions」タブを開く
  2. ワークフロー実行の一覧から、削除したい実行をクリック
  3. ページ下部の「Artifacts」セクションに成果物が表示される
  4. ゴミ箱アイコンをクリックして削除

しかしながら、今回のように240ファイル分を1つずつ消すのは現実的ではありません。
リセットまで残り数日で、数ファイル消せば耐えれるというときの対処法になります。

GitHub CLIで一括削除する方法

GitHub CLI(ghコマンド)を使えば一括削除できます。

$ REPO="ユーザー名/リポジトリ名"
$ gh run list --repo "$REPO" --limit 100 --json databaseId -q '.[].databaseId' \
  | xargs -I {} gh api "repos/$REPO/actions/runs/{}/artifacts" --jq '.artifacts[].id' \
  | xargs -I {} gh api -X DELETE "repos/$REPO/actions/artifacts/{}"

このコマンドは3段階で処理されます。

  1. gh run listコマンド:直近120回分のワークフロー実行IDを取得
  2. gh api …/artifactsコマンド:各実行に紐づくアーティファクトのIDを取得
  3. gh api -X DELETEコマンド:各アーティファクトを削除

なお、事前にgh auth loginでGitHub CLIの認証を済ませておく必要があります。

私の場合は、以下のワンライナーコマンドを実行しました。

$ gh run list --repo ipusiron/book_ClaudeCodeCryptanalysis --limit 120 --json databaseId -q '.[].databaseId' | xargs -I {} gh api repos/ipusiron/book_ClaudeCodeCryptanalysis/actions/runs/{}/artifacts --jq '.artifacts[].id' | xargs -I {} gh api -X DELETE repos/ipusiron/book_ClaudeCodeCryptanalysis/actions/artifacts/{}

注意点

  • 最新のビルド成果物も含めて全部消える。直近のPDFが必要なら、事前にダウンロードしておくこと。
  • 処理には数分かかる。エラーが返らなければ正常に処理が進んでいる。
  • 実行直後はSettingsのストレージ表示に反映されない(タイムラグがある)。ただし、Actionsタブから個別のワークフロー実行を開くと、アーティファクトが消えていることを確認できる。

アーティファクトが自動削除するようにビルド時に設定する

ワークフローのYAMLである"build.yml"ファイル内でretention-daysを設定しておけば、アーティファクトが自動的に削除されれます(デフォルトでは90日で削除されますが、指定日が経過することで削除できる)。

以下は、3日経過後に自動削除する設定です。

- name: Upload PBOOK_PDF
  uses: actions/upload-artifact@v5
  with:
    name: Book PBOOK_PDF
    path: articles/${{ env.BOOKNAME }}.pdf
    retention-days: 3

3日もあればビルド結果の確認には十分でしょう。

$0バジェットの確認

ストレージ上限を超えたときに課金されるのか、それともActionsがブロックされるだけなのかは、バジェット設定で決まります。

確認手順は以下の通りです。

1:GitHubのSettings画面を開きます。

2:Settings画面において「Billing and licensing」>「Budgets and alerts」を開きます。

3:「Actions」の行を確認します。

ここで以下の2点をチェックします。

項目安全な設定意味
budget$0無料枠を超えた分に対して課金上限が$0
Stop usageYes上限到達時にActionsの実行をブロックする

「$0 budget」かつ「Stop usage: Yes」であれば、無料枠を超えても課金されることはなく、Actionsが一時的にブロックされるだけです。月次リセット後に自動的に復旧します。

なお、Actions以外のプロダクト(Codespaces、Packages、Git LFSなど)も同画面で同様に確認できるので、あわせてチェックしておくとよいでしょう。