Skip to content

Removes pre-installed software on Linux GitHub runners to free up to ~75Gb root space (eg: for Docker build)

License

Notifications You must be signed in to change notification settings

almahmoud/free-root-space

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 

Repository files navigation

Free Root Space on GitHub Linux Runners

Background

This action removes pre-installed software on Linux GitHub runners to free up to 72Gb of root space (as of March 2023). This action was particularly made for the purpose of freeing up space for Docker build steps in workflows that do not otherwise require any pre-installed software. The list was created manually by examining the output of sudo du --max-depth=4 / | sort -n around March 2023.

This action is inspired by and can be used together with the easimon/maximize-build-space action, which can notably create a directory with additional space by virtually mounting temp and swap space.

How it works

In short, the action is equivalent to running sudo rm -rf on a list of directories, which is exactly what it does. The most significant advantage of using this action is inheriting changes as they come up and not have to manually do them across multiple workflows that might need extra root disk space (eg: different repos building Docker containers).

Getting Started

You can use this action by adding it as a step in your workflow. The default configuration, which removes all identified pre-installed software, leaves a root disk with over 70Gb as of March 2023.

    steps:
      - name: Free root space
        uses: almahmoud/free-root-space@main
        with:
          verbose: true

By default all identified directories are removed. You can keep software suites by setting their remove-* parameter to false.

For example, the below configuration will leave the .NET suite.

    steps:
      - name: Free root space
        uses: almahmoud/free-root-space@main
        with:
          verbose: true
          remove-dotnet: false

The full list of options can be found in the action.yml file, or paste below:

  verbose:
    description: 'Print a trace of commands (`set -x`)'
    required: false
    default: 'true'
  remove-dotnet:
    description: 'Removes /usr/share/dotnet /home/runner/.dotnet /home/runneradmin/.dotnet /etc/skel/.dotnet'
    required: false
    default: 'true'
  remove-android:
    description: 'Removes /usr/local/lib/android'
    required: false
    default: 'true'
  remove-haskell:
    description: 'Removes /opt/ghc /usr/local/.ghcup'
    required: false
    default: 'true'
  remove-hostedtoolcache:
    description: 'Removes /opt/hostedtoolcache/*'
    required: false
    default: 'true'
  remove-google-sdk:
    description: 'Removes /usr/lib/google-cloud-sdk'
    required: false
    default: 'true'
  remove-firefox:
    description: 'Removes /usr/lib/firefox'
    required: false
    default: 'true'
  remove-powershell:
    description: 'Removes /opt/microsoft/powershell'
    required: false
    default: 'true'
  remove-graalvm:
    description: 'Removes /usr/local/graalvm'
    required: false
    default: 'true'
  remove-rustup:
    description: 'Removes /etc/skel/.rustup /home/runner/.rustup /home/runneradmin/.rustup'
    required: false
    default: 'true'
  remove-llvm-12:
    description: 'Removes /usr/lib/llvm-12'
    required: false
    default: 'true'
  remove-llvm-13:
    description: 'Removes /usr/lib/llvm-13'
    required: false
    default: 'true'
  remove-llvm-14:
    description: 'Removes /usr/lib/llvm-14'
    required: false
    default: 'true'
  remove-julia:
    description: 'Removes /usr/local/julia*'
    required: false
    default: 'true'
  remove-microsoft:
    description: 'Removes /opt/microsoft'
    required: false
    default: 'true'
  remove-azure-cli:
    description: 'Removes /opt/az /usr/src/*-azure-* /usr/share/az_9.3.0'
    required: false
    default: 'true'
  remove-linuxbrew:
    description: 'Removes /home/linuxbrew'
    required: false
    default: 'true'
  remove-pipx:
    description: 'Removes /opt/pipx'
    required: false
    default: 'true'
  remove-google:
    description: 'Removes /opt/google'
    required: false
    default: 'true'
  remove-gcc:
    description: 'Removes /usr/lib/gcc'
    required: false
    default: 'true'
  remove-mono:
    description: 'Removes /usr/lib/mono'
    required: false
    default: 'true'
  remove-aws-cli:
    description: 'Removes /usr/local/aws-*'
    required: false
    default: 'true'
  remove-sql:
    description: 'Removes /var/lib/mysql /usr/local/sqlpackage /var/lib/postgresql /usr/lib/postgresql'
    required: false
    default: 'true'
  remove-gems:
    description: 'Removes /var/lib/gems'
    required: false
    default: 'true'
  remove-swift:
    description: 'Removes /usr/share/swift'
    required: false
    default: 'true'
  remove-miniconda:
    description: 'Removes /usr/share/miniconda'
    required: false
    default: 'true'
  remove-cargo:
    description: 'Removes /home/runner/.cargo /etc/skel/.cargo /home/runneradmin/.cargo'
    required: false
    default: 'true'
  remove-gradle:
    description: 'Removes /usr/share/gradle*'
    required: false
    default: 'true'
  remove-n:
    description: 'Removes /usr/local/n'
    required: false
    default: 'true'
  remove-cache:
    description: 'Removes /var/cache'
    required: false
    default: 'true'
  remove-sbt:
    description: 'Removes /usr/share/sbt /root/.sbt'
    required: false
    default: 'true'
  remove-mecab:
    description: 'Removes /var/lib/mecab /usr/share/mecab'
    required: false
    default: 'true'
  remove-java:
    description: 'Removes /usr/share/java /usr/lib/jvm'
    required: false
    default: 'true'
  remove-fonts:
    description: 'Removes /usr/share/fonts'
    required: false
    default: 'true'
  remove-vim:
    description: 'Removes /usr/share/vim'
    required: false
    default: 'true'
  remove-icons:
    description: 'Removes /usr/share/icons'
    required: false
    default: 'true'
  remove-cplusplus:
    description: 'Removes /usr/include/c++'
    required: false
    default: 'true'
  remove-ri:
    description: 'Removes /usr/share/ri'
    required: false
    default: 'true'
  remove-R:
    description: 'Removes /usr/lib/R'
    required: false
    default: 'true'
  remove-kotlinc:
    description: 'Removes /usr/share/kotlinc'
    required: false
    default: 'true'
  remove-man-docs:
    description: 'Removes /usr/share/doc /usr/share/man'
    required: false
    default: 'true'

About

Removes pre-installed software on Linux GitHub runners to free up to ~75Gb root space (eg: for Docker build)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published