bot/code_review_bot/retrigger.py (33 lines of code) (raw):
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
import requests
from code_review_bot import taskcluster
from code_review_bot.config import GetAppUserAgent
TC_INDEX_URL = "https://firefox-ci-tc.services.mozilla.com/api/index/v1/tasks/project.relman.{}.code-review.phabricator"
def list_tasks(env):
url = TC_INDEX_URL.format(env)
resp = requests.get(url, headers=GetAppUserAgent())
resp.raise_for_status()
return list(map(lambda t: t["data"], resp.json()["tasks"]))
def is_mach_failure(issue):
return issue["state"] == "error" and issue.get("error_code") == "mach"
def is_not_error(issue):
return issue["state"] != "error"
def main(env):
taskcluster.auth()
hooks = taskcluster.get_service("hooks")
# List all tasks on the env
all_tasks = list_tasks(env)
# List non erroneous tasks
skip_phids = [t["diff_phid"] for t in filter(is_not_error, all_tasks)]
# Get tasks with a mach failure
tasks = list(filter(is_mach_failure, all_tasks))
# Trigger all mach error tasks
total = 0
for task in tasks:
phid = task["diff_phid"]
print("Triggering {} > {}".format(phid, task["title"]))
if phid in skip_phids:
print(f">> Skipping, phid {phid} has already a non-erroneous task")
continue
extra_env = {"ANALYSIS_SOURCE": "phabricator", "ANALYSIS_ID": phid}
task = hooks.triggerHook("project-relman", f"code-review-{env}", extra_env)
print(">> New task {}".format(task["status"]["taskId"]))
total += 1
print(f"Triggered {total} tasks")
if __name__ == "__main__":
main("production")