__init__.py (2676B)
1 # This Source Code Form is subject to the terms of the Mozilla Public 2 # License, v. 2.0. If a copy of the MPL was not distributed with this 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. 4 5 import argparse 6 import os 7 import re 8 import shlex 9 10 from taskgraph.decision import PER_PROJECT_PARAMETERS 11 from taskgraph.parameters import extend_parameters_schema 12 from taskgraph.util.vcs import get_repository 13 from voluptuous import Any, Optional, Required 14 15 16 TRY_SYNTAX_RE = re.compile(r"\btry:\s*(.*)\s*$", re.M) 17 18 def parse_try_syntax(message): 19 parser = argparse.ArgumentParser() 20 parser.add_argument("--nspr-patch", action="store_true") 21 parser.add_argument("-b", "--build", default="do") 22 parser.add_argument("-p", "--platform", default="all") 23 parser.add_argument("-u", "--unittests", default="none") 24 parser.add_argument("-t", "--tools", default="none") 25 parser.add_argument("-e", "--extra-builds") 26 match = TRY_SYNTAX_RE.search(message) 27 if not match: 28 return 29 args = shlex.split(match.group(1)) 30 opts = parser.parse_args(args) 31 builds = [t for t in opts.build if t in ["d", "o"]] 32 # If the given value is nonsense default to debug and opt builds. 33 if not builds: 34 builds = ["d", "o"] 35 36 platforms = opts.platform.split(",") 37 38 unittests = opts.unittests.split(",") 39 if "gtests" in unittests: 40 unittests.append("gtest") 41 42 tools = opts.tools.split(",") 43 return { 44 "nspr_patch": opts.nspr_patch, 45 "builds": builds, 46 "platforms": platforms, 47 "unittests": unittests, 48 "tools": tools, 49 "extra": opts.extra_builds == "all", 50 } 51 52 53 def decision_parameters(graph_config, parameters): 54 repo_path = os.getcwd() 55 repo = get_repository(repo_path) 56 try: 57 commit_message = repo.get_commit_message() 58 except UnicodeDecodeError: 59 commit_message = "" 60 parameters["try_options"] = {} 61 if parameters["project"] != "nss-try": 62 return 63 args = parse_try_syntax(commit_message) 64 if args: 65 parameters["try_options"] = args 66 67 68 def default_parameters(repo_root): 69 return { 70 "try_options": {}, 71 } 72 73 74 def register(graph_config): 75 schema = { 76 Optional("try_options"): { 77 Optional("nspr_patch"): bool, 78 Optional("builds"): [Any("d", "o")], 79 Optional("platforms"): [str], 80 Optional("unittests"): [str], 81 Optional("tools"): [str], 82 Optional("extra"): bool, 83 }, 84 } 85 extend_parameters_schema(schema, default_parameters) 86 87 from . import target_tasks 88 89 PER_PROJECT_PARAMETERS["nss-try"] = {"target_tasks_method": "nss_try_tasks"}