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
56
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+
611# print a line of the specified character
712printSeparationLine () {
813 for (( i = 0 ; i < 80 ; i++ )) ; do
@@ -14,11 +19,15 @@ printSeparationLine() {
1419# compute available space
1520# REF: https://unix.stackexchange.com/a/42049/60849
1621# 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+ }
1825
1926# make Kb human readable (assume the input is Kb)
2027# 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+ }
2231
2332# macro to output saved space
2433printSavedSpace () {
@@ -58,11 +67,30 @@ removeDir() {
5867 dir=${1}
5968
6069 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+ }
6478
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
6694}
6795
6896execAndMeasureSpaceChange () {
@@ -79,34 +107,33 @@ execAndMeasureSpaceChange() {
79107# Remove large packages
80108# REF: https://github.com/apache/flink/blob/master/tools/azure-pipelines/free_disk_space.sh
81109cleanPackages () {
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'
97132
98133 sudo apt-get autoremove -y || echo " ::warning::The command [sudo apt-get autoremove -y] failed"
99134 sudo apt-get clean || echo " ::warning::The command [sudo apt-get clean] failed failed"
100135}
101136
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-
110137# Remove Swap storage
111138cleanSwap () {
112139 sudo swapoff -a || true
@@ -121,17 +148,11 @@ AVAILABLE_INITIAL=$(getAvailableSpace)
121148printDF " BEFORE CLEAN-UP:"
122149echo " "
123150
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"
133152execAndMeasureSpaceChange cleanSwap " Swap storage"
134153
154+ removeUnusedDirectories
155+
135156# Output saved space statistic
136157echo " "
137158printDF " AFTER CLEAN-UP:"
0 commit comments