@@ -30,25 +30,38 @@ formatByteCount() {
3030 numfmt --to=iec-i --suffix=B --padding=7 " $1 " ' 000'
3131}
3232
33- # macro to output saved space
34- printSavedSpace () {
35- # Disk space before the operation
36- local before=${1}
37- local title=${2:- }
33+ isX86 () {
34+ local arch
35+ arch=$( uname -m)
36+ if [ " $arch " = " x86_64" ]; then
37+ return 0
38+ else
39+ return 1
40+ fi
41+ }
42+
43+ # Measure saved space and how long it took to run the task
44+ execAndMeasure () {
45+ local task_name=${1}
46+
47+ local start
48+ start=$( date +%s)
3849
50+ local before
51+ before=$( getAvailableSpace)
52+
53+ # Run the task. Skip the first argument because it's the task name.
54+ " ${@: 2} "
55+
56+ local end
57+ end=$( date +%s)
3958 local after
4059 after=$( getAvailableSpace)
60+
4161 local saved=$(( after - before))
62+ local seconds_taken=$(( end - start))
4263
43- echo " "
44- printSeparationLine " *"
45- if [ -n " ${title} " ]; then
46- echo " => ${title} : Saved $( formatByteCount " $saved " ) "
47- else
48- echo " => Saved $( formatByteCount " $saved " ) "
49- fi
50- printSeparationLine " *"
51- echo " "
64+ echo " ==> ${task_name} : Saved $( formatByteCount " $saved " ) in $seconds_taken seconds"
5265}
5366
5467# macro to print output of df with caption
@@ -64,19 +77,6 @@ printDF() {
6477 printSeparationLine " ="
6578}
6679
67- removeRecursive () {
68- element=${1}
69-
70- local before
71- if [ ! -e " $element " ]; then
72- echo " ::warning::Directory or file $element does not exist, skipping."
73- else
74- before=$( getAvailableSpace)
75- sudo rm -rf " $element "
76- printSavedSpace " $before " " Removed $element "
77- fi
78- }
79-
8080removeUnusedDirsAndFiles () {
8181 local to_remove=(
8282 " /etc/mysql"
@@ -133,11 +133,17 @@ removeUnusedDirsAndFiles() {
133133 )
134134
135135 for element in " ${to_remove[@]} " ; do
136- removeRecursive " $element "
136+ if [ ! -e " $element " ]; then
137+ echo " ::warning::Directory or file $element does not exist, skipping."
138+ else
139+ execAndMeasure " Removed $element " sudo rm -rf " $element "
140+ fi
137141 done
138142}
139143
140144removeNodeModules () {
145+ npm list -g --depth=0
146+
141147 sudo npm uninstall -g \
142148 " @bazel/bazelisk" \
143149 " bazel" \
@@ -153,53 +159,50 @@ removeNodeModules() {
153159 " yarn"
154160}
155161
156- execAndMeasureSpaceChange () {
157- local operation=${1} # Function to execute
158- local title=${2}
159-
160- local before
161- before=$( getAvailableSpace)
162- $operation
163-
164- printSavedSpace " $before " " $title "
165- }
166-
167162# Remove large packages
168163# REF: https://github.com/apache/flink/blob/master/tools/azure-pipelines/free_disk_space.sh
169164cleanPackages () {
170- sudo apt-get purge -y --autoremove --fix-missing \
171- ' .*-icon-theme$' \
172- ' ^aspnetcore-.*' \
173- ' ^dotnet-.*' \
174- ' ^java-*' \
175- ' ^libllvm.*' \
176- ' ^llvm-.*' \
177- ' ^mercurial.*' \
178- ' ^mysql-.*' \
179- ' ^vim.*' \
180- ' ^fonts-.*' \
181- ' azure-cli' \
182- ' buildah' \
183- ' cpp-13' \
184- ' firefox' \
185- ' gcc-12' \
186- ' gcc-13' \
187- ' gcc-14' \
188- ' gcc' \
189- ' g++-14' \
190- ' gfortran-14' \
191- ' google-chrome-stable' \
192- ' google-cloud-cli' \
193- ' groff-base' \
194- ' kubectl' \
195- ' libgl1-mesa-dri' \
196- ' microsoft-edge-stable' \
197- ' php.*' \
198- ' podman' \
199- ' powershell' \
200- ' skopeo' \
201- ' snapd' \
165+ local packages=(
166+ ' .*-icon-theme$'
167+ ' ^aspnetcore-.*'
168+ ' ^dotnet-.*'
169+ ' ^java-*'
170+ ' ^libllvm.*'
171+ ' ^llvm-.*'
172+ ' ^mercurial.*'
173+ ' ^mysql-.*'
174+ ' ^vim.*'
175+ ' ^fonts-.*'
176+ ' azure-cli'
177+ ' buildah'
178+ ' cpp-13'
179+ ' firefox'
180+ ' gcc-12'
181+ ' gcc-13'
182+ ' gcc-14'
183+ ' gcc'
184+ ' g++-14'
185+ ' gfortran-14'
186+ ' groff-base'
187+ ' kubectl'
188+ ' libgl1-mesa-dri'
189+ ' microsoft-edge-stable'
190+ ' php.*'
191+ ' podman'
192+ ' powershell'
193+ ' skopeo'
194+ ' snapd'
202195 ' tmux'
196+ )
197+
198+ if isX86; then
199+ packages+=(
200+ ' google-chrome-stable'
201+ ' google-cloud-cli'
202+ )
203+ fi
204+
205+ sudo apt-get purge -y --autoremove --fix-missing " ${packages[@]} "
203206
204207 echo " => apt-get autoremove"
205208 sudo apt-get autoremove -y || echo " ::warning::The command [sudo apt-get autoremove -y] failed"
@@ -215,28 +218,33 @@ cleanSwap() {
215218}
216219
217220removePythonPackages () {
218- sudo pipx uninstall ansible-core
219- }
220-
221- # Display initial disk space stats
221+ local packages=(
222+ )
222223
223- AVAILABLE_INITIAL=$( getAvailableSpace)
224+ if isX86; then
225+ packages+=(
226+ ' ansible-core'
227+ )
228+ fi
224229
225- printDF " BEFORE CLEAN-UP:"
226- echo " "
230+ for p in " ${packages[@]} " ; do
231+ sudo pipx uninstall " $p "
232+ done
233+ }
227234
228- execAndMeasureSpaceChange cleanPackages " Unused packages"
229- execAndMeasureSpaceChange cleanSwap " Swap storage"
230- execAndMeasureSpaceChange removeNodeModules " Node modules"
231- execAndMeasureSpaceChange removePythonPackages " Python Packages"
235+ main () {
236+ printDF " BEFORE CLEAN-UP:"
237+ echo " "
232238
233- removeUnusedDirsAndFiles
239+ execAndMeasure " Unused packages" cleanPackages
240+ execAndMeasure " Swap storage" cleanSwap
241+ execAndMeasure " Node modules" removeNodeModules
242+ execAndMeasure " Python Packages" removePythonPackages
234243
235- # Output saved space statistic
236- echo " "
237- printDF " AFTER CLEAN-UP:"
244+ removeUnusedDirsAndFiles
238245
239- echo " "
240- echo " "
246+ printDF " AFTER CLEAN-UP:"
247+ echo " "
248+ }
241249
242- printSavedSpace " $AVAILABLE_INITIAL " " Total saved "
250+ execAndMeasure " Total" main
0 commit comments