6
6
import json
7
7
import os
8
8
import zipfile
9
+ from datetime import timedelta
9
10
10
11
import structlog
11
12
18
19
from code_coverage_bot .phabricator import PhabricatorUploader
19
20
from code_coverage_bot .phabricator import parse_revision_id
20
21
from code_coverage_bot .secrets import secrets
22
+ from code_coverage_bot .taskcluster import taskcluster_config
21
23
from code_coverage_tools import gcp
22
24
23
25
logger = structlog .get_logger (__name__ )
@@ -108,18 +110,38 @@ def run(self):
108
110
logger .warn ("Full covdir report already on GCP" )
109
111
return
110
112
113
+ # Generate and upload the full report as soon as possible, so it is available
114
+ # for consumers (e.g. Searchfox) right away.
111
115
self .retrieve_source_and_artifacts ()
112
116
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" )])
117
118
118
- # Retrieve the full report
119
119
full_path = reports .get (("all" , "all" ))
120
120
assert full_path is not None , "Missing full report (all:all)"
121
121
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 )
123
145
124
146
# Check extensions
125
147
paths = uploader .covdir_paths (report )
@@ -128,10 +150,6 @@ def run(self):
128
150
path .endswith (extension ) for path in paths
129
151
), "No {} file in the generated report" .format (extension )
130
152
131
- # Upload reports on GCP
132
- self .upload_reports (reports )
133
- logger .info ("Uploaded all covdir reports" , nb = len (reports ))
134
-
135
153
# Upload coverage on phabricator
136
154
changesets = self .get_hgmo_changesets ()
137
155
coverage = self .upload_phabricator (report , changesets )
@@ -140,17 +158,17 @@ def run(self):
140
158
notify_email (self .revision , changesets , coverage )
141
159
logger .info ("Sent low coverage email notification" )
142
160
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 ) )
154
172
155
173
156
174
class TryHook (RepositoryHook ):
0 commit comments