aboutsummaryrefslogtreecommitdiff
path: root/share/tools/webupdate
blob: d85381c68f440a82488b9f57a987f94d4042e0e6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#!/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.15 2005/07/15 15:27:43 hrs Exp $
#

#
# Default configuration.
#
DEFAULT_PATH=/bin:/usr/bin:/usr/local/bin;
DEFAULT_CVSROOT=/home/ncvs;
DEFAULT_SVNROOT=svn://svn.FreeBSD.org/doc/head
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;
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;

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.
	svn co $SVNROOT . >> $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;
else
	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;

gzip -f $LOGFILE
find $LOGDIR -mtime +60 -print0 | perl -n0e unlink

exit 0;