- 公開日
不要なGitHub Actionsのキャッシュを削除するdelete-action-cacheを作った
TL;DR
不要なGitHub Actionsのキャッシュを簡単に削除できるtoshimaru/delete-action-cacheというActionを作った。
GitHub Actions Cacheの容量制限
GitHub Actionsのキャッシュの保持容量は10GBまでという制限がある。
GitHubは、7日間以上アクセスされていないキャッシュエントリを削除します。 保存できるキャッシュの数に制限はありませんが、リポジトリ内のすべてのキャッシュの合計サイズは制限されています (最大 10 GB)。
ref. 依存関係をキャッシュしてワークフローのスピードを上げる - GitHub Docs
キャッシュが超過している・超過しそうだと下記のような警告が表示される。
Least recently used caches will be automatically evicted to limit the total cache storage to 10 GB. Learn more about cache usage.
キャッシュ容量制限で困るケース
比較的小さいプロジェクトであれば、この制限に引っかかることは少ないだろう。
しかし下記のようなケースで、この10GBという制限が足かせになることがある。
- 巨大な Monorepo を運用している
- docker/build-push-actionなどを使って大きいdockerイメージをレイヤーキャッシュしている
10GBを超えると古いキャッシュから削除されていくため、キャッシュスラッシングが発生してビルドが遅くなったり、場合によってはビルドが壊れることもある。
最近だとこちらの記事が話題になっていた:やんないほうがいいかも、GitHub Actions の setup-xxx での依存キャッシュ保存 - 誰かの役に立てばいいブログ
不要なキャッシュを削除するActionを作った
そういった問題を解決するため、不要なGitHub Actionsのキャッシュを簡単に削除できるActionを作った。
toshimaru/delete-action-cache: Delete GitHub Actions Cache with ease.
具体的には下記のようなことが簡単にできるようになる。
- Pull Request のマージ後、トピックブランチに紐づくキャッシュを削除
workflow_dispatch
イベントをトリガーに、特定ブランチのキャッシュを削除schedule
イベントをトリガーに、特定ブランチのキャッシュを削除
工夫したところ
今回のActionを作るにあたり、下記のような工夫をした。
自動リリース
r7kamura/bump-requestを使い、workflow_dispatch
からPRマージでリリースできるように自動化を行った。
リリース自動化に関してはbump-requestの作者が解説記事を上げているので、そちらを参照するとよい。
メジャーバージョンリリースの自動化
GitHub Actions には v1.1
, v1.2
, v1.3
… のようなリリースを v1
とメジャーバージョンに丸めて扱う慣習がある。
このへんのリリースは actions/checkout でやっている半自動アプローチを採用した。手動でworkflow_dispatch
からリリース対象バージョンとタグを指定してリリースする方法である。
詳しくは下記の.github/workflows/update-main-version.yml
ワークフローの内容を参照するとよい。
checkout/.github/workflows/update-main-version.yml at main · actions/checkout
おわり
もしGitHub Actionsのキャッシュ容量制限にお困りの方はお試しください。
余談
このActionを作るにあたり、gh cache list
コマンドにオプションが欲しくなったので、付けておいた。
- feat: Add cache key option to
gh cache list
by toshimaru · Pull Request #8667 · cli/cli - feat: Add
ref
option togh cache list
by toshimaru · Pull Request #8711 · cli/cli
`gh cache list` コマンドに ref オプションも足したぞい! » Release GitHub CLI 2.45.0 · cli/cli https://t.co/4mtappf4UP https://t.co/lcJJw0AvjF
— toshimaru (@toshimaru_e) March 5, 2024