X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=scripts%2Fjjb-init-project.py;h=417049d3b4b505ffc2d7fc6dd50549ba2c1ab11b;hb=2e6d0e121cb773241abbeea3f90b71339fcd3a41;hp=f5608d198109bf6178391377fd75d50b22eb6952;hpb=f6c7a326378d8bd2dcdaf31c5dcdf88b0ecd6db4;p=releng%2Fbuilder.git diff --git a/scripts/jjb-init-project.py b/scripts/jjb-init-project.py index f5608d198..417049d3b 100644 --- a/scripts/jjb-init-project.py +++ b/scripts/jjb-init-project.py @@ -2,7 +2,7 @@ # @License 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,42 @@ 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,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)) ############### # Handle JDKS # @@ -123,24 +138,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 +169,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 +188,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 +202,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)