1:- autoload(library(aggregate)). 2:- autoload(library(apply)). 3:- autoload(library(lists)). 4:- autoload(library(sort)). 5:- autoload(library(yall)). 6:- autoload(library(http/json)). 7:- autoload(library(canny/pack)). 8:- autoload(library(canny/cover)). 9:- autoload(library(print/table)). 10:- autoload(library(gh/api)). 11 12cov :- 13 module_coverages(ModuleCoverages), 14 print_module_coverages(ModuleCoverages), 15 aggregate_all( 16 all(sum(Clauses), sum(Cov), sum(Fail), count), 17 member(_-coverage{ 18 clauses:Clauses, 19 cov:Cov, 20 fail:Fail 21 }, ModuleCoverages), 22 all(AllClauses, AllCov, AllFail, AllModule)), 23 AvgCov is AllCov / AllModule, 24 AvgFail is AllFail / AllModule, 25 format('Modules:~t~d~40|~n', [AllModule]), 26 format('Clauses:~t~d~40|~n', [AllClauses]), 27 format('Cov:~t~f~40|%~n', [AvgCov]), 28 format('Fail:~t~f~40|%~n', [AvgFail]), 29 ( getenv('CANNY_COV_GIST_ID', GistID) 30 -> shield_files([cov-AvgCov, fail-AvgFail], Files), 31 ghapi_update_gist(GistID, json(json([files=Files])), _, []) 32 ; true 33 ). 34 35module_coverages(ModuleCoverages) :- 36 load_pack_modules(canny_tudor, Modules), 37 findall( 38 Module-Coverage, 39 coverage_for_modules(run_tests, Modules, Module, Coverage), 40 ModuleCoverages). 41 42print_module_coverages(ModuleCoverages) :- 43 predsort(compare_cov_fail, ModuleCoverages, SortedModuleCoverages), 44 print_table( 45 member( 46 Module-coverage{ 47 clauses:Clauses, 48 cov:Cov, 49 fail:Fail 50 }, SortedModuleCoverages), [Module, Clauses, Cov, Fail]). 51 52compare_cov_fail(Order, _-Coverage1, _-Coverage2) :- 53 compare(Order0, Coverage1.cov, Coverage2.cov), 54 compare_fail(Order, Order0, Coverage1.fail, Coverage2.fail), 55 !. 56compare_cov_fail(>, _, _). 57 58compare_fail(<, <, _, _) :- !. 59compare_fail(<, =, Fail1, Fail2) :- compare(>, Fail1, Fail2), !. 60compare_fail(>, _, _, _). 61 62shield_files(Pairs, json(Files)) :- 63 maplist([Label-Percent, File=json([content=Content])]>> 64 ( atom_concat(Label, '.json', File), 65 format(atom(Message), '~1f%', [Percent]), 66 shield_color(Percent, Color), 67 atom_json_term(Content, json([ schemaVersion=1, 68 label=Label, 69 message=Message, 70 color=Color 71 ]), []), 72 format('raw/~s~n', [File]) 73 ), Pairs, Files). 74 75shield_color(Percent, red) :- Percent < 20, !. 76shield_color(Percent, orange) :- Percent < 40, !. 77shield_color(Percent, yellow) :- Percent < 60, !. 78shield_color(Percent, yellowgreen) :- Percent < 80, !. 79shield_color(_, green)