def schedule_tests(branch, rev): from bugbug_http.app import JobInfo from bugbug_http import REPO_DIR job = JobInfo(schedule_tests, branch, rev) LOGGER.debug(f"Processing {job}") # Load the full stack of patches leading to that revision try: stack = get_hgmo_stack(branch, rev) except requests.exceptions.RequestException: LOGGER.warning(f"Push not found for {branch} @ {rev}!") return "NOK" # Apply the stack on the local repository # Autoland should always rebase on top of parents, never on tip default_base = "tip" if branch != "integration/autoland" else None try: apply_stack(REPO_DIR, stack, branch, default_base) except Exception as e: LOGGER.warning(f"Failed to apply stack {branch} @ {rev}: {e}") return "NOK" first_rev = stack[0]["node"] if first_rev != rev: revset = f"{first_rev}::{rev}" else: revset = rev # TODO Return real data based on 'revset' def get_data(revset): return { "tasks": ["test-macosx1014-64/debug-gtest-1proc"], "groups": [ "caps/test/unit/xpcshell.ini", "dom/indexedDB/test/mochitest.ini", ], } data = get_data(revset) encoded_data = json.dumps(data) setkey(job.result_key, encoded_data) return "OK"
def schedule_tests(branch, rev): from bugbug_http.app import JobInfo from bugbug_http import REPO_DIR job = JobInfo(schedule_tests, branch, rev) LOGGER.debug(f"Processing {job}") # Load the full stack of patches leading to that revision try: stack = get_hgmo_stack(branch, rev) except requests.exceptions.RequestException: LOGGER.warning(f"Push not found for {branch} @ {rev}!") return "NOK" # Apply the stack on the local repository try: revs = repository.apply_stack(REPO_DIR, stack, branch) except Exception as e: LOGGER.warning(f"Failed to apply stack {branch} @ {rev}: {e}") return "NOK" test_selection_threshold = float( os.environ.get("TEST_SELECTION_CONFIDENCE_THRESHOLD", 0.3)) # Analyze patches. commits = repository.download_commits(REPO_DIR, revs=revs, save=False, use_single_process=True) tasks = MODEL_CACHE.get("testlabelselect").select_tests( commits, test_selection_threshold) reduced = MODEL_CACHE.get("testlabelselect").reduce( set(t for t, c in tasks.items() if c >= 0.7), 1.0) data = { "tasks": tasks, "groups": MODEL_CACHE.get("testgroupselect").select_tests( commits, test_selection_threshold), "reduced_tasks": {t: c for t, c in tasks.items() if t in reduced}, } setkey(job.result_key, orjson.dumps(data)) return "OK"
def schedule_tests(branch: str, rev: str) -> str: from bugbug_http.app import JobInfo from bugbug_http import REPO_DIR job = JobInfo(schedule_tests, branch, rev) LOGGER.debug(f"Processing {job}") # Load the full stack of patches leading to that revision try: stack = get_hgmo_stack(branch, rev) except requests.exceptions.RequestException: LOGGER.warning(f"Push not found for {branch} @ {rev}!") return "NOK" # Apply the stack on the local repository try: revs = repository.apply_stack(REPO_DIR, stack, branch, rev) except Exception as e: LOGGER.warning(f"Failed to apply stack {branch} @ {rev}: {e}") return "NOK" test_selection_threshold = float( os.environ.get("TEST_SELECTION_CONFIDENCE_THRESHOLD", 0.5)) # Analyze patches. commits = repository.download_commits(REPO_DIR, revs=revs, save=False, use_single_process=True, include_no_bug=True) if len(commits) > 0: testlabelselect_model = MODEL_CACHE.get("testlabelselect") testgroupselect_model = MODEL_CACHE.get("testgroupselect") tasks = testlabelselect_model.select_tests(commits, test_selection_threshold) reduced = testlabelselect_model.reduce( set(t for t, c in tasks.items() if c >= 0.8), 1.0) reduced_higher = testlabelselect_model.reduce( set(t for t, c in tasks.items() if c >= 0.9), 1.0) groups = testgroupselect_model.select_tests(commits, test_selection_threshold) config_groups = testgroupselect_model.select_configs( groups.keys(), 1.0) else: tasks = {} reduced = {} groups = {} config_groups = {} data = { "tasks": tasks, "groups": groups, "config_groups": config_groups, "reduced_tasks": {t: c for t, c in tasks.items() if t in reduced}, "reduced_tasks_higher": {t: c for t, c in tasks.items() if t in reduced_higher}, "known_tasks": get_known_tasks(), } setkey(job.result_key, orjson.dumps(data)) return "OK"
def schedule_tests(branch, rev): from bugbug_http.app import JobInfo from bugbug_http import REPO_DIR job = JobInfo(schedule_tests, branch, rev) LOGGER.debug(f"Processing {job}") # Load the full stack of patches leading to that revision try: stack = get_hgmo_stack(branch, rev) except requests.exceptions.RequestException: LOGGER.warning(f"Push not found for {branch} @ {rev}!") return "NOK" # Apply the stack on the local repository try: revs = repository.apply_stack(REPO_DIR, stack, branch) except Exception as e: LOGGER.warning(f"Failed to apply stack {branch} @ {rev}: {e}") return "NOK" test_selection_threshold = float( os.environ.get("TEST_SELECTION_CONFIDENCE_THRESHOLD", 0.3)) # Analyze patches. commits = repository.download_commits(REPO_DIR, revs=revs, save=False, use_single_process=True) commit_data = commit_features.merge_commits(commits) def get_runnables(granularity): past_failures_data = test_scheduling.get_past_failures(granularity) push_num = past_failures_data["push_num"] all_runnables = past_failures_data["all_runnables"] commit_tests = [] for data in test_scheduling.generate_data(past_failures_data, commit_data, push_num, all_runnables, [], []): if granularity == "label" and not data["name"].startswith("test-"): continue commit_test = commit_data.copy() commit_test["test_job"] = data commit_tests.append(commit_test) probs = MODEL_CACHE.get(f"test{granularity}select").classify( commit_tests, probabilities=True) selected_indexes = np.argwhere( probs[:, 1] > test_selection_threshold)[:, 0] return { commit_tests[i]["test_job"]["name"]: math.floor(probs[i, 1] * 100) / 100 for i in selected_indexes } data = { "tasks": get_runnables("label"), "groups": get_runnables("group"), } setkey(job.result_key, orjson.dumps(data)) return "OK"