22import json
33import os
44import sys
5+ import requests
56from prettytable import PrettyTable
67from colorama import Fore , Back , Style
78from configparser import ConfigParser
@@ -374,14 +375,38 @@ def get_expected_result(expected_file, app_path, board, bd_ver):
374375 return result
375376
376377
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+
377401def show_results (results , expected = None ):
378- columns = ['TOOLCHAIN' , 'APP' , "TOOLCHAIN_VER" , 'CONF' , 'PASS' ]
402+ columns = ["TOOLCHAIN_VER" , 'TOOLCHAIN' , 'APP' , 'CONF' , 'PASS' ]
379403 failed_pt = PrettyTable (columns )
380404 failed_results = []
381405 success_results = []
382406 expected_results = None
383407 success_pt = PrettyTable (columns )
384408 expected_pt = PrettyTable (columns )
409+
385410 for result in results :
386411 status = result .pop ("status" )
387412 if status != 0 :
@@ -398,6 +423,7 @@ def show_results(results, expected=None):
398423
399424 if expected is not None :
400425 expected_results = failed_results
426+ send_pull_request_comment (columns , expected_results )
401427 for result in expected_results :
402428 if len (result ) > 0 :
403429 expected_pt .add_row (result )
@@ -413,6 +439,8 @@ def show_results(results, expected=None):
413439 success_pt .add_row (result )
414440 print Fore .GREEN + "Successfull results"
415441 print success_pt
442+
443+
416444 print Style .RESET_ALL
417445 sys .stdout .flush ()
418446
@@ -427,6 +455,7 @@ def show_results(results, expected=None):
427455
428456 print Fore .RED + "Failed result:"
429457 print failed_pt
458+
430459 print Style .RESET_ALL
431460 sys .stdout .flush ()
432461
@@ -529,14 +558,31 @@ def build_makefiles_project(config):
529558 diff_expected_differents [app_path ] = copy .deepcopy (expected_different [app_path ])
530559
531560 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 ) )
533562 show_results (results_list )
534563 expected_differents_list = build_result_combine_tail (diff_expected_differents )
535564 show_results (expected_differents_list , expected = True )
536565
537566 return applications_failed , diff_expected_differents
538567
539568
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+
540586def get_options_parser ():
541587 configs = dict ()
542588 toolchainlist = ["gnu" , "mw" ]
@@ -590,4 +636,6 @@ def get_options_parser():
590636 else :
591637 print "these applications failed with some configuration: "
592638 print expected_differents .keys ()
639+ comment = "applications failed with some configuration: \n " + "\n " .join (expected_differents .keys ())
640+ comment_on_pull_request (comment )
593641 sys .exit (1 )
0 commit comments