SPARK-2416: Allow richer reporting of unit test results
SPARK-2416: Allow richer reporting of unit test results

The built-in Jenkins integration is pretty bad. It's very confusing to users whether tests have passed or failed and we can't easily customize the message.

With some small scripting around the Github API we can do much better than this.

Author: Patrick Wendell <pwendell@gmail.com>

Closes #1340 from pwendell/better-qa-messages and squashes the following commits:

fd6077d [Patrick Wendell] Better automation for unit tests.

MLnick/spark,jkbradley/spark,ajaysaini725/spark,ericvandenbergfb/spark,kiszk/spark,adrian-ionescu/apache-spark,mdespriee/spark,alunarbeach/spark,ptkool/spark,shuangshuangwang/spark,nilsgrabbert/spark,lvdongr/spark,jianran/spark,shuangshuangwang/spark,rezasafi/spark,wangyum/spark,eyalfa/spark,HyukjinKwon/spark,xflin/spark,JerryLead/spark,ericvandenbergfb/spark,BryanCutler/spark,akopich/spark,big-pegasus/spark,MLnick/spark,HyukjinKwon/spark,jlopezmalla/spark,Panos-Bletsos/spark-cost-model-optimizer,poffuomo/spark,saturday-shi/spark,haowu80s/spark,huang1900/spark,HyukjinKwon/spark,LantaoJin/spark,liutang123/spark,adrian-ionescu/apache-spark,szhem/spark,SHASHANKB/spark,zzcclp/spark,dbtsai/spark,goldmedal/spark,nilsgrabbert/spark,nchammas/spark,taroplus/spark,tengpeng/spark,SHASHANKB/spark,techaddict/spark,caneGuy/spark,hvanhovell/spark,SnappyDataInc/spark,liutang123/spark,sureshthalamati/spark,maropu/spark,wzhfy/spark,jrshust/spark,shubhamchopra/spark,SnappyDataInc/spark,taroplus/spark,dbtsai/spark,actuaryzhang/spark,ibm-research-ireland/sparkoscope,shubhamchopra/spark,tengpeng/spark,liutang123/spark,huang1900/spark,WeichenXu123/spark,metamx/spark,Panos-Bletsos/spark-cost-model-optimizer,facaiy/spark,zero323/spark,sachintyagi22/spark,patrick-nicholson/spark,JoshRosen/spark,jkbradley/spark,mdespriee/spark,nilsgrabbert/spark,dhruve/spark,spark-test/spark,esi-mineset/spark,ron8hu/spark,dbtsai/spark,JerryLead/spark,cloud-fan/spark,pronix/spark,ueshin/apache-spark,zhouyejoe/spark,kissmetrics/spark,metamx/spark,skonto/spark,WindCanDie/spark,aray/spark,spark-test/spark,milliman/spark,xflin/spark,mzl9039/spark,loneknightpy/spark,kimoonkim/spark,aosagie/spark,aosagie/spark,mike0sv/spark,techaddict/spark,dongjoon-hyun/spark,HyukjinKwon/spark,kevinyu98/spark,xuanyuanking/spark,akopich/spark,lxsmnv/spark,JerryLead/spark,brad-kaiser/spark,lxsmnv/spark,xflin/spark,LantaoJin/spark,facaiy/spark,sahilTakiar/spark,ericvandenbergfb/spark,saturday-shi/spark,maropu/spark,UndeadBaneGitHub/spark,ioana-delaney/spark,joseph-torres/spark,JoshRosen/spark,jiangxb1987/spark,mdespriee/spark,andrewor14/spark,nlalevee/spark,jlopezmalla/spark,1haodian/spark,cloud-fan/spark,liutang123/spark,nlalevee/spark,bravo-zhang/spark,SnappyDataInc/spark,janewangfb/spark,maropu/spark,UndeadBaneGitHub/spark,matthewfranglen/spark,adrian-ionescu/apache-spark,metamx/spark,jkbradley/spark,hhbyyh/spark,metamx/spark,caneGuy/spark,someorz/spark,apache/spark,sahilTakiar/spark,alunarbeach/spark,wangmiao1981/spark,tengpeng/spark,liyichao/spark,highfei2011/spark,andrewor14/spark,mike0sv/spark,rednaxelafx/apache-spark,panfengfeng/spark,michalsenkyr/spark,stanzhai/spark,Panos-Bletsos/spark-cost-model-optimizer,caneGuy/spark,zhouyejoe/spark,map222/spark,michalsenkyr/spark,jianran/spark,actuaryzhang/spark,caneGuy/spark,loneknightpy/spark,wangmiao1981/spark,brad-kaiser/spark,apache/spark,pgandhi999/spark,janewangfb/spark,jrshust/spark,shubhamchopra/spark,LantaoJin/spark,bravo-zhang/spark,saturday-shi/spark,rednaxelafx/apache-spark,tejasapatil/spark,aokolnychyi/spark,kimoonkim/spark,andrewor14/iolap,andrewor14/iolap,holdenk/spark,icexelloss/spark,apache/spark,panfengfeng/spark,nilsgrabbert/spark,witgo/spark,publicRoman/spark,tejasapatil/spark,JerryLead/spark,ptkool/spark,brad-kaiser/spark,nlalevee/spark,cin/spark,dbtsai/spark,1haodian/spark,xflin/spark,maropu/spark,aray/spark,ahnqirage/spark,byakuinss/spark,darionyaphet/spark,michalsenkyr/spark,sureshthalamati/spark,Aegeaner/spark,bOOm-X/spark,witgo/spark,highfei2011/spark,stanzhai/spark,mzl9039/spark,skonto/spark,BryanCutler/spark,zuotingbing/spark,spark-test/spark,bravo-zhang/spark,yanboliang/spark,kiszk/spark,ahnqirage/spark,WindCanDie/spark,jlopezmalla/spark,SHASHANKB/spark,rednaxelafx/apache-spark,bravo-zhang/spark,ptkool/spark,1haodian/spark,zuotingbing/spark,jlopezmalla/spark,sahilTakiar/spark,wangmiao1981/spark,nlalevee/spark,shaneknapp/spark,srowen/spark,shaneknapp/spark,JoshRosen/spark,debugger87/spark,byakuinss/spark,techaddict/spark,WeichenXu123/spark,gioenn/xSpark,bOOm-X/spark,kissmetrics/spark,akopich/spark,shuangshuangwang/spark,guoxiaolongzte/spark,mahak/spark,bOOm-X/spark,hvanhovell/spark,wangyum/spark,lxsmnv/spark,sachintyagi22/spark,ddna1021/spark,alunarbeach/spark,srowen/spark,wangmiao1981/spark,gioenn/xSpark,BryanCutler/spark,michalsenkyr/spark,metamx/spark,dongjoon-hyun/spark,WeichenXu123/spark,ueshin/apache-spark,byakuinss/spark,saltstar/spark,ueshin/apache-spark,vinodkc/spark,eyalfa/spark,aray/spark,szhem/spark,lxsmnv/spark,nilsgrabbert/spark,narahari92/spark,alunarbeach/spark,janewangfb/spark,ajaysaini725/spark,JerryLead/spark,goldmedal/spark,jlopezmalla/spark,darionyaphet/spark,MLnick/spark,rednaxelafx/apache-spark,zero323/spark,kissmetrics/spark,michalsenkyr/spark,gioenn/xSpark,joseph-torres/spark,mzl9039/spark,publicRoman/spark,shaneknapp/spark,minixalpha/spark,ibm-research-ireland/sparkoscope,zuotingbing/spark,actuaryzhang/spark,dbtsai/spark,wzhfy/spark,publicRoman/spark,ptkool/spark,rezasafi/spark,nchammas/spark,poffuomo/spark,shuangshuangwang/spark,xuanyuanking/spark,maropu/spark,sahilTakiar/spark,lxsmnv/spark,janewangfb/spark,jkbradley/spark,1haodian/spark,actuaryzhang/spark,liyichao/spark,debugger87/spark,saltstar/spark,shaneknapp/spark,ajaysaini725/spark,rikima/spark,sachintyagi22/spark,hvanhovell/spark,milliman/spark,ibm-research-ireland/sparkoscope,ron8hu/spark,BryanCutler/spark,rekhajoshm/spark,JerryLead/spark,ioana-delaney/spark,rekhajoshm/spark,facaiy/spark,gengliangwang/spark,kevinyu98/spark,apache/spark,poffuomo/spark,tejasapatil/spark,tejasapatil/spark,Aegeaner/spark,ahnqirage/spark,jrshust/spark,vinodkc/spark,narahari92/spark,adrian-ionescu/apache-spark,SnappyDataInc/spark,andrewor14/iolap,JerryLead/spark,wzhfy/spark,shubhamchopra/spark,sureshthalamati/spark,aokolnychyi/spark,guoxiaolongzte/spark,ahnqirage/spark,map222/spark,facaiy/spark,vinodkc/spark,tengpeng/spark,hhbyyh/spark,alunarbeach/spark,szhem/spark,someorz/spark,aokolnychyi/spark,dongjoon-hyun/spark,SnappyDataInc/spark,mike0sv/spark,ConeyLiu/spark,hhbyyh/spark,andrewor14/spark,setjet/spark,icexelloss/spark,liyichao/spark,rekhajoshm/spark,apache-spark-on-k8s/spark,chuckchen/spark,darionyaphet/spark,patrick-nicholson/spark,cin/spark,chuckchen/spark,setjet/spark,michalsenkyr/spark,bdrillard/spark,ajaysaini725/spark,tejasapatil/spark,panfengfeng/spark,xflin/spark,andrewor14/iolap,poffuomo/spark,markhamstra/spark,taroplus/spark,spark-test/spark,markhamstra/spark,aokolnychyi/spark,LantaoJin/spark,WindCanDie/spark,aray/spark,dongjoon-hyun/spark,shaneknapp/spark,gengliangwang/spark,loneknightpy/spark,zhouyejoe/spark,rekhajoshm/spark,joseph-torres/spark,zero323/spark,eyalfa/spark,1haodian/spark,bravo-zhang/spark,wangyum/spark,chuckchen/spark,andrewor14/iolap,bdrillard/spark,icexelloss/spark,apache-spark-on-k8s/spark,HyukjinKwon/spark,akopich/spark,szhem/spark,andrewor14/spark,rikima/spark,icexelloss/spark,debugger87/spark,cloud-fan/spark,dhruve/spark,holdenk/spark,gengliangwang/spark,vinodkc/spark,chuckchen/spark,MLnick/spark,dbtsai/spark,zzcclp/spark,adrian-ionescu/apache-spark,highfei2011/spark,big-pegasus/spark,setjet/spark,loneknightpy/spark,mdespriee/spark,icexelloss/spark,sahilTakiar/spark,ioana-delaney/spark,mike0sv/spark,jlopezmalla/spark,kevinyu98/spark,UndeadBaneGitHub/spark,actuaryzhang/spark,rikima/spark,aokolnychyi/spark,JoshRosen/spark,rezasafi/spark,mahak/spark,wzhfy/spark,byakuinss/spark,tejasapatil/spark,rednaxelafx/apache-spark,1haodian/spark,holdenk/spark,ioana-delaney/spark,jianran/spark,milliman/spark,wangmiao1981/spark,WindCanDie/spark,shaneknapp/spark,loneknightpy/spark,andrewor14/spark,kimoonkim/spark,ddna1021/spark,SHASHANKB/spark,jianran/spark,kissmetrics/spark,maropu/spark,shubhamchopra/spark,ptkool/spark,holdenk/spark,huang1900/spark,saltstar/spark,techaddict/spark,bdrillard/spark,setjet/spark,ron8hu/spark,janewangfb/spark,ioana-delaney/spark,map222/spark,liyichao/spark,jiangxb1987/spark,darionyaphet/spark,markhamstra/spark,liyichao/spark,patrick-nicholson/spark,mahak/spark,SHASHANKB/spark,markhamstra/spark,wzhfy/spark,ajaysaini725/spark,sachintyagi22/spark,BryanCutler/spark,yanboliang/spark,ddna1021/spark,apache-spark-on-k8s/spark,shuangshuangwang/spark,janewangfb/spark,jiangxb1987/spark,kiszk/spark,map222/spark,guoxiaolongzte/spark,darionyaphet/spark,lxsmnv/spark,pronix/spark,map222/spark,witgo/spark,poffuomo/spark,BryanCutler/spark,esi-mineset/spark,michalsenkyr/spark,esi-mineset/spark,zzcclp/spark,mzl9039/spark,skonto/spark,joseph-torres/spark,eyalfa/spark,zuotingbing/spark,aokolnychyi/spark,holdenk/spark,shaneknapp/spark,joseph-torres/spark,cin/spark,witgo/spark,kissmetrics/spark,goldmedal/spark,Aegeaner/spark,ericvandenbergfb/spark,highfei2011/spark,mzl9039/spark,gioenn/xSpark,jiangxb1987/spark,mzl9039/spark,WindCanDie/spark,ddna1021/spark,poffuomo/spark,srowen/spark,vinodkc/spark,map222/spark,chuckchen/spark,UndeadBaneGitHub/spark,ConeyLiu/spark,brad-kaiser/spark,yanboliang/spark,jkbradley/spark,zuotingbing/spark,bravo-zhang/spark,caneGuy/spark,highfei2011/spark,cin/spark,publicRoman/spark,zzcclp/spark,pgandhi999/spark,tengpeng/spark,kissmetrics/spark,mzl9039/spark,WindCanDie/spark,holdenk/spark,JoshRosen/spark,ron8hu/spark,bOOm-X/spark,mahak/spark,ddna1021/spark,milliman/spark,facaiy/spark,MLnick/spark,wangmiao1981/spark,wzhfy/spark,apache-spark-on-k8s/spark,big-pegasus/spark,kevinyu98/spark,stanzhai/spark,guoxiaolongzte/spark,cin/spark,minixalpha/spark,hhbyyh/spark,lvdongr/spark,ericvandenbergfb/spark,minixalpha/spark,spark-test/spark,someorz/spark,cloud-fan/spark,kevinyu98/spark,gengliangwang/spark,zero323/spark,Panos-Bletsos/spark-cost-model-optimizer,minixalpha/spark,shuangshuangwang/spark,rekhajoshm/spark,stanzhai/spark,gioenn/xSpark,caneGuy/spark,jiangxb1987/spark,actuaryzhang/spark,techaddict/spark,cloud-fan/spark,SnappyDataInc/spark,ptkool/spark,haowu80s/spark,someorz/spark,andrewor14/iolap,skonto/spark,kiszk/spark,jianran/spark,patrick-nicholson/spark,gioenn/xSpark,shubhamchopra/spark,JoshRosen/spark,someorz/spark,ibm-research-ireland/sparkoscope,shuangshuangwang/spark,dongjoon-hyun/spark,dongjoon-hyun/spark,HyukjinKwon/spark,zhouyejoe/spark,ron8hu/spark,rikima/spark,alunarbeach/spark,aray/spark,joseph-torres/spark,andrewor14/spark,wangmiao1981/spark,techaddict/spark,ericvandenbergfb/spark,lxsmnv/spark,minixalpha/spark,xuanyuanking/spark,narahari92/spark,bOOm-X/spark,dhruve/spark,icexelloss/spark,zhouyejoe/spark,spark-test/spark,nlalevee/spark,taroplus/spark,wangyum/spark,taroplus/spark,sahilTakiar/spark,lvdongr/spark,holdenk/spark,ioana-delaney/spark,hhbyyh/spark,dhruve/spark,hvanhovell/spark,markhamstra/spark,WeichenXu123/spark,jkbradley/spark,lvdongr/spark,jiangxb1987/spark,debugger87/spark,rekhajoshm/spark,xuanyuanking/spark,mahak/spark,haowu80s/spark,Aegeaner/spark,setjet/spark,saltstar/spark,saltstar/spark,kiszk/spark,srowen/spark,MLnick/spark,ConeyLiu/spark,vinodkc/spark,nilsgrabbert/spark,jrshust/spark,yanboliang/spark,WeichenXu123/spark,tengpeng/spark,milliman/spark,Panos-Bletsos/spark-cost-model-optimizer,dongjoon-hyun/spark,andrewor14/iolap,UndeadBaneGitHub/spark,minixalpha/spark,saturday-shi/spark,apache/spark,stanzhai/spark,brad-kaiser/spark,panfengfeng/spark,aokolnychyi/spark,liutang123/spark,markhamstra/spark,LantaoJin/spark,apache/spark,hvanhovell/spark,apache-spark-on-k8s/spark,xuanyuanking/spark,big-pegasus/spark,rezasafi/spark,rednaxelafx/apache-spark,facaiy/spark,zero323/spark,esi-mineset/spark,SHASHANKB/spark,pronix/spark,nchammas/spark,hvanhovell/spark,witgo/spark,publicRoman/spark,goldmedal/spark,dhruve/spark,jiangxb1987/spark,rezasafi/spark,ConeyLiu/spark,srowen/spark,loneknightpy/spark,cin/spark,wzhfy/spark,ahnqirage/spark,lvdongr/spark,cloud-fan/spark,alunarbeach/spark,jianran/spark,Panos-Bletsos/spark-cost-model-optimizer,zuotingbing/spark,huang1900/spark,mdespriee/spark,hhbyyh/spark,sahilTakiar/spark,bdrillard/spark,zuotingbing/spark,Panos-Bletsos/spark-cost-model-optimizer,kiszk/spark,rezasafi/spark,ueshin/apache-spark,techaddict/spark,byakuinss/spark,witgo/spark,jrshust/spark,goldmedal/spark,srowen/spark,stanzhai/spark,MLnick/spark,wangyum/spark,bdrillard/spark,bOOm-X/spark,WeichenXu123/spark,debugger87/spark,pgandhi999/spark,janewangfb/spark,LantaoJin/spark,rezasafi/spark,ddna1021/spark,lvdongr/spark,Aegeaner/spark,markhamstra/spark,kevinyu98/spark,narahari92/spark,dbtsai/spark,taroplus/spark,szhem/spark,goldmedal/spark,sureshthalamati/spark,rekhajoshm/spark,debugger87/spark,ahnqirage/spark,sachintyagi22/spark,rikima/spark,tengpeng/spark,JoshRosen/spark,bdrillard/spark,esi-mineset/spark,gengliangwang/spark,rikima/spark,esi-mineset/spark,hvanhovell/spark,tejasapatil/spark,maropu/spark,publicRoman/spark,zero323/spark,aosagie/spark,yanboliang/spark,milliman/spark,ericvandenbergfb/spark,nlalevee/spark,zzcclp/spark,adrian-ionescu/apache-spark,ddna1021/spark,kimoonkim/spark,zhouyejoe/spark,dhruve/spark,sureshthalamati/spark,kimoonkim/spark,nchammas/spark,akopich/spark,liutang123/spark,aosagie/spark,huang1900/spark,highfei2011/spark,jianran/spark,jkbradley/spark,pgandhi999/spark,szhem/spark,taroplus/spark,patrick-nicholson/spark,LantaoJin/spark,bOOm-X/spark,saturday-shi/spark,witgo/spark,sureshthalamati/spark,bravo-zhang/spark,byakuinss/spark,ibm-research-ireland/sparkoscope,pgandhi999/spark,narahari92/spark,nlalevee/spark,panfengfeng/spark,akopich/spark,spark-test/spark,apache-spark-on-k8s/spark,skonto/spark,zhouyejoe/spark,aray/spark,gioenn/xSpark,joseph-torres/spark,kissmetrics/spark,publicRoman/spark,chuckchen/spark,gengliangwang/spark,pronix/spark,cin/spark,ahnqirage/spark,xuanyuanking/spark,ibm-research-ireland/sparkoscope,WindCanDie/spark,ueshin/apache-spark,nchammas/spark,1haodian/spark,xflin/spark,wangyum/spark,eyalfa/spark,map222/spark,mike0sv/spark,saturday-shi/spark,kiszk/spark,zzcclp/spark,someorz/spark,andrewor14/spark,stanzhai/spark,poffuomo/spark,saturday-shi/spark,nchammas/spark,liyichao/spark,aosagie/spark,caneGuy/spark,darionyaphet/spark,UndeadBaneGitHub/spark,kimoonkim/spark,ueshin/apache-spark,haowu80s/spark,big-pegasus/spark,pronix/spark,metamx/spark,mdespriee/spark,mike0sv/spark,vinodkc/spark,ron8hu/spark,guoxiaolongzte/spark,cloud-fan/spark,akopich/spark,mdespriee/spark,zzcclp/spark,minixalpha/spark,sachintyagi22/spark,kimoonkim/spark,huang1900/spark,skonto/spark,UndeadBaneGitHub/spark,haowu80s/spark,narahari92/spark,chuckchen/spark,zero323/spark,patrick-nicholson/spark,adrian-ionescu/apache-spark,ibm-research-ireland/sparkoscope,liutang123/spark,nchammas/spark,SHASHANKB/spark,debugger87/spark,darionyaphet/spark,jrshust/spark,Aegeaner/spark,patrick-nicholson/spark,ajaysaini725/spark,actuaryzhang/spark,HyukjinKwon/spark,jrshust/spark,wangyum/spark,apache/spark,big-pegasus/spark,goldmedal/spark,gengliangwang/spark,skonto/spark,huang1900/spark,loneknightpy/spark,ueshin/apache-spark,big-pegasus/spark,setjet/spark,dhruve/spark,ConeyLiu/spark,xflin/spark,ptkool/spark,bdrillard/spark,aosagie/spark,WeichenXu123/spark,esi-mineset/spark,ConeyLiu/spark,srowen/spark,ioana-delaney/spark,jlopezmalla/spark,someorz/spark,icexelloss/spark,saltstar/spark,SnappyDataInc/spark,byakuinss/spark,BryanCutler/spark,Aegeaner/spark,aosagie/spark,pgandhi999/spark,yanboliang/spark,rikima/spark,haowu80s/spark,saltstar/spark,sureshthalamati/spark,brad-kaiser/spark,panfengfeng/spark,ajaysaini725/spark,panfengfeng/spark,rednaxelafx/apache-spark,nilsgrabbert/spark,yanboliang/spark,narahari92/spark,liyichao/spark,mahak/spark,milliman/spark,pronix/spark,facaiy/spark,szhem/spark,setjet/spark,kevinyu98/spark,guoxiaolongzte/spark,metamx/spark,ConeyLiu/spark,mike0sv/spark,apache-spark-on-k8s/spark,eyalfa/spark,mahak/spark,aray/spark,hhbyyh/spark,pgandhi999/spark,highfei2011/spark,eyalfa/spark,xuanyuanking/spark,sachintyagi22/spark,guoxiaolongzte/spark,brad-kaiser/spark,ron8hu/spark,lvdongr/spark,shubhamchopra/spark