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