154 lines
		
	
	
	
		
			5.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			154 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 CVS 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.
 | |
| #	CVSROOT		- Path to the FreeBSD CVS 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 CVS.
 | |
| #
 | |
| # 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 CVS operations
 | |
| #	3	- failure in make operations
 | |
| #
 | |
| # $FreeBSD: www/tools/webupdate,v 1.13 2004/09/26 11:55:51 simon Exp $
 | |
| #
 | |
| 
 | |
| #
 | |
| # Default configuration.
 | |
| #
 | |
| DEFAULT_PATH=/bin:/usr/bin:/usr/local/bin;
 | |
| DEFAULT_CVSROOT=/home/ncvs;
 | |
| DEFAULT_BUILDDIR=/usr/local/www/build;
 | |
| DEFAULT_LOGDIR=/usr/local/www/build/log;
 | |
| DEFAULT_DESTDIR=/usr/local/www;
 | |
| DEFAULT_LOGFILE=log.make.`date '+%d.%H'`;
 | |
| DEFAULT_BUILDARGS='';
 | |
| DEFAULT_INSTARGS='';
 | |
| DEFAULT_WEBMAILTO=freebsd-doc;
 | |
| 
 | |
| #
 | |
| # Variable setup.
 | |
| #
 | |
| PATH=${PATH:-${DEFAULT_PATH}}; export PATH;
 | |
| CVSROOT=${CVSROOT:-${DEFAULT_CVSROOT}}; export CVSROOT;
 | |
| BUILDDIR=${BUILDDIR:-${DEFAULT_BUILDDIR}};
 | |
| LOGDIR=${LOGDIR:-${DEFAULT_LOGDIR}};
 | |
| DESTDIR=${DESTDIR:-${DEFAULT_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='www doc relnotes/doc relnotes/man4 relnotes5/doc relnotes5/man4 relnotes4/doc relnotes4/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;
 | |
| 
 | |
| mkdir -p $LOGDIR
 | |
| rm -f $LOGFILE 2>/dev/null;
 | |
| touch $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'`";
 | |
| 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.
 | |
| 	cvs -qR checkout -P www >> $LOGFILE 2>&1 || exit 2;
 | |
| 	cvs -qR checkout -P doc >> $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;
 | |
| 
 | |
| 	test -d relnotes5 || mkdir relnotes5;
 | |
| 	cvs -qR checkout -Pd relnotes5/doc -rRELENG_5 src/release/doc >> \
 | |
| 		$LOGFILE 2>&1 || exit 2;
 | |
| 	cvs -qR checkout -Pd relnotes5/man4 -rRELENG_5 src/share/man/man4 >> \
 | |
| 		$LOGFILE 2>&1 || exit 2;
 | |
| 
 | |
| 	test -d relnotes4 || mkdir relnotes4;
 | |
| 	cvs -qR checkout -Pd relnotes4/doc -rRELENG_4 src/release/doc >> \
 | |
| 		$LOGFILE 2>&1 || exit 2;
 | |
| 	cvs -qR checkout -Pd relnotes4/man4 -rRELENG_4 src/share/man/man4 >> \
 | |
| 		$LOGFILE 2>&1 || exit 2;
 | |
| else
 | |
| 	cvs -qR update -dP $subtrees >> $LOGFILE 2>&1 || exit 2;
 | |
| fi
 | |
| 
 | |
| #
 | |
| # Build the web site.
 | |
| #
 | |
| cd $BUILDDIR/www/en || exit 1;
 | |
| 
 | |
| time make ${BUILDARGS} all >> $LOGFILE 2>&1 &&
 | |
|     time make ${INSTARGS} DESTDIR=$DESTDIR install >> $LOGFILE 2>&1 ||
 | |
| 	(tail -50 $LOGFILE |
 | |
| 	 mail -s "FreeBSD web build failed on `hostname`" $WEBMAILTO;
 | |
| 	 exit 3) || exit 3;
 | |
| 
 | |
| gzip -f $LOGFILE
 | |
| find $LOGDIR -mtime +60 -print0 | perl -n0e unlink
 | |
| 
 | |
| exit 0;
 |