gentoo-asahi-releng/tools/catalyst-auto

196 lines
4.6 KiB
Plaintext
Raw Normal View History

#!/bin/bash
PID=$$
2008-09-04 01:19:35 +00:00
config_file=
verbose=0
keep_tmpdir=0
2008-09-04 01:19:35 +00:00
usage() {
msg=$1
if [ -n "${msg}" ]; then
echo -e "${msg}\n";
fi
cat <<EOH
Usage:
stage_build [-c|--config <config>] [--verbose] [-h|--help]
Options:
-c|--config Specifies the config file to use (required)
--verbose Send output of commands to console as well as log
-h|--help Show this message and quit
EOH
}
send_email() {
subject="${EMAIL_SUBJECT_PREPEND} $1"
message=$2
logfile=$3
if [ -n "${logfile}" ]; then
body=$(echo -e "${message}\n\n"; tail -n 200 "${logfile}"; echo -e "\n\n\nFull build log at ${logfile}")
else
body=${message}
fi
echo -e "From: ${EMAIL_FROM}\r\nTo: ${EMAIL_TO}\r\nSubject: ${subject}\r\n\r\n${body}" | /usr/sbin/sendmail -f ${EMAIL_FROM} ${EMAIL_TO}
}
run_cmd() {
cmd=$1
logfile=$2
if [ $verbose = 1 ]; then
echo "*** Running command: ${cmd}"
${cmd} 2>&1 | tee ${logfile}
else
${cmd} &> ${logfile}
fi
}
pre_build() {
# This is a skeleton function that you can override from the config file.
# It will be executed before the build is started. You can use this to
# update a svn checkout of spec files
local foo=bar
}
post_build() {
# This is a skeleton function that you can override from the config file.
# It will be executed after the build is successfully completed. You can
# use this to rsync the builds to another box
local foo=bar
}
# Parse args
params=${#}
while [ ${#} -gt 0 ]
do
a=${1}
shift
case "${a}" in
-h|--help)
usage
exit 0
;;
-c|--config)
config_file=$1
shift
;;
--verbose)
verbose=1
;;
-k|--keep-tmpdir)
keep_tmpdir=1
;;
-*)
echo "You have specified an invalid option: ${a}"
usage
exit 1
;;
esac
done
# Make sure all required values were specified
if [ -z "${config_file}" -o ! -e "${config_file}" ]; then
usage "You must specify a valid config file to use"
exit 1
fi
source ${config_file}
TMPDIR=/tmp/catalyst-auto.${PID}
DATESTAMP=$(date +%Y%m%d)
if [ ${verbose} = 1 ]; then
echo "TMPDIR = ${TMPDIR}"
echo "DATESTAMP = ${DATESTAMP}"
fi
# Check if tmp directory exists and remove it
if [ -d "${TMPDIR}" ]; then
if ! rm -rf "${TMPDIR}"; then
echo "Couldn't remove stale tmpdir ${TMPDIR}!"
exit 1
fi
fi
for i in ${TMPDIR} ${TMPDIR}/specs ${TMPDIR}/kconfig ${TMPDIR}/log; do
if ! mkdir -p "${i}"; then
echo "Couldn't create dir ${i}!"
exit 1
fi
done
if ! run_cmd "pre_build" "${TMPDIR}/log/pre_build.log"; then
send_email "Catalyst build error - pre_build" "Your pre_build function sucks" "${TMPDIR}/log/pre_build.log"
exit 1
fi
cd ${SPECS_DIR}
for i in ${SPECS}; do
cp --parents ${i} ${TMPDIR}/specs/
done
cd ${KCONFIG_DIR}
find -type f -exec cp {} ${TMPDIR}/kconfig \;
cd ${TMPDIR}/specs
# Fix up specs with datestamp
for i in $(find -name '*.spec'); do
# Grab current version_stamp and source_subpath
old_version_stamp=$(grep version_stamp ${i} | sed -e 's|^version_stamp: *||')
old_source_subpath=$(grep source_subpath ${i} | sed -e 's|^source_subpath: .\+-||')
sed -i 's|^version_stamp:.*$|version_stamp: '${DATESTAMP}'|' ${i}
sed -i 's|^snapshot:.*$|snapshot: '${DATESTAMP}'|' ${i}
# We don't want to mangle the source_subpath for our stage1 spec
if ! grep -q '^target: *stage1$' ${i}; then
sed -i 's|^source_subpath: \(.\+-\).\+$|source_subpath: \1'${DATESTAMP}'|' ${i}
fi
sed -i '/^livecd\/iso/s|'${old_version_stamp}'|'${DATESTAMP}'|' ${i}
kconfig_line=$(grep '^boot/kernel/[^/]\+/config:' ${i})
if [ -n "${kconfig_line}" ]; then
key=$(echo "${kconfig_line}" | cut -d: -f1)
filename=$(basename $(echo "${kconfig_line}" | cut -d: -f2))
sed -i "s|^${key}:.*\$|${key}: ${TMPDIR}/kconfig/${filename}|" ${i}
fi
done
# Create snapshot
if ! run_cmd "catalyst -c ${CATALYST_CONFIG} -s ${DATESTAMP}" "${TMPDIR}/log/snapshot.log"; then
send_email "Catalyst build error - snapshot" "" "${TMPDIR}/log/snapshot.log"
exit 1
fi
for i in ${SPECS}; do
LOGFILE="${TMPDIR}/log/$(echo "${i}" | sed -e 's:/:_:' -e 's:\.spec$::').log"
run_cmd "catalyst -a -p -c ${CATALYST_CONFIG} -f ${i}" ${LOGFILE}
if [ $? != 0 ]; then
send_email "Catalyst build error - ${i}" "" "${LOGFILE}"
exit 1
fi
done
if ! run_cmd "post_build" "${TMPDIR}/log/post_build.log"; then
send_email "Catalyst build error - post_build" "Your post_build function sucks" "${TMPDIR}/log/post_build.log"
exit 1
fi
send_email "Catalyst build success" "Everything finished successfully."
if [ "${keep_tmpdir}" = 0 ]; then
if ! rm -rf "${TMPDIR}"; then
echo "Could not remove tmpdir ${TMPDIR}!"
exit 1
fi
fi