]>
Commit | Line | Data |
---|---|---|
36e91097 RD |
1 | #!/bin/bash |
2 | # --------------------------------------------------------------------------- | |
3 | # Master build script for building all the installers and such on all the | |
4 | # build machines in my lab, and then distributing the results as needed. | |
5 | # --------------------------------------------------------------------------- | |
6 | ||
7 | set -o errexit | |
8 | #set -o xtrace | |
9 | ||
10 | # --------------------------------------------------------------------------- | |
11 | # Some control variables... | |
12 | ||
13 | # the local spot that we put everything when done, before possibly copying | |
14 | # to remote hosts | |
15 | STAGING_DIR=./BUILD | |
16 | ||
17 | # host name of the machine to use for windows builds | |
18 | WIN_HOST=cyclops | |
19 | ||
20 | # local dir (from the poerspecitve of the master machine) of the shared | |
21 | # build dir on the windows machine, plus how to mount it there. If the | |
22 | # [u]mount commands are empty then WIN_SHARED will be used directly. | |
23 | WIN_SHARED=./tmp/mnt | |
24 | WIN_MOUNT="smbmount //$WIN_HOST/BUILD $WIN_SHARED -o credentials=/etc/samba/auth.cyclops.robind,dmask=755,fmask=644" | |
25 | WIN_UMOUNT="smbumount $WIN_SHARED" | |
26 | ||
27 | # Where is that dir from the remote machine's perspective? | |
28 | WIN_SHARED_REMOTE=/c/BUILD | |
29 | ||
30 | ||
31 | ||
32 | # Same as the above | |
33 | OSX_HOST=bigmac | |
34 | OSX_SHARED=./tmp/mnt/BUILD | |
35 | OSX_MOUNT="smbmount //$OSX_HOST/robind ./tmp/mnt -o credentials=/etc/samba/auth.bigmac.robind,dmask=755,fmask=644" | |
36 | OSX_UMOUNT="smbumount ./tmp/mnt" | |
37 | OSX_SHARED_REMOTE=/Users/robind/BUILD | |
38 | ||
39 | ||
40 | ||
41 | # Alsmost the same... See below | |
42 | LINUX_HOST=rh9 | |
43 | LINUX_SHARED=/stuff/temp/BUILD | |
44 | LINUX_MOUNT= | |
45 | LINUX_UMOUNT= | |
46 | LINUX_SHARED_REMOTE=/stuff/temp/BUILD | |
47 | ||
48 | ||
49 | # Upload server locations | |
50 | UPLOAD_HOST=starship.python.net | |
51 | UPLOAD_DAILY_ROOT=/home/crew/robind/public_html/wxPython/daily | |
52 | UPLOAD_PREVIEW_ROOT=/home/crew/robind/public_html/wxPython/preview | |
53 | ||
54 | ||
55 | ||
56 | # --------------------------------------------------------------------------- | |
57 | # functions | |
58 | ||
59 | function usage { | |
60 | echo "" | |
61 | echo "Usage: $0 [command flags...]" | |
62 | echo "" | |
63 | echo "build types:" | |
64 | echo " dryrun Do the build, but don't copy anywhere (default)" | |
65 | echo " daily Do a daily build, copy to starship" | |
66 | echo " release Do a normal release build, copy to starship" | |
67 | echo "" | |
68 | echo "optional command flags:" | |
69 | echo " 2.2 Build for Python 2.2 (default=off)" | |
70 | echo " 2.3 Build for Python 2.3 (default=on)" | |
71 | echo " all Build for all supported Python versions" | |
72 | echo "" | |
73 | echo " skipsource Don't build the source archives, use the ones" | |
74 | echo " already in the staging dir." | |
75 | echo " onlysource Exit after building the source archives" | |
76 | echo " skipwin Don't do the remote Windows build" | |
77 | echo " skiposx Don't do the remote OSX build" | |
78 | echo " skiplinux Don't do the remote Linux build" | |
79 | echo " skipclean Don't do the cleanup step on the remote builds" | |
80 | echo "" | |
81 | ||
82 | ||
83 | } | |
84 | ||
85 | # --------------------------------------------------------------------------- | |
86 | ||
87 | # Make sure we are running in the right directory. TODO: make this | |
88 | # test more robust. Currenly we just test for the presence of | |
89 | # 'wxPython' and 'wx' subdirs. | |
90 | if [ ! -d wxPython -o ! -d wx ]; then | |
91 | echo "Please run this script from the root wxPython directory." | |
92 | exit 1 | |
93 | fi | |
94 | ||
95 | ||
96 | ||
97 | # Set defaults and check the command line options | |
98 | KIND=dryrun | |
99 | PYVER=2.3 | |
100 | skipsource=no | |
101 | onlysource=no | |
102 | skipwin=no | |
103 | skiposx=no | |
104 | skiplinux=no | |
105 | skipclean=no | |
106 | ||
107 | for flag in $*; do | |
108 | case $flag in | |
109 | dryrun) KIND=dryrun ;; | |
110 | daily) KIND=daily ;; | |
111 | release) KIND=release ;; | |
112 | ||
113 | 2.2) PYVER=2.2 ;; | |
114 | 2.3) PYVER=2.3 ;; | |
115 | all) PYVER="2.2 2.3" ;; | |
116 | ||
117 | skipsource) skipsource=yes ;; | |
118 | onlysource) onlysource=yes ;; | |
119 | skipwin) skipwin=yes ;; | |
120 | skiposx) skiposx=yes ;; | |
121 | skiplinux) skiplinux=yes ;; | |
122 | skipclean) skipclean=yes ;; | |
123 | ||
124 | help) usage; exit 1 ;; | |
125 | *) echo "Unknown flag \"$flag\"" | |
126 | usage | |
127 | exit 1 | |
128 | esac | |
129 | done | |
130 | ||
131 | ||
132 | # ensure the staging area exists | |
133 | if [ ! -d $STAGING_DIR ]; then | |
134 | mkdir -p $STAGING_DIR | |
135 | fi | |
136 | ||
137 | # Figure out the wxPython version number, possibly adjusted for being a daily build | |
138 | if [ $KIND = daily ]; then | |
139 | DAILY=`date +%Y%m%d` # should it include the hour too? 2-digit year? | |
140 | echo $DAILY > DAILY_BUILD | |
141 | fi | |
142 | VERSION=`python -c "import setup;print setup.VERSION"` | |
143 | ||
144 | ||
145 | #echo VERSION=$VERSION | |
146 | #exit 0 | |
147 | ||
148 | # --------------------------------------------------------------------------- | |
149 | # Make the sources and other basic stuff. | |
150 | ||
151 | if [ $skipsource != yes -o $onlysource = yes ]; then | |
152 | ||
153 | # clean out the local dist dir | |
154 | rm -f dist/* | |
155 | ||
156 | # Regenerate the reST docs | |
157 | echo "Regenerating the reST docs..." | |
158 | cd docs | |
159 | for x in *.txt; do | |
160 | docutils-html $x `basename $x .txt`.html | |
161 | done | |
162 | cd - | |
163 | ||
164 | # build the doc and demo tarballs | |
165 | distrib/makedemo | |
166 | distrib/makedocs | |
167 | ||
168 | # make the source tarball | |
169 | distrib/makerpm 2.3 skipclean skiprpm gtk2 | |
170 | ||
171 | # make the source RPMs | |
172 | for ver in $PYVER; do | |
173 | distrib/makerpm $ver skipclean skipcopy skiptar srpm | |
174 | distrib/makerpm $ver skipclean skipcopy skiptar srpm gtk2 | |
175 | done | |
176 | ||
177 | # Copy everything to the staging dir | |
178 | echo "Moving stuff to $STAGING_DIR..." | |
179 | rm -f dist/*.spec | |
180 | mv dist/* $STAGING_DIR | |
181 | for doc in CHANGES BUILD INSTALL MigrationGuide default; do | |
182 | cp docs/$doc.* $STAGING_DIR | |
183 | done | |
184 | ||
185 | # cleanup | |
186 | echo "Cleaning up..." | |
187 | rm -f dist/* | |
188 | rm -rf _build_rpm | |
189 | fi | |
190 | ||
191 | if [ $KIND = daily ]; then | |
192 | rm DAILY_BUILD | |
193 | fi | |
194 | ||
195 | if [ $onlysource = yes ]; then | |
196 | exit 0 | |
197 | fi | |
198 | ||
199 | # --------------------------------------------------------------------------- | |
200 | # Windows build | |
201 | ||
202 | if [ $skipwin != yes ]; then | |
203 | echo "-=-=- Starting Windows build..." | |
204 | ||
205 | # mount the shared folder? | |
206 | if [ -n "$WIN_MOUNT" ]; then | |
207 | echo "Mounting shared folder..." | |
208 | $WIN_MOUNT | |
209 | fi | |
210 | ||
211 | # Copy the src file | |
212 | echo "Copying source file..." | |
213 | cp $STAGING_DIR/wxPythonSrc-$VERSION.tar.gz $WIN_SHARED | |
214 | ||
215 | # Untar it on the remote machine, and then run the build script | |
216 | echo "Unarchiving source file on $WIN_HOST..." | |
217 | ssh $WIN_HOST "cd $WIN_SHARED_REMOTE && tar xzf wxPythonSrc-$VERSION.tar.gz && rm wxPythonSrc-$VERSION.tar.gz" | |
218 | ||
219 | echo "Running build script on $WIN_HOST..." | |
220 | wxdir=$WIN_SHARED_REMOTE/wxPythonSrc-$VERSION | |
221 | cmd=$wxdir/wxPython/distrib/all/build-windows | |
222 | ssh $WIN_HOST "cd $wxdir && $cmd $wxdir $WIN_SHARED_REMOTE $skipclean $VERSION $PYVER" | |
223 | ||
224 | echo "Fetching the results..." | |
225 | cp $WIN_SHARED/wxPythonWIN32* $STAGING_DIR | |
226 | ssh $WIN_HOST "cd $WIN_SHARED_REMOTE && rm wxPythonWIN32*" | |
227 | ||
228 | # unmount? | |
229 | if [ -n "$WIN_UMOUNT" ]; then | |
230 | echo "Unmounting shared folder..." | |
231 | $WIN_UMOUNT | |
232 | fi | |
233 | fi | |
234 | ||
235 | ||
236 | # --------------------------------------------------------------------------- | |
237 | # OSX build | |
238 | ||
239 | if [ $skiposx != yes ]; then | |
240 | echo "-=-=- Starting OSX build..." | |
241 | ||
242 | # mount the shared folder? | |
243 | if [ -n "$OSX_MOUNT" ]; then | |
244 | echo "Mounting shared folder..." | |
245 | $OSX_MOUNT | |
246 | fi | |
247 | ||
248 | # Copy the src file | |
249 | echo "Copying source files..." | |
250 | cp $STAGING_DIR/wxPythonSrc-$VERSION.tar.gz $OSX_SHARED | |
251 | cp $STAGING_DIR/wxPythonDocs-$VERSION.tar.gz $OSX_SHARED | |
252 | cp $STAGING_DIR/wxPythonDemo-$VERSION.tar.gz $OSX_SHARED | |
253 | ||
254 | # Untar it on the remote machine, and then run the build script | |
255 | echo "Unarchiving source file on $OSX_HOST..." | |
256 | ssh $OSX_HOST "cd $OSX_SHARED_REMOTE && tar xzf wxPythonSrc-$VERSION.tar.gz && rm wxPythonSrc-$VERSION.tar.gz" | |
257 | ||
258 | echo "Running build script on $OSX_HOST..." | |
259 | wxdir=$OSX_SHARED_REMOTE/wxPythonSrc-$VERSION | |
260 | cmd=$wxdir/wxPython/distrib/all/build-osx | |
261 | ssh $OSX_HOST "cd $wxdir && $cmd $wxdir $OSX_SHARED_REMOTE $skipclean $VERSION $PYVER" | |
262 | ||
263 | echo "Fetching the results..." | |
264 | cp $OSX_SHARED/wxPythonOSX* $STAGING_DIR | |
265 | ssh $OSX_HOST "cd $OSX_SHARED_REMOTE && rm wxPythonOSX*" | |
266 | ||
267 | # unmount? | |
268 | if [ -n "$OSX_UMOUNT" ]; then | |
269 | echo "Unmounting shared folder..." | |
270 | $OSX_UMOUNT | |
271 | fi | |
272 | fi | |
273 | ||
274 | ||
275 | # --------------------------------------------------------------------------- | |
276 | # Linux build | |
277 | ||
278 | # This build is optional, check if the target machine is up and | |
279 | # running | |
280 | if [ $skiplinux != yes ]; then | |
281 | if ping -q -c1 -w1 $LINUX_HOST > /dev/null; then | |
282 | # the ping succeeded | |
283 | skiplinux=no | |
284 | else | |
285 | # the ping failed, skip the build | |
286 | skiplinux=yes | |
287 | echo "-----------------------------------------------------------------" | |
288 | echo "The $LINUX_HOST machine is offline, skipping the binary RPM build." | |
289 | echo "-----------------------------------------------------------------" | |
290 | fi | |
291 | fi | |
292 | ||
293 | ||
294 | if [ $skiplinux != yes ]; then | |
295 | echo "-=-=- Starting Linux build..." | |
296 | ||
297 | # The remote linux build is a bit different than the others. The | |
298 | # SRPMs will have already been built in the initial source | |
299 | # building steps, the only thing that the remote build needs to | |
300 | # do is an "rpmbuild --rebuild" for each package. So we'll just | |
301 | # copy the build script over and execute it, there is no need to | |
302 | # unpack the tarball and most of the other steps... | |
303 | ||
304 | ||
305 | echo "Copying source files..." | |
306 | mkdir -p $LINUX_SHARED | |
307 | cp $STAGING_DIR/wxPython*.src.rpm $LINUX_SHARED | |
308 | ||
309 | scp distrib/all/build-linux root@$LINUX_HOST:/tmp > /dev/null | |
310 | ssh root@$LINUX_HOST "cd /tmp && ./build-linux /tmp/wx $LINUX_SHARED_REMOTE $skipclean $VERSION $PYVER" | |
311 | ||
312 | echo "Fetching the results..." | |
313 | cp $LINUX_SHARED/wxPythonGTK*.i[0-9]86.rpm $STAGING_DIR | |
314 | rm -r $LINUX_SHARED | |
315 | fi | |
316 | ||
317 | ||
318 | ||
319 | ||
320 | # --------------------------------------------------------------------------- | |
321 | # Final disposition of build results... | |
322 | ||
79408446 | 323 | chmod a+r $STAGING_DIR/* |
36e91097 RD |
324 | |
325 | if [ $KIND = dryrun ]; then | |
326 | # we're done | |
327 | exit 0 | |
328 | fi | |
329 | ||
330 | ||
331 | if [ $KIND = daily ]; then | |
332 | ||
79408446 | 333 | destdir=$UPLOAD_DAILY_ROOT/$DAILY |
36e91097 RD |
334 | echo "Copying to the starship at $destdir..." |
335 | ssh $UPLOAD_HOST "mkdir -p $destdir" | |
336 | scp $STAGING_DIR/* $UPLOAD_HOST:/$destdir | |
79408446 RD |
337 | ssh $UPLOAD_HOST "cd $destdir && ls -al" |
338 | ||
36e91097 RD |
339 | |
340 | echo "Cleaning up staging dir..." | |
341 | rm $STAGING_DIR/* | |
342 | rmdir $STAGING_DIR | |
343 | ||
344 | # TODO: something to remove old builds from starship, keeping | |
345 | # only N days worth | |
346 | ||
347 | # TODO: Send email to wxPython-dev? | |
79408446 RD |
348 | cat <<EOF | mail -s "New test build uploaded" robin@alldunn.com |
349 | Hi, | |
350 | ||
351 | A new test build of wxPython has been uploaded to starship. | |
352 | ||
353 | Version: $VERSION | |
354 | Pythons: $PYVER | |
355 | URL: http://starship.python.net/crew/robind/wxPython/daily/$DAILY | |
356 | ||
357 | Have fun! | |
358 | R'bot | |
359 | EOF | |
36e91097 RD |
360 | |
361 | exit 0 | |
362 | fi | |
363 | ||
364 | ||
365 | if [ $KIND = release ]; then | |
366 | ||
367 | echo "Copying to the local file server..." | |
368 | destdir=/stuff/Development/wxPython/dist/$VERSION | |
369 | mkdir -p $destdir | |
370 | cp $STAGING_DIR/* $destdir | |
371 | ||
372 | echo "Copying to the starship..." | |
373 | destdir=$UPLOAD_PREVIEW_ROOT/$VERSION | |
374 | ssh $UPLOAD_HOST "mkdir -p $destdir" | |
375 | scp $STAGING_DIR/* $UPLOAD_HOST:/$destdir | |
376 | ||
377 | echo "Cleaning up staging dir..." | |
378 | rm $STAGING_DIR/* | |
379 | rmdir $STAGING_DIR | |
380 | ||
381 | exit 0 | |
382 | fi | |
383 | ||
384 | ||
385 | # --------------------------------------------------------------------------- |