11#! /bin/bash
2+ set -euo pipefail
23
34# Free disk space on Linux GitHub action runners
45# Script inspired by https://github.com/jlumbroso/free-disk-space
@@ -14,11 +15,15 @@ printSeparationLine() {
1415# compute available space
1516# REF: https://unix.stackexchange.com/a/42049/60849
1617# REF: https://stackoverflow.com/a/450821/408734
17- getAvailableSpace () { echo $( df -a | awk ' NR > 1 {avail+=$4} END {print avail}' ) ; }
18+ getAvailableSpace () {
19+ df -a | awk ' NR > 1 {avail+=$4} END {print avail}'
20+ }
1821
1922# make Kb human readable (assume the input is Kb)
2023# REF: https://unix.stackexchange.com/a/44087/60849
21- formatByteCount () { echo $( numfmt --to=iec-i --suffix=B --padding=7 $1 ' 000' ) ; }
24+ formatByteCount () {
25+ numfmt --to=iec-i --suffix=B --padding=7 " $1 " ' 000'
26+ }
2227
2328# macro to output saved space
2429printSavedSpace () {
@@ -58,11 +63,27 @@ removeDir() {
5863 dir=${1}
5964
6065 local before
61- before=$( getAvailableSpace)
66+ if [ ! -d " $dir " ]; then
67+ echo " ::warning::Directory $dir does not exist, skipping."
68+ else
69+ before=$( getAvailableSpace)
70+ sudo rm -rf " $dir "
71+ printSavedSpace " $before " " Removed $dir "
72+ fi
73+ }
6274
63- sudo rm -rf " $dir " || true
75+ removeUnusedDirectories () {
76+ local dirs_to_remove=(
77+ " /usr/local/lib/android"
78+ " /usr/share/dotnet"
6479
65- printSavedSpace " $before " " $dir "
80+ # Haskell runtime
81+ " /usr/local/.ghcup"
82+ )
83+
84+ for dir in " ${dirs_to_remove[@]} " ; do
85+ removeDir " $dir "
86+ done
6687}
6788
6889execAndMeasureSpaceChange () {
@@ -101,9 +122,9 @@ cleanPackages() {
101122
102123# Remove Docker images
103124cleanDocker () {
104- echo " Removing the following docker images:"
125+ echo " => Removing the following docker images:"
105126 sudo docker image ls
106- echo " Removing docker images..."
127+ echo " => Removing docker images..."
107128 sudo docker image prune --all --force || true
108129}
109130
@@ -121,17 +142,12 @@ AVAILABLE_INITIAL=$(getAvailableSpace)
121142printDF " BEFORE CLEAN-UP:"
122143echo " "
123144
124- removeDir /usr/local/lib/android
125- removeDir /usr/share/dotnet
126-
127- # Haskell runtime
128- removeDir /opt/ghc
129- removeDir /usr/local/.ghcup
130-
131- execAndMeasureSpaceChange cleanPackages " Large misc. packages"
145+ execAndMeasureSpaceChange cleanPackages " Unused packages"
132146execAndMeasureSpaceChange cleanDocker " Docker images"
133147execAndMeasureSpaceChange cleanSwap " Swap storage"
134148
149+ removeUnusedDirectories
150+
135151# Output saved space statistic
136152echo " "
137153printDF " AFTER CLEAN-UP:"
0 commit comments