aboutsummaryrefslogtreecommitdiff
path: root/share/tools/webupdate
blob: cb5ceef8dec3ea196379807a006b2da186c0f7f9 (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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
#!/bin/sh
# Copyright (c) 2001-2017 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.
#	PUBDIR		- Where the rendered files are published.
#	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
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}};

# too fragile, see PR: 222488	 
export NO_OBJ=YES

# Notes on the names of the release notes directories:
#
# - They weren't named the same way they will be on the web site
# (CURRENT, 11-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
relnotes11/doc relnotes11/man4
relnotes10/doc relnotes10/man4
ports';

#
# 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

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-clean.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/doc/head head >> $LOGFILE 2>&1 || exit 2;

	test -d relnotes || mkdir relnotes;
	svn co $SVNROOT/base/head/release/doc relnotes/doc >> $LOGFILE 2>&1 || exit 2;
	svn co $SVNROOT/base/head/share/man/man4 relnotes/man4 >> $LOGFILE 2>&1 || exit 2;
	svn co $SVNROOT/base/stable/11/release/doc relnotes11/doc >> $LOGFILE 2>&1 || exit 2;
	svn co $SVNROOT/base/stable/11/share/man/man4 relnotes11/man4 >> $LOGFILE 2>&1 || exit 2;
	svn co $SVNROOT/base/stable/10/release/doc relnotes10/doc >> $LOGFILE 2>&1 || exit 2;
	svn co $SVNROOT/base/stable/10/share/man/man4 relnotes10/man4 >> $LOGFILE 2>&1 || exit 2;
	svn co --depth immediates $SVNROOT/ports/head ports >> $LOGFILE 2>&1 || exit 2
	svn up --set-depth infinity ports/Mk >> $LOGFILE 2>&1 || exit 2
	rm -f $BUILDDIR/fullbuild-clean.flag
else
	for dir in ${subtrees}; do
		svn cleanup $dir >> $LOGFILE 2>&1 || exit 2;
		svn update --accept theirs-full $dir >> $LOGFILE 2>&1 || exit 2;
	done
fi

if [ ! -e "${PINDEX_OVERRIDE}" ]; then
	[ -e ${PORTSDIR}/INDEX-${INDEXNUM} ] && rm -f ${PORTSDIR}/INDEX-${INDEXNUM}
	make -C ${PORTSDIR} fetchindex >> $LOGFILE 2>&1 || exit 2
fi

#
# Build the web site.
#
cd $BUILDDIR/head || exit 1;

# get latest revision
LATESTREVISION=$LOGDIR/LATESTREVISION
make -C en_US.ISO8859-1/articles/pam/ SRCS="$(pwd)" -V LATESTREVISION | \
  sed -E 's/--stringparam[ ]+/!/g' | tr '!' '\n' > $LATESTREVISION

time make ${BUILDARGS} p-all >> $LOGFILE 2>&1 ||
	(cat $LATESTREVISION >> $LOGFILE
	 tail -50 $LOGFILE | mail -s "FreeBSD web build failed on `hostname`" $WEBMAILTO;
	 exit 3) || exit 3;

cd $BUILDDIR/head/en_US.ISO8859-1/htdocs || exit 1;

( time make ${INSTARGS} -j8 all && time make ${INSTARGS} install ) >> $LOGFILE 2>&1 ||
	(cat $LATESTREVISION >> $LOGFILE
	 tail -50 $LOGFILE |
	 mail -s "FreeBSD web build failed on `hostname`" $WEBMAILTO;
	 exit 3) || exit 3;

if [ "X${PUBDIR}" != "X" ]; then
	/usr/local/bin/rsync ${RSYNC_FLAGS} ${DESTDIR}/ ${PUBDIR} \
		>> ${LOGFILE} 2>&1
fi

cat $LATESTREVISION >> ${LOGFILE}
buildstop=`date +%s`
buildd=$(($buildstop - $buildstart))
echo "Build ended `date` (${buildd}s)" >> ${LOGFILE}

exit 0;