get_mozilla_central_commit.py (50 lines of code) (raw):
#!/usr/bin/python3
# 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 https://mozilla.org/MPL/2.0/.
"""
Used to find the associated mozilla-central commit of a
firefox-android commit.
"""
import argparse
import json
import pathlib
import re
try:
from urllib.parse import urlencode
from urllib.request import urlopen, urlretrieve
except ImportError:
from urllib import urlencode, urlretrieve
from urllib2 import urlopen
TASK_INFO = "https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/{}"
TASK_LINK = "https://firefox-ci-tc.services.mozilla.com/tasks/{}"
MOZHARNESS_URL_MATCHER = re.compile(r"'MOZHARNESS_URL':\s'.*/task/(.*)/artifacts.*',")
def commit_parser():
parser = argparse.ArgumentParser(
"This tool can be used to get the mozilla-central commit that Raptor/Browsertime "
"is using in a particular firefox-android commit."
)
parser.add_argument(
"LOG",
type=str,
help=(
"The log of a browsertime task from firefox-android to parse, and determine "
"which mozilla-central commit it's using."
),
)
return parser
def get_json(url, params=None):
if params is not None:
url += "?" + urlencode(params)
r = urlopen(url).read().decode("utf-8")
return json.loads(r)
def get_mozilla_central_commit(log_path):
log = pathlib.Path(log_path).expanduser().resolve()
log_contents = log.read_text()
match = MOZHARNESS_URL_MATCHER.search(log_contents)
if match is None:
raise Exception("Could not find a match for a task ID in the supplied log")
task_id = match.group(1)
task_link_url = TASK_LINK.format(task_id)
print("\nFound task ID:", task_id)
print("Task URL:", task_link_url)
task_info = get_json(TASK_INFO.format(task_id))
print(
"\nTreeherder Description, and Job Link:",
task_info["metadata"]["description"] + "\n"
)
if __name__ == "__main__":
args = commit_parser().parse_args()
get_mozilla_central_commit(args.LOG)