2
2
import json
3
3
import os
4
4
import sys
5
+ import requests
5
6
from prettytable import PrettyTable
6
7
from colorama import Fore , Back , Style
7
8
from configparser import ConfigParser
@@ -374,14 +375,38 @@ def get_expected_result(expected_file, app_path, board, bd_ver):
374
375
return result
375
376
376
377
378
+ def send_pull_request_comment (columns , results ):
379
+ job = os .environ .get ("NAME" )
380
+ pr_number = os .environ .get ("TRAVIS_PULL_REQUEST" )
381
+ if all ([job , pr_number ]):
382
+ comment_job = "## " + job + "\n "
383
+ if len (results )> 0 :
384
+ head = "|" .join (columns ) + "\n "
385
+ table_format = "|" .join (["---" ]* len (columns )) + "\n "
386
+ table_head = head + table_format
387
+ comments = ""
388
+ comment = ""
389
+ for result in results :
390
+ for k in result :
391
+ comment += (k .replace (Fore .RED , "" )).replace ("\n " , "<br>" ) + " |"
392
+ comment = comment .rstrip ("|" ) + "\n "
393
+ comments += comment
394
+ comment_on_pull_request (comment_job + table_head + comments )
395
+ else :
396
+ print ("WARNING:Only send pull request comment in travis ci!" )
397
+
398
+ pass
399
+
400
+
377
401
def show_results (results , expected = None ):
378
- columns = ['TOOLCHAIN' , 'APP' , "TOOLCHAIN_VER" , 'CONF' , 'PASS' ]
402
+ columns = ["TOOLCHAIN_VER" , 'TOOLCHAIN' , 'APP' , 'CONF' , 'PASS' ]
379
403
failed_pt = PrettyTable (columns )
380
404
failed_results = []
381
405
success_results = []
382
406
expected_results = None
383
407
success_pt = PrettyTable (columns )
384
408
expected_pt = PrettyTable (columns )
409
+
385
410
for result in results :
386
411
status = result .pop ("status" )
387
412
if status != 0 :
@@ -398,6 +423,7 @@ def show_results(results, expected=None):
398
423
399
424
if expected is not None :
400
425
expected_results = failed_results
426
+ send_pull_request_comment (columns , expected_results )
401
427
for result in expected_results :
402
428
if len (result ) > 0 :
403
429
expected_pt .add_row (result )
@@ -413,6 +439,8 @@ def show_results(results, expected=None):
413
439
success_pt .add_row (result )
414
440
print Fore .GREEN + "Successfull results"
415
441
print success_pt
442
+
443
+
416
444
print Style .RESET_ALL
417
445
sys .stdout .flush ()
418
446
@@ -427,6 +455,7 @@ def show_results(results, expected=None):
427
455
428
456
print Fore .RED + "Failed result:"
429
457
print failed_pt
458
+
430
459
print Style .RESET_ALL
431
460
sys .stdout .flush ()
432
461
@@ -529,14 +558,31 @@ def build_makefiles_project(config):
529
558
diff_expected_differents [app_path ] = copy .deepcopy (expected_different [app_path ])
530
559
531
560
print "There are {} projects, and they are compiled for {} times" .format (app_count , count )
532
- results_list = build_result_combine_tail (apps_results )
561
+ results_list = copy . deepcopy ( build_result_combine_tail (apps_results ) )
533
562
show_results (results_list )
534
563
expected_differents_list = build_result_combine_tail (diff_expected_differents )
535
564
show_results (expected_differents_list , expected = True )
536
565
537
566
return applications_failed , diff_expected_differents
538
567
539
568
569
+ def comment_on_pull_request (comment ):
570
+ pr_number = os .environ .get ("TRAVIS_PULL_REQUEST" )
571
+ slug = os .environ .get ("TRAVIS_REPO_SLUG" )
572
+ token = os .environ .get ("GH_TOKEN" )
573
+ request_config = [pr_number , slug , token , comment ]
574
+ for i in range (len (request_config )):
575
+ if request_config [i ] == "false" :
576
+ request_config [i ] = False
577
+ if all (request_config ):
578
+ url = 'https://api.github.com/repos/{slug}/issues/{number}/comments' .format (
579
+ slug = slug , number = pr_number )
580
+ response = requests .post (url , data = json .dumps ({'body' : comment }),
581
+ headers = {'Authorization' : 'token ' + token })
582
+ print (">>>>Travis send pull request comment to {}, repsonse status code {}." .format (url , response .status_code ))
583
+ return response .json ()
584
+
585
+
540
586
def get_options_parser ():
541
587
configs = dict ()
542
588
toolchainlist = ["gnu" , "mw" ]
@@ -590,4 +636,6 @@ def get_options_parser():
590
636
else :
591
637
print "these applications failed with some configuration: "
592
638
print expected_differents .keys ()
639
+ comment = "applications failed with some configuration: \n " + "\n " .join (expected_differents .keys ())
640
+ comment_on_pull_request (comment )
593
641
sys .exit (1 )
0 commit comments