áá¬ážááŸááºáž 7.04 ááŸá
áááºá Linux ááŸáá·áº macOS ááŸá C ááŸáá·áº C++ áá¬áá¬á
áá¬ážáá»á¬ážá¡ááœáẠPVS-Studio ááœá²ááŒááºážá
áááºááŒá¬áá°ááẠáááºááŸááºáá¬ážááá·áºááá¯ááºáá»á¬ážá
á¬áááºážááᯠá
á
áºáá±ážááẠá
ááºážáááºááœá±ážáá»ááºááŸá¯áá
áºáá¯ááŸááááºá áá¯ááºá¡áá
áºááᯠá¡áá¯á¶ážááŒá¯á commits áá»á¬ážááᯠá
á
áºáá±ážáááºááŸáá·áº áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠááœá²áá¯ááºáááºá¡ááœáẠááœá²ááŒááºážá
áááºááŒá¬áááááá¬ááᯠááẠconfigure áá¯ááºááá¯ááºáá«áááºá á€áá±á¬ááºážáá«ážááœáẠTravis CIá Buddy ááŸáá·áº AppVeyor áá²á·ááá¯á·áá±á¬ áá°ááŒáá¯ááºáá»á¬ážáá±á¬ CI (Continuous Integration) á
áá
áºáá»á¬ážááœáẠGitHub ááá±á¬áá»ááºááá¯ááºá
á¬áááºážááᯠáááºááá¯á·áááºááŸááºááááºááᯠááŒááá«áááºá
ááá¯ááºá á¬áááºážá á áºáá±ážáá¯ááº
Linux ááŸáá·áº macOS á¡ááœáẠPVS-Studio 7.04 áá¬ážááŸááºážááœáẠá¡áááºážá¡ááŒá
áºááá¯ááºáá»á¬ážá
á¬áááºážááᯠá
á
áºáá±ážááẠáá¯ááºáá
áºáá¯ááŸááááºá áááºážááẠááá·áºá¡á¬áž ááá¯ááºáá
áºáá¯áá¯ááºáá±ážááẠá
áá
áºáááºáá±á¬ááºááŸá¯ááœáá·áºááŒá¯ááá·áº ááá±á¬áá»ááºáá»á¬ážá¡ááœáẠá¡áá¯ááºáá¯ááºáááºá
ááá¯á·á¡ááŒááºá ááá¯ááºáá»á¬ážá á¬áááºážááá¯á á áºáá±ážááŒááºážáá¯ááºááᯠcompiler áááºáááºááŸá¯ááŒá±áá¬áá±á¬áẠ(pvs-studio-analyzer trace) ááŸáá·áºááœá²áá¯á¶ážááá¯ááºáááºá áá«ááá¯áá¯ááºááá¯á·á ááááŠážá áœá¬ áááºááẠááá±á¬áá»ááºá áááºáá±á¬ááºááŸá¯ á¡ááŒáá·áºá¡á á¯á¶ááᯠáá¯ááºáá±á¬ááºááŒá®áž áááºážááᯠááŒá±áá¬áá¶ááẠááá¯á¡ááºááŒá®áž ááœá²ááŒááºážá áááºááŒá¬áá°ááẠá á áºáá±ážáá±ááá·áº ááá¯ááºá¡á¬ážáá¯á¶ážá á á¯á ááºážááŸá¯áá±á¬ááºáá»á¬ážááá¯ááºáᬠá¡áá»ááºá¡áááºá¡ááŒáá·áºá¡á á¯á¶ááᯠá á¯áá±á¬ááºážááá¯ááºá á±ááẠááááá¯á¶áž ááá¯á¡ááºáááºááŒá áºáááºá
ááá¯á·áá±á¬áºá á€ááœá±ážáá»ááºááŸá¯ááœáẠáááá¬áááºááŸá¬ážáá±á¬ á¡á¬ážáááºážáá»ááºáá áºáá¯ááŸáááẠ- ááœáŸááºáááºááá¯ááºážááœáẠááá±á¬áá»ááºáá áºáá¯áá¯á¶ážá á¡ááŒáá·áºá¡ááááºáá±á¬ááºááŸá¯ááŒá±áá¬áá¶ááŸá¯ááᯠáá¯ááºáá±á¬ááºááẠááá¯á¡ááºáááºááŒá áºááŒá®ážá áááºážááẠá¡ááŒááºá á áºáá±ážáá»ááºáá¡áá°á¡áááŸáá·áº ááá·áºáá»ááºáááºááŒá áºáááºá ááá¯á·ááá¯ááºá ááŒá±áá¬áá¶ááŒááºážááááºááᯠááá¯ááºááá¯ááºáááºááŸáºáá¯ááºáá«áá á¡áááºážá¡ááŒá áºááá¯ááºááᯠááŸá®ááá¯ááŸá¯áááºáá±á¬ááºáá¯á¶ááẠááŒá±áá¬áá¶ááŒá®ážáá±á¬ááºááœáẠááŒá±á¬ááºážáá²ááœá¬ážáá«áá ááœá²ááŒááºážá áááºááŒá¬áááááá¬á áá±á¬ááºáááºááœá²ááœáŸáá·áºáááºááŸá¯ááẠáááŒáá·áºá á¯á¶ááá¯ááºáá±á¬á·ááẠ(á¥ááá¬á #include á¡áá áºáá áºáá¯ááᯠá¡áááºážá¡ááŒá áºááá¯ááºáá»á¬ážáá²á០áá áºáá¯ááá¯á· áá±á«ááºážááá·áºáá¬ážáááº)á
ááá¯á·ááŒá±á¬áá·áºá commits ááá¯á
á
áºáá±ážááẠááá¯á·ááá¯áẠáá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠááœá²áá¯ááºáááºá¡ááœáẠááŒá±áá¬áá¶ááŸááºáááºážáá
áºáá¯áá«ááŸááá±á¬ ááá¯ááºá
á¬áááºážá
á
áºáá±ážáá¯ááºááᯠá¡áá¯á¶ážááŒá¯ááẠáá»áœááºá¯ááºááá¯á· á¡ááŒá¶ááŒá¯áá¬ážááŒááºážáááŸááá«á commit ááá¯á
á
áºáá±ážááá·áºá¡áá« ááá¯ážááŒáá·áºáááºáá±á¬ááºááŸá¯áá
áºáá¯ááᯠáááºáá¯ááºááá¯ááºáá«áá áá¯ááºááá¯á¡áá¯á¶ážááŒá¯ááẠá
ááºážá
á¬ážáá«á
ááœá²ááŒááºážá áááºááŒá¬ááŸá¯á¡ááœáẠáááºážááŒá áºááá¯ááºáá»á¬ážá á¬áááºážááᯠá á¬áá¬ážááá¯ááºáá áºáá¯ááœáẠááááºážáááºážááŒá®áž áá«áá¬áá®áá¬ááᯠá¡áá¯á¶ážááŒá¯á ááœá²ááŒááºážá áááºááŒá¬áá°áᶠáá±ážááá¯á·áááºá -S:
pvs-studio-analyzer analyze ... -f build/compile_commands.json -S check-list.txt
á€ááá¯ááºááẠááá¯ááºáá»á¬ážáá®ááá¯á· áááºá ááºááŸá¯ ááá¯á·ááá¯áẠá¡ááŒáœááºážáá²á·áááºážááŒá±á¬ááºážáá»á¬ážááᯠáááºááŸááºáá±ážáá¬ážááŒá®áž ááá¯ááºá¡áá áºáá áºáá¯á á®ááẠááá¯ááºážá¡áá áºááœáẠááŸááá±ááá«áááºá ááœá²ááŒááºážá áááºááŒá¬áááºá¡ááœáẠááá¯ááºáá»á¬ážáá¡áááºáá»á¬ážáá¬áá á á¬áá¬ážá¡áá»áá¯ážáá»áá¯ážááá¯áááºáž áááºááŸááºááœáá·áºááŒá¯áá¬ážáááºá ááœá²ááŒááºážá áááºááŒá¬áá°ááẠáááºážááẠááá¯ááºáá áºáá¯ááá¯ááºááŒá±á¬ááºáž ááœá±á·ááááºááŒá áºááŒá®áž á á¬ááŒá±á¬ááºážááᯠáá»á áºáá»á°ááŸá¯áááºááŒá áºáááºá ááá¯ááºáá»á¬ážááᯠááá¯ááºááá¯ááºáááºááŸááºáá«á ááŸááºáá»ááºáá±ážááŒááºážá¡ááœáẠáááºážááẠá¡áá¯á¶ážáááºááá¯ááºáááºá ááá¯á·áá±á¬áºá á¥ááá¬á¡á¬ážááŒáá·áº commit ááá¯á·ááá¯áẠpull request ááŸááá¯ááºáá»á¬áž CI ááœá²ááŒááºážá áááºááŒá¬ááŸá¯á¡ááœááºáž áááŒá¬áá ááá¯ááºáá»á¬ážá á¬áááºážááᯠáá¯ááºáá±ážáááá·áºáááºá
ááᯠá€áá¯ááºááᯠá¡áá¯á¶ážááŒá¯á áá¯ááºá¡áá áºááᯠáááºáááœá¶á·ááŒáá¯ážáá±ážáá¬áááœá²ááá¯á· ááá±á¬ááºááŸááá® áá»áŸááºááŒááºá áœá¬ á ááºážáááºááá¯ááºáááºá á áá á áºáá±ážá áá áºááẠááœá²ááŒááºážá áááºááŒá¬ááŸá¯ááááá±ážáá»ááºáá»á¬ážááᯠáá¯á¶á·ááŒááºáááºá¡ááœááºá á¡áá¯á¶ážáááºááŸá¯ plog- converter á¡áá¶áááºááá·áºáá¬ážáááºá --ááœáŸááºááŒ-ááááá±ážáá»ááºáá»á¬áž:
plog-converter ... --indicate-warnings ... -o /path/to/report.tasks ...
á€á¡áá¶ááŒáá·áºá ááœá²ááŒááºážá áááºááŒá¬ááŸá¯á¡á á®áááºáá¶á á¬ááœáẠááááá±ážáá»ááºáá»á¬ážááŸááá±áá«á converter ááẠáá¯áááá¯ááºáá±á¬áá¯ááºááᯠááŒááºáá±ážáá«áááºá ááŒááºáá±ážááá·áºáá¯ááºááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº áááºááẠá¡ááŒáá¯áá»áááºáááºáá»áááºáá áºáá¯á¡á¬áž ááááºááá¯á·ááŒááºážá áááááŒá¯ááŒááºáž ááá¯á·ááá¯áẠááœá²áá¯ááºááŒááºáž áá±á¬ááºážááá¯áá»ááºááá¯á·ááᯠáááºáá¬ážááŒááºáá±á«áºááœáẠáá¯ááºáá¯ááºáá¬ážáá±á¬ ááœá²ááŒááºážá áááºááŒá¬ááŸá¯á¡á á®áááºáá¶á á¬ááᯠááŒáááŒááºážá áá»áŸáá±ááŒááºáž ááá¯á·ááá¯áẠá á¬ááá¯ááºááŒáá·áº áá±ážááá¯á·ááá¯ááºáá«áááºá
ááŸááºáá»ááºá ááá¯ááºáá»á¬ážá á¬áááºážááᯠááááá¯á¶ážá ááŒá®áž ááœá²ááŒááºážá áááºááŒá¬ááá·áºá¡áá«á ááá±á¬áá»ááºáá áºáá¯áá¯á¶ážááᯠááœá²ááŒááºážá áááºááŒá¬áááºááŒá áºáá±á¬ááŒá±á¬áá·áºá ááœá²ááŒááºážá áááºááŒá¬áá°ááẠáá±á«ááºážá á®ážááá¯ááºáá»á¬ážáá±á«áºááŸá ááá±á¬áá»ááºá á¡áááºážá¡ááŒá áºááá¯ááºáá»á¬ážá ááŸá®ááá¯ááŸá¯ááá¯ááºáá áºááá¯ááºááᯠáá¯ááºáá¯ááºááẠááá¯á¡ááºáááºá áááºážááẠC ááŸáá·áº C++ ááá¯ááºáá»á¬ážááá¯ááœá²ááŒááºážá áááºááŒá¬ááŒááºážáá¡ááºá¹áá«áááºáá áºáá¯ááŒá áºáááºá á¡áá¬áááºááœááºá ááŸá®ááá¯ááŸá¯ááá¯ááºááᯠáááºááŸáºáá¯ááºááá¯ááºááŒá®áž ááœá²ááŒááºážá áááºááŒá¬áá°á០á¡ááá¯á¡áá»á±á¬áẠá¡ááºááááºáá¯ááºáááºááŒá áºáááºá ááá¯ážááŒáŸáá·áºááœá²ááŒááºážá áááºááŒá¬ááŸá¯áá¯ááºááᯠá¡áá¯á¶ážááŒá¯á ááá¯ááºá á¬áááºážá á áºáá±ážááŒááºážáá¯ááºááᯠá¡áá¯á¶ážááŒá¯ááá·áºá¡áá« á á áºáá±ážááŒááºážá á¡á¬ážáá¬áá»ááºááŸá¬ á¡áá¬ááá¹áá¯ááá¯ááºáá»á¬ážááá¯ááºáá² áááºážááá¯ááºááá¯áᬠáááºááŸáºáá¯ááºááẠááá¯á¡ááºáá«áááºá
ááœá²áá¯ááºáá±á¬ááºážááá¯ááŸá¯ ááœá²ááŒááºážá áááºááŒá¬ááŒááºážá á¡ááœá±ááœá±á¡ááŒá±áá¶áá°
ááá±á¬áá»ááºáá áºáá¯áá¯á¶ážááᯠááœá²ááŒááºážá áááºááŒá¬ááŒááºážááẠá¡áá»áááºá¡áá»á¬ážááŒá®ážáá°ááá±á¬ááŒá±á¬áá·áº á¡á áááºá¡ááá¯ááºážá¡áá»áá¯á·ááá¯áᬠá á áºáá±ážááẠá¡áááá¹áá¬ááºááŸááá«áááºá ááŒá¿áá¬ááŸá¬ áááºááẠááá¯ááºá¡áá áºáá»á¬ážááᯠá¡ááŒá¬ážááá±á¬áá»ááºááá¯ááºáá»á¬ážá០ááœá²áá¯ááºááẠááá¯á¡ááºáá±á¬ááŒá±á¬áá·áºááŒá áºáááºá
á¡ááá¯ááºážááŸá áºáá¯áá«áá±á¬ á¡ááá¯ááºážá¡áááºáá áºáá¯á á¥ááá¬ááᯠáá¯á¶ážáááºááŒáá·áºáá«-
áááááááºááᯠáááºáá±á¬ááºááŒáá«á áá¯á· A1 á á áºáá±ážááŒá®ážáá±á¬ áá¯ááºá¡ááŒá±á¬ááºá¡ááŒá¬ážáá«ááŸááááºá áááºážáááºážá á±á¬ááŒá®áž áá»áœááºáá±á¬áºááá¯á· ááœááºááá·áºááá± á¡áááºáá áºáᯠáá¯ááºáá¬ážáááºá A1 ááá¯ááºá¡áá»áá¯á·ááᯠááŒá±á¬ááºážáá²áá²á·áááºá
áá±á¬ááºá០ááááá¬ážáááá¬áá±á¬á· áá±áá»á¬áááºá A1 áá±á¬ááºááẠááááááẠááŸá áºáá¯ááŸááá±á¬áºáááºáž áááºážááá¯á·ááẠáá»áœááºá¯ááºááá¯á·ááœáẠáááááááºáá±á¬ááŒá±á¬áá·áº á¡ááŒá¬ážáá¬áááœá²áá»á¬ážá áá±á«ááºážá ááºážááŒááºážáááºážááŒá áºáááºá áá¬á áá¬. ááá¯áááºáž á¡áá»áááºáá»áá¬ááŒá®ááŒá áºáááºá hotfix á¡áááºááá·áºá ááá¯á·ááŒá±á¬áá·áº áá±á«ááºážá ááºážááẠáá±á¬ááºážááá¯áá»ááºáá áºáᯠááœááºáá±á«áºáá¬áá²á·áááºá B3 О A3.
áááºážááá¯á·á áá±á«ááºážá ááºážááŒááºážá ááááºáá áºáá¯áá¯á¶ážááᯠá á áºáá±ážááẠááŒá áºááá¯ááºáá±á¬áºáááºážá ááá¯ááºá¡áááºážáááºááá¯áᬠááŒá±á¬ááºážáá²áá¬ážáá±á¬ááŒá±á¬áá·áº áááºážááẠááŸááºáá»á¬ážááŒá®áž ááá¬ážáá»áŸáááŸá¯ áááŸáááŒá±á¬ááºáž ááááááºá ááá¯á·ááŒá±á¬áá·áº ááŒá±á¬ááºážáá²áá¬ážáá±á¬ á¡áá¬áá»á¬ážááá¯áᬠááœá²ááŒááºážá áááºááŒá¬ááẠááá¯ááá¯áááá±á¬ááºáááºá
áá«ááá¯áá¯ááºááá¯á·á áá»áœááºá¯ááºááá¯á·á ááááºá¡ááŒá Ạáá±á«ááºážá ááºážááá¯áá²á· á¡ááá¯ááºážá¡áááºáá²á· áŠážáá±á«ááºážááŸá¬ ááŸááá²á· á¡ááá¯ááºážá¡áááºááœá±ááŒá¬áž ááŒá¬ážáá¬ážáá»ááºááᯠáááŸááá«áááºá
git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
$MERGE_BASE áá±á¬ááºá០á¡áá±ážá ááẠá ááºážá á¬ážáá«áááºá á¡ááŸááºááŸá¬ CI áááºáá±á¬ááºááŸá¯ááá¯ááºážááẠáá±á«ááºážá ááºážááŒááºážá¡ááœáẠá¡ááŒá±áá¶ááŸáá·áºáááºáááºáá±á¬ ááá¯á¡ááºáá±á¬á¡áá»ááºá¡áááºáá»á¬ážááᯠáá±ážá áœááºážáááºááá¯ááºáá±á¬ááŒá±á¬áá·áº á€áá±áá¬áááŸáááẠáááºážáááºážá¡áá áºáá»á¬ážááᯠá¡áá»áááºááá¯ááºážááœáẠááŸá¬ááœá±ááááºááŒá áºáá«áááºá áá±á¬áºááŒáá¬ážáá±á¬ áááºáááºáá±á¬ááºááŸá¯áá áºáá¯á á®ááœáẠáááºážááᯠá¡á±á¬ááºááœááºá¡áá±ážá áááºáá±á¬áºááŒáá«áááºá
ááá¯á·ááŒá±á¬áá·áºá ááŒá±á¬ááºážáá²áá¬ážáá±á¬ ááá¯ááºá¡áááºáá»á¬ážá á¬áááºáž ááá¯á·ááá¯áẠá¡ááá¯ááºážá¡áááºáá»á¬ážááŒá¬áž ááŒá¬ážáá¬ážáá»ááºááᯠáá»áœááºá¯ááºááá¯á·áááŸááááºá ááá¯áá»áœááºá¯ááºááá¯á·áááºááá¯ááºááá¯áá±ážáááºááá¯á¡ááºáááºá .pvs-pr.list (áá»áœááºá¯ááºááá¯á·ááẠá¡áááºáá±á¬áºááŒáá« output ááᯠáááºážáá¶ááá¯á· ááŒááºááœáŸááºážáá²á·áááº) ááœá²ááŒááºážá áááºááŒá¬áá°áá¶-
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
-S .pvs-pr.list
ááœá²ááŒááºážá áááºááŒá¬ááŒá®ážáá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠááŸááºáááºážááá¯áẠ(PVS-Studio.log) ááᯠáááºááá¯ááºáá±á¬ áá±á¬áºáááºááá¯á· ááŒá±á¬ááºážááẠááá¯á¡ááºáááº-
plog-converter -t errorfile PVS-Studio.log --cerr -w
ဠcommand ááẠerror áá»á¬ážááᯠá
á¬áááºážááŒá¯á
á¯áá±ážáááá·áºáááºá
á€áá±áá¬ááœááºáᬠáá»áœááºá¯ááºááá¯á·ááẠá¡ááŸá¬ážáá»á¬ážááá¯ááŒááááºáá¬áá ááŒá¿áá¬áá»á¬ážááŸááá±ááŒááºážááŸáá·áºáááºáááºá áááºáááºááŒááºážááŸáá·áº á ááºážáááºááŒááºážá¡ááœáẠáá»áœááºá¯ááºááá¯á·ááááºáá±á¬ááºááŸá¯ááᯠá¡áááá±ážáááºáááºáž ááá¯á¡ááºáá«áááºá áááºážá¡ááœááºá á¡áá¶áá áºáá¯ááᯠconverter ááá¯á· ááá·áºáá¬ážáááºá -W (--ááœáŸááºááŒ-ááááá±ážáá»ááºáá»á¬áž) á¡áááºážáá¯á¶áž ááœá²ááŒááºážá áááºááŒá¬áá°ááááá±ážáá»ááºáá áºáá¯ááŸááá»áŸááºá á¡áá¯á¶ážáááºááŸá¯áááŒááºáá¯áẠplog- converter 2 ááá¯á·ááŒá±á¬ááºážáááºááŒá áºááŒá®ážá áááºážááẠááœá²áá¯ááºáá±á¬ááºážááá¯áá»ááºááá¯ááºáá»á¬ážááœáẠááŒá áºááá¯ááºáá»á±ááŸááá±á¬ á¡ááŸá¬ážá¡ááœááºážáá»á¬ážááŸááá±ááŒá±á¬ááºáž CI áááºáá±á¬ááºááŸá¯ááᯠá¡ááŒá±á¬ááºážááŒá¬ážáááºááŒá áºáááºá
áá ẠCI
configuration ááᯠááá¯ááºáá¯á¶á á¶ááŒáá·áº ááŒá¯áá¯ááºáá¬ážáááºá .travis.yml. á¡áááºááŒá±á á±áááºá ááá¯ááºááŸáá±á«áºááá·áºáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážáá«ááŸááá±á¬áá®ážááŒá¬áž bash script ááœááºá¡áá¬á¡á¬ážáá¯á¶ážááá¯ááá·áºáááºáá»áœááºá¯ááºá¡ááŒá¶ááŒá¯áá«áááºá .travis.yml (bash scriptname.sh function_name).
Script ááœáẠááá¯á¡ááºáá±á¬ áá¯ááºááᯠááá·áºáá«áááºá áá¬áž Bashááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠááá¯ááá¯áá¯ááºáá±á¬ááºááá¯ááºá áœááºážááŸááááºá á¡ááá¯ááºáž install á¡á±á¬ááºáá«á¡ááá¯ááºážáá±ážááŒáá«á áá¯á·á
install:
- bash .travis.sh travis_install
ááá·áºááœáẠááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááŸááá«áá áá¯á¶ážááá¯áá»á¬ážááᯠáááºááŸá¬ážááŒááºážááŒáá·áº áááºážááá¯á·ááᯠáá¬ááºááœáŸááºážááá¯á· ááœáŸá±á·ááá¯ááºáááºá
ááá¯ááºááá¯ááœáá·áºááŒáá·áºáá¡á±á¬áẠ.travis.sh áá¯ááºáá±á¬ááºáá»ááºááœáẠááœá²ááŒááºážá áááºááŒá¬ááŸá¯ á áá áºááá·áºááœááºážááŸá¯ááᯠáá±á«ááºážááá·áºáá«á travis_install():
travis_install() {
wget -q -O - https://files.viva64.com/etc/pubkey.txt
| sudo apt-key add -
sudo wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
sudo apt-get update -qq
sudo apt-get install -qq pvs-studio
}
á¡áᯠá¡ááá¯ááºážááᯠááá·áºááŒáá·áºáá¡á±á¬áẠáá¬ááºááœáŸááºáž ááœá²ááŒááºážá áááºááŒá¬ááŸá¯ááᯠáá¯ááºáá±á¬ááºáááº-
script:
- bash .travis.sh travis_script
ááŒá®ážáá±á¬á· bash áá¬ááºááœáŸááºážáá²ááŸá¬
travis_script() {
pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
git diff --name-only origin/HEAD > .pvs-pr.list
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
-S .pvs-pr.list
--disableLicenseExpirationCheck
else
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
--disableLicenseExpirationCheck
fi
plog-converter -t errorfile PVS-Studio.log --cerr -w
}
ááá±á¬áá»ááºááá¯áááºáá±á¬ááºááŒá®ážáá±á¬ááºá á¥ááá¬á ááá·áºááœáẠCMake áááºáá±á¬ááºááŸá¯ááŸááá«áá
travis_script() {
CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
cmake $CMAKE_ARGS CMakeLists.txt
make -j8
}
á€áá²á·ááá¯á· ááœááºáá±á«áºáá¬áááá·áºáááº-
travis_script() {
CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
cmake $CMAKE_ARGS CMakeLists.txt
make -j8
pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
git diff --name-only origin/HEAD > .pvs-pr.list
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
-S .pvs-pr.list
--disableLicenseExpirationCheck
else
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
--disableLicenseExpirationCheck
fi
plog-converter -t errorfile PVS-Studio.log --cerr -w
}
ááẠáááºááŸááºáá¬ážáá±á¬ áááºáááºážáá»áẠááááºážááŸááºáá»á¬ážááᯠáááááŒá¯ááááŒá®ážáá¬áž ááŒá áºáá±á¬ááºážááŒá áºááá¯ááºáá«áááºá $TRAVIS_PULL_REQUEST О $TRAVIS_BRANCH. Travis CI á áááºážááá¯á·ááᯠáá°á·áá¬áá¬áá° ááŒá±áá¬áááº-
- $TRAVIS_PULL_REQUEST ááœá²áá¯ááºááẠáá±á¬ááºážááá¯áá»ááºáá¶áá«ááºááᯠááááºážáááºážáá¬ážáá« ááá¯á·ááá¯áẠáááŸááºáá±á¬áá¬áááºá¡ááá¯ááºážá¡áááºááŒá áºáá»áŸááºá
- $TRAVIS_REPO_SLUG ááá±á¬áá»áẠrepository áá¡áááºááá¯ááááºážáááºážáá«á
á€áá¯ááºáá±á¬ááºáá»ááºá á¡ááºáááá¯áá®áááº
Travis CI ááẠáá¯ááºáá»á¬ážááᯠááŒááºáá±ážáááºá ááá¯á·ááŒá±á¬áá·áº ááááá±ážáá»ááºáá»á¬áž ááŸááá±ááŒááºážááẠáá¯ááºááᯠbuggy á¡ááŒá
Ạá¡áá¶ááŒááẠáááºáá±á¬ááºááŸá¯ááᯠááŒá±á¬ááŒáááá·áºáááºá
á€áá¯ááºá á¬ááŒá±á¬ááºážááᯠá¡áá®ážáááºáá±á·áá¬ááŒáá·áºááŒáá«á áá¯á·á
git diff --name-only origin/HEAD > .pvs-pr.list
á¡ááŸááºááŸá¬ Travis CI ááẠááœá²áááºáá±á¬ááºážááá¯ááŸá¯ááᯠááœá²ááŒááºážá áááºááŒá¬áá¬ááœáẠá¡ááá¯ááºážá¡áááºáá»á¬ážááᯠá¡ááá¯á¡áá»á±á¬áẠáá±á«ááºážá ááºážááŒááºážááŒá áºáááº-
ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠááœá²ááŒááºážá
áááºááŒá¬áááºá A4ááá¯áá»áŸáá B3->A3. á€á¡ááºá¹áá«áááºááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·áá¶á០ááœá¬ááŒá¬ážáá»ááºááᯠááœááºáá»ááºááẠááá¯á¡ááºáááºá Ð3á¡ááá¯ááºážá¡áááºáá²á· ááááºááá¯ááºážáá±ážáá² ááŸááááºá áá°á.
á¡áá±ážááŒá®ážáá±á¬á¡áá±ážá áááºá¡áá»ááºáá áºáá¯ááŸá¬ - á á¯á ááºážáá¬ážáá±á¬ áá¬áá¬ááŒááºáá°áá áºáá»á¬áž (*.cá *.ccá *.cpp á áááº) ááœáẠáá±á«ááºážá á®ážááá¯ááºáá»á¬ážá ááŸá®ááá¯ááŸá¯ááᯠááááºážáááºážáá¬ážáááºá ááœá²ááŒááºážá áááºááŒá¬áá°ááẠááá¯ááºáá»á¬ážá á¬áááºážááᯠá á áºáá±ážááá·áºáá¯ááºááœáẠááááá¯á¶ážá áááºááá·áºá¡áá»áááºááœáẠá¡ááá¯áá«ááŸá®ááá¯ááŸá¯áá»á¬ážááᯠááœááºáá»ááºááŒá®áž .PVS-Studio áááºážááœáŸááºááœáẠáááºážááá¯á·ááᯠááááºážáááºážáááºá Travis CI ááẠááá·áºá¡á¬áž ááá¯ááºááœá²áá»á¬ážááᯠáááºááŸáºáá¯ááºááẠááœáá·áºááŒá¯áááºá ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠáááºážááœáŸááºáá±áá¬ááᯠááááºážáááºážáá«áááºá .PVS-Studio/:
cache:
directories:
- .PVS-Studio/
á€áá¯ááºááᯠááá¯ááºááá¯á· ááá·áºááẠááá¯á¡ááºáááºá .travis.yml. á€áááºážááœáŸááºáá»ááºááẠááœá²ááŒááºážá áááºááŒá¬ááŒá®ážáá±á¬áẠá á¯áá±á¬ááºážáá¬ážáá±á¬ á¡áá»ááºá¡áááºá¡áá»áá¯ážáá»áá¯ážááᯠááááºážáááºážáá¬ážááŒá®ážá áááºážááẠááá¯ááºá á¬áááºážááœá²ááŒááºážá áááºááŒá¬ááŸá¯ ááá¯á·ááá¯áẠááá¯ážááŒáá·áºáá¯á¶ážáááºááŸá¯á áá±á¬ááºáááºááœá²áá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááᯠáááááá¬áᬠááŒááºáááºá á±áááºá áááºážááá¯ááá¯ááºáá±á¬ááºáá«áá ááœá²ááŒááºážá áááºááŒá¬áá°ááẠááá¯ááºá¡á¬ážáá¯á¶ážááᯠá¡áá»áááºááá¯ááºáž ááœá²ááŒááºážá áááºááŒá¬áááºááŒá áºáááºá
áá¯ááºááŒá®áž buddy
Travis C.I.á
ááááá¯á¶ážá¡áá±áá²á·á áááºáá±á¬ááºááŸá¯ááá¯ááºážááŸá¬ áá¯ááºáá±á¬ááºáá»ááºá¡áá áºáá áºáᯠáááºááá·áºááá¯á·ááá¯áá«áááº-
ááá±á¬áá»ááºááá¯áááºáá±á¬ááºáááºá¡áá¯á¶ážááŒá¯áá±á¬ compiler ááá¯áááºááŸááºáá«á á€áá¯ááºáá±á¬ááºáá»ááºááœáẠááá·áºááœááºážáá¬ážááá·áº docker container ááᯠáááááŒá¯áá«á á¥ááá¬á¡á¬ážááŒáá·áºá GCC á¡ááœáẠá¡áá°ážááœááºááááºáá¬áá
áºáᯠááŸááááº-
ááᯠPVS-Studio ááŸáá·áº ááá¯á¡ááºáá±á¬ á¡áá¯á¶ážá¡áá±á¬ááºáá
á¹á
ááºážáá»á¬ážááᯠáááºáááºááŒáá«á
áá¯á·á
áááºážááŒááºáá°áᶠá¡á±á¬ááºáá«á
á¬ááŒá±á¬ááºážáá»á¬ážááᯠááá·áºáá«á
apt-get update && apt-get -y install wget gnupg jq
wget -q -O - https://files.viva64.com/etc/pubkey.txt | apt-key add -
wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
apt-get update && apt-get -y install pvs-studio
ááᯠRun áááºáẠ(ááá á¡áá¯ááºááœááº) ááá¯á· ááœá¬ážá áááºááá¯ááºáᬠá¡ááºáá®áᬠá¡ááœááºááá¯á· á¡á±á¬ááºáá« áá¯ááºááᯠáá±á«ááºážááá·áºááŒáá«á áá¯á·á
pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY
if [ "$BUDDY_EXECUTION_PULL_REQUEST_NO" != '' ]; then
PULL_REQUEST_ID="pulls/$BUDDY_EXECUTION_PULL_REQUEST_NO"
MERGE_BASE=`wget -qO -
https://api.github.com/repos/${BUDDY_REPO_SLUG}/${PULL_REQUEST_ID}
| jq -r ".base.ref"`
git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
--disableLicenseExpirationCheck
-S .pvs-pr.list
else
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
--disableLicenseExpirationCheck
fi
plog-converter -t errorfile PVS-Studio.log --cerr -w
Travs-CI ááá¹áááᯠáááºáááºááŒá®ážáá«áá á€áá¯ááºááẠááá·áºá¡ááœáẠáááºážááŸá®ážááŒá®ážáá¬ážááŒá áºáá±á¬áºáááºážá ááá¯á¡áá« á¡ááá·áºá¡áá áºáá áºáᯠááŸááá¬áá«ááŒá®-
á¡ááŸááºááŸá¬ ááᯠáá»áœááºá¯ááºááá¯á·ááẠáá±á«ááºážá
ááºážááŒááºážá ááááºááᯠááœá²ááŒááºážá
áááºááŒá¬ááŒááºáž ááá¯ááºáá²á ááœá²áá°áá±á¬ááºážááá¯ááŸá¯á០ááŒá¯áá¯ááºááá·áº áá¬áááœá²á á¡ááŒá®ážá¡áá²ááŒá
áºáááºá
ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠá¡ááŒá±á¡áá±á¡á áááááááºáá
áºáá¯ááœáẠááŸááá±áá«áááºá B3 ááŒá¬ážáá¬ážáá»ááºááᯠááá°ááẠááá¯á¡ááºáá«áááºá A3:
PULL_REQUEST_ID="pulls/$BUDDY_EXECUTION_PULL_REQUEST_NO"
MERGE_BASE=`wget -qO -
https://api.github.com/repos/${BUDDY_REPO_SLUG}/${PULL_REQUEST_ID}
| jq -r ".base.ref"`
git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
á¡ááá¯áá«áá¯á¶ážááŒááºááẠA3 GitHub API ááá¯áá¯á¶ážááŒáá«á áá¯á·á
https://api.github.com/repos/${USERNAME}/${REPO}/pulls/${PULL_REQUEST_ID}
Buddy ááŸáá±ážáá±á¬ á¡á±á¬ááºáá«ááááºážááŸááºáá»á¬ážááᯠáá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯áá²á·áááº-
- $BUDDY_EXECUTION_PULL_REQEUST_NO - áá±á¬ááºážááá¯áá»ááºáá¶áá«ááºááá¯ááœá²áá¯ááºáá«á
- $BUDDY_REPO_SLUG - á¡áá¯á¶ážááŒá¯áá°á¡áááºááŸáá·áº ááá¯ááŸá±á¬ááºááŸá¯ áá±á«ááºážá ááºááŸá¯ (á¥ááᬠmax / test)á
ááᯠá¡á±á¬ááºáá±á¬áºááŒáá« ááá¯ááºááᯠá¡áá¯á¶ážááŒá¯á á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠááááºážáááºážááŒá®áž ááœá²áá°áá±á¬ááºážááá¯ááŸá¯ ááœá²ááŒááºážá áááºááŒá¬ááŸá¯ááᯠááœáá·áºááŒáá«á áá¯á·á
Travis CI ááŸáá·áºááá°áá²á áá»áœááºá¯ááºááá¯á·áááºááŸááºáááºáááá¯á¡ááºáá«á .pvs-studio Buddy ááẠáá±á¬ááºáááºááœá² ááœáŸáá·áºáááºááŸá¯á¡ááœáẠááá¯ááºá¡á¬ážáá¯á¶ážááᯠá¡ááá¯á¡áá»á±á¬áẠááááºážáááºážáá¬ážáá±á¬ááŒá±á¬áá·áºá ááá¯á·ááŒá±á¬áá·áº áá±á¬ááºáá¯á¶ážáá»ááºáá±á¬á¡áá¬ááŸá¬ Buddy ááŸá PVS-Studio á¡ááœáẠáá±á¬á·ááºá¡ááºááŸáá·áº á
áá¬ážááŸááºááᯠááááºážáááºážáááºááŒá
áºáááºá á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠááááºážáááºážááŒá®ážáá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠááá¯ááºááá¯ááºážááá¯á· ááŒááºááœá¬ážáá«áááºá áá»áœááºá¯ááºááá¯á·ááẠááŒá±á¬ááºážáá²ááá¯ááºáá±á¬ áááºáááºáá»á¬ážááá¯á· ááœá¬ážáᬠPVS-Studio á¡ááœáẠáá±á¬á·ááºá¡ááºááŸáá·áº áá±á¬á·ááᯠáá±á«ááºážááá·áºááẠááá¯á¡ááºáááº-
áááºážáá±á¬ááºá ááœá²áá¯ááºááẠáá±á¬ááºážááá¯áá»ááºá¡áá
Ạááá¯á·ááá¯áẠáááááŒá¯ááŸá¯á á¡ááœááºá¡ááŒááºááẠá
á
áºáá±ážáá»ááºáá
áºáᯠá
áááºáááºááŒá
áºáááºá ááœááºááá·áºáá
áºáá¯ááœáẠá¡ááŸá¬ážá¡ááœááºážáá»á¬ážáá«ááŸááá»áŸáẠBuddy ááẠáááºážááᯠááœá²áá¯ááºááẠáá±á¬ááºážááá¯áá»ááºá
á¬áá»ááºááŸá¬ááœáẠáá±á¬ááºááŒáá«áááºá
AppVeyor
áááºá¡ááºáá¬áá±á·á áºááœáẠá¡áá¬á¡á¬ážáá¯á¶ážááŒá áºáá»ááºááŒá®áž ááá±á¬áá»ááºááá¯ááŸá±á¬ááºáá¬ááá¯á· *.yml ááá¯ááºááᯠááá·áºáááºáááá¯á¡ááºáá±á¬ááŒá±á¬áá·áº AppVeyor ááᯠá áá áºááá·áºááœááºážááŒááºážááẠBuddy ááŸáá·áº áááºáá°áááºá
ááá±á¬áá»ááºááŒá¯á¶áá¯á¶áá¯á¶ážáááºáá»ááºááŸá áááºáááºáá»á¬ážáááºááºááá¯á· ááœá¬ážááŒáá«á áá¯á·á
á€á
á¬áá»ááºááŸá¬ááᯠá¡á±á¬ááºááá¯á·áááºážááŒá®áž ááœá²áá°áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠáááºáá±á¬ááºáááºá¡ááœáẠáááºááŸáºáá»áœá±áá¬ááŸá¯ááᯠááœáá·áºááŒáá«á
áá¯á·-
ááᯠáá»áœááºá¯ááºááá¯á· áááºáá±á¬ááºááá·áº áá¯á¶ááŸáá·áº ááá¯á¡ááºáá±á¬ áááºáááºážáá»áẠááááºážááŸááºáá»á¬ážááᯠáááºááŸááºáá±ážááá·áº Environment tab ááá¯á· ááœá¬ážááŒáá«á
áá¯á·á
ááááºá¡ááá¯ááºážáá»á¬ážááá¯áááºááŒá®ážáá«á á€ááááºážááŸááºááŸá
áºáá¯ááᯠáááºá¡ááœááºáááºážááŸá®ážáá«áááºá PVS_KEY О PVS_USERNAME. ááá¯ááºáá«á PVS-Studio ááœá²ááŒááºážá
áááºááŒá¬áá°áááá¯ááºá
ááºááᯠá
á
áºáá±ážááẠááá¯á¡ááºááŒá±á¬ááºáž ááááá±ážáá«áá
á±á áá±á¬ááºááœááºá Bash áá¬ááºááœáŸááºážáá»á¬ážááœáẠáááºážááá¯á·ááᯠáááºáá¶ááœá±á·áá¯á¶áá«áááºá
á¡á±á¬ááºáá±á¬áºááŒáá« á á¬áá»ááºááŸá¬áá áºáá¯áááºážááœááºá ááááºážáááºážáááºá¡ááœáẠááá¯ááºááœá²ááᯠáááºááŸááºáá«-
áááºážááá¯áá»áœááºá¯ááºááá¯á·ááá¯ááºáá±á¬ááºáá«áá ááá¯ááºááŸá
áºáá¯á¡á
á¬áž ááá±á¬áá»ááºáá
áºáá¯áá¯á¶ážááᯠááá¯ááºážááŒá¬ážá
áááºááŒá¬ááá¯ááºáá±á¬áºáááºáž áááºááŸááºáá¬ážáá±á¬ááá¯ááºáá»á¬ážá¡áá±á«áºá¡ááŒá±áá¶á á¡ááœááºááááºááᯠáá»áœááºá¯ááºááá¯á·áááŸááááºááŒá
áºáááºá ááá¯á·ááŒá±á¬áá·áº ááŸááºáááºáá±á¬ áááºážááœáŸááºá¡áááºááᯠááá·áºááœááºážááẠá¡áá±ážááŒá®ážáá«áááºá
á¡áᯠáá¬ááºááœáŸááºážááᯠá ááºážáááºááá¯á· á¡áá»áááºáá±á¬ááºáá«ááŒá®á Tests tab ááá¯ááœáá·áºááŒá®áž Script ááá¯ááœá±ážáá»ááºáá«-
á€áá±á¬ááºááœáẠá¡á±á¬ááºáá«áá¯ááºááᯠáá°ážááá·áºáá«-
sudo apt-get update && sudo apt-get -y install jq
wget -q -O - https://files.viva64.com/etc/pubkey.txt
| sudo apt-key add -
sudo wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
sudo apt-get update && sudo apt-get -y install pvs-studio
pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY
PWD=$(pwd -L)
if [ "$APPVEYOR_PULL_REQUEST_NUMBER" != '' ]; then
PULL_REQUEST_ID="pulls/$APPVEYOR_PULL_REQUEST_NUMBER"
MERGE_BASE=`wget -qO -
https://api.github.com/repos/${APPVEYOR_REPO_NAME}/${PULL_REQUEST_ID}
| jq -r ".base.ref"`
git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
--disableLicenseExpirationCheck
--dump-files --dump-log pvs-dump.log
-S .pvs-pr.list
else
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
--disableLicenseExpirationCheck
fi
plog-converter -t errorfile PVS-Studio.log --cerr -w
áá¯ááºáá¡á±á¬ááºáá«á¡ááá¯ááºážááᯠááŒáá·áºááŒáá«á áá¯á·á
PWD=$(pwd -L)
if [ "$APPVEYOR_PULL_REQUEST_NUMBER" != '' ]; then
PULL_REQUEST_ID="pulls/$APPVEYOR_PULL_REQUEST_NUMBER"
MERGE_BASE=`wget -qO -
https://api.github.com/repos/${APPVEYOR_REPO_NAME}/${PULL_REQUEST_ID}
| jq -r ".base.ref"`
git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
--disableLicenseExpirationCheck
--dump-files --dump-log pvs-dump.log
-S .pvs-pr.list
else
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
--disableLicenseExpirationCheck
fi
á€áá°ááááºááá¯ážááᯠááááºážáááºážáá¬ážááá·áºáá±á¬ variable áá áºáá¯ááá¯á· pwd command ááááºááá¯ážá áááá»áá±á¬áá¬áááºáá±ážááŸá¯ááŸá¬ ááááá áºáá»ááºááœáẠáá°ážáááºážáá±áá¯á¶ááá±á¬áºáááºážá á¡áá¬á¡á¬ážáá¯á¶ážááᯠáááá»ááºážááŸááºážááŒáá«áááºá
AppVeyor ááœáẠááœá²ááŒááºážá áááºááŒá¬áá°á¡á¬áž á áá áºááá·áºááœááºážá ááºááœááºá ááœá²ááŒááºážá áááºááŒá¬áá°á á¡ááœááºáá°ážáááºážáá±á¬ á¡ááŒá¯á¡áá°áá áºáá¯ááᯠáá»áœááºá¯ááºááŒá¯á¶ááœá±á·áá²á·ááááºá áá áºáááºááœááºá á¡áá¬á¡á¬ážáá¯á¶áž ááŸááºáááºá áœá¬ áá¯ááºáá±á¬ááºáá²á·áá±á¬áºáááºáž ááœá²ááŒááºážá áááºááŒá¬ááŸá¯ áá áááºáá²á·áá«á áá»áœááºá¯ááºááá¯á·ááẠ/home/appveyor/projects/testcalc/ directory ááœáẠááŸááá±ááŒá±á¬ááºáž áááááŒá¯áááá²á·ááŒá®áž ááœá²ááŒááºážá áááºááŒá¬áá°ááẠ/opt/appveyor/build-agent/ ááœáẠááŸááá±ááŒá±á¬ááºáž áá±áá»á¬áá«áááºá ááá¯á·áá±á¬áẠ$PWD variable ááẠá¡áááºážáááºááááºáá¬ááŒá±á¬ááºáž áá»áœááºá¯ááºááá±á¬áá±á«ááºáá¬áááºá ááá¯á·ááŒá±á¬áá·áºá ááœá²ááŒááºážá áááºááŒá¬ááŸá¯áá áááºáá® áááºážááááºááá¯ážááᯠáá»áœááºá¯ááºááá¯ááºááá¯áẠááœááºážáá¶ááŒááºáááºáá²á·áááºá
ááŒá®ážá០á¡áá¬á¡á¬ážáá¯á¶ážááᯠááááºá¡ááá¯ááºážá
ááᯠá¡á±á¬ááºáá«á¡ááá¯á¡ááœá¬ááᯠáá¯á¶ážáááºááŒáá·áºáá«á
PULL_REQUEST_ID="pulls/$APPVEYOR_PULL_REQUEST_NUMBER"
MERGE_BASE=`wget -qO -
https://api.github.com/repos/${APPVEYOR_REPO_NAME}/${PULL_REQUEST_ID}
| jq -r ".base.ref"`
áááºážááœááºá ááœá²áá¯ááºááẠáá±á¬ááºážááá¯áá»ááºááᯠááŒá±áá¬ááá·áº á¡ááá¯ááºážá¡áááºáá»á¬ážááŒá¬áž ááœá¬ááŒá¬ážáá»ááºááᯠáá»áœááºá¯ááºááá¯á· áááŸááááºá áááºážá¡ááœáẠáá»áœááºá¯ááºááá¯á·ááẠá¡á±á¬ááºáá«áááºáááºážáá»áẠááááºážááŸááºáá»á¬áž ááá¯á¡ááºáá«áááºá
- $APPVEYOR_PULL_REQUEST_NUMBER - áá±á¬ááºážááá¯áá»ááºáá¶áá«ááºááᯠááœá²áá¯ááºáá«á
- $APPVEYOR_REPO_NAME - á¡áá¯á¶ážááŒá¯áá°á¡áááºááŸáá·áº ááá±á¬áá»áẠááá¯ááŸá±á¬ááºááŸá¯á
áá±á¬ááºáá»ááº
áá¯ááºáá«áááºá áá»áœááºá¯ááºááá¯á·ááẠááŒá áºááá¯ááºáá»á±ááŸááá±á¬ á ááºáááºáááŒááºáá±á«ááºážá ááºážááŒááºážáááºáá±á¬ááºááŸá¯á¡á¬ážáá¯á¶ážááᯠáá ááºážá á¬ážáá¬ážáá±á¬áºáááºážá áááºážááá¯á·á¡á¬ážáá¯á¶ážááœáẠá¡ááœááºáááºáá°áá±á¬ á¡áá¯ááºáá®ážááá·áºáá»á¬ážááŸááááºá áááºááŸáºáá¯ááºááŒááºážááŸááœá²á áááºáá±á¬ááºááŸá¯áá áºáá¯á á®ááẠáááºážáááá¯ááºááá¯áẠ"á ááºáá®áž" ááᯠááŒá¯áá¯ááºáá±ážáá±á¬ááŒá±á¬áá·áº á¡áá¬á¡á¬ážáá¯á¶ážááẠá¡ááŒá²áááºážááœá²ááŒá¬ážáá«áááºá
Travis-CI áá²á·ááá¯á· áá áºáá±áá¬áá¬ááœááºá áá¯ááºááŸáá·áº áá¯ááºá ááá¯ááºážááŸá áºáá¯ááẠá¡ááŒá áºáááºážá ááºá áœá¬ á¡áá¯ááºáá¯ááºáá«áááºá AppVeyor ááœááºáá²á·ááá¯á· áá áºáá±áá¬áá¬ááœáẠáááºááẠáááºáááºáá»á¬ážááœáẠááá¯ááºááœá²ááᯠáááºááŸááºááẠááá¯á¡ááºáááºá áá«áá±ááá·áº áá áºáá±áá¬áá¬ááŸá¬ áááºáá°ážááŒá¬ážáá²á·áá±á¬á·ááœá±ááᯠáááºáá®ážááŒá®áž áááºááŸáºáá¬ážáá²á·á¡ááá¯ááºážá¡á ááᯠáááºáá±ážááá¯á· á¡ááœáá·áºá¡áá±ážáá±ážááá¯á·á¡ááœáẠá áá áºá ááá·áºááᯠááœá²áá±á¬ááºááá¯á· ááŒáá¯ážá á¬ážáá«á ááá¯á·ááŒá±á¬áá·áºá á¡áááºááœááºááá±á¬áºááŒáá¬ážáá±á¬ á ááºáááºáááŒááºáá±á«ááºážá ááºážááŒááºážáááºáá±á¬ááºááŸá¯ááœáẠááœá²áá°áá±á¬ááºážááá¯ááŸá¯ááœá²ááŒááºážá áááºááŒá¬ááŸá¯ááᯠáááºáááºááŸááºááá¯áá«áá áááºááŸáºááœáẠááŒá¿áá¬ááŸááááºááá¯ááºááŒá±á¬ááºáž áŠážá áœá¬á á áºáá±ážáá«á
ááá¯á
áá¯ááºáá²á·á¡ááœááºáá»á±ážáá°ážáááºáá«áááºá áá
áºáá¯áá¯á¡áááºáááŒá±áá«á áá»áœááºá¯ááºááá¯á·áᶠá
á¬áá±ážáá«á
á€áá±á¬ááºážáá«ážááᯠá¡ááºá¹áááááºá
áá¬ážááŒá±á¬ ááááááºááŸáá·áº áá»áŸáá±ááá¯áá«áá áá¬áá¬ááŒááºááá·áºááº- Maxim Zvyagintsev ááᯠá¡áá¯á¶ážááŒá¯áá«á
source: www.habr.com