1
1
#! /bin/bash
2
+ set -euo pipefail
2
3
3
4
# Free disk space on Linux GitHub action runners
4
5
# Script inspired by https://github.com./jlumbroso/free-disk-space
@@ -14,11 +15,15 @@ printSeparationLine() {
14
15
# compute available space
15
16
# REF: https://unix.stackexchange.com/a/42049/60849
16
17
# 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
+ }
18
21
19
22
# make Kb human readable (assume the input is Kb)
20
23
# 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
+ }
22
27
23
28
# macro to output saved space
24
29
printSavedSpace () {
@@ -58,11 +63,27 @@ removeDir() {
58
63
dir=${1}
59
64
60
65
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
+ }
62
74
63
- sudo rm -rf " $dir " || true
75
+ removeUnusedDirectories () {
76
+ local dirs_to_remove=(
77
+ " /usr/local/lib/android"
78
+ " /usr/share/dotnet"
64
79
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
66
87
}
67
88
68
89
execAndMeasureSpaceChange () {
@@ -101,9 +122,9 @@ cleanPackages() {
101
122
102
123
# Remove Docker images
103
124
cleanDocker () {
104
- echo " Removing the following docker images:"
125
+ echo " => Removing the following docker images:"
105
126
sudo docker image ls
106
- echo " Removing docker images..."
127
+ echo " => Removing docker images..."
107
128
sudo docker image prune --all --force || true
108
129
}
109
130
@@ -121,17 +142,12 @@ AVAILABLE_INITIAL=$(getAvailableSpace)
121
142
printDF " BEFORE CLEAN-UP:"
122
143
echo " "
123
144
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"
132
146
execAndMeasureSpaceChange cleanDocker " Docker images"
133
147
execAndMeasureSpaceChange cleanSwap " Swap storage"
134
148
149
+ removeUnusedDirectories
150
+
135
151
# Output saved space statistic
136
152
echo " "
137
153
printDF " AFTER CLEAN-UP:"
0 commit comments