Bug 1256998 - Include links to the l10n changesets in the build email r=jlund
MozReview-Commit-ID: 9tGD3hIQrqq
--- a/buildfarm/release/release-runner.py
+++ b/buildfarm/release/release-runner.py
@@ -455,19 +455,20 @@ def main(options):
graph = make_task_graph_strict_kwargs(**kwargs)
rr.update_status(release, "Submitting task graph")
log.info("Task graph generated!")
import pprint
log.debug(pprint.pformat(graph, indent=4, width=160))
print scheduler.createTaskGraph(graph_id, graph)
rr.mark_as_completed(release)
+ l10n_url = rr.release_l10n_api.getL10nFullUrl(release['name'])
email_release_drivers(smtp_server=smtp_server, from_=notify_from,
to=notify_to, release=release,
- task_group_id=graph_id)
+ task_group_id=graph_id, l10n_url=l10n_url)
except Exception as exception:
# We explicitly do not raise an error here because there's no
# reason not to start other releases if creating the Task Graph
# fails for another one. We _do_ need to set this in order to exit
# with the right code, though.
rc = 2
rr.mark_as_failed(
release,
--- a/lib/python/kickoff/__init__.py
+++ b/lib/python/kickoff/__init__.py
@@ -87,32 +87,34 @@ class ReleaseRunner(object):
log.info('mark as completed %s' % release['name'])
self.release_api.update(release['name'], complete=True,
status='Started')
def mark_as_failed(self, release, why):
log.info('mark as failed %s' % release['name'])
self.release_api.update(release['name'], ready=False, status=why)
-def email_release_drivers(smtp_server, from_, to, release, task_group_id):
+
+def email_release_drivers(smtp_server, from_, to, release, task_group_id, l10n_url):
# Send an email to the mailing after the build
content = """\
A new build has been submitted through ship-it:
Commit: https://hg.mozilla.org/{path}/rev/{revision}
-Task group: https://tools.taskcluster.net/push-inspector/#/{task_group_id}/
+Task group: https://tools.taskcluster.net/push-inspector/#/{task_group_id}
+Locales: {l10n_url} (requires VPN access)
Created by {submitter}
Started by {starter}
""".format(path=release["branch"], revision=release["mozillaRevision"],
submitter=release["submitter"], starter=release["starter"],
- task_group_id=task_group_id)
+ task_group_id=task_group_id, l10n_url=l10n_url)
comment = release.get("comment")
if comment:
content += "Comment:\n" + comment + "\n\n"
# On r-d, we prefix the subject of the email in order to simplify filtering
if "Fennec" in release["name"]:
subject_prefix = "[mobile] "
--- a/lib/python/kickoff/api.py
+++ b/lib/python/kickoff/api.py
@@ -33,18 +33,20 @@ class API(object):
self.auth = auth
self.verify = ca_certs
self.timeout = timeout
self.raise_exceptions = raise_exceptions
self.session = requests.session()
self.csrf_token = None
self.retries = retry_attempts
- def request(self, params=None, data=None, method='GET', url_template_vars={}):
- url = self.api_root + self.url_template % url_template_vars
+ def request(self, params=None, data=None, method='GET', url_template_vars=None):
+ url_template_vars = {} if url_template_vars is None else url_template_vars
+
+ url = self._getFullUrl(url_template_vars)
if method != 'GET' and method != 'HEAD':
if not self.csrf_token or is_csrf_token_expired(self.csrf_token):
res = self.session.request(
method='HEAD', url=self.api_root + '/csrf_token',
timeout=self.timeout, auth=self.auth)
if self.raise_exceptions:
res.raise_for_status()
self.csrf_token = res.headers['X-CSRF-Token']
@@ -65,16 +67,19 @@ class API(object):
requests.ConnectionError),
attempts=self.retries)
except requests.HTTPError, e:
log.error('Caught HTTPError: %d %s' %
(e.response.status_code, e.response.content),
exc_info=True)
raise
+ def _getFullUrl(self, url_template_vars):
+ return self.api_root + self.url_template % url_template_vars
+
class Releases(API):
url_template = '/releases'
def getReleases(self, ready=1, complete=0):
resp = None
try:
resp = self.request(params={'ready': ready, 'complete': complete})
@@ -108,8 +113,11 @@ class Release(API):
url_template_vars=url_template_vars).content
class ReleaseL10n(API):
url_template = '/releases/%(name)s/l10n'
def getL10n(self, name):
return self.request(url_template_vars={'name': name}).content
+
+ def getL10nFullUrl(self, name):
+ return self._getFullUrl(url_template_vars={'name': name})