@@ -32,7 +32,7 @@ def label_analysis(token, head_commit_sha, base_commit_sha):
3232 url = "https://api.codecov.io/labels/labels-analysis"
3333 token_header = f"Repotoken { token } "
3434 # this needs to be more flexible to support multiple elements
35- runner = ThisRunner ()
35+ runner = PythonStandardRunner ()
3636 requested_labels = runner .collect_tests ()
3737 payload = {
3838 "base_commit" : base_commit_sha ,
@@ -44,6 +44,18 @@ def label_analysis(token, head_commit_sha, base_commit_sha):
4444 url , json = payload , headers = {"Authorization" : token_header }
4545 )
4646 if response .status_code >= 500 :
47+ logger .warning (
48+ "Sorry. Codecov is having problems" ,
49+ extra = dict (extra_log_attributes = dict (status_code = response .status_code )),
50+ )
51+ if requested_labels :
52+ fake_response = {
53+ "present_report_labels" : [],
54+ "absent_labels" : requested_labels ,
55+ "present_diff_labels" : [],
56+ "global_level_labels" : [],
57+ }
58+ return runner .do_something_with_result (fake_response )
4759 raise click .ClickException ("Sorry. Codecov is having problems" )
4860 if response .status_code >= 400 :
4961 logger .warning (
@@ -77,12 +89,21 @@ def label_analysis(token, head_commit_sha, base_commit_sha):
7789 "Request had problems calculating" ,
7890 extra = dict (extra_log_attributes = dict (resp_json = resp_json )),
7991 )
92+ if requested_labels :
93+ logger .info ("Using requested labels as tests to run" )
94+ fake_response = {
95+ "present_report_labels" : [],
96+ "absent_labels" : requested_labels ,
97+ "present_diff_labels" : [],
98+ "global_level_labels" : [],
99+ }
100+ return runner .do_something_with_result (fake_response )
80101 return
81102 logger .info ("Waiting more time for result" )
82103 time .sleep (5 )
83104
84105
85- class ThisRunner (object ):
106+ class PythonStandardRunner (object ):
86107 def collect_tests (self ):
87108 return [
88109 x
@@ -98,11 +119,30 @@ def collect_tests(self):
98119
99120 def do_something_with_result (self , result ):
100121 command_array = ["python" , "-m" , "pytest" , "--cov=./" , "--cov-context=test" ]
122+ logger .info (
123+ "Received information about tests to run" ,
124+ extra = dict (
125+ extra_log_attributes = dict (
126+ absent_labels = len (result ["absent_labels" ] or []),
127+ present_diff_labels = len (result ["present_diff_labels" ] or []),
128+ global_level_labels = len (result ["global_level_labels" ] or []),
129+ present_report_labels = len (result ["present_report_labels" ] or []),
130+ )
131+ ),
132+ )
101133 all_labels = (
102134 result ["absent_labels" ]
103135 + result ["present_diff_labels" ]
104136 + result ["global_level_labels" ]
105137 )
138+ skipped_tests = set (result ["present_report_labels" ]) - set (all_labels )
139+ if skipped_tests :
140+ logger .info (
141+ "Some tests are being skipped" ,
142+ extra = dict (
143+ extra_log_attributes = dict (skipped_tests = sorted (skipped_tests ))
144+ ),
145+ )
106146 all_labels = set (all_labels )
107147 all_labels = [x .rsplit ("[" , 1 )[0 ] if "[" in x else x for x in all_labels ]
108148 # Not safe from the customer perspective, in general, probably.
0 commit comments