Make distribution-check job an ODL-releng templated job
[releng/builder.git] / scripts / jjb-init-project.py
index f5608d198109bf6178391377fd75d50b22eb6952..64b58210731b60bd8dd0124a8f909c6bb78b4a55 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
@@ -24,13 +24,22 @@ 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)
+    jenkins_settings = "%s-%s-settings" % (project.meta_project,
+                                           project.project)
+else:
+    project_dir = os.path.join("jjb", project.project)
+    jenkins_settings = "%s-settings" % project.project
+
 project_file = os.path.join(project_dir, "%s.yaml" % project)
 dependent_jobs = ""
 disabled = "true"   # Always disabled unless project has dependencies
 email_prefix = "[%s]" % project
 
+
 if not args.conf:
     jjblib.create_template_config(project_dir, args)
     project_conf = os.path.join(project_dir, "%s.cfg" % args.project)
@@ -45,36 +54,48 @@ 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,distribution,integration,sonar"
+    templates = (
+        "verify,merge,periodic,distribution,distribution-check,integration,"
+        "sonar")
 templates += ",clm"  # ensure we always create a clm job for all projects
-
-###################
-# Handle Branches #
-###################
-branches = OrderedDict()
-if cfg.get('BRANCHES'):
-    for branch in cfg.get('BRANCHES'):
-        for b in branch:
-            branches.update({b: branch[b]})
+templates += ",validate-autorelease"  # Autorelease validate template
+
+##################
+# 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.update({"master": {"jdks": "openjdk7"}})
-    branches.update({"stable/helium": {"jdks": "openjdk7"}})
+    streams = {"boron": jjblib.STREAM_DEFAULTS["boron"]}
 
-sonar_branch = list(branches.items())[0][0]
+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, options in branches.items():
-    streams = streams + ("        - %s:\n"
-                         "            branch: '%s'\n" %
-                         (branch.replace('/', '-'),
-                          branch))
-    streams = streams + "            jdk: %s\n" % options["jdks"].split(",")[0].strip()  # noqa
-    streams = streams + "            jdks:\n"
+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(","):
-        streams = streams + "                - %s\n" % jdk.strip()
+        str_streams += "                - %s\n" % jdk.strip()
+
+    # Disable autorelease validate job unless project is participating
+    # in autorelease, JJB does not allow flipping a boolean so we have to
+    # flip it here via not operator since the JJB configuration for disabling
+    # a Jenkins Job is "disabled: bool".
+    str_streams += "            disable_autorelease: %s\n" % (not options.get(
+        "autorelease", False))
+
+    # Disable the distribution-check job unless project enables it
+    str_streams += "            disable_distribution_check: %s\n" % (
+        not options.get("distribution-check", True))
 
 ###############
 # Handle JDKS #
@@ -123,24 +144,27 @@ if cfg.get('DEPENDENCIES'):
         dependencies = "odlparent," + dependencies
     disabled = "false"
 else:
-    dependencies = "odlparent"  # All projects depend on odlparent
+    dependencies = None
+    if project.project != "odlparent":  # Odlparent does not depend on itself
+        dependencies = "odlparent"  # All other projects depend on odlparent
     disabled = "false"
 
-email_prefix = (email_prefix + " " +
+if dependencies:
+    email_prefix = (email_prefix + " " +
                 " ".join(['[%s]' % d for d in dependencies.split(",")]))  # noqa
-dependent_jobs = ",".join(
-    ['%s-merge-{stream}' % d for d in dependencies.split(",")])
+    dependent_jobs = ",".join(
+        ['%s-merge-{stream}' % d for d in dependencies.split(",")])
 
 ############################
 # Handle ARCHIVE_ARTIFACTS #
 ############################
-if cfg.get('ARCHIVE_ARTIFACTS'):
-    archive_artifacts = cfg.get('ARCHIVE_ARTIFACTS')
-    archive_artifacts = ("- archive-artifacts:\n"
-                         "            artifacts: '%s'" % archive_artifacts)
-else:
-    archive_artifacts = ""
 
+always_archive = "**/target/surefire-reports/*-output.txt"
+
+archive_artifacts = cfg.get('ARCHIVE_ARTIFACTS', '')
+archive_artifacts = ("- archive-artifacts:\n"
+                     "            artifacts: '%s, %s'" %
+                     (always_archive, archive_artifacts))
 
 ##############################
 # Create configuration start #
@@ -151,13 +175,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,
@@ -170,7 +194,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:
@@ -184,9 +208,11 @@ 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_SHORTNAME", project.project, line)
+                    line = re.sub("PROJECT_PATH", project.path, line)
+                    line = re.sub("JENKINS_SETTINGS", jenkins_settings, line)
                     line = re.sub("DISABLED", disabled, line)
-                    line = re.sub("STREAMS", streams, 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)