Merge "Adding upstream dependencies into GBP clustering"
[releng/builder.git] / scripts / jjb-init-project.py
index 9ca164766e6ab3069ea1a683f76832a4f0d67383..c2ec670407bb29ba7984b09783f1cd5932c9ca48 100644 (file)
@@ -2,7 +2,7 @@
 
 # @License EPL-1.0 <http://spdx.org/licenses/EPL-1.0>
 ##############################################################################
-# Copyright (c) 2014 The Linux Foundation and others.
+# Copyright (c) 2014, 2015 The Linux Foundation and others.
 #
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
@@ -13,6 +13,7 @@
 #   Thanh Ha (The Linux Foundation) - Initial implementation
 ##############################################################################
 
+from collections import OrderedDict
 import os
 import re
 
@@ -23,8 +24,13 @@ import jjblib
 
 args = jjblib.parse_jjb_args()
 
-project = args.project
-project_dir = os.path.join("jjb", project)
+
+project = jjblib.Project(args.project)
+if project.meta_project is not None:
+    project_dir = os.path.join("jjb", project.meta_project, project.project)
+else:
+    project_dir = os.path.join("jjb", project.project)
+
 project_file = os.path.join(project_dir, "%s.yaml" % project)
 dependent_jobs = ""
 disabled = "true"   # Always disabled unless project has dependencies
@@ -44,28 +50,34 @@ if os.path.isfile(project_conf):
 ####################
 # Handle Templates #
 ####################
-if cfg.get('JOB_TEMPLATES'):
-    templates = cfg.get('JOB_TEMPLATES')
+if cfg.get("JOB_TEMPLATES"):
+    templates = cfg.get("JOB_TEMPLATES")
 else:
-    templates = "verify,merge,daily,integration,sonar"
+    templates = "verify,merge,daily,distribution,integration,sonar"
 templates += ",clm"  # ensure we always create a clm job for all projects
 
-###################
-# Handle Branches #
-###################
-if cfg.get('BRANCHES'):
-    branches = cfg.get('BRANCHES')
-    sonar_branch = branches.split(",")[0]
+##################
+# Handle Streams #
+##################
+streams = OrderedDict()
+if cfg.get("STREAMS"):  # this is a list of single-key dicts
+    for stream_dict in cfg.get("STREAMS"):
+        streams.update(stream_dict)
 else:
-    branches = "master,stable/helium"
-    sonar_branch = 'master'
+    streams = {"beryllium": jjblib.STREAM_DEFAULTS["beryllium"]}
+
+first_stream = streams.iterkeys().next()  # Keep master branch at top.
+sonar_branch = streams[first_stream]["branch"]
 # Create YAML to list branches to create jobs for
-streams = "stream:\n"
-for branch in branches.split(","):
-    streams = streams + ("        - %s:\n"
-                         "            branch: '%s'\n" %
-                         (branch.replace('/', '-'),
-                          branch))
+str_streams = "stream:\n"
+for stream, options in streams.items():
+    str_streams += ("        - %s:\n"
+                    "            branch: '%s'\n" %
+                    (stream, options["branch"]))
+    str_streams += "            jdk: %s\n" % options["jdks"].split(',')[0].strip()  # noqa
+    str_streams += "            jdks:\n"
+    for jdk in options["jdks"].split(","):
+        str_streams += "                - %s\n" % jdk.strip()
 
 ###############
 # Handle JDKS #
@@ -142,13 +154,13 @@ if not os.path.exists(project_dir):
     os.makedirs(project_dir)
 
 print("project: %s\n"
-      "branches: %s\n"
+      "streams: %s\n"
       "goals: %s\n"
       "options: %s\n"
       "dependencies: %s\n"
       "artifacts: %s" %
       (project,
-       branches,
+       str_streams,
        mvn_goals,
        mvn_opts,
        dependencies,
@@ -161,7 +173,7 @@ job_templates_yaml = ""
 for t in use_templates:
     if t == "project":  # This is not a job type but is used for templating
         pass
-    elif t == "sonar" or t == "clm":
+    elif t == "sonar":
         job_templates_yaml = job_templates_yaml + \
             "        - '%s-%s'\n" % (project, t)
     else:
@@ -175,10 +187,9 @@ with open(project_file, "w") as outfile:
             for line in infile:
                 if not re.match("\s*#", line):
                     line = re.sub("JOB_TEMPLATES", job_templates_yaml, line)
-                    line = re.sub("PROJECT", project, line)
+                    line = re.sub("PROJECT", project.project, line)
                     line = re.sub("DISABLED", disabled, line)
-                    line = re.sub("STREAMS", streams, line)
-                    line = re.sub("JDKS", use_jdks, line)
+                    line = re.sub("STREAMS", str_streams, line)
                     line = re.sub("POM", pom, line)
                     line = re.sub("MAVEN_GOALS", mvn_goals, line)
                     line = re.sub("MAVEN_OPTS", mvn_opts, line)
@@ -186,5 +197,8 @@ with open(project_file, "w") as outfile:
                     line = re.sub("EMAIL_PREFIX", email_prefix, line)
                     line = re.sub("SONAR_BRANCH", sonar_branch, line)
                     line = re.sub("ARCHIVE_ARTIFACTS", archive_artifacts, line)
+                    # The previous command may have created superfluous lines.
+                    # If a line has no non-whitespace, it has to be '\n' only.
+                    line = re.sub(r'^\s+\n', "", line)
                 outfile.write(line)
         outfile.write("\n")