source: create_distribution.py @ 5120

Last change on this file since 5120 was 5068, checked in by ole, 17 years ago

Refactored dirs to distribute into separate module and updated create and audit scripts.

File size: 7.8 KB
RevLine 
[3892]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
[4170]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
[5018]20   This script works only on Linux!
[3892]21"""
22
[4931]23from os import sep, system
[5068]24from os.path import join
[3892]25from tempfile import mktemp
[4531]26from sys import platform, stdout
[3937]27from anuga.utilities.system_tools import get_user_name, get_host_name
[4170]28from anuga.abstract_2d_finite_volumes.util import get_revision_number
29from anuga.abstract_2d_finite_volumes.util import store_version_info
[5016]30from anuga.config import major_revision
[3892]31
[5068]32from dirs_to_distribute import dirmap
[5018]33from anuga.utilities.data_audit_wrapper import IP_verified
[3892]34
35if platform == 'win32':
36    msg = 'This script is not written for Windows.'+\
37          'Please run it on a Unix platform'
38    raise Exception, msg
39
40
[4531]41# line separator
42lsep = '----------------------------------------------------------------------'
[3892]43
[4168]44
[4531]45# Get svn revision number and create
[4168]46# file with version info for release.
[4170]47# This will mean that the version currently checked out is
[4168]48# the one which will be released.
49
[4170]50svn_revision = get_revision_number()
[3922]51revision = '%s_%s' %(major_revision, svn_revision)
[3934]52print 'Creating ANUGA revision %s' %revision
53
[3892]54distro_filename = 'anuga-%s.tgz' %revision
55
[4837]56#-----------------------------------
57# Create directory for this release.
58# It will be named like
59#        anuga_release_1.0beta_4824
60#-----------------------------------
[3902]61release_dir = '~/anuga_release_%s' %revision
62s = 'mkdir %s' %release_dir
63try:
[4170]64    print s   
[3902]65    system(s)
66except:
67    pass
68
[4837]69#-----------------------------------------------------
70# Create temporary area for svn to export source files
71#-----------------------------------------------------
[3892]72distro_dir = mktemp()
73s = 'mkdir %s' %distro_dir
[4170]74print s   
[3892]75system(s)
76
77
[5068]78#---------------------------------------------------
79# Get the ANUGA directories flagged for distribution
80#---------------------------------------------------
81
82for source in dirmap:
83   
84    destination = join(distro_dir, dirmap[source])
85    s = 'svn export -r %d --quiet %s %s' %(svn_revision,
86                                           source,
87                                           destination)
88
89    print s
90    system(s)
91
92
93
[3902]94#-----------------------------
[3892]95# Get validation_files as well
[4837]96#-----------------------------
[5068]97#s = 'mkdir %s/anuga_validation' %distro_dir
98#system(s)
99#
100#s = 'svn export -r %d --quiet anuga_validation/okushiri_2005 %s/anuga_validation/okushiri'\
101#    %(svn_revision, distro_dir)
102#print s
103#system(s)
[3902]104
[5064]105#s = 'svn export -r %d --quiet anuga_validation/solitary_waves %s/anuga_validation/solitary_waves'\
106#    %(svn_revision, distro_dir)
107#print s
[5068]108#syst
109
110#s = 'svn export -r %d --quiet anuga_validation/automated_validation_tests %s/anuga_validation/automated_validation_tests'\
111#    %(svn_revision, distro_dir)
112#print s
[5064]113#system(s)
[4012]114
[4837]115# FIXME: Other validations in here as they appear!
[3902]116
[3892]117
[4837]118#---------------------------
[3987]119# Get demos from user manual
[4837]120#---------------------------
[5068]121#s = 'svn export -r %d --quiet anuga_core/documentation/user_manual/demos %s/anuga_demos'\
122#    %(svn_revision, distro_dir)
123#print s
124#system(s)
[3987]125
[4865]126
[5068]127
[5016]128# Store file with revision info for use with get_revision_number
129store_version_info(destination_path=distro_dir+'/anuga', verbose=True)
[4865]130
131
[5016]132#---------------------------
133# IP Data Audit
134#---------------------------
135print 'Verifying data IP'
[5028]136if not IP_verified(distro_dir, verbose=True):
[5016]137    msg = 'Files have not been verified for IP.\n'
138    msg += 'Each data file must have a license file with it.'
139    raise Exception, msg
140
141
[4802]142#------------------
143# Zip everything up
[4837]144#------------------
[4802]145s = 'cd %s;tar cvfz %s *' %(distro_dir, distro_filename)
[3987]146print s
147system(s)
148
[4837]149#----------------------------
[3987]150# Move distro to release area
[4837]151#----------------------------
[3987]152s = '/bin/mv %s/*.tgz %s' %(distro_dir, release_dir) 
153print s
154system(s)
155
[4837]156#---------
[3987]157# Clean up
[4837]158#---------
[4802]159s = '/bin/rm -rf %s/*' %(distro_dir) 
[3987]160print s
161system(s)
162
163
164#-----------------------------
[4531]165# Copy and rename anuga_viewer
[4837]166#-----------------------------
[4531]167s = '/bin/cp ./anuga_core/source/anuga_viewer/distros/anuga_viewer_1.0.tgz %s/anuga_viewer-%s.tgz' %(distro_dir, revision)
[3892]168print s
169system(s)
170
[4837]171#----------------------------
[4531]172# Move viewer to release area
[4837]173#----------------------------
[3892]174s = '/bin/mv %s/*.tgz %s' %(distro_dir, release_dir) 
175print s
176system(s)
[3902]177
[4531]178
179
[4837]180#----------------------------------------------
181# Compile and bundle up the LaTeX documentation
182#----------------------------------------------
[4531]183print
184print lsep
185print 'Preparing User Manual (see update_anuga_user_manual.log)'
186print lsep
[3922]187s = 'cd anuga_core/documentation/user_manual;'
188s += 'python update_anuga_user_manual.py --no_html'
189print s
[4531]190system(s + ' 1>update_anuga_user_manual.log 2>/dev/null')
[3922]191
[4122]192release_name = 'anuga_user_manual-%s.pdf' %revision
193s = '/bin/mv anuga_core/documentation/user_manual/anuga_user_manual.pdf %s/%s'\
194    %(release_dir, release_name)
[3922]195print s
196system(s)
197
[4122]198release_name = 'anuga_installation_guide-%s.pdf' %revision
199s = '/bin/mv anuga_core/documentation/user_manual/anuga_installation_guide.pdf %s/%s' %(release_dir, release_name)   
200   
[3922]201print s
202system(s)
203
204
[4837]205#----------------------------
206# Print list of release files
207#----------------------------
[3892]208print 'Done'
209print
210print
[4531]211print lsep
[3892]212print 'The release files are in %s:' %release_dir
213system('ls -la %s' %release_dir)
[4531]214print lsep
215print
216print
[3934]217
[4837]218
219#-------------------------------------
220# Copy release to various destinations
221#-------------------------------------
[4531]222answer = raw_input('Do you want to upload this to sourceforge? Y/N [Y]')
223if answer.lower() != 'n':
224   
225    print 'Uploading to sourceforge'
[3934]226
[4531]227    import os, os.path
228    release_dir = os.path.expanduser(release_dir)
229    os.chdir(release_dir)
230    print 'Reading from', os.getcwd()
231
232
233    from ftplib import FTP
234    ftp = FTP('upload.sourceforge.net')
235    print ftp.login() # Anonymous
236    print ftp.cwd('incoming')
237
238
239    for filename in os.listdir('.'):
240        print 'Uploading %s... ' %filename,
241        stdout.flush()
242
243        fid=open(filename, 'rb')
244        print ftp.storbinary('STOR %s' %filename, fid)
245        fid.close()
246
247    print 'FTP done'
248    print ftp.quit()
249
250    print
251    print lsep
252    print '    ********************* NOTE *************************'
253    print lsep
254    print 'To complete this release you must log into'
255    print 'http://sourceforge.net/projects/anuga as ANUGA admin'
256    print 'and complete the process by selecting File Releases '
257    print 'in the admin menu there.'
258    print lsep
259    print
260    print
261   
262
263
[3934]264#----------------------------
265# Throw away code to drop all files into the RAMP download area
[4532]266# This is hardwired for Ole but shows how such a thing can be done
267# automatically.
[3934]268
[3937]269if get_user_name() == 'ole' and get_host_name() == 'nautilus':
[3934]270
[4802]271
272    answer = raw_input('Do you want to move this to perlite and ANU? Y/N [Y]')
273    if answer.lower() == 'n':
274        import sys; sys.exit()
275
276       
277    #------------------------------
278    print 'Uploading to sourceforge'
279
280
281   
282
[4531]283    print 'Attempt to rsync data to perlite and datamining'
[4802]284    # Copy to NHIP
[4384]285    s = 'rsync -avz %s/* onielsen@cyclone:/d/cit/1/cit/natural_hazard_impacts/downloads/ANUGA_install/%s' %(release_dir, 'anuga_%s' %revision)
[3937]286    print s
287    system(s)
288   
[3990]289    #system('scp %s/*.pdf onielsen@cyclone:/d/cit/1/cit/risk_assessment_methods_project/downloads/ANUGA_install' %release_dir)#
290
291
292    # Copy to the ANU
[4531]293    #s = 'rsync -avz %s/* ole@datamining.anu.edu.au:public_html/software/anuga/%s' %(release_dir, 'anuga_%s' %revision)
294    #print s
295    #system(s)
[3990]296   
297   
Note: See TracBrowser for help on using the repository browser.