rewrote all-builds
authorthierry <thierry@41d37cc5-eb28-0410-a9bf-d37491348ade>
Wed, 25 Mar 2009 14:51:40 +0000 (14:51 +0000)
committerthierry <thierry@41d37cc5-eb28-0410-a9bf-d37491348ade>
Wed, 25 Mar 2009 14:51:40 +0000 (14:51 +0000)
scripts/all-builds.py [new file with mode: 0755]

diff --git a/scripts/all-builds.py b/scripts/all-builds.py
new file mode 100755 (executable)
index 0000000..3f501b5
--- /dev/null
@@ -0,0 +1,181 @@
+#!/usr/bin/python
+subversion_id = "$Id: module-tools.py 12136 2009-02-20 14:11:56Z thierry $"
+
+from optparse import OptionParser
+
+##############################
+MAIN="/root/bin/vbuild-nightly.sh"
+URL='http://svn.planet-lab.org/svn/'
+MAILTO="-m build@onelab.eu"
+
+CURRENT_TRUNK='4.3'
+DEFAULT_BRANCH='4.3'
+
+MAJOR_HASH = {
+    '4.2' : { 'latest':'rc27',
+              'fcdistros' : ['f8'],
+              'pldistros' : ['planetlab','onelab'],
+              'tags': '-t %(pldistro)s-tags-4.2.mk',
+              },
+    '4.3' : { 'latest': None,
+              'fcdistros' : ['c5','f10','f8'],
+              'pldistros' : ['planetlab','onelab'],
+#              'tags': '-t %(pldistro)s-tags.mk',
+              'tags': '',
+              },
+}
+    
+##############################
+def shortname (name):
+    if name == 'onelab':      return '1l'
+    if name == '1l':          return '1l'
+    if name == 'planetlab':   return 'pl'
+    if name == 'pl':          return 'pl'
+    if name == 'centos5':     return 'c5'
+    if name == 'c5':          return 'c5'
+    if name[0] == 'f':        return name
+    return 'xx'
+
+def longname (name):
+    if name == 'onelab':      return 'onelab'
+    if name == '1l':          return 'onelab'
+    if name == 'planetlab':   return 'planetlab'
+    if name == 'pl':          return 'planetlab'
+    if name == 'centos5':     return 'centos5'
+    if name == 'c5':          return 'centos5'
+    if name[0] == 'f':        return name
+    return 'xx'
+
+def latest_tag (branch):
+    try:
+        return MAJOR_HASH[branch]['latest']
+    except:
+        print 'WARNING: unknown branch',branch
+        return None
+    
+def default_fcdistros (branch):
+    try:
+        return MAJOR_HASH[branch]['fcdistros']
+    except:
+        print 'WARNING: unknown branch',branch
+        raise
+
+def default_pldistros (branch):
+    try:
+        return MAJOR_HASH[branch]['pldistros']
+    except:
+        print 'WARNING: unknown branch',branch
+        raise
+
+# return (branch,tag)
+def parse_branch (major):
+    try:
+        [branch,tag]=major.split('-')
+        ## latest tag: use -b 4.2- or -b 4.2-latest
+        if not tag or tag[0]=='l':
+            tag=latest_tag(branch)
+        return (branch,tag)
+    except:
+        try:
+            [branch]=major.split('-')
+            return (branch,None)
+        except:
+            print 'could not parse major',major
+            raise
+
+def build_build_option (branch,tag):
+    if tag:
+        return ' -s ' + URL + "/build/tags/%(branch)s-%(tag)s"%locals()
+    if branch == CURRENT_TRUNK:
+#        return ' -s ' + URL + "/build/trunk"%locals()
+        return ''
+    else:
+        return ' -s ' + URL + "/build/branches/%(branch)s"%locals()
+
+def build_tags_option (branch):
+    try:
+        return MAJOR_HASH[branch]['tags']%locals()
+    except:
+        return ' -s ' + URL + "/build/branches/%(branch)s"%locals()
+
+
+####################
+def optparse_list (option, opt, value, parser):
+    try:
+        setattr(parser.values,option.dest,getattr(parser.values,option.dest)+value.split())
+    except:
+        setattr(parser.values,option.dest,value.split())
+
+def main ():
+    usage="""Usage: %prog build-spec [ .. build-spec]
+  print out a list of nightly build commands to run
+Examples:
+%prog 4.3-rc01  -- to build 4.3-rc01
+%prog 4.3-l     -- or
+%prog 4.3-      -- to build latest known rc for 4.3
+%prog 4.3       -- to build off the corresponding branch (or trunk)
+"""
+    parser=OptionParser(usage=usage,version=subversion_id)    
+
+    parser.add_option("-f","--fcdistros",action="callback",callback=optparse_list, dest="fcdistros",
+                      default=[], nargs=1,type="string",
+                      help="""specify target fcdistros -- can be set multiple times, or use quotes""")
+    parser.add_option("-d","--distros",action="callback",callback=optparse_list, dest="pldistros",
+                      default=[], nargs=1,type="string",
+                      help="""specify target pldistros -- can be set multiple times, or use quotes""")
+    parser.add_option("-i","--bits",action="callback",callback=optparse_list, dest="bits",
+                      default=[], nargs=1,type="string",
+                      help="""specify target bits -- can be set multiple times, or use quotes""")
+
+    parser.add_option("-b","--base", action="store", dest="base", default="@DATE@",
+                      help="specify alternate base (default is @DATE@ on trunk)")
+    parser.add_option("-o","--overwrite",action="store_true",dest="overwrite",default=False,
+                      help="pass -o rather than -b (from 4.3)")
+
+    (options, args) = parser.parse_args()
+
+    if not options.bits: options.bits=["32","64"]
+    base_option = '-b'
+    if options.overwrite: base_option='-o'
+
+    if len(args) == 0:
+        parser.print_help()
+        sys.exit(1)        
+
+    for build in args:
+        (branch,tag) = parse_branch (build)
+        build_option=build_build_option(branch,tag)
+        tags_option = build_tags_option(branch)
+
+        print '#################### build',build,
+        if tag: print 'tag',tag
+        else: print 'trunk (or branch)'
+
+        if options.fcdistros:
+            fcdistros=options.fcdistros
+        else:
+            fcdistros=default_fcdistros(branch)
+
+        if options.pldistros:
+            pldistros=options.pldistros
+        else:
+            pldistros=default_pldistros(branch)
+
+        base=options.base
+
+        for pldistro in pldistros:
+            for fcdistro in fcdistros:
+                for bit in options.bits:
+                    p="linux"+bit
+                    f=shortname(fcdistro)
+                    d=shortname(pldistro)
+
+                    # trunk-like builds
+                    if not tag:
+                        buildname="%(base)s--%(d)s-%(f)s-%(bit)s"%locals()
+                    else:
+                        buildname="%(pldistro)s--%(branch)s-%(tag)s-%(f)s-%(bit)s"%locals()
+
+                    print MAIN,MAILTO,build_option,tags_option,'-d',pldistro,'-f',fcdistro,'-p',p,base_option,buildname
+                    
+main()