Skip to content

Commit 6e41182

Browse files
committed
Upload the artifact required by Searchfox and index code coverage task as soon as possible
Fixes #719
1 parent e6f0295 commit 6e41182

File tree

1 file changed

+39
-21
lines changed

1 file changed

+39
-21
lines changed

bot/code_coverage_bot/hooks/repo.py

Lines changed: 39 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import json
77
import os
88
import zipfile
9+
from datetime import timedelta
910

1011
import structlog
1112

@@ -18,6 +19,7 @@
1819
from code_coverage_bot.phabricator import PhabricatorUploader
1920
from code_coverage_bot.phabricator import parse_revision_id
2021
from code_coverage_bot.secrets import secrets
22+
from code_coverage_bot.taskcluster import taskcluster_config
2123
from code_coverage_tools import gcp
2224

2325
logger = structlog.get_logger(__name__)
@@ -108,18 +110,38 @@ def run(self):
108110
logger.warn("Full covdir report already on GCP")
109111
return
110112

113+
# Generate and upload the full report as soon as possible, so it is available
114+
# for consumers (e.g. Searchfox) right away.
111115
self.retrieve_source_and_artifacts()
112116

113-
self.check_javascript_files()
114-
115-
reports = self.build_reports()
116-
logger.info("Built all covdir reports", nb=len(reports))
117+
reports = self.build_reports(only=[("all", "all")])
117118

118-
# Retrieve the full report
119119
full_path = reports.get(("all", "all"))
120120
assert full_path is not None, "Missing full report (all:all)"
121121
with open(full_path, "r") as f:
122-
report = json.load(f)
122+
report_text = f.read()
123+
124+
# Upload report as an artifact.
125+
taskcluster_config.upload_artifact(
126+
"public/code-coverage-report.json",
127+
report_text,
128+
"application/json",
129+
timedelta(days=29),
130+
)
131+
132+
# Index on Taskcluster
133+
self.index_task(
134+
[
135+
"project.relman.code-coverage.{}.repo.mozilla-central.{}".format(
136+
secrets[secrets.APP_CHANNEL], self.revision
137+
),
138+
"project.relman.code-coverage.{}.repo.mozilla-central.latest".format(
139+
secrets[secrets.APP_CHANNEL]
140+
),
141+
]
142+
)
143+
144+
report = json.loads(report_text)
123145

124146
# Check extensions
125147
paths = uploader.covdir_paths(report)
@@ -128,10 +150,6 @@ def run(self):
128150
path.endswith(extension) for path in paths
129151
), "No {} file in the generated report".format(extension)
130152

131-
# Upload reports on GCP
132-
self.upload_reports(reports)
133-
logger.info("Uploaded all covdir reports", nb=len(reports))
134-
135153
# Upload coverage on phabricator
136154
changesets = self.get_hgmo_changesets()
137155
coverage = self.upload_phabricator(report, changesets)
@@ -140,17 +158,17 @@ def run(self):
140158
notify_email(self.revision, changesets, coverage)
141159
logger.info("Sent low coverage email notification")
142160

143-
# Index on Taskcluster
144-
self.index_task(
145-
[
146-
"project.relman.code-coverage.{}.repo.mozilla-central.{}".format(
147-
secrets[secrets.APP_CHANNEL], self.revision
148-
),
149-
"project.relman.code-coverage.{}.repo.mozilla-central.latest".format(
150-
secrets[secrets.APP_CHANNEL]
151-
),
152-
]
153-
)
161+
self.check_javascript_files()
162+
163+
# Generate all reports except the full one which we generated earlier.
164+
all_report_combinations = self.artifactsHandler.get_combinations()
165+
del all_report_combinations[("all", "all")]
166+
reports.update(self.build_reports())
167+
logger.info("Built all covdir reports", nb=len(reports))
168+
169+
# Upload reports on GCP
170+
self.upload_reports(reports)
171+
logger.info("Uploaded all covdir reports", nb=len(reports))
154172

155173

156174
class TryHook(RepositoryHook):

0 commit comments

Comments
 (0)