#!/bin/bash PID=$$ config_file= verbose=0 usage() { msg=$1 if [ -n "${msg}" ]; then echo -e "${msg}\n"; fi cat <] [--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" body=$2 echo -e "From: ${EMAIL_FROM}\r\nTo: ${EMAIL_TO}\r\nSubject: ${subject}\r\n\r\n${body}\r\n" | /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 } # 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 ;; -*) 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 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} if [ "${old_version_stamp}" = "${old_source_subpath}" ]; then sed -i 's|^source_subpath: \(.\+-\).\+$|source_subpath: \1'${DATESTAMP}'|' ${i} fi 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-${DATESTAMP}.log"; then send_email "Catalyst build error - snapshot" "$(tail -n 200 ${TMPDIR}/log/snapshot-${DATESTAMP}.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}" "$(tail -n 200 ${LOGFILE})\r\n\r\nFull build log at ${LOGFILE}" exit 1 fi done send_email "Catalyst build success" "Everything finished successfully." if ! rm -rf "${TMPDIR}"; then echo "Could not remove tmpdir ${TMPDIR}!" exit 1 fi