Mercurial > hg > autobot
annotate autobot/template.py @ 59:e66165f2f31b
complete automagic imports
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Mon, 10 Jan 2011 22:40:18 -0800 |
parents | ddcc1f5491aa |
children | 2a5fa6876e48 |
rev | line source |
---|---|
1 | 1 #!/usr/bin/env python |
2 | |
3 """ | |
3 | 4 templates for the A*Team's buildbot |
1 | 5 """ |
6 | |
12
848569b7f91a
use subdirectories for the master and slave
Jeff Hammel <jhammel@mozilla.com>
parents:
11
diff
changeset
|
7 import os |
1 | 8 import sys |
6
4ba6ba323871
stub out invocation of the template; this should eventually move to its own class, as we will want to subclass MakeItSoCLI, /me thinks
Jeff Hammel <jhammel@mozilla.com>
parents:
5
diff
changeset
|
9 from makeitso.cli import MakeItSoCLI |
23
a32a7055f3e6
combine variables for buildbot master+slave
Jeff Hammel <jhammel@mozilla.com>
parents:
22
diff
changeset
|
10 from makeitso.template import assemble |
4
eb289a46f4d3
make buildbot master template look close to what it should
Jeff Hammel <jhammel@mozilla.com>
parents:
3
diff
changeset
|
11 from makeitso.template import MakeItSoTemplate |
eb289a46f4d3
make buildbot master template look close to what it should
Jeff Hammel <jhammel@mozilla.com>
parents:
3
diff
changeset
|
12 from makeitso.template import Variable |
59
e66165f2f31b
complete automagic imports
Jeff Hammel <jhammel@mozilla.com>
parents:
46
diff
changeset
|
13 from projects import descriptions |
16
9ad3a9e220bc
get factory from command line
Jeff Hammel <jhammel@mozilla.com>
parents:
13
diff
changeset
|
14 from projects import factories |
41
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
15 from StringIO import StringIO |
1 | 16 |
17
baee795ad6df
stub out actually calling buildbot
Jeff Hammel <jhammel@mozilla.com>
parents:
16
diff
changeset
|
17 try: |
baee795ad6df
stub out actually calling buildbot
Jeff Hammel <jhammel@mozilla.com>
parents:
16
diff
changeset
|
18 from subprocess import check_call as call |
baee795ad6df
stub out actually calling buildbot
Jeff Hammel <jhammel@mozilla.com>
parents:
16
diff
changeset
|
19 except ImportError: |
baee795ad6df
stub out actually calling buildbot
Jeff Hammel <jhammel@mozilla.com>
parents:
16
diff
changeset
|
20 from subprocess import call |
baee795ad6df
stub out actually calling buildbot
Jeff Hammel <jhammel@mozilla.com>
parents:
16
diff
changeset
|
21 |
42
6981dcad3b2c
--list-factories now works
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
22 def factory_descriptions(): |
6981dcad3b2c
--list-factories now works
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
23 """print factory descriptions""" |
6981dcad3b2c
--list-factories now works
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
24 |
6981dcad3b2c
--list-factories now works
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
25 buffer = StringIO() |
6981dcad3b2c
--list-factories now works
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
26 print >> buffer, 'Factories:\n' |
6981dcad3b2c
--list-factories now works
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
27 for key in sorted(factories.keys()): |
6981dcad3b2c
--list-factories now works
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
28 print >> buffer, '%s:' % key |
59
e66165f2f31b
complete automagic imports
Jeff Hammel <jhammel@mozilla.com>
parents:
46
diff
changeset
|
29 print >> buffer, descriptions[key] |
42
6981dcad3b2c
--list-factories now works
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
30 print >> buffer |
6981dcad3b2c
--list-factories now works
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
31 return buffer.getvalue() |
6981dcad3b2c
--list-factories now works
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
32 |
6981dcad3b2c
--list-factories now works
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
33 |
1 | 34 class AutobotMasterTemplate(MakeItSoTemplate): |
35 name = 'autobot-master' | |
4
eb289a46f4d3
make buildbot master template look close to what it should
Jeff Hammel <jhammel@mozilla.com>
parents:
3
diff
changeset
|
36 description = 'template for the autotools buildbot master' |
12
848569b7f91a
use subdirectories for the master and slave
Jeff Hammel <jhammel@mozilla.com>
parents:
11
diff
changeset
|
37 templates = [os.path.join('template', 'master')] |
4
eb289a46f4d3
make buildbot master template look close to what it should
Jeff Hammel <jhammel@mozilla.com>
parents:
3
diff
changeset
|
38 vars = [Variable('slave', 'buildslave name', 'slave'), |
5
b7c521f53bda
document what the passwd variable is for
Jeff Hammel <jhammel@mozilla.com>
parents:
4
diff
changeset
|
39 Variable('passwd', 'buildslave password', default='passwd'), |
20
30ec24255ce9
stub out having a slave template too
Jeff Hammel <jhammel@mozilla.com>
parents:
18
diff
changeset
|
40 Variable('slaveport', 'port to talk to slaves on', default=9010, cast=int), |
30ec24255ce9
stub out having a slave template too
Jeff Hammel <jhammel@mozilla.com>
parents:
18
diff
changeset
|
41 Variable('htmlport', 'port for waterfall display', default=8010, cast=int)] |
4
eb289a46f4d3
make buildbot master template look close to what it should
Jeff Hammel <jhammel@mozilla.com>
parents:
3
diff
changeset
|
42 |
9
c06441767a2a
now interpolates correctly; just doesnt do much
Jeff Hammel <jhammel@mozilla.com>
parents:
8
diff
changeset
|
43 def pre(self, variables): |
16
9ad3a9e220bc
get factory from command line
Jeff Hammel <jhammel@mozilla.com>
parents:
13
diff
changeset
|
44 factory = variables.get('factory') |
13 | 45 if factory: |
46 assert factory in factories, 'Factory must be one of: ' % ', '.join(factories.keys()) | |
47 elif self.interactive: | |
42
6981dcad3b2c
--list-factories now works
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
48 print factory_descriptions() |
16
9ad3a9e220bc
get factory from command line
Jeff Hammel <jhammel@mozilla.com>
parents:
13
diff
changeset
|
49 sys.stdout.write('Enter factory: ') |
13 | 50 factory = raw_input() |
51 assert factory in factories, 'Factory must be one of: ' % ', '.join(factories.keys()) | |
16
9ad3a9e220bc
get factory from command line
Jeff Hammel <jhammel@mozilla.com>
parents:
13
diff
changeset
|
52 variables['factory'] = factory |
13 | 53 else: |
54 raise AssertionError("No factory provided") | |
1 | 55 |
25
785b075be979
post method should work now [untested]
Jeff Hammel <jhammel@mozilla.com>
parents:
24
diff
changeset
|
56 def create(self, output, variables): |
785b075be979
post method should work now [untested]
Jeff Hammel <jhammel@mozilla.com>
parents:
24
diff
changeset
|
57 command = ['buildbot', 'create-master', output] |
785b075be979
post method should work now [untested]
Jeff Hammel <jhammel@mozilla.com>
parents:
24
diff
changeset
|
58 print ' '.join(command) |
785b075be979
post method should work now [untested]
Jeff Hammel <jhammel@mozilla.com>
parents:
24
diff
changeset
|
59 call(command) |
785b075be979
post method should work now [untested]
Jeff Hammel <jhammel@mozilla.com>
parents:
24
diff
changeset
|
60 |
18
016ffd7bfd99
can now actually make a (admittedly non-working) buildmaster
Jeff Hammel <jhammel@mozilla.com>
parents:
17
diff
changeset
|
61 def post(self, variables): |
17
baee795ad6df
stub out actually calling buildbot
Jeff Hammel <jhammel@mozilla.com>
parents:
16
diff
changeset
|
62 """ |
baee795ad6df
stub out actually calling buildbot
Jeff Hammel <jhammel@mozilla.com>
parents:
16
diff
changeset
|
63 called after the template is applied |
baee795ad6df
stub out actually calling buildbot
Jeff Hammel <jhammel@mozilla.com>
parents:
16
diff
changeset
|
64 """ |
26
fdddf883c19d
first successful run of create-autobot script
Jeff Hammel <jhammel@mozilla.com>
parents:
25
diff
changeset
|
65 self.create(self.output, variables) |
17
baee795ad6df
stub out actually calling buildbot
Jeff Hammel <jhammel@mozilla.com>
parents:
16
diff
changeset
|
66 |
1 | 67 class AutobotSlaveTemplate(MakeItSoTemplate): |
68 name = 'autobot-slave' | |
4
eb289a46f4d3
make buildbot master template look close to what it should
Jeff Hammel <jhammel@mozilla.com>
parents:
3
diff
changeset
|
69 description = 'template for the autotools buildbot slave' |
12
848569b7f91a
use subdirectories for the master and slave
Jeff Hammel <jhammel@mozilla.com>
parents:
11
diff
changeset
|
70 templates = [os.path.join('template', 'slave')] |
20
30ec24255ce9
stub out having a slave template too
Jeff Hammel <jhammel@mozilla.com>
parents:
18
diff
changeset
|
71 vars = [Variable('master', 'host of the master', default='localhost'), |
30ec24255ce9
stub out having a slave template too
Jeff Hammel <jhammel@mozilla.com>
parents:
18
diff
changeset
|
72 Variable('slave', 'buildslave name', 'slave'), |
30ec24255ce9
stub out having a slave template too
Jeff Hammel <jhammel@mozilla.com>
parents:
18
diff
changeset
|
73 Variable('passwd', 'buildslave password', default='passwd'), |
30ec24255ce9
stub out having a slave template too
Jeff Hammel <jhammel@mozilla.com>
parents:
18
diff
changeset
|
74 Variable('slaveport', 'port to talk to slaves on', default=9010)] |
1 | 75 |
25
785b075be979
post method should work now [untested]
Jeff Hammel <jhammel@mozilla.com>
parents:
24
diff
changeset
|
76 def create(self, output, variables): |
785b075be979
post method should work now [untested]
Jeff Hammel <jhammel@mozilla.com>
parents:
24
diff
changeset
|
77 command = ['buildslave', 'create-slave', output, |
785b075be979
post method should work now [untested]
Jeff Hammel <jhammel@mozilla.com>
parents:
24
diff
changeset
|
78 '%s:%d' % (variables['master'], variables['slaveport']), |
20
30ec24255ce9
stub out having a slave template too
Jeff Hammel <jhammel@mozilla.com>
parents:
18
diff
changeset
|
79 variables['slave'], |
30ec24255ce9
stub out having a slave template too
Jeff Hammel <jhammel@mozilla.com>
parents:
18
diff
changeset
|
80 variables['passwd'] ] |
21 | 81 print ' '.join(command) |
82 call(command) | |
25
785b075be979
post method should work now [untested]
Jeff Hammel <jhammel@mozilla.com>
parents:
24
diff
changeset
|
83 |
785b075be979
post method should work now [untested]
Jeff Hammel <jhammel@mozilla.com>
parents:
24
diff
changeset
|
84 |
785b075be979
post method should work now [untested]
Jeff Hammel <jhammel@mozilla.com>
parents:
24
diff
changeset
|
85 def post(self, variables): |
785b075be979
post method should work now [untested]
Jeff Hammel <jhammel@mozilla.com>
parents:
24
diff
changeset
|
86 self.create(self.output, variables) |
785b075be979
post method should work now [untested]
Jeff Hammel <jhammel@mozilla.com>
parents:
24
diff
changeset
|
87 |
20
30ec24255ce9
stub out having a slave template too
Jeff Hammel <jhammel@mozilla.com>
parents:
18
diff
changeset
|
88 |
23
a32a7055f3e6
combine variables for buildbot master+slave
Jeff Hammel <jhammel@mozilla.com>
parents:
22
diff
changeset
|
89 class AutobotTemplate(AutobotMasterTemplate, AutobotSlaveTemplate): |
22
a7e2f5b2a7e9
stub out a combined template for the master + slave
Jeff Hammel <jhammel@mozilla.com>
parents:
21
diff
changeset
|
90 name = 'autobot' |
a7e2f5b2a7e9
stub out a combined template for the master + slave
Jeff Hammel <jhammel@mozilla.com>
parents:
21
diff
changeset
|
91 description = 'template for the autotools buildbot master+slave' |
a7e2f5b2a7e9
stub out a combined template for the master + slave
Jeff Hammel <jhammel@mozilla.com>
parents:
21
diff
changeset
|
92 templates = ['template'] |
23
a32a7055f3e6
combine variables for buildbot master+slave
Jeff Hammel <jhammel@mozilla.com>
parents:
22
diff
changeset
|
93 vars = assemble(AutobotMasterTemplate, AutobotSlaveTemplate) |
37 | 94 vars.append(Variable('debug', default=True, cast='eval')) |
22
a7e2f5b2a7e9
stub out a combined template for the master + slave
Jeff Hammel <jhammel@mozilla.com>
parents:
21
diff
changeset
|
95 |
24 | 96 def post(self, variables): |
26
fdddf883c19d
first successful run of create-autobot script
Jeff Hammel <jhammel@mozilla.com>
parents:
25
diff
changeset
|
97 AutobotMasterTemplate.create(self, os.path.join(self.output, 'master'), variables) |
fdddf883c19d
first successful run of create-autobot script
Jeff Hammel <jhammel@mozilla.com>
parents:
25
diff
changeset
|
98 AutobotSlaveTemplate.create(self, os.path.join(self.output, 'slave'), variables) |
24 | 99 |
44
481f0bb18787
stub out installing the packages, for hg anyway
Jeff Hammel <jhammel@mozilla.com>
parents:
43
diff
changeset
|
100 # CLI front end class |
20
30ec24255ce9
stub out having a slave template too
Jeff Hammel <jhammel@mozilla.com>
parents:
18
diff
changeset
|
101 |
41
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
102 class AutobotMasterCLI(MakeItSoCLI): |
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
103 """ |
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
104 command line handler for the master |
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
105 """ |
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
106 def parser(self): |
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
107 parser = MakeItSoCLI.parser(self) |
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
108 parser.add_option('-f', '--factory', dest='factory', |
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
109 help="factory to use") |
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
110 parser.add_option('--list-factories', dest='_list_factories', |
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
111 default=False, action='store_true', |
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
112 help="list available factories") |
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
113 return parser |
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
114 |
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
115 def parse(self, parser=None, options=None, args=None): |
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
116 |
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
117 # parse the command line |
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
118 if not parser or not options or not args: |
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
119 parser = self.parser() |
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
120 options, args = parser.parse_args() |
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
121 |
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
122 # list the factories |
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
123 if options._list_factories: |
42
6981dcad3b2c
--list-factories now works
Jeff Hammel <jhammel@mozilla.com>
parents:
41
diff
changeset
|
124 print factory_descriptions() |
41
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
125 parser.exit() |
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
126 |
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
127 # call the parent |
46 | 128 return MakeItSoCLI.parse(self, parser, options, args) |
41
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
129 |
44
481f0bb18787
stub out installing the packages, for hg anyway
Jeff Hammel <jhammel@mozilla.com>
parents:
43
diff
changeset
|
130 |
481f0bb18787
stub out installing the packages, for hg anyway
Jeff Hammel <jhammel@mozilla.com>
parents:
43
diff
changeset
|
131 ### console_script front-ends |
481f0bb18787
stub out installing the packages, for hg anyway
Jeff Hammel <jhammel@mozilla.com>
parents:
43
diff
changeset
|
132 |
20
30ec24255ce9
stub out having a slave template too
Jeff Hammel <jhammel@mozilla.com>
parents:
18
diff
changeset
|
133 def create_master(args=sys.argv[1:]): |
41
42ef457708de
stub out adding factories to our specialty CLI class
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
134 cli = AutobotMasterCLI(AutobotMasterTemplate) |
6
4ba6ba323871
stub out invocation of the template; this should eventually move to its own class, as we will want to subclass MakeItSoCLI, /me thinks
Jeff Hammel <jhammel@mozilla.com>
parents:
5
diff
changeset
|
135 template = cli.parse() |
8 | 136 template.substitute() |
1 | 137 |
20
30ec24255ce9
stub out having a slave template too
Jeff Hammel <jhammel@mozilla.com>
parents:
18
diff
changeset
|
138 def create_slave(args=sys.argv[1:]): |
30ec24255ce9
stub out having a slave template too
Jeff Hammel <jhammel@mozilla.com>
parents:
18
diff
changeset
|
139 cli = MakeItSoCLI(AutobotSlaveTemplate) |
30ec24255ce9
stub out having a slave template too
Jeff Hammel <jhammel@mozilla.com>
parents:
18
diff
changeset
|
140 template = cli.parse() |
30ec24255ce9
stub out having a slave template too
Jeff Hammel <jhammel@mozilla.com>
parents:
18
diff
changeset
|
141 template.substitute() |
30ec24255ce9
stub out having a slave template too
Jeff Hammel <jhammel@mozilla.com>
parents:
18
diff
changeset
|
142 |
30ec24255ce9
stub out having a slave template too
Jeff Hammel <jhammel@mozilla.com>
parents:
18
diff
changeset
|
143 def create_autobot(args=sys.argv[1:]): |
43
19d555001292
use our CLI class for the create-autobot too
Jeff Hammel <jhammel@mozilla.com>
parents:
42
diff
changeset
|
144 cli = AutobotMasterCLI(AutobotTemplate) |
22
a7e2f5b2a7e9
stub out a combined template for the master + slave
Jeff Hammel <jhammel@mozilla.com>
parents:
21
diff
changeset
|
145 template = cli.parse() |
a7e2f5b2a7e9
stub out a combined template for the master + slave
Jeff Hammel <jhammel@mozilla.com>
parents:
21
diff
changeset
|
146 template.substitute() |
20
30ec24255ce9
stub out having a slave template too
Jeff Hammel <jhammel@mozilla.com>
parents:
18
diff
changeset
|
147 |
1 | 148 if __name__ == '__main__': |
20
30ec24255ce9
stub out having a slave template too
Jeff Hammel <jhammel@mozilla.com>
parents:
18
diff
changeset
|
149 create_master() |