- For each OS, builds of the default compiler plus the latest-supported compilers are run. When multiple operating systems are supported (such as Ubuntu 16.04 and latest), a build on the oldest OS using its default compiler is also performed. - Debug builds are used because they often are more thorough at detecting coding issues (debug warning counts are higher). - Runtime dynamic sanitizers are added and serialized per-compiler. Their build and runtime log-files are xz-compressed, and then GitHub's asset upload Zips the log directory. - Each workflow now holds the maximum allowed compiler warnings per-build, so we can have tighter control of when new warnings are introduced (that would otherwise pass if still below the maximum) - Use of github's new 'cache' feature has been leveraged to restore the brew, macports, and msys2 environments to eliminate the lenghthy setup times for those environments. If a new cache is needed, then we simply increment the cache `key:` value and the next CI run will archive new caches. (Note that GitHub has a 400MB limit on cache size however they have already said they are raising it - so we might be able to cache out longest running job which is MSYS+Clang) - Where it makes sense, multi-line workflow statements have been broken out into .github/scripts as files to make the workflow YAML leaner and more readable, while giving us a richer environment in the scripts.
52 lines
1.7 KiB
Bash
Executable file
52 lines
1.7 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Copyright (c) 2019 Kevin R Croft <krcroft@gmail.com>
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
# This script reduces the size of a brew-managed installation on macOS.
|
|
# Its main use is to shrink this area to fit within GitHub's cache
|
|
# limits however it can also be used by end-users wanting to save space.
|
|
#
|
|
# Note that this script remove alot of content deemed unecessary for our
|
|
# purposes such as ruby, go, grade, azure, etc..) so using on your
|
|
# home system is probably not what you want :-)
|
|
#
|
|
# Usage: ./shrink-brew.sh
|
|
#
|
|
set -xuo pipefail
|
|
set +e
|
|
|
|
# Ensure we have sudo rights
|
|
if [[ $(id -u) -ne 0 ]] ; then echo "Please run as root" ; exit 1 ; fi
|
|
user="${SUDO_USER}"
|
|
group="$(id -g "${user}")"
|
|
|
|
# If we don't have /usr/local then brew hasn't installed anything yet
|
|
cd /usr/local || exit 0
|
|
|
|
# Purge unecessary bloat
|
|
for dir in lib/ruby Cellar/go Cellar/gradle Cellar/azure-cli lib/node_modules \
|
|
share/powershell Caskroom/fastlane Cellar/ruby opt/AGPM Caskroom Cellar/node \
|
|
miniconda Cellar/python@2 Cellar/git lib/python2.7 Cellar/git-lfs Cellar/subversion \
|
|
Cellar/maven Cellar/aria2 Homebrew/Library/Homebrew/os/mac/pkgconfig/fuse \
|
|
.com.apple.installer.keep microsoft; do
|
|
rm -rf "${dir}" || true
|
|
done
|
|
|
|
# Cleanup permissions and attributes
|
|
chflags nouchg .
|
|
find . -type d -exec xattr -c {} +
|
|
find . -type f -exec xattr -c {} +
|
|
chown -R "${user}:${group}" ./*
|
|
find . ! -path . -type d -exec chmod 770 {} +
|
|
|
|
# Binary-stripping is *extremely* verbose, so we send these to the ether
|
|
find Cellar -name '*' -a ! -iname 'strip' -type f -perm +111 -exec strip {} + &> /dev/null
|
|
find Cellar -name '*.a' -type f -exec strip {} + &> /dev/null
|
|
|
|
# Post-cleanup size check
|
|
du -sch . 2> /dev/null
|
|
|
|
# This entire script is best-effort, so always return success
|
|
exit 0
|
|
|