mirror of https://gerrit.osmocom.org/osmo-ci
65 lines
2.0 KiB
Bash
Executable File
65 lines
2.0 KiB
Bash
Executable File
#!/bin/sh
|
|
# Clean workspace.
|
|
# This should be the first and last step of every jenkins build:
|
|
# a) to make sure the workspace has no build artifacts from previous runs.
|
|
# b) to reduce disk space lost to unused binaries; parallel and/or matrix
|
|
# builds create numerous workspaces, blowing up disk usage.
|
|
# Note that if a build fails, the last steps will not run, hence calling this
|
|
# as last step cleans only in case there was no build failure, i.e. where we
|
|
# don't need to keep anything anyway.
|
|
#
|
|
# Assume $PWD is a git clone's root dir. Usually, that's also the jenkins
|
|
# workspace root. Do not wipe subdir 'layer1-headers' as well as all dirs under
|
|
# '$deps'. These are assumed to be git clones that do not need to be re-cloned
|
|
# every time. Do a 'git clean' in each of them individually. If '$deps' is not
|
|
# defined or the mentioned dirs do not exist, nothing special happens, so this
|
|
# script can be safely run in any git clone in deeper subdirs of the workspace.
|
|
|
|
set -ex
|
|
|
|
# make sure no write protected cruft is in the way. A failed 'make distcheck'
|
|
# has a habit of leaving a non-writable dir tree behind.
|
|
chmod -R +w .
|
|
|
|
# wipe all local modifications
|
|
git checkout -f HEAD
|
|
|
|
# wipe all unversioned leftovers, except deps gits.
|
|
# Git automatically excludes subdirs that are git clones.
|
|
git clean -dxf
|
|
|
|
git_clean() {
|
|
repos="$1"
|
|
if [ ! -d "$repos" ]; then
|
|
return
|
|
fi
|
|
|
|
if [ ! -d "$repos/.git" ]; then
|
|
echo "Not a git clone, removing: $repos"
|
|
rm -rf "$repos"
|
|
return
|
|
fi
|
|
if ! git -C "$repos" checkout -f HEAD; then
|
|
echo "Cleaning failed, removing: $repos"
|
|
rm -rf "$repos"
|
|
return
|
|
fi
|
|
if ! git -C "$repos" clean -dxf; then
|
|
echo "Cleaning failed, removing: $repos"
|
|
rm -rf "$repos"
|
|
return
|
|
fi
|
|
}
|
|
|
|
# leave the deps checkouts around, to not clone entire git history every time,
|
|
# but clean each git of build artifacts.
|
|
if [ -d "$deps" ]; then
|
|
for dep_dir in "$deps"/* ; do
|
|
git_clean "$dep_dir"
|
|
done
|
|
fi
|
|
|
|
if [ -d "layer1-headers" ]; then
|
|
git_clean "layer1-headers"
|
|
fi
|