doc/share/tools/webupdate
Gavin Atkinson 2e31b57355 Update this script to reflect the change from CVS to SVN. The code itself
has already been fixed, this just updates comments to match, and also
removes vestiges of the previous CVS-centric code that are no longer used.

Approved by:	bcr (mentor)
2012-12-02 18:37:32 +00:00

157 lines
5.1 KiB
Bash

#!/bin/sh
# Copyright (c) 2001 Wolfram Schneider <wosch@FreeBSD.org>
# Copyright (c) 2001 Dima Dorfman <dd@FreeBSD.org>
#
# Update the FreeBSD web site from the SVN repository.
#
#
# NOTE: Changes to this file is NOT automatically used for the web
# site build on www.FreeBSD.org. If an update to the main build
# script is required, please contact webmaster@FreeBSD.org or a member
# of the wwwadm team.
#
#
# Major variables:
#
# PATH - The search path as interpreted by the shell.
# SVNROOT - Path to the FreeBSD SVN repository.
# BUILDDIR - Where the checked out copies of the files are stored.
# DESTDIR - Where the rendered copies should wind up.
# LOGFILE - Name of the log file to use (in $BUILDDIR).
# BUILDARGS - Arguments to pass to make(1) when {build,install}ing.
# INSTARGS - Arguments to pass to make(1) when installing.
# WEBMAILTO - Address to send mail to if the build fails.
#
# subtrees - List of directores in $BUILDDIR which are from SVN.
#
# Variables which are in uppercase are derived from the environment
# unless they don't exist, in which case a value suitable for
# www.FreeBSD.org is used. Variables in lowercase can't be safely
# changed without editing other parts of the script; thus, their value
# in the environment is ignored.
#
# Exit codes:
#
# 0 - success
# 1 - unknown failure
# 2 - failure in SVN operations
# 3 - failure in make operations
#
# $FreeBSD$
#
#
# Default configuration.
#
DEFAULT_PATH=/bin:/usr/bin:/usr/local/bin;
DEFAULT_SVNROOT=svn://svn.FreeBSD.org/doc/head
DEFAULT_BUILDDIR=/usr/local/www/build;
#DEFAULT_LOGDIR=/usr/local/www/build/log;
DEFAULT_LOGDIR=/usr/local/www/logs/build;
DEFAULT_DESTDIR=/usr/local/www;
DEFAULT_LOGFILE=webbuild.log
DEFAULT_BUILDARGS='';
DEFAULT_INSTARGS='';
DEFAULT_WEBMAILTO=freebsd-doc;
#DEFAULT_WEBMAILTO=simon;
#DEFAULT_WEBMAILTO=hrs;
#
# Variable setup.
#
PATH=${PATH:-${DEFAULT_PATH}}; export PATH;
SVNROOT=${SVNROOT:-${DEFAULT_SVNROOT}}; export SVNROOT;
BUILDDIR=${BUILDDIR:-${DEFAULT_BUILDDIR}};
LOGDIR=${LOGDIR:-${DEFAULT_LOGDIR}};
DESTDIR=${DESTDIR:-${DEFAULT_DESTDIR}}; export DESTDIR
LOGFILE=${LOGFILE:-${LOGDIR}/${DEFAULT_LOGFILE}};
BUILDARGS=${BUILDARGS:-${DEFAULT_BUILDARGS}};
INSTARGS="${BUILDARGS} ${INSTARGS:-${DEFAULT_INSTARGS}}";
WEBMAILTO=${WEBMAILTO:-${DEFAULT_WEBMAILTO}};
# Notes on the names of the release notes directories:
#
# - They weren't named the same way they will be on the web site
# (CURRENT, 4-STABLE) becuase that wouldn't make it obvious that they
# were release notes.
#
# - They weren't named after their path names in the repository
# (src/release/doc) because that doesn't play well with branches.
#
# - The '/doc' part is necessary because of the way doc.subdir.mk finds
# ${LANGCODE}. It strips off the last component of ${.CURDIR} one by
# one and compares the last component to 'doc'. When it finds it, it
# assumes that the directory right below that is the language code.
# This works fine if all the languages are in a directory called
# 'doc', and not at all if they aren't.
subtrees='head relnotes/doc relnotes/man4';
#
# Update the checked out copies. Check out new copies every Sunday or
# if they don't exist.
#
# Only create $BUILDDIR if the directory right above it exists.
cd `dirname $BUILDDIR` || exit 1;
if [ ! -d $BUILDDIR ]; then
mkdir $BUILDDIR;
fi
umask 002
cd $BUILDDIR || exit 1;
# We use newsyslog now...
mkdir -p $LOGDIR
#rm -f $LOGFILE 2>/dev/null;
#touch $LOGFILE;
buildstart=`date +%s`
echo Build started `date` >> ${LOGFILE}
# XXX If one of the directories in $subtrees doesn't exist, *all* of
# them will be wiped and checked out again. This should only happen
# if something went terribly wrong, or if there's a new entry in
# $subtrees, so I (dd) don't plan on fixing it; there's no sense in
# optimizing something that should only happen twice a year (if that).
#cond="X`date '+%u'` = X7 `echo $subtrees | sed -E 's/([^ ]*)/-o ! -d \1/g'`";
cond="-e $BUILDDIR/fullbuild.flag `echo $subtrees | sed -E 's/([^ ]*)/-o ! -d \1/g'`";
if [ $cond ]; then
# Remove the old copies.
rm -Rf $subtrees 2>/dev/null;
chflags -R noschg $subtrees 2>/dev/null;
rm -Rf $subtrees 2>/dev/null;
# Check out the new copies. This creates all the $subtrees.
svn co $SVNROOT head >> $LOGFILE 2>&1 || exit 2;
test -d relnotes || mkdir relnotes;
cvs -qR checkout -Pd relnotes/doc src/release/doc >> \
$LOGFILE 2>&1 || exit 2;
cvs -qR checkout -Pd relnotes/man4 src/share/man/man4 >> \
$LOGFILE 2>&1 || exit 2;
rm -f $BUILDDIR/fullbuild.flag
else
svn cleanup head >> $LOGFILE 2>&1 || exit 2;
svn update head >> $LOGFILE 2>&1 || exit 2;
cvs -qR update -dP $subtrees >> $LOGFILE 2>&1 || exit 2;
fi
#
# Build the web site.
#
cd $BUILDDIR/head/en_US.ISO8859-1/htdocs || exit 1;
time make ${BUILDARGS} all >> $LOGFILE 2>&1 &&
time make ${INSTARGS} install >> $LOGFILE 2>&1 ||
(tail -50 $LOGFILE |
mail -s "FreeBSD web build failed on `hostname`" $WEBMAILTO;
exit 3) || exit 3;
# simon@ 20110116 - for now we use newsyslog...
#gzip -f $LOGFILE
#find $LOGDIR -mtime +60 -print0 | perl -n0e unlink
buildstop=`date +%s`
buildd=$(($buildstop - $buildstart))
echo "Build ended `date` (${buildd}s)" >> ${LOGFILE}
exit 0;