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
+ # When updating to a new ubuntu version:
8
+ # - Check that there are no docker images preinstalled with `docker image ls`
9
+ # - Check that there are no big packages preinstalled that we aren't using
10
+
6
11
# print a line of the specified character
7
12
printSeparationLine () {
8
13
for (( i = 0 ; i < 80 ; i++ )) ; do
@@ -14,11 +19,15 @@ printSeparationLine() {
14
19
# compute available space
15
20
# REF: https://unix.stackexchange.com/a/42049/60849
16
21
# REF: https://stackoverflow.com/a/450821/408734
17
- getAvailableSpace () { echo $( df -a | awk ' NR > 1 {avail+=$4} END {print avail}' ) ; }
22
+ getAvailableSpace () {
23
+ df -a | awk ' NR > 1 {avail+=$4} END {print avail}'
24
+ }
18
25
19
26
# make Kb human readable (assume the input is Kb)
20
27
# REF: https://unix.stackexchange.com/a/44087/60849
21
- formatByteCount () { echo $( numfmt --to=iec-i --suffix=B --padding=7 $1 ' 000' ) ; }
28
+ formatByteCount () {
29
+ numfmt --to=iec-i --suffix=B --padding=7 " $1 " ' 000'
30
+ }
22
31
23
32
# macro to output saved space
24
33
printSavedSpace () {
@@ -58,11 +67,30 @@ removeDir() {
58
67
dir=${1}
59
68
60
69
local before
61
- before=$( getAvailableSpace)
62
-
63
- sudo rm -rf " $dir " || true
70
+ if [ ! -d " $dir " ]; then
71
+ echo " ::warning::Directory $dir does not exist, skipping."
72
+ else
73
+ before=$( getAvailableSpace)
74
+ sudo rm -rf " $dir "
75
+ printSavedSpace " $before " " Removed $dir "
76
+ fi
77
+ }
64
78
65
- printSavedSpace " $before " " $dir "
79
+ removeUnusedDirectories () {
80
+ local dirs_to_remove=(
81
+ " /usr/local/lib/android"
82
+ # Haskell runtime
83
+ " /usr/local/.ghcup"
84
+ # Azure
85
+ " /opt/az"
86
+ " /etc/mysql"
87
+ " /usr/share/php"
88
+ " /etc/php/"
89
+ )
90
+
91
+ for dir in " ${dirs_to_remove[@]} " ; do
92
+ removeDir " $dir "
93
+ done
66
94
}
67
95
68
96
execAndMeasureSpaceChange () {
@@ -79,34 +107,33 @@ execAndMeasureSpaceChange() {
79
107
# Remove large packages
80
108
# REF: https://github.com/apache/flink/blob/master/tools/azure-pipelines/free_disk_space.sh
81
109
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'
110
+ sudo apt-get purge -y --fix-missing \
111
+ ' ^aspnetcore-.*' \
112
+ ' ^dotnet-.*' \
113
+ ' ^java-*' \
114
+ ' ^libllvm.*' \
115
+ ' ^llvm-.*' \
116
+ ' ^mysql-.*' \
117
+ ' ^vim.*' \
118
+ ' azure-cli' \
119
+ ' firefox' \
120
+ ' gcc' \
121
+ ' gcc-12' \
122
+ ' gcc-13' \
123
+ ' google-chrome-stable' \
124
+ ' google-cloud-cli' \
125
+ ' groff-base' \
126
+ ' kubectl' \
127
+ ' libgl1-mesa-dri' \
128
+ ' microsoft-edge-stable' \
129
+ ' php.*' \
130
+ ' powershell' \
131
+ ' snapd'
97
132
98
133
sudo apt-get autoremove -y || echo " ::warning::The command [sudo apt-get autoremove -y] failed"
99
134
sudo apt-get clean || echo " ::warning::The command [sudo apt-get clean] failed failed"
100
135
}
101
136
102
- # Remove Docker images
103
- cleanDocker () {
104
- echo " Removing the following docker images:"
105
- sudo docker image ls
106
- echo " Removing docker images..."
107
- sudo docker image prune --all --force || true
108
- }
109
-
110
137
# Remove Swap storage
111
138
cleanSwap () {
112
139
sudo swapoff -a || true
@@ -121,17 +148,11 @@ AVAILABLE_INITIAL=$(getAvailableSpace)
121
148
printDF " BEFORE CLEAN-UP:"
122
149
echo " "
123
150
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"
132
- execAndMeasureSpaceChange cleanDocker " Docker images"
151
+ execAndMeasureSpaceChange cleanPackages " Unused packages"
133
152
execAndMeasureSpaceChange cleanSwap " Swap storage"
134
153
154
+ removeUnusedDirectories
155
+
135
156
# Output saved space statistic
136
157
echo " "
137
158
printDF " AFTER CLEAN-UP:"
0 commit comments