diff --git a/bot/code_coverage_bot/hooks/base.py b/bot/code_coverage_bot/hooks/base.py index 897339d11..fe4a95046 100644 --- a/bot/code_coverage_bot/hooks/base.py +++ b/bot/code_coverage_bot/hooks/base.py @@ -5,6 +5,8 @@ import os import tempfile +from datetime import datetime +from datetime import timedelta import hglib import structlog @@ -13,6 +15,7 @@ from code_coverage_bot import grcov from code_coverage_bot import taskcluster from code_coverage_bot.artifacts import ArtifactsHandler +from code_coverage_bot.taskcluster import taskcluster_config from code_coverage_bot.utils import ThreadPoolExecutorResult logger = structlog.get_logger(__name__) @@ -125,3 +128,29 @@ def build_reports(self, only=None): reports[(platform, suite)] = path return reports + + def index_task(self, namespaces, ttl=180): + """ + Index current task on Taskcluster Index + TTL is expressed in days + """ + assert isinstance(ttl, int) and ttl > 0 + task_id = os.environ.get("TASK_ID") + if task_id is None: + logger.warning("Skipping Taskcluster indexation, no task id found.") + return + + index_service = taskcluster_config.get_service("index") + + for namespace in namespaces: + index_service.insertTask( + namespace, + { + "taskId": task_id, + "rank": 0, + "data": {}, + "expires": (datetime.utcnow() + timedelta(ttl)).strftime( + "%Y-%m-%dT%H:%M:%S.%fZ" + ), + }, + ) diff --git a/bot/code_coverage_bot/hooks/cron.py b/bot/code_coverage_bot/hooks/cron.py index 4c2ea3b05..51f869fab 100644 --- a/bot/code_coverage_bot/hooks/cron.py +++ b/bot/code_coverage_bot/hooks/cron.py @@ -3,9 +3,6 @@ # 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 os -from datetime import datetime -from datetime import timedelta import structlog @@ -15,7 +12,6 @@ from code_coverage_bot.cli import setup_cli from code_coverage_bot.hooks.base import Hook from code_coverage_bot.secrets import secrets -from code_coverage_bot.taskcluster import taskcluster_config from code_coverage_bot.zero_coverage import ZeroCov logger = structlog.get_logger(__name__) @@ -50,29 +46,22 @@ def run(self): # Index the task in the TaskCluster index at the given revision and as "latest". # Given that all tasks have the same rank, the latest task that finishes will # overwrite the "latest" entry. - namespaces = [ - "project.releng.services.project.{}.code_coverage_bot.{}".format( - secrets[secrets.APP_CHANNEL], self.revision - ), - "project.releng.services.project.{}.code_coverage_bot.latest".format( - secrets[secrets.APP_CHANNEL] - ), - ] - - index_service = taskcluster_config.get_service("index") - - for namespace in namespaces: - index_service.insertTask( - namespace, - { - "taskId": os.environ["TASK_ID"], - "rank": 0, - "data": {}, - "expires": (datetime.utcnow() + timedelta(180)).strftime( - "%Y-%m-%dT%H:%M:%S.%fZ" - ), - }, - ) + self.index_task( + [ + "project.releng.services.project.{}.code_coverage_bot.{}".format( + secrets[secrets.APP_CHANNEL], self.revision + ), + "project.releng.services.project.{}.code_coverage_bot.latest".format( + secrets[secrets.APP_CHANNEL] + ), + "project.relman.code-coverage.{}.cron.{}".format( + secrets[secrets.APP_CHANNEL], self.revision + ), + "project.relman.code-coverage.{}.cron.latest".format( + secrets[secrets.APP_CHANNEL] + ), + ] + ) def main(): diff --git a/bot/code_coverage_bot/hooks/repo.py b/bot/code_coverage_bot/hooks/repo.py index bdefbc1ae..f4b6dfd34 100644 --- a/bot/code_coverage_bot/hooks/repo.py +++ b/bot/code_coverage_bot/hooks/repo.py @@ -17,6 +17,7 @@ from code_coverage_bot.notifier import notify_email from code_coverage_bot.phabricator import PhabricatorUploader from code_coverage_bot.phabricator import parse_revision_id +from code_coverage_bot.secrets import secrets logger = structlog.get_logger(__name__) @@ -142,6 +143,18 @@ def run(self): notify_email(self.revision, changesets, coverage) logger.info("Sent low coverage email notification") + # Index on Taskcluster + self.index_task( + [ + "project.relman.code-coverage.{}.repo.mozilla-central.{}".format( + secrets[secrets.APP_CHANNEL], self.revision + ), + "project.relman.code-coverage.{}.repo.mozilla-central.latest".format( + secrets[secrets.APP_CHANNEL] + ), + ] + ) + class TryHook(RepositoryHook): """ @@ -183,6 +196,18 @@ def run(self): # Upload coverage on phabricator self.upload_phabricator(report, changesets) + # Index on Taskcluster + self.index_task( + [ + "project.relman.code-coverage.{}.repo.try.{}".format( + secrets[secrets.APP_CHANNEL], self.revision + ), + "project.relman.code-coverage.{}.repo.try.latest".format( + secrets[secrets.APP_CHANNEL] + ), + ] + ) + def main(): logger.info("Starting code coverage bot for repository") diff --git a/bot/taskcluster-hook-cron.json b/bot/taskcluster-hook-cron.json index e2275142e..65e950189 100644 --- a/bot/taskcluster-hook-cron.json +++ b/bot/taskcluster-hook-cron.json @@ -67,7 +67,8 @@ "scopes": [ "secrets:get:project/relman/code-coverage/runtime-CHANNEL", "docker-worker:cache:code-coverage-bot-CHANNEL", - "index:insert-task:project.releng.services.project.CHANNEL.code_coverage_bot.*" + "index:insert-task:project.releng.services.project.CHANNEL.code_coverage_bot.*", + "index:insert-task:project.relman.code-coverage.CHANNEL.cron.*" ], "tags": {}, "workerType": "releng-svc-memory" diff --git a/bot/taskcluster-hook-repo.json b/bot/taskcluster-hook-repo.json index af1c149d9..bbca97d5b 100644 --- a/bot/taskcluster-hook-repo.json +++ b/bot/taskcluster-hook-repo.json @@ -69,7 +69,8 @@ "scopes": [ "secrets:get:project/relman/code-coverage/runtime-CHANNEL", "notify:email:*", - "docker-worker:cache:code-coverage-bot-CHANNEL" + "docker-worker:cache:code-coverage-bot-CHANNEL", + "index:insert-task:project.relman.code-coverage.CHANNEL.repo.*" ], "tags": {}, "workerType": "releng-svc-memory"