blob: baafa19445422f47a53663558f1168dea7572736 [file] [log] [blame]
#!/bin/sh
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
setup_masscheck() {
[ ! -d "$WORKDIR/$TYPE/masses/spamassassin" ] && mkdir -p "$WORKDIR/$TYPE/masses/spamassassin"
cd "$WORKDIR/$TYPE/masses" || { echo "ERROR: cd $WORKDIR/$TYPE/masses failed" >&2; exit 1; }
rm -f spamassassin/*
echo "" > spamassassin/user_prefs # not used, local.cf works better for admin commands also
echo "bayes_auto_learn 0" > spamassassin/local.cf
echo "lock_method flock" >> spamassassin/local.cf
echo "score ANY_BOUNCE_MESSAGE 0" >> spamassassin/local.cf
echo "score BOUNCE_MESSAGE 0" >> spamassassin/local.cf
[ -n "${TRUSTED_NETWORKS}" -o -n "${INTERNAL_NETWORKS}" ] && \
echo "clear_trusted_networks
clear_internal_networks" >> spamassassin/local.cf
[ -n "${TRUSTED_NETWORKS}" ] && echo "trusted_networks ${TRUSTED_NETWORKS}" >> spamassassin/local.cf
[ -n "${INTERNAL_NETWORKS}" ] && echo "internal_networks ${INTERNAL_NETWORKS}" >> spamassassin/local.cf
[ -n "${CUSTOM_PREFS}" ] && cat ${CUSTOM_PREFS} >> spamassassin/local.cf
rm -f "$WORKDIR/$TYPE/rules/99_custom.cf"
[ -n "${CUSTOM_RULES}" ] && cat ${CUSTOM_RULES} > "$WORKDIR/$TYPE/rules/99_custom.cf"
}
setup_checktype() {
[ ! -d "$WORKDIR" ] && mkdir "$WORKDIR"
DOW=$(date +%w)
if [ "$DOW" -ne 6 ] || [ "$1" = "--nightly" ]; then
# Run nightly_mass_check
TYPE=nightly_mass_check
echo "Syncing $TYPE"
rsync -qrz --delete rsync://rsync.spamassassin.org/tagged_builds/$TYPE/ "$WORKDIR/$TYPE/"
RC=$?
NET=
LOGTYPE=
else
# If Saturday, run the weekly_mass_check
TYPE=weekly_mass_check
echo "Syncing $TYPE"
rsync -qrz --delete rsync://rsync.spamassassin.org/tagged_builds/$TYPE/ "$WORKDIR/$TYPE/"
RC=$?
NET=--net
[ ! -z "$REUSE" ] && NET="$REUSE $NET"
LOGTYPE=net-
fi
if [ "$RC" -ne 0 ]; then
echo "ERROR: rsync failure $RC, aborting..." >&2
exit 1
else
SVNREV=$(awk '/Revision:/ {print $2}' "$WORKDIR/$TYPE/masses/svninfo.tmp")
[ ! -z "$SVNREV" ] && echo "SVN revision = $SVNREV"
fi
}
run_masscheck() {
CORPUSNAME=$1
shift
if [ "$CORPUSNAME" = "single-corpus" ]; then
# Use this if you have only a single corpus
LOGSUFFIX=
else
LOGSUFFIX="-${CORPUSNAME}"
fi
LOGFILE=${LOGTYPE}${LOGPREFIX}${LOGSUFFIX}.log
rm -f ham-${LOGFILE} spam-${LOGFILE}
set -x
$PERL ./mass-check --hamlog=ham-${LOGFILE} --spamlog=spam-${LOGFILE} \
-j $JOBS $NET --progress \
"$@"
LOGLIST="$LOGLIST ham-${LOGFILE} spam-${LOGFILE}"
set +x
ln -s ham-${LOGFILE} ham.log
ln -s spam-${LOGFILE} spam.log
}
upload_results() {
# Occasionally rsync server fails to respond on first attempt,
# so attempt upload a few times before giving up.
if [ -z "$RSYNC_PASSWORD" ] || [ "$RSYNC_PASSWORD" = "YOUR-PASSWORD" ]; then
return 0
fi
TRY=0
while [ "$TRY" -le 5 ]; do
TRY=$((TRY+1))
ARGS="-qPcvz $LOGLIST $RSYNC_USERNAME@rsync.spamassassin.org::corpus/"
echo "rsync $ARGS"
RSYNC_PASSWORD=$RSYNC_PASSWORD rsync $ARGS && break
sleep 5m
done
}
# Sanitize Environment
unset LOGPREFIX
unset RSYNC_USERNAME
unset RSYNC_PASSWORD
unset WORKDIR
unset CHECKDIR
unset REUSE
# Configure
if [ -e "$HOME/.automasscheck.cf" ]; then
. $HOME/.automasscheck.cf
else
echo "ERROR: Configuration file expected at $HOME/.automasscheck.cf" >&2
echo " See https://wiki.apache.org/spamassassin/NightlyMassCheck" >&2
exit 255
fi
# Run
JOBS=${JOBS:=8}
setup_checktype "$@"
setup_masscheck
unset LOGLIST
run_all_masschecks
upload_results
exit 0