source: branches/anuga_1_2_0/create_distribution.py @ 7888

Last change on this file since 7888 was 7753, checked in by hudson, 14 years ago

Moved anuga_core into trunk.

File size: 9.6 KB
Line 
1"""Create a distribution of ANUGA from latest revision
2
3   This script is assumed to be run in the root directory of anuga
4   from a working sandpit connected to svn
5
6   It will create a distribution of ANUGA from the version which is
7   currently checked out.
8
9   To use the latest version run
10
11     svn up
12
13   before running this script. To use a specific revision (2187, say) run
14
15     svn up -r 2187
16
17   first assuming that create_distribution.py (this script) and anything
18   it depends on still work for that revision.
19
20   This script works only on Linux!
21"""
22
23from os import sep, system
24from os.path import join
25import os
26from tempfile import mktemp
27from sys import platform, stdout
28from anuga.utilities.system_tools import get_user_name, get_host_name
29from anuga.abstract_2d_finite_volumes.util import get_revision_number
30from anuga.abstract_2d_finite_volumes.util import store_version_info
31from anuga.config import major_revision
32
33from dirs_to_distribute import dirmap
34from anuga.utilities.data_audit_wrapper import IP_verified
35
36
37if platform == 'win32':
38    msg = 'This script is not written for Windows.'+\
39          'Please run it on a Unix platform'
40    raise Exception, msg
41
42
43# line separator
44lsep = '----------------------------------------------------------------------'
45
46
47# Get svn revision number and create
48# file with version info for release.
49# This will mean that the version currently checked out is
50# the one which will be released.
51
52svn_revision = get_revision_number()
53revision = '%s_%s' %(major_revision, svn_revision)
54print 'Creating ANUGA revision %s' %revision
55
56anuga_release_name = 'anuga-%s' % revision
57distro_filename = '%s.tgz' % anuga_release_name
58
59#-----------------------------------
60# Create directory for this release.
61# It will be named like
62#        anuga_release_1.0beta_4824
63#-----------------------------------
64release_area = '~/anuga_releases'
65s = 'mkdir %s' % release_area
66try:
67    print s   
68    system(s)
69except:
70    pass
71
72
73   
74release_dir = release_area + '/%s' % anuga_release_name
75s = 'mkdir %s' % release_dir
76try:
77    print s   
78    system(s)
79except:
80    pass
81
82#-----------------------------------------------------
83# Create temporary area for svn to export source files
84#-----------------------------------------------------
85distro_dir = mktemp()
86s = 'mkdir %s' % distro_dir
87print s   
88system(s)
89
90
91#---------------------------------------------------
92# Get the ANUGA directories flagged for distribution
93#---------------------------------------------------
94
95for source in dirmap:
96   
97    destination = join(distro_dir, dirmap[source])
98   
99    s = 'svn export -r %d --quiet %s %s' % (svn_revision,
100                                            source,
101                                            destination)
102
103    print s
104    system(s)
105
106
107
108
109# Store file with revision info for use with get_revision_number
110store_version_info(destination_path=distro_dir+'/anuga', verbose=True)
111
112
113#---------------------------
114# IP Data Audit
115#---------------------------
116print 'Verifying data IP'
117if not IP_verified(distro_dir, verbose=True):
118    msg = 'Files have not been verified for IP.\n'
119    msg += 'Each data file must have a license file with it.'
120    raise Exception, msg
121
122
123   
124
125#----------------------------------------------
126# Compile and bundle up the LaTeX documentation
127#----------------------------------------------
128print
129print lsep
130print 'Preparing User Manual (see update_anuga_user_manual.log)'
131print lsep
132s = 'cd anuga_core/documentation/user_manual;'
133s += 'python update_anuga_user_manual.py --no_html'
134print s
135system(s + ' 1>update_anuga_user_manual.log 2>/dev/null')
136
137# Copy to distro_dir to become part of one tarball
138release_name = 'anuga_user_manual-%s.pdf' % revision
139s = '/bin/mv anuga_core/documentation/user_manual/anuga_user_manual.pdf %s/%s'\
140    %(distro_dir, release_name)
141print s
142system(s)
143
144release_name = 'anuga_installation_guide-%s.pdf' % revision
145s = '/bin/mv anuga_core/documentation/user_manual/anuga_installation_guide.pdf %s/%s' %(distro_dir, release_name)   
146print s
147system(s)
148
149release_name = 'anuga_whats_new-%s.pdf' % revision
150s = '/bin/mv anuga_core/documentation/user_manual/anuga_whats_new.pdf %s/%s' %(distro_dir, release_name)   
151print s
152system(s)
153   
154   
155   
156   
157   
158   
159   
160#------------------
161# Zip everything up
162#------------------
163s = 'cd %s;tar cvfz %s *' % (distro_dir, distro_filename)
164print s
165system(s)
166
167#----------------------------
168# Move distro to release area
169#----------------------------
170s = '/bin/mv %s/*.tgz %s' % (distro_dir, release_dir) 
171print s
172system(s)
173
174#---------
175# Clean up
176#---------
177s = '/bin/rm -rf %s/*' % (distro_dir) 
178print s
179system(s)
180
181
182#----------------------------------------------
183# Generate Windows installer
184#----------------------------------------------
185
186root = os.getcwd()
187from installation_files.windows.installer import create_config
188
189os.chdir('installation_files/windows')
190
191# Create ANUGA dir for NSI installer
192try:
193    os.mkdir('files/%s' % anuga_release_name)
194    os.mkdir('files/anuga_viewer')
195    os.mkdir('files/prereqs')
196    os.mkdir('files/prereqs/netcdf')
197except:
198    pass
199
200# and unpack ANUGA into it
201s = 'cd files/%s; tar xvfz %s/%s' % (anuga_release_name,
202                                     release_dir, 
203                                     distro_filename)
204print s
205system(s)
206
207# Must be replaced by local folder to where SourceForge version is downloaded
208anuga_viewer_folder = 'anuga_viewer'
209python = 'python-2.5.4.msi'
210numpy = 'numpy-1.3.0-win32-superpack-python2.5.exe'
211scientific_python = 'ScientificPython-2.9.0.win32-py2.5.exe'
212matplotlib = 'matplotlib-0.99.0.win32-py2.5.exe'
213netcdf_folder = 'netcdf'
214mingw = 'MinGW-5.1.6.exe'
215
216# Generate NSI file
217create_config(revision,
218              anuga_release_name,
219              anuga_viewer_folder,
220              python,
221              numpy,
222              scientific_python,
223              matplotlib,
224              netcdf_folder,
225              mingw)
226
227# Package up files necessary to compile the installer on Windows and
228# move to release area
229
230try:
231    # Cleanup in case there was something left from a previous attempt
232    s = 'cd %s; /bin/rm -rf windows_installer' % release_dir
233    print s
234    system(s)
235except:
236    pass   
237   
238# Create subdirectories for windows installer
239s = 'cd %s; mkdir windows_installer; mkdir windows_installer/files'\
240    % release_dir
241print s
242system(s)
243
244
245# Copy installion scrips and imagery across
246s = 'cp *.bmp *.nsh *.nsi *.ico %s/windows_installer' % release_dir
247print s
248system(s)
249
250# Copy actual files used by Windows installer across
251s = 'cd files; cp -r * %s/windows_installer/files' % release_dir
252print s
253system(s)                                                       
254
255# Come back to starting directory
256os.chdir(root)
257                                                     
258# Grab license file from anuga_core and copy to installer
259s = 'cp anuga_core/source/anuga/LICENSE.txt %s/windows_installer/files'\
260    % release_dir                                                       
261print s
262os.system(s)
263
264print 'NSI installer created'
265
266
267
268#----------------------------
269# Print list of release files
270#----------------------------
271print 'Done'
272print
273print
274print lsep
275print 'The release files are in %s:' %release_dir
276system('ls -la %s' %release_dir)
277print lsep
278print
279print
280
281
282#-------------------------------------
283# Copy release to various destinations
284#-------------------------------------
285# FIXME (Ole): I don't think this is the way any more
286# due to changes at SourceForge.
287
288answer = raw_input('Do you want to upload this to sourceforge? Y/N [Y]')
289if answer.lower() != 'n':
290   
291    print 'Uploading to sourceforge'
292
293    import os, os.path
294    release_dir = os.path.expanduser(release_dir)
295    os.chdir(release_dir)
296    print 'Reading from', os.getcwd()
297
298
299    s = 'rsync -avP -e ssh *.* uniomni@frs.sourceforge.net:uploads/'
300    print s
301    os.system(s)
302
303   
304
305    #from ftplib import FTP
306    #ftp = FTP('upload.sourceforge.net')
307    #print ftp.login() # Anonymous
308    #print ftp.cwd('incoming')
309    #
310    #for filename in os.listdir('.'):
311    #    print 'Uploading %s... ' %filename,
312    #    stdout.flush()
313    #
314    #    fid=open(filename, 'rb')
315    #    print ftp.storbinary('STOR %s' %filename, fid)
316    #    fid.close()
317    #
318    #print 'FTP done'
319    #print ftp.quit()
320
321    print
322    print lsep
323    print '    ********************* NOTE *************************'
324    print lsep
325    print 'To complete this release you must log into'
326    print 'http://sourceforge.net/projects/anuga as ANUGA admin'
327    print 'and complete the process by selecting File Releases '
328    print 'in the admin menu there.'
329    print lsep
330    print
331    print
332   
333
334
335# Copy to the ANU
336#s = 'rsync -avz %s/* ole@datamining.anu.edu.au:public_html/software/anuga/%s' %(release_dir, 'anuga_%s' %revision)
337s = 'scp -r %s ole@datamining.anu.edu.au:public_html/software/anuga' %(release_dir)       
338print s
339system(s)
340   
341   
342#----------------------------
343# Throw away code to drop all files into the RAMP download area
344# This is hardwired for Ole but shows how such a thing can be done
345# automatically.
346
347
348if get_user_name() == 'ole' and get_host_name() == 'nautilus':
349
350
351    answer = raw_input('Do you want to move this to the GA NAS? Y/N [Y]')
352    if answer.lower() == 'n':
353        import sys; sys.exit()
354
355       
356
357    print 'Attempt to rsync data to perlite and datamining'
358    # Copy to Georisk
359    s = 'rsync -avz %s/* onielsen@cyclone:georisk/downloads/ANUGA_install/%s' %(release_dir, 'anuga_%s' % revision)
360    print s
361    system(s)
362   
363    #system('scp %s/*.pdf onielsen@cyclone:/d/cit/1/cit/risk_assessment_methods_project/downloads/ANUGA_install' %release_dir)#
364   
365print 'Remember to update' 
366print '    anuga_whats_new.tex'
367print '    sourceforge'
368   
Note: See TracBrowser for help on using the repository browser.