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
5
6
7
+ isX86 () {
8
+ local arch
9
+ arch=$( uname -m)
10
+ if [ " $arch " = " x86_64" ]; then
11
+ return 0
12
+ else
13
+ return 1
14
+ fi
15
+ }
16
+
6
17
# print a line of the specified character
7
18
printSeparationLine () {
8
19
for (( i = 0 ; i < 80 ; i++ )) ; do
@@ -14,11 +25,15 @@ printSeparationLine() {
14
25
# compute available space
15
26
# REF: https://unix.stackexchange.com/a/42049/60849
16
27
# REF: https://stackoverflow.com/a/450821/408734
17
- getAvailableSpace () { echo $( df -a | awk ' NR > 1 {avail+=$4} END {print avail}' ) ; }
28
+ getAvailableSpace () {
29
+ df -a | awk ' NR > 1 {avail+=$4} END {print avail}'
30
+ }
18
31
19
32
# make Kb human readable (assume the input is Kb)
20
33
# REF: https://unix.stackexchange.com/a/44087/60849
21
- formatByteCount () { echo $( numfmt --to=iec-i --suffix=B --padding=7 $1 ' 000' ) ; }
34
+ formatByteCount () {
35
+ numfmt --to=iec-i --suffix=B --padding=7 " $1 " ' 000'
36
+ }
22
37
23
38
# macro to output saved space
24
39
printSavedSpace () {
@@ -58,11 +73,27 @@ removeDir() {
58
73
dir=${1}
59
74
60
75
local before
61
- before=$( getAvailableSpace)
76
+ if [ ! -d " $dir " ]; then
77
+ echo " ::warning::Directory $dir does not exist, skipping."
78
+ else
79
+ before=$( getAvailableSpace)
80
+ sudo rm -rf " $dir "
81
+ printSavedSpace " $before " " Removed $dir "
82
+ fi
83
+ }
84
+
85
+ removeUnusedDirectories () {
86
+ local dirs_to_remove=(
87
+ " /usr/local/lib/android"
88
+ " /usr/share/dotnet"
62
89
63
- sudo rm -rf " $dir " || true
90
+ # Haskell runtime
91
+ " /usr/local/.ghcup"
92
+ )
64
93
65
- printSavedSpace " $before " " $dir "
94
+ for dir in " ${dirs_to_remove[@]} " ; do
95
+ removeDir " $dir "
96
+ done
66
97
}
67
98
68
99
execAndMeasureSpaceChange () {
@@ -79,31 +110,39 @@ execAndMeasureSpaceChange() {
79
110
# Remove large packages
80
111
# REF: https://github.com/apache/flink/blob/master/tools/azure-pipelines/free_disk_space.sh
81
112
cleanPackages () {
82
- sudo apt-get -qq remove -y --fix-missing \
83
- ' ^aspnetcore-.*' \
84
- ' ^dotnet-.*' \
85
- ' ^llvm-.*' \
86
- ' php.*' \
87
- ' ^mongodb-.*' \
88
- ' ^mysql-.*' \
89
- ' azure-cli' \
90
- ' google-chrome-stable' \
91
- ' firefox' \
92
- ' powershell' \
93
- ' mono-devel' \
94
- ' libgl1-mesa-dri' \
95
- ' google-cloud-sdk' \
96
- ' google-cloud-cli'
113
+ local packages=(
114
+ ' ^aspnetcore-.*'
115
+ ' ^dotnet-.*'
116
+ ' ^llvm-.*'
117
+ ' ^mongodb-.*'
118
+ ' ^mysql-.*'
119
+ ' azure-cli'
120
+ ' firefox'
121
+ ' libgl1-mesa-dri'
122
+ ' mono-devel'
123
+ ' php.*'
124
+ )
125
+
126
+ if isX86; then
127
+ packages+=(
128
+ ' google-chrome-stable'
129
+ ' google-cloud-cli'
130
+ ' google-cloud-sdk'
131
+ ' powershell'
132
+ )
133
+ fi
134
+
135
+ sudo apt-get -qq remove -y --fix-missing " ${packages[@]} "
97
136
98
137
sudo apt-get autoremove -y || echo " ::warning::The command [sudo apt-get autoremove -y] failed"
99
138
sudo apt-get clean || echo " ::warning::The command [sudo apt-get clean] failed failed"
100
139
}
101
140
102
141
# Remove Docker images
103
142
cleanDocker () {
104
- echo " Removing the following docker images:"
143
+ echo " => Removing the following docker images:"
105
144
sudo docker image ls
106
- echo " Removing docker images..."
145
+ echo " => Removing docker images..."
107
146
sudo docker image prune --all --force || true
108
147
}
109
148
@@ -121,17 +160,12 @@ AVAILABLE_INITIAL=$(getAvailableSpace)
121
160
printDF " BEFORE CLEAN-UP:"
122
161
echo " "
123
162
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"
163
+ execAndMeasureSpaceChange cleanPackages " Unused packages"
132
164
execAndMeasureSpaceChange cleanDocker " Docker images"
133
165
execAndMeasureSpaceChange cleanSwap " Swap storage"
134
166
167
+ removeUnusedDirectories
168
+
135
169
# Output saved space statistic
136
170
echo " "
137
171
printDF " AFTER CLEAN-UP:"
0 commit comments