From f0fd797d52de7884b05ae0b3e44f7cfe5cce76ec Mon Sep 17 00:00:00 2001 From: Guillaume Grossetie Date: Sun, 20 Aug 2023 12:22:29 +0200 Subject: [PATCH] Fix free disk space action (#1620) --- .github/workflows/main.yaml | 166 ++++++++++++++++++++++++++++++++++-- 1 file changed, 159 insertions(+), 7 deletions(-) diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 52ee2fabd..28c250862 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -26,13 +26,165 @@ jobs: - name: Free up disk space if: ${{ inputs.build_multiarch }} - uses: jlumbroso/free-disk-space@main - with: - android: true - dotnet: true - haskell: true - large-packages: true - swap-storage: true + shell: bash + # workaround: https://github.com/jlumbroso/free-disk-space/issues/9 + # copied from https://github.com/hirnidrin/free-disk-space/blob/4bacba7c412c8ace26b87b5b79977da05137e69d/action.yml + run: | + # ====== + # MACROS + # ====== + + # macro to print a line of equals + # (silly but works) + printSeparationLine() { + str=${1:=} + num=${2:-80} + counter=1 + output="" + while [ $counter -le $num ] + do + output="${output}${str}" + counter=$((counter+1)) + done + echo "${output}" + } + + # macro to compute available space + # REF: https://unix.stackexchange.com/a/42049/60849 + # REF: https://stackoverflow.com/a/450821/408734 + getAvailableSpace() { echo $(df -a $1 | awk 'NR > 1 {avail+=$4} END {print avail}'); } + + # macro to make Kb human readable (assume the input is Kb) + # REF: https://unix.stackexchange.com/a/44087/60849 + formatByteCount() { echo $(numfmt --to=iec-i --suffix=B --padding=7 $1'000'); } + + # macro to output saved space + printSavedSpace() { + saved=${1} + title=${2:-} + + echo "" + printSeparationLine '*' 80 + if [ ! -z "${title}" ]; then + echo "=> ${title}: Saved $(formatByteCount $saved)" + else + echo "=> Saved $(formatByteCount $saved)" + fi + printSeparationLine '*' 80 + echo "" + } + + # macro to print output of dh with caption + printDH() { + caption=${1:-} + + printSeparationLine '=' 80 + echo "${caption}" + echo "" + echo "$ dh -h /" + echo "" + df -h / + echo "$ dh -a /" + echo "" + df -a / + echo "$ dh -a" + echo "" + df -a + printSeparationLine '=' 80 + } + + # ====== + # SCRIPT + # ====== + + # Display initial disk space stats + + AVAILABLE_INITIAL=$(getAvailableSpace) + AVAILABLE_ROOT_INITIAL=$(getAvailableSpace '/') + + printDH "BEFORE CLEAN-UP:" + echo "" + + # Remove Android library + BEFORE=$(getAvailableSpace) + + sudo rm -rf /usr/local/lib/android + + AFTER=$(getAvailableSpace) + SAVED=$((AFTER-BEFORE)) + printSavedSpace $SAVED "Android library" + + BEFORE=$(getAvailableSpace) + + # https://github.community/t/bigger-github-hosted-runners-disk-space/17267/11 + sudo rm -rf /usr/share/dotnet + + AFTER=$(getAvailableSpace) + SAVED=$((AFTER-BEFORE)) + printSavedSpace $SAVED ".NET runtime" + + BEFORE=$(getAvailableSpace) + + sudo rm -rf /opt/ghc + + AFTER=$(getAvailableSpace) + SAVED=$((AFTER-BEFORE)) + printSavedSpace $SAVED "Haskell runtime" + + # Remove large packages + # REF: https://github.com/apache/flink/blob/master/tools/azure-pipelines/free_disk_space.sh + + BEFORE=$(getAvailableSpace) + + sudo apt-get remove -y '^aspnetcore-.*' + sudo apt-get remove -y '^dotnet-.*' + sudo apt-get remove -y '^llvm-.*' + sudo apt-get remove -y 'php.*' + sudo apt-get remove -y '^mongodb-.*' + sudo apt-get remove -y '^mysql-.*' + sudo apt-get remove -y azure-cli google-cloud-sdk google-chrome-stable firefox powershell mono-devel libgl1-mesa-dri + sudo apt-get autoremove -y + sudo apt-get clean + + AFTER=$(getAvailableSpace) + SAVED=$((AFTER-BEFORE)) + printSavedSpace $SAVED "Large misc. packages" + + # Remove Docker images + BEFORE=$(getAvailableSpace) + + sudo docker image prune --all --force + + AFTER=$(getAvailableSpace) + SAVED=$((AFTER-BEFORE)) + printSavedSpace $SAVED "Docker images" + + # Remove Swap storage + BEFORE=$(getAvailableSpace) + + sudo swapoff -a + sudo rm -f /mnt/swapfile + free -h + + AFTER=$(getAvailableSpace) + SAVED=$((AFTER-BEFORE)) + printSavedSpace $SAVED "Swap storage" + + # Output saved space statistic + + AVAILABLE_END=$(getAvailableSpace) + AVAILABLE_ROOT_END=$(getAvailableSpace '/') + + echo "" + printDH "AFTER CLEAN-UP:" + + echo "" + echo "" + + echo "/dev/root:" + printSavedSpace $((AVAILABLE_ROOT_END - AVAILABLE_ROOT_INITIAL)) + echo "overall:" + printSavedSpace $((AVAILABLE_END - AVAILABLE_INITIAL)) - name: Install GraphViz run: sudo apt-get install graphviz -y