catalyst-auto: move all code into functions

Mixing inline funcs and executable code makes it hard to follow and
shuffle ordering of operations.  Put everything other than variables
into functions.

The delta here is large, but it's almost entirely indentation changes.

This also makes updating the script (like `git pull`) more resilient.
This commit is contained in:
Mike Frysinger 2018-01-15 20:11:44 -05:00
parent b5e4453a0e
commit b291ea4754

View file

@ -19,6 +19,17 @@ unset UNSHARE
CATALYST_CONFIG=/etc/catalyst/catalyst.conf
# Probe the default source dir from this script name.
REPO_DIR=$(dirname "$(dirname "$(realpath "$0")")")
# Set up defaults that config files can override if they want.
SUBARCH=$(uname -m)
EMAIL_TO="releng@gentoo.org,gentoo-releng-autobuilds@lists.gentoo.org"
# Use full hostname by default as Gentoo servers will reject short names.
EMAIL_FROM="catalyst@$(hostname -f)"
EMAIL_SUBJECT_PREPEND="[${SUBARCH}-auto]"
# Variables updated by command line arguments.
declare -a config_files
config_files=()
verbose=0
@ -28,9 +39,6 @@ preclean=0
lastrun=0
lock_file=
# Set pipefail so that run_cmd returns the right value in $?
set -o pipefail
usage() {
local msg=$1
@ -125,10 +133,10 @@ trigger_post_build() {
fi
}
# Parse args
while [ ${#} -gt 0 ]
do
a=${1}
parse_args() {
local a
while [[ $# -gt 0 ]] ; do
a=$1
shift
case "${a}" in
-h|--help)
@ -169,37 +177,20 @@ do
;;
esac
done
}
(
if [[ -n ${lock_file} ]]; then
if ! flock -n 9; then
echo "catalyst-auto already running"
exit 1
fi
fi
# Probe the default source dir from this script name.
REPO_DIR=$(dirname "$(dirname "$(realpath "$0")")")
# Set up defaults that config files can override if they want.
SUBARCH=$(uname -m)
EMAIL_TO="releng@gentoo.org,gentoo-releng-autobuilds@lists.gentoo.org"
# Use full hostname by default as Gentoo servers will reject short names.
EMAIL_FROM="catalyst@$(hostname -f)"
EMAIL_SUBJECT_PREPEND="[${SUBARCH}-auto]"
run_catalyst_commands() {
doneconfig=0
for config_file in "${config_files[@]}"; do
# Make sure all required values were specified
if [ -z "${config_file}" -o ! -e "${config_file}" ]; then
# Make sure all required values were specified.
if [[ -z "${config_file}" || ! -e "${config_file}" ]]; then
usage "ERROR: You must specify a valid config file to use: '$config_file' is not valid"
exit 1
fi
source "${config_file}"
doneconfig=1
done
if [[ $doneconfig -eq 0 ]]; then
if [[ ${doneconfig} == 0 ]]; then
usage "ERROR: You must specify at least one valid config file to use"
exit 1
fi
@ -208,7 +199,7 @@ fi
: ${BUILD_SRCDIR_BASE:=$(catalyst_var storedir)}
# See if we had a recent success.
if [[ ${lastrun} -ne 0 ]]; then
if [[ ${lastrun} != 0 ]]; then
last_success_file="${BUILD_SRCDIR_BASE}/.last_success"
delay=$(( lastrun * 24 * 60 * 60 ))
last_success=$(head -1 "${last_success_file}" 2>/dev/null || echo 0)
@ -222,12 +213,12 @@ TIMESTAMP=$(date -u +%Y%m%dT%H%M%SZ)
TMPDIR=$(mktemp -d --tmpdir="${TMP_PATH:-/tmp}" "catalyst-auto.${TIMESTAMP}.XXXXXX")
# Nuke any previous tmpdirs to keep them from accumulating.
if [[ ${preclean} -eq 1 ]]; then
if [[ ${preclean} == 1 ]]; then
rm -rf "${TMPDIR%.??????}".*
mkdir "${TMPDIR}"
fi
if [ ${verbose} -ge 1 ]; then
if [[ ${verbose} -ge 1 ]]; then
echo "TMPDIR = ${TMPDIR}"
echo "DATESTAMP = ${DATESTAMP}"
echo "TIMESTAMP = ${TIMESTAMP}"
@ -246,7 +237,7 @@ fi
cd "${SPECS_DIR}" || exit 1
for a in "" ${SETS}; do
if [ -z "${a}" ]; then
if [[ -z "${a}" ]]; then
specs_var="SPECS"
optional_specs_var="OPTIONAL_SPECS"
else
@ -284,7 +275,7 @@ for i in $(find -name '*.spec'); do
sed -i "/^livecd\/volid/s|${old_version_stamp}|${new_version_stamp}|" "${i}"
kconfig_lines=$(grep '^boot/kernel/[^/]\+/config:' "${i}")
if [ -n "${kconfig_lines}" ]; then
if [[ -n ${kconfig_lines} ]]; then
echo "${kconfig_lines}" | while read line; do
key=$(echo "${line}" | cut -d: -f1)
filename=$(basename $(echo "${line}" | cut -d: -f2))
@ -300,12 +291,12 @@ for i in $(find -name '*.spec'); do
"${i}"
done
if [ "${testing}" -eq 1 ]; then
if [[ ${testing} == 1 ]]; then
echo "Exiting due to --test"
exit
fi
if [[ ${preclean} -eq 1 ]]; then
if [[ ${preclean} == 1 ]]; then
snapshot_cache=$(catalyst_var snapshot_cache)
if [[ -z ${snapshot_cache} ]]; then
echo "error: snapshot_cache not set in config file"
@ -329,7 +320,7 @@ timeprefix=()
which time >/dev/null && timeprefix=( "time" )
for a in "" ${SETS}; do
if [ -z "${a}" ]; then
if [[ -z ${a} ]]; then
specs_var="SPECS"
optional_specs_var="OPTIONAL_SPECS"
else
@ -340,7 +331,7 @@ for a in "" ${SETS}; do
for i in ${!specs_var}; do
LOGFILE="${TMPDIR}/log/$(echo "${i}" | sed -e 's:/:_:' -e 's:\.spec$::').log"
run_cmd "${LOGFILE}" "${timeprefix[@]}" catalyst -a -c "${CATALYST_CONFIG}" -f "${i}"
if [ $? != 0 ]; then
if [[ $? != 0 ]]; then
build_failure=1
send_email "Catalyst fatal build error - ${i}" "" "${LOGFILE}"
continue 2
@ -352,7 +343,7 @@ for a in "" ${SETS}; do
for i in ${!optional_specs_var}; do
LOGFILE="${TMPDIR}/log/$(echo "${i}" | sed -e 's:/:_:' -e 's:\.spec$::').log"
run_cmd "${LOGFILE}" "${timeprefix[@]}" catalyst -a -c "${CATALYST_CONFIG}" -f "${i}"
if [ $? != 0 ]; then
if [[ $? != 0 ]]; then
build_failure=1
send_email "Catalyst non-fatal build error - ${i}" "" "${LOGFILE}"
break
@ -371,23 +362,42 @@ done
trigger_post_build
if [ ${build_failure} = 0 ]; then
if [[ ${lastrun} -ne 0 ]]; then
if [[ ${build_failure} == 0 ]]; then
if [[ ${lastrun} != 0 ]]; then
stamp=$(date)
(date -d"${stamp}" +%s; echo "${stamp}") >"${last_success_file}"
fi
send_email "Catalyst build success" "Build process complete."
if [ "${keep_tmpdir}" = 0 ]; then
if [[ ${keep_tmpdir} == 0 ]]; then
if ! rm -rf "${TMPDIR}"; then
echo "Could not remove tmpdir ${TMPDIR}!"
exit 1
fi
fi
else
send_email "Catalyst build complete, but with errors" "Build process has completed, but there were errors. Please consult previous emails to determine the problem."
fi
}
main() {
# Set pipefail so that run_cmd returns the right value in $?.
set -o pipefail
# Parse user arguments before we try doing container logic.
parse_args "$@"
(
if [[ -n ${lock_file} ]]; then
if ! flock -n 9; then
echo "catalyst-auto already running"
exit 1
fi
fi
run_catalyst_commands
) 9>"${lock_file:-/dev/null}"
}
main "$@"