みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Python, Javascript, Processing, Unityなど.

GitHub Actionsのストレージ容量

GitHub ActionsでArtifactを扱っていたところ,突然以下のようなエラーが出て実行できなくなりました.

Create Artifact Container failed: Artifact storage quota has been hit. Unable to upload any new artifacts.

無料プランでGitHubを利用していたのですが,GitHub Packagesの容量が500MB/月しかないそうで,これを使い切るとGitHub Actionsの実行が正常にできなくなるようです.

したがって,容量を引き上げるためにプランを上げたり,ストレージの使用を節約する必要があります.

GitHub Packages: Your packages, at home with their code · GitHub

プランの選択

みーはProプランに変更しました.ひとまず2GBの容量があれば十分そうなのと,実行時間が1000時間追加になるからです.GitHubにはお世話になっているので$4/月を支払うことにしました.

容量の節約

ストレージ容量は$0.25/GB/月で追加でき,外部への転送は$0.5/GB/月です.また,GitHub Actions内のデータ転送には料金が発生しません*1

AWSのS3など外部のストレージを利用すると安くなりそうですが,GitHub Actionsの外にあるストレージを利用しようとしても,アップロードとダウンロードで往復する度に,最低で4倍のデータ転送コストが発生します.GitHub Actionsを利用する限りはストレージ容量を$0.25/GB/月で追加するのが一番安いわけです.

Artifact の保持期限を短くする

個別の artifact の保持期限を設定することで,ストレージ容量を早く開放します.

  - uses: actions/upload-artifact@v4
    with:
      name: test
      path: test
      retention-days: 1

Storing workflow data as artifacts - GitHub Docs

古いArtifactの削除

使わないファイルを削除することで容量を節約することができます.

GitHub ActionsのWebページから1個づつ削除する方法もありますが,面倒なので1日に1回古いArtifactを削除するActionを追加します.

GitHub - kolpav/purge-artifacts-action: Action responsible for deleting old artifacts by setting expire duration.

name: 'artifacts cleanup'
on:
  schedule:
    - cron: '0 20 * * *' # UTC

jobs:
  delete-artifacts:
    runs-on: ubuntu-latest
    steps:
      - uses: kolpav/purge-artifacts-action@v1
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          expire-in: 30 minutes

自動トークン認証 - GitHub Docs

これで朝起きる頃にはArtifactが削除されて容量が0にリセットされます.

このActionsを実行するために実行時間が消費されますが,1回15秒しかかからないので,1ヶ月間毎日実行しても,合計8分程度です.無料枠でも十分実用的な運用ができるのではないかと思われます.

Artifact and log retention

Artifactの有効期限を短くすることで,GitHubに自動的に削除してもらう方法もあります.レポジトリの設定画面のActionsを開いて,Artifact and log retentionで期間を設定します.

この方法だと,GitHub Actionsのログも有効期限が短くなるので,ログがすぐに見れなくなるのが難点です.せっかくGitHub Actionsでソースコードとログが関連付けられるメリットが台無しだと思います.