GitHub Actionsのディスクを最大限しようするために不要なものを削除する前処理を実行する

初めに

GitHub Actionsを使ってビルドをする際に内容によっては以下のようなエラーが出ることがあります。

~~~ no space left on device

これは提供されているディスクサイズを超えて使用しようとするとエラーになります。そのため、よりディスクサイズを増やして使うために不要なものを削除していきます。

今回検証に使ったRepositoryは以下になります

github.com

前提

今回は以下の記事の内容の UnityのWebビルドを行い、firebase hostingにCLIでデプロイするワークフローを前提にしています。そのため、ワークフローによって削除する内容は調節をしてください

ayousanz.hatenadiary.jp

開発環境

  • GitHub Actions(Ubunts 24.02)

削除対象

今回削除したものは以下になります

1. 直接削除されるファイル・ディレクト

  • スワップファイル: /swapfile
  • .NET SDK: /usr/share/dotnet
  • Haskell (GHC と GHCup): /opt/ghc, /usr/local/.ghcup
  • Android SDK/NDK: /usr/local/lib/android
  • CodeQL ツールキャッシュ: /opt/hostedtoolcache/CodeQL
  • Swift: /usr/share/swift
  • Go (本体とツールキャッシュ): /usr/local/go, /opt/hostedtoolcache/go
  • Java (OpenJDK インストール): /usr/lib/jvm/ 内の全ファイル・ディレクト
  • Ruby (ツールキャッシュとRVM): /opt/hostedtoolcache/Ruby, /home/runner/.rvm
  • Python ツールキャッシュ: /opt/hostedtoolcache/Python

2. apt-get remove により削除されるパッケージ

3. apt-get autoremove により削除されるパッケージ

  • 上記 apt-get remove で削除されたパッケージに依存しており、他に必要とされなくなったパッケージ

4. apt-get clean により削除されるもの

  • ダウンロード済みのaptパッケージファイル

5. docker system prune --volumes -a -f により削除されるDockerリソース

  • 停止中の全てのDockerコンテナ
  • 使用されていない全てのDockerネットワーク
  • どのコンテナからも参照されていない全てのDockerイメージ (未使用イメージ)
  • 未使用の全てのDockerボリューム
  • Dockerビルドキャッシュ

ディスクサイズ削除Jobの定義

使用するワークフローの一番初めに以下を追加することで、27GBの空き容量を増やすことができます

      - name: Maximize Runner Disk Space
        run: |
          echo "Initial disk space:"
          df -h
          
          echo "Removing swap file..."
          sudo swapoff -a
          sudo rm -f /swapfile
          
          echo "Removing large pre-installed tools..."
          # .NET SDKs
          sudo rm -rf /usr/share/dotnet
          # Haskell (ghc)
          sudo rm -rf /opt/ghc /usr/local/.ghcup
          # Android SDK/NDK
          sudo rm -rf /usr/local/lib/android
          # CodeQL
          sudo rm -rf /opt/hostedtoolcache/CodeQL
          # Swift
          sudo rm -rf /usr/share/swift
          # Go
          sudo rm -rf /usr/local/go /opt/hostedtoolcache/go
          # Java (OpenJDK)
          sudo rm -rf /usr/lib/jvm/*
          # Ruby tool cache and rvm
          sudo rm -rf /opt/hostedtoolcache/Ruby /home/runner/.rvm
          # Python tool cache (Leaving system Python intact, removing cached versions)
          sudo rm -rf /opt/hostedtoolcache/Python

          echo "Removing packages via apt..."
          # Google Cloud SDK (Firebase CLIとは別)
          sudo apt-get remove -y google-cloud-cli google-cloud-sdk || echo "gcloud not found or removal failed"
          # PHP
          sudo apt-get remove -y php\* || echo "PHP not found or removal failed"
          # Browsers
          sudo apt-get remove -y firefox google-chrome-stable || echo "Browsers not found or removal failed"

          echo "Cleaning apt cache..."
          sudo apt-get autoremove -y
          sudo apt-get clean

          echo "Performing extensive Docker system prune..."
          # Keep Docker itself, but prune unused resources
          sudo docker system prune --volumes -a -f

          echo "Final disk space:"
          df -h

結果として以下になります

状態 サイズ 使用量 空き容量 使用率 解放された容量
初期状態 72 GB 47 GB 25 GB 66% -
削除後 72 GB 20 GB 53 GB 27% 27 GB