annotate stampit/main.py @ 5:3f9fac577d75

this now actually makes some tarballs for you
author Jeff Hammel <jhammel@mozilla.com>
date Tue, 20 Apr 2010 14:51:47 -0700
parents 95b9f262d795
children 6f8f390ab0b4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
af10f7e072ed initial import of stampit
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
1 #!/usr/bin/env python
af10f7e072ed initial import of stampit
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
2 """
af10f7e072ed initial import of stampit
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
3 tar up a set of packages in a virtualenv per platform:
af10f7e072ed initial import of stampit
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
4
af10f7e072ed initial import of stampit
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
5 <package>-<version>-<platform>.tar.gz
af10f7e072ed initial import of stampit
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
6
af10f7e072ed initial import of stampit
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
7 Example:
af10f7e072ed initial import of stampit
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
8
af10f7e072ed initial import of stampit
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
9 mozmill-1.4.1-linux.tar.gz
af10f7e072ed initial import of stampit
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
10 """
af10f7e072ed initial import of stampit
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
11
3
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
12 import os
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
13 import subprocess
0
af10f7e072ed initial import of stampit
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
14 import sys
3
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
15 import tempfile
0
af10f7e072ed initial import of stampit
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
16
2
164af2a4d291 better description formatting
Jeff Hammel <jhammel@mozilla.com>
parents: 1
diff changeset
17 from optparse import OptionParser, IndentedHelpFormatter, HelpFormatter
3
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
18 from utils import which
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
19
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
20 def call(*args, **kwargs):
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
21 code = subprocess.call(*args, **kwargs)
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
22 if code:
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
23 sys.exit(code)
0
af10f7e072ed initial import of stampit
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
24
2
164af2a4d291 better description formatting
Jeff Hammel <jhammel@mozilla.com>
parents: 1
diff changeset
25 class UnformattedDescription(IndentedHelpFormatter):
164af2a4d291 better description formatting
Jeff Hammel <jhammel@mozilla.com>
parents: 1
diff changeset
26 def format_description(self, description):
164af2a4d291 better description formatting
Jeff Hammel <jhammel@mozilla.com>
parents: 1
diff changeset
27 return description.strip() or ''
0
af10f7e072ed initial import of stampit
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
28
af10f7e072ed initial import of stampit
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
29 def main(args=sys.argv[1:]):
4
95b9f262d795 check for PYTHONHOME before deleting it
Jeff Hammel <jhammel@mozilla.com>
parents: 3
diff changeset
30
5
3f9fac577d75 this now actually makes some tarballs for you
Jeff Hammel <jhammel@mozilla.com>
parents: 4
diff changeset
31 # XXX this is actually a very long way to work around just getting the
3f9fac577d75 this now actually makes some tarballs for you
Jeff Hammel <jhammel@mozilla.com>
parents: 4
diff changeset
32 # tarballs as pip magically does this for you! ::sigh::
3f9fac577d75 this now actually makes some tarballs for you
Jeff Hammel <jhammel@mozilla.com>
parents: 4
diff changeset
33 # not sure of a better/easier way, though
3f9fac577d75 this now actually makes some tarballs for you
Jeff Hammel <jhammel@mozilla.com>
parents: 4
diff changeset
34
4
95b9f262d795 check for PYTHONHOME before deleting it
Jeff Hammel <jhammel@mozilla.com>
parents: 3
diff changeset
35 if 'PYTHONHOME' in os.environ:
95b9f262d795 check for PYTHONHOME before deleting it
Jeff Hammel <jhammel@mozilla.com>
parents: 3
diff changeset
36 del os.environ['PYTHONHOME'] # just make sure this is killed
3
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
37
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
38 # parse options
0
af10f7e072ed initial import of stampit
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
39 usage = '%prog [options] <package> <platform>'
2
164af2a4d291 better description formatting
Jeff Hammel <jhammel@mozilla.com>
parents: 1
diff changeset
40 parser = OptionParser(usage, description=globals()['__doc__'],
164af2a4d291 better description formatting
Jeff Hammel <jhammel@mozilla.com>
parents: 1
diff changeset
41 formatter=UnformattedDescription())
3
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
42 parser.add_option('-b', '--name',
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
43 help='name of the bundle')
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
44 parser.add_option('-d', '--directory',
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
45 help='directory to use as the virtualenv')
0
af10f7e072ed initial import of stampit
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
46 parser.add_option('--version',
af10f7e072ed initial import of stampit
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
47 help='version of the package to be installed (defaults to the current on the cheeseshop)')
3
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
48 parser.add_option('--virtualenv',
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
49 help='path to virtualenv to use')
0
af10f7e072ed initial import of stampit
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
50 options, args = parser.parse_args(args)
1
820beace15f2 get description from module docstring
Jeff Hammel <jhammel@mozilla.com>
parents: 0
diff changeset
51 if not args:
820beace15f2 get description from module docstring
Jeff Hammel <jhammel@mozilla.com>
parents: 0
diff changeset
52 parser.print_help()
820beace15f2 get description from module docstring
Jeff Hammel <jhammel@mozilla.com>
parents: 0
diff changeset
53 sys.exit(0)
3
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
54 if not options.name:
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
55 options.name = '+'.join(args)
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
56
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
57 # locate virtualenv
5
3f9fac577d75 this now actually makes some tarballs for you
Jeff Hammel <jhammel@mozilla.com>
parents: 4
diff changeset
58 if options.virtualenv:
3f9fac577d75 this now actually makes some tarballs for you
Jeff Hammel <jhammel@mozilla.com>
parents: 4
diff changeset
59 if not os.path.exists(options.virtualenv):
3f9fac577d75 this now actually makes some tarballs for you
Jeff Hammel <jhammel@mozilla.com>
parents: 4
diff changeset
60 parser.error("'%s', specified by --virtualenv, does not exist")
3f9fac577d75 this now actually makes some tarballs for you
Jeff Hammel <jhammel@mozilla.com>
parents: 4
diff changeset
61 else:
3
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
62 options.virtualenv = which('virtualenv')
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
63 if options.virtualenv is None:
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
64 # TODO: download virtualenv for them
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
65 parser.error("virtualenv cannot be found; please install virtualenv or specify its location with --virtualenv")
1
820beace15f2 get description from module docstring
Jeff Hammel <jhammel@mozilla.com>
parents: 0
diff changeset
66
0
af10f7e072ed initial import of stampit
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
67 # create a virtualenv
3
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
68 if not options.directory:
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
69 options.directory = tempfile.mkdtemp(dir=os.getcwd())
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
70 call([options.virtualenv, '--no-site-packages', options.directory])
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
71
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
72 # install the packages
5
3f9fac577d75 this now actually makes some tarballs for you
Jeff Hammel <jhammel@mozilla.com>
parents: 4
diff changeset
73 pip = os.path.join(options.directory, 'bin', 'pip')
3f9fac577d75 this now actually makes some tarballs for you
Jeff Hammel <jhammel@mozilla.com>
parents: 4
diff changeset
74 command = [ pip, 'install', '--no-install' ]
3
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
75 command.extend(args)
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
76 call(command)
6ef0e769248d add initial workflow
Jeff Hammel <jhammel@mozilla.com>
parents: 2
diff changeset
77
5
3f9fac577d75 this now actually makes some tarballs for you
Jeff Hammel <jhammel@mozilla.com>
parents: 4
diff changeset
78 # make the tarballs
3f9fac577d75 this now actually makes some tarballs for you
Jeff Hammel <jhammel@mozilla.com>
parents: 4
diff changeset
79 distdir = os.path.join(options.directory, 'dist')
3f9fac577d75 this now actually makes some tarballs for you
Jeff Hammel <jhammel@mozilla.com>
parents: 4
diff changeset
80 builddir = os.path.join(options.directory, 'build') # virtualenv creates
3f9fac577d75 this now actually makes some tarballs for you
Jeff Hammel <jhammel@mozilla.com>
parents: 4
diff changeset
81 os.mkdir(distdir)
3f9fac577d75 this now actually makes some tarballs for you
Jeff Hammel <jhammel@mozilla.com>
parents: 4
diff changeset
82 python = os.path.join(options.directory, 'bin', 'python')
3f9fac577d75 this now actually makes some tarballs for you
Jeff Hammel <jhammel@mozilla.com>
parents: 4
diff changeset
83 for package in os.listdir(builddir):
3f9fac577d75 this now actually makes some tarballs for you
Jeff Hammel <jhammel@mozilla.com>
parents: 4
diff changeset
84 os.chdir(os.path.join(builddir, package))
3f9fac577d75 this now actually makes some tarballs for you
Jeff Hammel <jhammel@mozilla.com>
parents: 4
diff changeset
85 call([python, 'setup.py', 'sdist', '--dist-dir', distdir])
3f9fac577d75 this now actually makes some tarballs for you
Jeff Hammel <jhammel@mozilla.com>
parents: 4
diff changeset
86 print 'Tarballs are in %s:' % distdir
3f9fac577d75 this now actually makes some tarballs for you
Jeff Hammel <jhammel@mozilla.com>
parents: 4
diff changeset
87 print '\n'.join(os.listdir(distdir))
0
af10f7e072ed initial import of stampit
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
88
af10f7e072ed initial import of stampit
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
89 if __name__ == '__main__':
af10f7e072ed initial import of stampit
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
90 main()