PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŸเตเดฐเดพเดตเดฟเดธเต CI, Buddy, AppVeyor เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† เด•เดฎเตเดฎเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต†เดฏเตเด‚ เดตเดฟเดถเด•เดฒเดจเด‚

PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŸเตเดฐเดพเดตเดฟเดธเต CI, Buddy, AppVeyor เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† เด•เดฎเตเดฎเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต†เดฏเตเด‚ เดตเดฟเดถเด•เดฒเดจเด‚
Linux, macOS เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† C, C++ เดญเดพเดทเด•เตพเด•เตเด•เดพเดฏเตเดณเตเดณ PVS-Studio เด…เดจเดฒเตˆเดธเดฑเดฟเตฝ, เดชเดคเดฟเดชเตเดชเต 7.04 เดฎเตเดคเตฝ, เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดซเดฏเดฒเตเด•เดณเตเดŸเต† เดฒเดฟเดธเตเดฑเตเดฑเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเตป เด’เดฐเต เดŸเต†เดธเตเดฑเตเดฑเต เด“เดชเตเดทเตป เดชเตเดฐเดคเตเดฏเด•เตเดทเดชเตเดชเต†เดŸเตเดŸเต. เดชเตเดคเดฟเดฏ เดฎเต‹เดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เด•เดฎเตเดฎเดฟเดฑเตเดฑเตเด•เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเดจเตเด‚ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เดชเดฟเตปเดตเดฒเดฟเด•เตเด•เดพเดจเตเด‚ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด…เดจเดฒเตˆเดธเตผ เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเดพเด‚. Travis CI, Buddy, AppVeyor เดชเต‹เดฒเตเดณเตเดณ เดœเดจเดชเตเดฐเดฟเดฏ เดธเดฟเด (เดคเตเดŸเตผเดšเตเดšเดฏเตเดณเตเดณ เดธเด‚เดฏเต‹เดœเดจเด‚) เดธเดฟเดธเตเดฑเตเดฑเด™เตเด™เดณเดฟเตฝ GitHub เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเตเดฑเต† เดฎเดพเดฑเดฟเดฏ เดซเดฏเดฒเตเด•เดณเตเดŸเต† เดฒเดฟเดธเตเดฑเตเดฑเต เดŽเด™เตเด™เดจเต† เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเดฎเต†เดจเตเดจเต เดˆ เดฒเต‡เด–เดจเด‚ เดจเดฟเด™เตเด™เดณเต‹เดŸเต เดชเดฑเดฏเตเด‚.

เดซเดฏเตฝ เดฒเดฟเดธเตเดฑเตเดฑเต เดšเต†เด•เตเด•เดฟเด‚เด—เต เดฎเต‹เดกเต

เดชเดฟเดตเดฟเดŽเดธเต-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ C, C++, C#, Java เดŽเดจเตเดจเดฟเดตเดฏเดฟเตฝ เดŽเดดเตเดคเดฟเดฏ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เดณเตเดŸเต† เดธเต‹เดดเตเดธเต เด•เต‹เดกเดฟเดฒเต† เดชเดฟเดถเด•เตเด•เดณเตเด‚ เดธเดพเดงเตเดฏเดคเดฏเตเดณเตเดณ เด•เต‡เดŸเตเดชเดพเดŸเตเด•เดณเตเด‚ เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เด‰เดชเด•เดฐเดฃเดฎเดพเดฃเต. Windows, Linux, macOS เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† 64-เดฌเดฟเดฑเตเดฑเต เดธเดฟเดธเตเดฑเตเดฑเด™เตเด™เดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต.

Linux, macOS เดŽเดจเตเดจเดฟเดตเดฏเตโ€Œเด•เตเด•เดพเดฏเตเดณเตเดณ PVS-Studio 7.04 เดชเดคเดฟเดชเตเดชเดฟเตฝ, เด‰เดฑเดตเดฟเดŸ เดซเดฏเดฒเตเด•เดณเตเดŸเต† เดฒเดฟเดธเตเดฑเตเดฑเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดฎเต‹เดกเต เดชเตเดฐเดคเตเดฏเด•เตเดทเดชเตเดชเต†เดŸเตเดŸเต. เด’เดฐเต เดซเดฏเตฝ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เดฌเดฟเตฝเดกเต เดธเดฟเดธเตเดฑเตเดฑเด‚ เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด•เตพเด•เตเด•เต เด‡เดคเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต compile_commands.json. เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดซเดฏเดฒเตเด•เดณเตเดŸเต† เดธเดฎเดพเดนเดพเดฐเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดตเดฟเดตเดฐเด™เตเด™เตพ เดŽเด•เตโ€Œเดธเตโ€ŒเดŸเตเดฐเดพเด•เตโ€Œเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต เด…เดจเดฒเตˆเดธเดฑเดฟเดจเต เด‡เดคเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เดจเดฟเด™เตเด™เดณเตเดŸเต† เดฌเดฟเตฝเดกเต เดธเดฟเดธเตเดฑเตเดฑเด‚ compile_commands.json เดซเดฏเตฝ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต† เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด…เดคเตเดคเดฐเดฎเตŠเดฐเต เดซเดฏเตฝ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เดพเดตเตเดจเตเดจเดคเดพเดฃเต. เด•เดฐเดŸเดฟ.

เด•เต‚เดŸเดพเดคเต†, เด•เด‚เดชเตˆเดฒเตผ เดฒเต‹เดžเตเดšเตเด•เดณเตเดŸเต† (pvs-studio-analyzer trace) เดธเตโ€ŒเดŸเตเดฐเต‡เดธเต เดŸเตเดฐเต‡เดธเต เดฒเต‹เด—เดฟเดจเตŠเดชเตเดชเด‚ เดซเดฏเตฝ เดฒเดฟเดธเตเดฑเตเดฑเต เดšเต†เด•เตเด•เดฟเด‚เด—เต เดฎเต‹เดกเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดตเตเดจเตเดจเดคเดพเดฃเต. เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดจเดฟเด™เตเด™เตพ เด†เดฆเตเดฏเด‚ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเตเดฑเต† เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏ เดจเดฟเตผเดฎเตเดฎเดพเดฃเด‚ เดจเดŸเดคเตเดคเตเด•เดฏเตเด‚ เด…เดคเต เดŸเตเดฐเดพเด•เตเด•เต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต, เด…เดคเตเดตเดดเดฟ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจ เดŽเดฒเตเดฒเดพ เดซเดฏเดฒเตเด•เดณเตเดŸเต†เดฏเตเด‚ เด•เด‚เดชเตˆเดฒเต‡เดทเตป เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏ เดตเดฟเดตเดฐเด™เตเด™เตพ เด…เดจเดฒเตˆเดธเตผ เดถเต‡เด–เดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เดˆ เด“เดชเตเดทเดจเต เด•เดพเดฐเตเดฏเดฎเดพเดฏ เดชเต‹เดฐเดพเดฏเตเดฎเดฏเตเดฃเตเดŸเต - เด’เดจเตเดจเตเด•เดฟเตฝ เดจเดฟเด™เตเด™เตพ เด…เดคเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดฎเตเดชเต‹เดดเต†เดฒเตเดฒเดพเด‚ เดฎเตเดดเตเดตเตป เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเตเดฑเต†เดฏเตเด‚ เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏ เดฌเดฟเตฝเดกเต เดŸเตเดฐเต†เดฏเตเดธเต เดจเดŸเดคเตเดคเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต, เด‡เดคเต เด’เดฐเต เดชเตเดฐเดคเดฟเดฌเดฆเตเดงเดค เดตเต‡เด—เดคเตเดคเดฟเตฝ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด†เดถเดฏเดคเตเดคเดฟเดจเต เดตเดฟเดฐเตเดฆเตเดงเดฎเดพเดฃเต. เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพ เดŸเตเดฐเต†เดฏเตโ€Œเดธเต เดซเดฒเด‚ เดคเดจเตเดจเต† เด•เดพเดทเต† เดšเต†เดฏเตเดฏเตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดŸเตเดฐเต†เดฏเตโ€Œเดธเดฟเดจเต เดถเต‡เดทเด‚ เดธเต‹เดดเตโ€Œเดธเต เดซเดฏเดฒเตเด•เดณเตเดŸเต† เดกเดฟเดชเตปเดกเตปเดธเดฟ เด˜เดŸเดจ เดฎเดพเดฑเตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ เด…เดจเดฒเตˆเดธเดฑเดฟเดจเตเดฑเต† เดคเตเดŸเตผเดจเตเดจเตเดณเตเดณ เดฑเดฃเตเดฃเตเด•เตพ เด…เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเต‡เด•เตเด•เดพเด‚ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดธเต‹เดดเตโ€Œเดธเต เดซเดฏเดฒเตเด•เดณเดฟเดฒเตŠเดจเตเดจเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดชเตเดคเดฟเดฏ #include เดšเต‡เตผเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต).

เด…เดคเดฟเดจเดพเตฝ, เด•เดฎเตเดฎเดฟเดฑเตเดฑเตเด•เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต‹ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เดชเดฟเตปเดตเดฒเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต‹ เดŸเตเดฐเต†เดฏเตเดธเต เดฒเต‹เด—เต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดซเดฏเตฝ เดฒเดฟเดธเตเดฑเตเดฑเต เดšเต†เด•เตเด•เต เดฎเต‹เดกเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เดžเด™เตเด™เตพ เดถเตเดชเดพเตผเดถ เดšเต†เดฏเตเดฏเตเดจเตเดจเดฟเดฒเตเดฒ. เด’เดฐเต เด•เดฎเตเดฎเดฟเดฑเตเดฑเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เด‡เตปเด•เตเดฐเดฟเดฎเต†เดจเตเดฑเตฝ เดฌเดฟเตฝเดกเต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเดฎเต†เด™เตเด•เดฟเตฝ, เดฎเต‹เดกเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเด• เดตเตผเดฆเตเดงเดฟเดšเตเดšเตเดตเดฐเตเดจเตเดจ เดตเดฟเดถเด•เดฒเดจเด‚.

เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเดจเตเดณเตเดณ เดธเต‹เดดเตเดธเต เดซเดฏเดฒเตเด•เดณเตเดŸเต† เดฒเดฟเดธเตเดฑเตเดฑเต เด’เดฐเต เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เดซเดฏเดฒเดฟเตฝ เดธเต‡เดตเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด…เดจเดฒเตˆเดธเดฑเดฟเดจเต เด•เตˆเดฎเดพเดฑเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต -S:

pvs-studio-analyzer analyze ... -f build/compile_commands.json -S check-list.txt

เดˆ เดซเดฏเตฝ เดซเดฏเดฒเตเด•เดณเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด†เดชเต‡เด•เตเดทเดฟเด•เดฎเต‹ เด•เต‡เดตเดฒเดฎเต‹ เด†เดฏ เดชเดพเดคเด•เตพ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เตเดจเตเดจเต, เด“เดฐเต‹ เดชเตเดคเดฟเดฏ เดซเดฏเดฒเตเด‚ เด’เดฐเต เดชเตเดคเดฟเดฏ เดฒเตˆเดจเดฟเตฝ เด†เดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚. เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเดจเดพเดฏเดฟ เดซเดฏเตฝ เดจเดพเดฎเด™เตเด™เตพ เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดตเดฟเดตเดฟเดง เดตเดพเดšเด•เด™เตเด™เดณเตเด‚ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เตเดจเตเดจเดคเต เดธเตเดตเต€เด•เดพเดฐเตเดฏเดฎเดพเดฃเต. เด‡เดคเต เด’เดฐเต เดซเดฏเดฒเดฒเตเดฒเต†เดจเตเดจเตเด‚ เดฒเตˆเตป เด…เดตเด—เดฃเดฟเด•เตเด•เตเดฎเต†เดจเตเดจเตเด‚ เด…เดจเดฒเตˆเดธเตผ เด•เดพเดฃเตเด‚. เดซเดฏเดฒเตเด•เตพ เดธเตเดตเดฎเต‡เดงเดฏเดพ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ เด…เดญเดฟเดชเตเดฐเดพเดฏเดฎเดฟเดŸเตเดจเตเดจเดคเดฟเดจเต เด‡เดคเต เด‰เดชเดฏเต‹เด—เดชเตเดฐเดฆเดฎเดพเด•เตเด‚. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เดธเดฟเดเดฏเดฟเตฝ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ เดชเดฒเดชเตเดชเต‹เดดเตเด‚ เดซเดฏเดฒเตเด•เดณเตเดŸเต† เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเด‚, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด‡เดต เด’เดฐเต เด•เดฎเตเดฎเดฟเดฑเตเดฑเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดซเดฏเดฒเตเด•เดณเดพเดฏเดฟเดฐเดฟเด•เตเด•เดพเด‚.

เด‡เดชเตเดชเต‹เตพ, เดˆ เดฎเต‹เดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดชเตเดฐเดงเดพเดจ เดตเดฟเด•เดธเดจ เดถเดพเด–เดฏเดฟเตฝ เดชเตเดฐเดตเต‡เดถเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเตเดคเดฟเดฏ เด•เต‹เดกเต เดตเต‡เด—เดคเตเดคเดฟเตฝ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเด‚. เดธเตเด•เดพเดจเดฟเด‚เด—เต เดธเดฟเดธเตเดฑเตเดฑเด‚ เด…เดจเดฒเตˆเดธเตผ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเตเด•เดณเต‹เดŸเต เดชเตเดฐเดคเดฟเด•เดฐเดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เดจเตเดจเต เด‰เดฑเดชเตเดชเดพเด•เตเด•เดพเตป, เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟ เดชเตเดฒเด—เต-เด•เตบเดตเต†เตผเดŸเตเดŸเตผ เดชเดคเดพเด• เดšเต‡เตผเดคเตเดคเต --เดธเต‚เดšเดฟเด•-เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเตเด•เตพ:

plog-converter ... --indicate-warnings ... -o /path/to/report.tasks ...

เดˆ เดซเตเดฒเดพเด—เต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เด…เดจเดฒเตˆเดธเตผ เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเดฟเตฝ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเตเด•เตพ เด‰เดฃเตเดŸเต†เด™เตเด•เดฟเตฝ เด•เตบเดตเต†เตผเดŸเตเดŸเตผ เดชเต‚เดœเตเดฏเดฎเดฒเตเดฒเดพเดคเตเดค เด’เดฐเต เด•เต‹เดกเต เดจเตฝเด•เตเด‚. เดฑเดฟเดŸเตเดŸเต‡เตบ เด•เต‹เดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดชเตเดฐเต€เด•เดฎเตเดฎเดฟเดฑเตเดฑเต เดนเตเด•เตเด•เต เดคเดŸเดฏเดพเดจเต‹ เด•เดฎเตเดฎเดฟเดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเดจเต‹ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดชเดฟเตปเดตเดฒเดฟเด•เตเด•เดพเดจเต‹ เด•เดดเดฟเดฏเตเด‚, เด•เต‚เดŸเดพเดคเต† เดœเดจเดฑเต‡เดฑเตเดฑเดกเต เด…เดจเดฒเตˆเดธเตผ เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเต เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เดพเดจเต‹ เดชเด™เตเด•เดฟเดŸเดพเดจเต‹ เด‡เดฎเต†เดฏเดฟเตฝ เดตเดดเดฟ เด…เดฏเดฏเตเด•เตเด•เดพเดจเต‹ เด•เดดเดฟเดฏเตเด‚.

เด•เตเดฑเดฟเดชเตเดชเต. เดจเดฟเด™เตเด™เตพ เด†เดฆเตเดฏเด‚ เดซเดฏเดฒเตเด•เดณเตเดŸเต† เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเดพเตป เดคเตเดŸเด™เตเด™เตเดฎเตเดชเต‹เตพ, เดฎเตเดดเตเดตเตป เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด‚ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเตเด‚, เด•เดพเดฐเดฃเด‚ เดนเต†เดกเตผ เดซเดฏเดฒเตเด•เดณเดฟเตฝ เดชเตเดฐเตŠเดœเด•เตเดฑเตเดฑเต เดธเต‹เดดเตเดธเต เดซเดฏเดฒเตเด•เดณเตเดŸเต† เดกเดฟเดชเตปเดกเตปเดธเดฟเด•เดณเตเดŸเต† เด’เดฐเต เดซเดฏเตฝ เด…เดจเดฒเตˆเดธเตผ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เดธเดฟ, เดธเดฟ++ เดซเดฏเดฒเตเด•เตพ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดฑเต† เดธเดตเดฟเดถเต‡เดทเดคเดฏเดพเดฃเดฟเดคเต. เดญเดพเดตเดฟเดฏเดฟเตฝ, เดกเดฟเดชเตปเดกเตปเดธเดฟ เดซเดฏเตฝ เด•เดพเดทเต† เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เด…เดจเดฒเตˆเดธเตผ เดธเตเดตเดฏเดฎเต‡เดต เด…เดชเตเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚. เด‡เตปเด•เตเดฐเดฟเดฎเต†เดจเตเดฑเตฝ เด…เดจเดพเดฒเดฟเดธเดฟเดธเต เดฎเต‹เดกเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต‡เด•เตเด•เดพเตพ เดซเดฏเตฝ เดฒเดฟเดธเตเดฑเตเดฑเต เดšเต†เด•เตเด•เดฟเด‚เด—เต เดฎเต‹เดกเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เด•เดฎเตเดฎเดฟเดฑเตเดฑเตเด•เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฑเต† เดชเตเดฐเดฏเต‹เดœเดจเด‚, เดจเดฟเด™เตเด™เตพ เด† เดซเดฏเตฝ เด•เดพเดทเต† เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต, เด’เดฌเตเดœเด•เตเดฑเตเดฑเต เดซเดฏเดฒเตเด•เดณเดฒเตเดฒ.

เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเดจเตเดฑเต† เดชเตŠเดคเต เดคเดคเตเดตเด™เตเด™เตพ

เดฎเตเดดเตเดตเตป เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด‚ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต เดงเดพเดฐเดพเดณเด‚ เดธเดฎเดฏเดฎเต†เดŸเตเด•เตเด•เตเด‚, เด…เดคเดฟเดจเดพเตฝ เด…เดคเดฟเดจเตเดฑเต† เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดญเดพเด—เด‚ เดฎเดพเดคเตเดฐเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเต เด…เตผเดคเตเดฅเดฎเดพเด•เตเด•เตเดจเตเดจเต. เดฌเดพเด•เตเด•เดฟเดฏเตเดณเตเดณ เดชเตเดฐเต‹เดœเด•เตเดŸเต เดซเดฏเดฒเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดชเตเดคเดฟเดฏ เดซเดฏเดฒเตเด•เตพ เดตเต‡เตผเดคเดฟเดฐเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต เดŽเดจเตเดจเดคเดพเดฃเต เดชเตเดฐเดถเตเดจเด‚.

เดฐเดฃเตเดŸเต เดถเดพเด–เด•เดณเตเดณเตเดณ เด’เดฐเต เด•เดฎเตเดฎเดฟเดฑเตเดฑเต เดŸเตเดฐเต€เดฏเตเดŸเต† เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดจเต‹เด•เตเด•เดพเด‚:

PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŸเตเดฐเดพเดตเดฟเดธเต CI, Buddy, AppVeyor เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† เด•เดฎเตเดฎเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต†เดฏเตเด‚ เดตเดฟเดถเด•เดฒเดจเด‚

เด† เดชเตเดฐเดคเดฟเดฌเดฆเตเดงเดค เดจเดฎเตเด•เตเด•เต เดธเด™เตเด•เตฝเดชเตเดชเดฟเด•เตเด•เดพเด‚ A1 เด‡เดคเดฟเดจเด•เด‚ เดชเดฐเต€เด•เตเดทเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดณเตเดณ เด’เดฐเต เดตเดฒเดฟเดฏ เด…เดณเดตเดฟเดฒเตเดณเตเดณ เด•เต‹เดกเต เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด•เตเดฑเดšเตเดšเต เดฎเตเดฎเตเดชเต เดžเด™เตเด™เตพ เด•เดฎเตเดฎเดฟเดฑเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เด’เดฐเต เดถเดพเด– เด‰เดฃเตเดŸเดพเด•เตเด•เดฟ A1 เดšเดฟเดฒ เดซเดฏเดฒเตเด•เตพ เดฎเดพเดฑเตเดฑเดฟ.

เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เดจเดฟเด™เตเด™เตพ เด…เดคเต เดชเดฟเดจเตเดจเต€เดŸเต เดถเตเดฐเดฆเตเดงเดฟเดšเตเดšเต A1 เดฐเดฃเตเดŸเต เดชเตเดฐเดคเดฟเดฌเดฆเตเดงเดคเด•เตพ เด•เต‚เดŸเดฟ เดธเด‚เดญเดตเดฟเดšเตเดšเต, เดŽเดจเตเดจเดพเตฝ เด‡เดตเดฏเตเด‚ เดฎเดฑเตเดฑเต เดถเดพเด–เด•เดณเตเดŸเต† เดฒเดฏเดจเด™เตเด™เดณเดพเดฏเดฟเดฐเตเดจเตเดจเต, เด•เดพเดฐเดฃเด‚ เดžเด™เตเด™เตพ เดชเตเดฐเดคเดฟเดœเตเดžเดพเดฌเดฆเตเดงเดฐเดพเดฏเดฟเดŸเตเดŸเดฟเดฒเตเดฒ เดฏเดœเดฎเดพเดจเดจเต. เด‡เดชเตเดชเต‹เตพ เด† เดธเดฎเดฏเด‚ เดตเดจเตเดจเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต เดนเต‹เดŸเตเดŸเตเดซเตˆเด•เตเดธเต เดคเดฏเตเดฏเดพเดฑเดพเดฃเต. เด…เดคเตเด•เตŠเดฃเตเดŸเดพเดฃเต เดฒเดฏเดจเดคเตเดคเดฟเดจเดพเดฏเดฟ เด’เดฐเต เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดชเตเดฐเดคเตเดฏเด•เตเดทเดชเตเดชเต†เดŸเตเดŸเดคเต B3 ะธ A3.

เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เด…เดตเดฐเตเดŸเต† เดฒเดฏเดจเดคเตเดคเดฟเดจเตเดฑเต† เดฎเตเดดเตเดตเตป เดซเดฒเดตเตเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚, เดŽเดจเตเดจเดพเตฝ เด‡เดคเต เดตเดณเดฐเต† เดธเดฎเดฏเดฎเต†เดŸเตเด•เตเด•เตเดจเตเดจเดคเตเด‚ เดจเตเดฏเดพเดฏเต€เด•เดฐเดฟเด•เตเด•เดพเดคเตเดคเดคเตเดฎเดพเดฃเต, เด•เดพเดฐเดฃเด‚ เด•เตเดฑเดšเตเดšเต เดซเดฏเดฒเตเด•เตพ เดฎเดพเดคเตเดฐเดฎเต‡ เดฎเดพเดฑเตเดฑเดฟเดฏเดฟเดŸเตเดŸเตเดณเตเดณเต‚. เด…เดคเดฟเดจเดพเตฝ, เดฎเดพเดฑเดฟเดฏเดต เดฎเดพเดคเตเดฐเด‚ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เด•เต‚เดŸเตเดคเตฝ เด•เดพเดฐเตเดฏเด•เตเดทเดฎเดฎเดพเดฃเต.

เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดถเดพเด–เด•เตพ เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เดตเตเดฏเดคเตเดฏเดพเดธเด‚ เดจเดฎเตเด•เตเด•เต เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเต, เดžเด™เตเด™เตพ เดฎเดพเดธเตเดฑเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เต เดฒเดฏเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจ เดถเดพเด–เดฏเตเดŸเต† เดคเดฒเดฏเดฟเตฝ เด†เดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต:

git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list

$MERGE_BASE เดžเด™เตเด™เตพ เด…เดคเต เดชเดฟเดจเตเดจเต€เดŸเต เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดจเต‹เด•เตเด•เดพเด‚. เดŽเดฒเตเดฒเดพ CI เดธเต‡เดตเดจเด™เตเด™เดณเตเด‚ เดฒเดฏเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด†เดตเดถเตเดฏเดฎเดพเดฏ เดตเดฟเดตเดฐเด™เตเด™เตพ เดจเตฝเด•เตเดจเตเดจเดฟเดฒเตเดฒ เดŽเดจเตเดจเดคเดพเดฃเต เดตเดธเตเดคเตเดค, เด…เดคเดฟเดจเดพเตฝ เด“เดฐเต‹ เดคเดตเดฃเดฏเตเด‚ เดˆ เดกเดพเดฑเตเดฑ เดจเต‡เดŸเตเดจเตเดจเดคเดฟเดจเต เดจเดฟเด™เตเด™เตพ เดชเตเดคเดฟเดฏ เดตเดดเดฟเด•เตพ เด•เดฃเตเดŸเต†เดคเตเดคเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เดตเดฟเดตเดฐเดฟเดšเตเดš เด“เดฐเต‹ เดตเต†เดฌเต เดธเต‡เดตเดจเด™เตเด™เดณเดฟเดฒเตเด‚ เด‡เดคเต เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดšเตเดตเดŸเต† เดตเดฟเดตเดฐเดฟเด•เตเด•เตเด‚.

เด…เดคเดฟเดจเดพเตฝ, เดžเด™เตเด™เตพเด•เตเด•เต เดถเดพเด–เด•เตพ เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เดตเตเดฏเดคเตเดฏเดพเดธเด‚ เดฒเดญเดฟเดšเตเดšเต, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดฎเดพเดฑเตเดฑเดฟเดฏ เดซเดฏเตฝ เดชเต‡เดฐเตเด•เดณเตเดŸเต† เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต. เด‡เดจเดฟ เดซเดฏเตฝ เด•เตŠเดŸเตเด•เตเด•เดฃเด‚ .pvs-pr.list (เดฎเตเด•เดณเดฟเดฒเตเดณเตเดณ เด”เดŸเตเดŸเตโ€ŒเดชเตเดŸเตเดŸเต เดžเด™เตเด™เตพ เด…เดคเดฟเดฒเต‡เด•เตเด•เต เดฑเต€เดกเดฏเดฑเด•เตโ€ŒเดŸเต เดšเต†เดฏเตโ€Œเดคเต) เด…เดจเดฒเตˆเดธเดฑเดฟเดฒเต‡เด•เตเด•เต:

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

เดˆ เด•เดฎเดพเตปเดกเต เดชเดฟเดถเด•เตเด•เตพ เดชเดŸเตเดŸเดฟเด•เดชเตเดชเต†เดŸเตเดคเตเดคเตเด‚ stderr (เดธเดพเดงเดพเดฐเดฃ เดชเดฟเดถเด•เต เดธเดจเตเดฆเต‡เดถเด‚ เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต).

เด‡เดชเตเดชเต‹เตพ เดฎเดพเดคเตเดฐเด‚ เดจเดฎเตเด•เตเด•เต เดชเดฟเดถเด•เตเด•เตพ เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเด• เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดชเตเดฐเดถเตเดจเด™เตเด™เดณเตเดŸเต† เดธเดพเดจเตเดจเดฟเดงเตเดฏเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด…เดธเด‚เดฌเตเดฒเดฟเด•เตเด•เตเด‚ เดชเดฐเดฟเดถเต‹เดงเดจเดฏเตเด•เตเด•เตเดฎเดพเดฏเดฟ เดžเด™เตเด™เดณเตเดŸเต† เดธเต‡เดตเดจเดคเตเดคเต† เด…เดฑเดฟเดฏเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดตเต‡เดฃเด‚. เดˆ เด†เดตเดถเตเดฏเดคเตเดคเดฟเดจเดพเดฏเดฟ, เด•เตบเดตเต†เตผเดŸเตเดŸเดฑเดฟเตฝ เด’เดฐเต เดซเตเดฒเดพเด—เต เดšเต‡เตผเดคเตเดคเต -W (--เดธเต‚เดšเดฟเด•-เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเตเด•เตพ). เด•เตเดฑเดžเตเดžเดคเต เด’เดฐเต เด…เดจเดฒเตˆเดธเตผ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต เด‰เดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟ เดฑเดฟเดŸเตเดŸเต‡เตบ เด•เต‹เดกเต เดชเตเดฒเด—เต-เด•เตบเดตเต†เตผเดŸเตเดŸเตผ 2 เดฒเต‡เด•เตเด•เต เดฎเดพเดฑเตเด‚, เด‡เดคเต เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดซเดฏเดฒเตเด•เดณเดฟเตฝ เดธเดพเดงเตเดฏเดฎเดพเดฏ เดชเดฟเดถเด•เตเด•เดณเตเดŸเต† เดธเดพเดจเตเดจเดฟเดงเตเดฏเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต CI เดธเต‡เดตเดจเดคเตเดคเต† เด…เดฑเดฟเดฏเดฟเด•เตเด•เตเด‚.

เดŸเตเดฐเดพเดตเดฟเดธเต เดธเดฟเด

เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด’เดฐเต เดซเดฏเดฒเดพเดฏเดฟเดŸเตเดŸเดพเดฃเต เดจเดฟเตผเดฎเตเดฎเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต .travis.yml. เดธเต—เด•เดฐเตเดฏเดพเตผเดคเตเดฅเด‚, เดซเดฏเดฒเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเดฟเดณเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจ เดซเด‚เด—เตเดทเดจเตเด•เดณเตเดณเตเดณ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดฌเดพเดทเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เดŽเดฒเตเดฒเดพเด‚ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดพเตป เดžเดพเตป เดจเดฟเด™เตเด™เดณเต† เด‰เดชเดฆเต‡เดถเดฟเด•เตเด•เตเดจเตเดจเต. .travis.yml (เดฌเดพเดทเต script_name.sh function_name).

เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เด†เดตเดถเตเดฏเดฎเดพเดฏ เด•เต‹เดกเต เดžเด™เตเด™เตพ เดšเต‡เตผเด•เตเด•เตเด‚ เดฌเดพเดทเต, เด‡เดคเตเดตเดดเดฟ เดจเดฎเตเด•เตเด•เต เด•เต‚เดŸเตเดคเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดค เดฒเดญเดฟเด•เตเด•เตเด‚. เดตเดฟเดญเดพเด—เดคเตเดคเดฟเตฝ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเด• เดจเดฎเตเด•เตเด•เต เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดต เดŽเดดเตเดคเดพเด‚:

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

เดฌเดพเดทเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเดฟเตฝ:

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_PULL_REQUEST เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดจเดฎเตเดชเตผ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดคเต†เดฑเตเดฑเดพเดฏ, เด‡เดคเตŠเดฐเต เดธเดพเดงเดพเดฐเดฃ เดถเดพเด–เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ;
  • $TRAVIS_REPO_SLUG เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเดฏเตเดŸเต† เดชเต‡เดฐเต เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เดˆ เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดจเตเดณเตเดณ เด…เตฝเด—เต‹เดฐเดฟเดคเด‚:

PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŸเตเดฐเดพเดตเดฟเดธเต CI, Buddy, AppVeyor เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† เด•เดฎเตเดฎเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต†เดฏเตเด‚ เดตเดฟเดถเด•เดฒเดจเด‚
เดŸเตเดฐเดพเดตเดฟเดธเต เดธเดฟเด เดฑเดฟเดŸเตเดŸเต‡เตบ เด•เต‹เดกเตเด•เดณเต‹เดŸเต เดชเตเดฐเดคเดฟเด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเดจเดพเตฝ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเตเด•เดณเตเดŸเต† เดธเดพเดจเตเดจเดฟเดงเตเดฏเด‚, เด•เดฎเตเดฎเดฟเดฑเตเดฑเต เดชเดฟเดถเด•เตเด•เตพ เด…เดŸเด™เตเด™เดฟเดฏเดคเดพเดฏเดฟ เด…เดŸเดฏเดพเดณเดชเตเดชเต†เดŸเตเดคเตเดคเดพเตป เดธเต‡เดตเดจเดคเตเดคเต‹เดŸเต เดชเดฑเดฏเตเด‚.

เด‡เดจเดฟ เดจเดฎเตเด•เตเด•เต เดˆ เด•เต‹เดกเดฟเดจเตเดฑเต† เดตเดฐเดฟ เดธเต‚เด•เตเดทเตเดฎเดฎเดพเดฏเดฟ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเด‚:

git diff --name-only origin/HEAD > .pvs-pr.list

เด’เดฐเต เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ เดŸเตเดฐเดพเดตเดฟเดธเต เดธเดฟเด เดฏเดพเดจเตเดคเตเดฐเดฟเด•เดฎเดพเดฏเดฟ เดถเดพเด–เด•เดณเต† เดฒเดฏเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต เดŽเดจเตเดจเดคเดพเดฃเต เดตเดธเตเดคเตเดค:

PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŸเตเดฐเดพเดตเดฟเดธเต CI, Buddy, AppVeyor เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† เด•เดฎเตเดฎเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต†เดฏเตเด‚ เดตเดฟเดถเด•เดฒเดจเด‚
เด…เดคเดฟเดจเดพเตฝ เดžเด™เตเด™เตพ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต A4เดชเด•เตเดทเต‡ เด‡เดฒเตเดฒ B3->A3. เดˆ เดธเดตเดฟเดถเต‡เดทเดค เด•เดพเดฐเดฃเด‚, เดจเดฎเตเดฎเตพ เดตเตเดฏเดคเตเดฏเดพเดธเด‚ เด•เดฃเด•เตเด•เดพเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต A3, เด…เดคเดฟเตฝ เดจเดฟเดจเตเดจเต เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เดถเดพเด–เดฏเตเดŸเต† เดฎเตเด•เตพ เดญเดพเด—เดฎเดพเดฃเต เด‰เดคเตเดญเดตเด‚.

เด’เดฐเต เดชเตเดฐเดงเดพเดจ เดตเดฟเดถเดฆเดพเด‚เดถเด‚ เด…เดตเดถเต‡เดทเดฟเด•เตเด•เตเดจเตเดจเต - เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดค เดตเดฟเดตเตผเดคเตเดคเดจ เดฏเต‚เดฃเดฟเดฑเตเดฑเตเด•เดณเดฟเตฝ (*.c, *.cc, *.cpp, เดฎเตเดคเดฒเดพเดฏเดต) เดนเต†เดกเตผ เดซเดฏเดฒเตเด•เดณเตเดŸเต† เดกเดฟเดชเตปเดกเตปเดธเดฟเด•เตพ เด•เดพเดทเต† เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เดซเดฏเดฒเตเด•เดณเตเดŸเต† เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจ เดฎเต‹เดกเดฟเตฝ เด†เดฆเตเดฏเด‚ เดฒเต‹เดžเตเดšเต เดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ เด…เดจเดฒเตˆเดธเตผ เดˆ เดกเดฟเดชเตปเดกเตปเดธเดฟเด•เตพ เด•เดฃเด•เตเด•เดพเด•เตเด•เตเดจเตเดจเต, เดคเตเดŸเตผเดจเตเดจเต เด…เดต .PVS-Studio เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟเดฏเดฟเตฝ เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต. เดซเต‹เตพเดกเดฑเตเด•เตพ เด•เดพเดทเต† เดšเต†เดฏเตเดฏเดพเตป เดŸเตเดฐเดพเดตเดฟเดธเต เดธเดฟเด เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเดจเดพเตฝ เดžเด™เตเด™เตพ เดกเดฏเดฑเด•เตเดŸเดฑเดฟ เดกเดพเดฑเตเดฑ เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เตเด‚ .PVS-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹/:

cache:
  directories:
    - .PVS-Studio/

เดˆ เด•เต‹เดกเต เดซเดฏเดฒเดฟเตฝ เดšเต‡เตผเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต .travis.yml. เดˆ เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟ เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเดจเต เดถเต‡เดทเด‚ เดถเต‡เด–เดฐเดฟเดšเตเดš เดตเดฟเดตเดฟเดง เดกเดพเดฑเตเดฑ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด‡เดคเต เดซเดฏเตฝ เดฒเดฟเดธเตเดฑเตเดฑเต เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเดจเตเดฑเต†เดฏเต‹ เด‡เตปเด•เตเดฐเดฟเดฎเต†เดจเตเดฑเตฝ เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเดจเตเดฑเต†เดฏเต‹ เดคเตเดŸเตผเดจเตเดจเตเดณเตเดณ เดฑเดฃเตเดฃเตเด•เดณเต† เด—เดฃเตเดฏเดฎเดพเดฏเดฟ เดตเต‡เด—เดคเตเดคเดฟเดฒเดพเด•เตเด•เตเด‚. เด‡เดคเต เดšเต†เดฏเตเดคเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เด…เดจเดฒเตˆเดธเตผ เดŽเดฒเตเดฒเดพ เดซเดฏเดฒเตเด•เดณเตเด‚ เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเตเด‚.

เดฌเดกเตเดกเดฟ

เดŸเตเดฐเดพเดตเดฟเดธเต เดธเดฟเด เดชเต‹เดฒเต†, เดฌเดกเตเดกเดฟ GitHub-เตฝ เดธเด‚เดญเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด•เตพ เดธเตเดตเดฏเดฎเต‡เดต เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เดพเดจเตเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเดจเตเดฎเตเดณเตเดณ เด•เดดเดฟเดตเต เดจเตฝเด•เตเดจเตเดจเต. เดŸเตเดฐเดพเดตเดฟเดธเต เดธเดฟเดเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏเดฟ, เด‡เดคเต เดตเต†เดฌเต เด‡เดจเตเดฑเตผเดซเต‡เดธเดฟเตฝ เด•เตเดฐเดฎเต€เด•เดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต (เดฌเดพเดทเต เดชเดฟเดจเตเดคเตเดฃ เดฒเดญเตเดฏเดฎเดพเดฃเต), เด…เดคเดฟเดจเดพเตฝ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเตฝ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเดฒเตเด•เตพ เดธเด‚เดญเดฐเดฟเด•เตเด•เต‡เดฃเตเดŸ เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ.

เด’เดจเตเดจเดพเดฎเดคเดพเดฏเดฟ, เด…เดธเด‚เดฌเตเดฒเดฟ เดฒเตˆเดจเดฟเดฒเต‡เด•เตเด•เต เดžเด™เตเด™เตพ เด’เดฐเต เดชเตเดคเดฟเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดšเต‡เตผเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต:

PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŸเตเดฐเดพเดตเดฟเดธเต CI, Buddy, AppVeyor เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† เด•เดฎเตเดฎเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต†เดฏเตเด‚ เดตเดฟเดถเด•เดฒเดจเด‚
เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เดพเตป เด‰เดชเดฏเต‹เด—เดฟเดšเตเดš เด•เด‚เดชเตˆเดฒเตผ เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เดพเด‚. เดˆ เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเตฝ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเตเดณเตเดณ เดกเต‹เด•เตเด•เตผ เด•เดฃเตเดŸเต†เดฏเตเดจเตผ เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เตเด•. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดœเดฟเดธเดฟเดธเดฟเด•เตเด•เต เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เด•เดฃเตเดŸเต†เดฏเตเดจเตผ เด‰เดฃเตเดŸเต:

PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŸเตเดฐเดพเดตเดฟเดธเต CI, Buddy, AppVeyor เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† เด•เดฎเตเดฎเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต†เดฏเตเด‚ เดตเดฟเดถเด•เดฒเดจเด‚
เด‡เดจเดฟ เดจเดฎเตเด•เตเด•เต เดชเดฟเดตเดฟเดŽเดธเต-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹เดฏเตเด‚ เด†เดตเดถเตเดฏเดฎเดพเดฏ เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟเด•เดณเตเด‚ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเดพเด‚:

PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŸเตเดฐเดพเดตเดฟเดธเต CI, Buddy, AppVeyor เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† เด•เดฎเตเดฎเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต†เดฏเตเด‚ เดตเดฟเดถเด•เดฒเดจเด‚
เดŽเดกเดฟเดฑเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เต เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดตเดฐเดฟเด•เตพ เดšเต‡เตผเด•เตเด•เดพเด‚:

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

เด‡เดชเตเดชเต‹เตพ เดจเดฎเตเด•เตเด•เต เดฑเตบ เดŸเดพเดฌเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เดพเด‚ (เด†เดฆเตเดฏ เดเด•เตเด•เตบ) เด…เดจเตเดฌเดจเตเดง เดŽเดกเดฟเดฑเตเดฑเตผ เดซเต€เตฝเดกเดฟเดฒเต‡เด•เตเด•เต เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เด•เต‹เดกเต เดšเต‡เตผเด•เตเด•เตเด•:

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-เดฏเดฟเดฒเต† เดตเดฟเดญเดพเด—เด‚ เดตเดพเดฏเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดˆ เด•เต‹เดกเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‡เดคเดฟเดจเด•เด‚ เดชเดฐเดฟเดšเดฟเดคเดฎเดพเดฃเต, เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เด‡เดชเตเดชเต‹เตพ เด’เดฐเต เดชเตเดคเดฟเดฏ เด˜เดŸเตเดŸเด‚ เด‰เดฃเตเดŸเต:

PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŸเตเดฐเดพเดตเดฟเดธเต CI, Buddy, AppVeyor เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† เด•เดฎเตเดฎเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต†เดฏเตเด‚ เดตเดฟเดถเด•เดฒเดจเด‚
เด‡เดชเตเดชเต‹เตพ เดžเด™เตเด™เตพ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดฒเดฏเดจเดคเตเดคเดฟเดจเตเดฑเต† เดซเดฒเดฎเดฒเตเดฒ, เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดจเดŸเดคเตเดคเดฟเดฏ เดฌเตเดฐเดพเดžเตเดšเดฟเดจเตเดฑเต† เดคเดฒเดฏเดพเดฃเต:

PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŸเตเดฐเดพเดตเดฟเดธเต CI, Buddy, AppVeyor เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† เด•เดฎเตเดฎเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต†เดฏเตเด‚ เดตเดฟเดถเด•เดฒเดจเด‚
เด…เดคเดฟเดจเดพเตฝ เดžเด™เตเด™เตพ เด’เดฐเต เดธเต‹เดชเดพเดงเดฟเด• เดชเตเดฐเดคเดฟเดฌเดฆเตเดงเดคเดฏเดฟเดฒเดพเดฃเต 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_EXECUTION_PULL_REQEUST_NO - เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดจเดฎเตเดชเตผ เดตเดฒเดฟเด•เตเด•เตเด•;
  • $BUDDY_REPO_SLUG โ€” เด‰เดชเดฏเต‹เด•เตเดคเตƒเดจเดพเดฎเดคเตเดคเดฟเดจเตเดฑเต†เดฏเตเด‚ เดถเต‡เด–เดฐเดฃเดคเตเดคเดฟเดจเตเดฑเต†เดฏเตเด‚ เดธเด‚เดฏเต‹เดœเดจเด‚ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต max/test).

เด‡เดชเตเดชเต‹เตพ เดšเตเดตเดŸเต†เดฏเตเดณเตเดณ เดฌเดŸเตเดŸเตบ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเตเดŸเต† เดตเดฟเดถเด•เดฒเดจเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเดพเด‚:

PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŸเตเดฐเดพเดตเดฟเดธเต CI, Buddy, AppVeyor เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† เด•เดฎเตเดฎเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต†เดฏเตเด‚ เดตเดฟเดถเด•เดฒเดจเด‚
เดŸเตเดฐเดพเดตเดฟเดธเต เดธเดฟเดเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏเดฟ, เดžเด™เตเด™เตพ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เต‡เดฃเตเดŸเดคเดฟเดฒเตเดฒ .pvs-studio เด•เดพเดทเต† เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ, เดฌเดกเตเดกเดฟ เดคเตเดŸเตผเดจเตเดจเตเดณเตเดณ เดฒเต‹เดžเตเดšเตเด•เตพเด•เตเด•เดพเดฏเดฟ เดŽเดฒเตเดฒเดพ เดซเดฏเดฒเตเด•เดณเตเด‚ เดธเตเดตเดฏเดฎเต‡เดต เด•เดพเดทเต† เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เด…เดคเดฟเดจเดพเตฝ, เด…เดตเดธเดพเดจเดฎเดพเดฏเดฟ เด…เดตเดถเต‡เดทเดฟเด•เตเด•เตเดจเตเดจเดคเต เดฌเดกเตเดกเดฟเดฏเดฟเตฝ เดชเดฟเดตเดฟเดŽเดธเต-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹เดฏเตเด•เตเด•เตเดณเตเดณ เดฒเต‹เด—เดฟเตป, เดชเดพเดธเตโ€Œเดตเต‡เดกเต เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต. เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดธเด‚เดฐเด•เตเดทเดฟเดšเตเดš เดถเต‡เดทเด‚, เดžเด™เตเด™เดณเต† เดชเตˆเดชเตเดชเตเดฒเตˆเดจเดฟเดฒเต‡เด•เตเด•เต เดคเดฟเดฐเดฟเด•เต† เด•เตŠเดฃเตเดŸเตเดชเต‹เด•เตเด‚. เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ PVS-Studio-เดฏเตโ€Œเด•เตเด•เดพเดฏเดฟ เด’เดฐเต เดฒเต‹เด—เดฟเดจเตเด‚ เด•เต€เดฏเตเด‚ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดžเด™เตเด™เตพ เดฎเตเดจเตเดจเต‹เดŸเตเดŸเต เดชเต‹เด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต:

PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŸเตเดฐเดพเดตเดฟเดธเต CI, Buddy, AppVeyor เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† เด•เดฎเตเดฎเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต†เดฏเตเด‚ เดตเดฟเดถเด•เดฒเดจเด‚
เด‡เดคเดฟเดจเตเดถเต‡เดทเด‚, เด’เดฐเต เดชเตเดคเดฟเดฏ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด•เดฎเตเดฎเดฟเดฑเตเดฑเต เดชเตเดฐเดคเตเดฏเด•เตเดทเดชเตเดชเต†เดŸเตเดจเตเดจเดคเต เด…เดตเดฒเต‹เด•เดจเด‚ เดŸเตเดฐเดฟเด—เตผ เดšเต†เดฏเตเดฏเตเด‚. เด’เดฐเต เด•เดฎเตเดฎเดฟเดฑเตเดฑเดฟเตฝ เดชเดฟเดถเด•เตเด•เตพ เด‰เดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดชเต‡เดœเดฟเตฝ เดฌเดกเตเดกเดฟ เด‡เดคเต เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เตเด‚.

AppVeyor

AppVeyor เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เดฌเดกเตเดกเดฟเด•เตเด•เต เดธเดฎเดพเดจเดฎเดพเดฃเต, เด•เดพเดฐเดฃเด‚ เดŽเดฒเตเดฒเดพเด‚ เดตเต†เดฌเต เด‡เดจเตเดฑเตผเดซเต‡เดธเดฟเตฝ เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต *.yml เดซเดฏเตฝ เดšเต‡เตผเด•เตเด•เต‡เดฃเตเดŸ เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ.

เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เด…เดตเดฒเต‹เด•เดจเดคเตเดคเดฟเดฒเต† เด•เตเดฐเดฎเต€เด•เดฐเดฃ เดŸเดพเดฌเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เดพเด‚:

PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŸเตเดฐเดพเดตเดฟเดธเต CI, Buddy, AppVeyor เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† เด•เดฎเตเดฎเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต†เดฏเตเด‚ เดตเดฟเดถเด•เดฒเดจเด‚
เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เดถเต‡เด–เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เดจเดฎเตเด•เตเด•เต เดˆ เดชเต‡เดœเต เดคเดพเดดเต‡เด•เตเด•เต เดธเตเด•เตเดฐเต‹เตพ เดšเต†เดฏเตเดคเต เด•เดพเดทเต† เดธเต‡เดตเดฟเด‚เด—เต เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเด•เตเด•เดพเด‚:

PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŸเตเดฐเดพเดตเดฟเดธเต CI, Buddy, AppVeyor เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† เด•เดฎเตเดฎเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต†เดฏเตเด‚ เดตเดฟเดถเด•เดฒเดจเด‚
เด‡เดชเตเดชเต‹เตพ เดจเดฎเตเด•เตเด•เต เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ เดŸเดพเดฌเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เดพเด‚, เด…เดตเดฟเดŸเต† เด…เดธเด‚เดฌเตเดฒเดฟเด•เตเด•เดพเดฏเตเดณเตเดณ เด‡เดฎเต‡เดœเตเด‚ เด†เดตเดถเตเดฏเดฎเดพเดฏ เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เดณเตเด‚ เดžเด™เตเด™เตพ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เตเดจเตเดจเต:

PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŸเตเดฐเดพเดตเดฟเดธเต CI, Buddy, AppVeyor เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† เด•เดฎเตเดฎเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต†เดฏเตเด‚ เดตเดฟเดถเด•เดฒเดจเด‚
เดจเดฟเด™เตเด™เตพ เดฎเตเดฎเตเดชเดคเตเดคเต† เดญเดพเด—เด™เตเด™เตพ เดตเดพเดฏเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดˆ เดฐเดฃเตเดŸเต เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดตเดณเดฐเต† เดชเดฐเดฟเดšเดฟเดคเดฎเดพเดฃเต - PVS_KEY ะธ PVS_USERNAME. เด‡เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, PVS-Studio เด…เดจเดฒเตˆเดธเดฑเดฟเดจเตเดฑเต† เดฒเตˆเดธเตปเดธเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเต เด…เดคเตเดฏเดพเดตเดถเตเดฏเดฎเดพเดฃเต†เดจเตเดจเต เดžเดพเตป เดจเดฟเด™เตเด™เดณเต† เด“เตผเดฎเตเดฎเดฟเดชเตเดชเดฟเด•เตเด•เดŸเตเดŸเต†. เดญเดพเดตเดฟเดฏเดฟเตฝ เดฌเดพเดทเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เดณเดฟเตฝ เดจเดฎเตเด•เตเด•เต เด…เดตเดฐเต† เดตเต€เดฃเตเดŸเตเด‚ เด•เดพเดฃเดพเด‚.

เดšเตเดตเดŸเต†เดฏเตเดณเตเดณ เด…เดคเต‡ เดชเต‡เดœเดฟเตฝ เดžเด™เตเด™เตพ เด•เดพเดทเต† เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดซเต‹เตพเดกเตผ เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต:

PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŸเตเดฐเดพเดตเดฟเดธเต CI, Buddy, AppVeyor เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† เด•เดฎเตเดฎเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต†เดฏเตเด‚ เดตเดฟเดถเด•เดฒเดจเด‚
เดžเด™เตเด™เตพ เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดฐเดฃเตเดŸเต เดซเดฏเดฒเตเด•เตพเด•เตเด•เต เดชเด•เดฐเด‚ เดฎเตเดดเตเดตเตป เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด‚ เดžเด™เตเด™เตพ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเตเด‚, เดŽเดจเตเดจเดพเตฝ เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดซเดฏเดฒเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดžเด™เตเด™เตพเด•เตเด•เต เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต เดฒเดญเดฟเด•เตเด•เตเด‚. เด…เดคเดฟเดจเดพเตฝ, เดถเดฐเดฟเดฏเดพเดฏ เดกเดฏเดฑเด•เตเดŸเดฑเดฟ เดจเดพเดฎเด‚ เดจเตฝเด•เต‡เดฃเตเดŸเดคเต เดชเตเดฐเดงเดพเดจเดฎเดพเดฃเต.

เด‡เดจเดฟ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดŸเต†เดธเตเดฑเตเดฑเต เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸ เดธเดฎเดฏเดฎเดพเดฃเต. เดŸเต†เดธเตเดฑเตเดฑเต เดŸเดพเดฌเต เดคเตเดฑเดจเตเดจเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด•:

PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŸเตเดฐเดพเดตเดฟเดธเต CI, Buddy, AppVeyor เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† เด•เดฎเตเดฎเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต†เดฏเตเด‚ เดตเดฟเดถเด•เดฒเดจเด‚
เดˆ เดซเต‹เดฎเดฟเดฒเต‡เด•เตเด•เต เดจเดฟเด™เตเด™เตพ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เด•เต‹เดกเต เด’เดŸเตเดŸเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต:

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

เดˆ เดกเดฟเดซเต‹เตพเดŸเตเดŸเต เดฎเต‚เดฒเตเดฏเด‚ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเดฟเดฒเต‡เด•เตเด•เต pwd เด•เดฎเดพเตปเดกเดฟเดจเตเดฑเต† เดฎเต‚เดฒเตเดฏเดคเตเดคเดฟเดจเตเดฑเต† เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เด…เดธเตˆเตปเดฎเต†เดจเตเดฑเต เด’เดฑเตเดฑเดจเต‹เดŸเตเดŸเดคเตเดคเดฟเตฝ เดตเดฟเดšเดฟเดคเตเดฐเดฎเดพเดฏเดฟ เดคเต‹เดจเตเดจเตเดจเตเดจเต, เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เดžเดพเตป เด‡เดชเตเดชเต‹เตพ เดŽเดฒเตเดฒเดพเด‚ เดตเดฟเดถเดฆเต€เด•เดฐเดฟเด•เตเด•เตเด‚.

AppVeyor-เตฝ เด…เดจเดฒเตˆเดธเตผ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เด…เดจเดฒเตˆเดธเดฑเดฟเดจเตเดฑเต† เดตเดณเดฐเต† เดตเดฟเดšเดฟเดคเตเดฐเดฎเดพเดฏ เดชเต†เดฐเตเดฎเดพเดฑเตเดฑเด‚ เดžเดพเตป เดจเต‡เดฐเดฟเดŸเตเดŸเต. เด’เดฐเต เดตเดถเดคเตเดคเต, เดŽเดฒเตเดฒเดพเด‚ เดถเดฐเดฟเดฏเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดšเตเดšเต, เดชเด•เตเดทเต‡ เดตเดฟเดถเด•เดฒเดจเด‚ เด†เดฐเด‚เดญเดฟเดšเตเดšเดฟเดฒเตเดฒ. เดžเด™เตเด™เตพ /home/appveyor/projects/testcalc/ เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟเดฏเดฟเดฒเดพเดฃเต†เดจเตเดจเต เดถเตเดฐเดฆเตเดงเดฟเดšเตเดšเตเด•เตŠเดฃเตเดŸเต เดžเดพเตป เด’เดฐเตเดชเดพเดŸเต เดธเดฎเดฏเด‚ เดšเดฟเดฒเดตเดดเดฟเดšเตเดšเต, เด•เต‚เดŸเดพเดคเต† เดจเดฎเตเดฎเตพ /opt/appveyor/build-agent/-เตฝ เด†เดฃเต†เดจเตเดจเต เด…เดจเดฒเตˆเดธเตผ เด‰เดฑเดชเตเดชเดพเดฃเต. เด…เดชเตเดชเต‹เตพ $PWD เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เด…เตฝเดชเตเดชเด‚ เด•เดฟเดŸเด•เตเด•เตเดจเตเดจเต เดŽเดจเตเดจเต เดฎเดจเดธเตเดธเดฟเดฒเดพเดฏเดฟ. เด‡เด•เตเด•เดพเดฐเดฃเดคเตเดคเดพเตฝ, เดตเดฟเดถเด•เดฒเดจเด‚ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต เดžเดพเตป เด…เดคเดฟเดจเตเดฑเต† เดฎเต‚เดฒเตเดฏเด‚ เดธเตเดตเดฎเต‡เดงเดฏเดพ เด…เดชเตเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดคเต.

เดชเดฟเดจเตเดจเต† เดŽเดฒเตเดฒเดพเด‚ เดชเดดเดฏเดคเตเดชเต‹เดฒเต† เดคเดจเตเดจเต†:

PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŸเตเดฐเดพเดตเดฟเดธเต CI, Buddy, AppVeyor เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† เด•เดฎเตเดฎเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต†เดฏเตเด‚ เดตเดฟเดถเด•เดฒเดจเด‚
เด‡เดชเตเดชเต‹เตพ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดถเด•เดฒเด‚ เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเด•:

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 - เด‰เดชเดฏเต‹เด•เตเดคเตƒเดจเดพเดฎเดตเตเด‚ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดถเต‡เด–เดฐเดฃเดตเตเด‚.

เดคเต€เดฐเตเดฎเดพเดจเด‚

เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เดธเดพเดงเตเดฏเดฎเดพเดฏ เดŽเดฒเตเดฒเดพ เดคเตเดŸเตผเดšเตเดšเดฏเดพเดฏ เดธเด‚เดฏเต‹เดœเดจ เดธเต‡เดตเดจเด™เตเด™เดณเตเด‚ เดžเด™เตเด™เตพ เดชเดฐเดฟเด—เดฃเดฟเดšเตเดšเดฟเดŸเตเดŸเดฟเดฒเตเดฒ, เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เด…เดตเดฏเตโ€Œเด•เตเด•เต†เดฒเตเดฒเดพเด‚ เดชเดฐเดธเตเดชเดฐเด‚ เดธเดฎเดพเดจเดฎเดพเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดจ เดธเดตเดฟเดถเต‡เดทเดคเด•เตพ เด‰เดฃเตเดŸเต. เด•เดพเดทเดฟเด‚เด—เต เด’เดดเดฟเด•เต†, เด“เดฐเต‹ เดธเต‡เดตเดจเดตเตเด‚ เดธเตเดตเดจเตเดคเด‚ "เดธเตˆเด•เตเด•เดฟเตพ" เด‰เดฃเตเดŸเดพเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเดจเดพเตฝ เดŽเดฒเตเดฒเดพเด‚ เดŽเดฒเตเดฒเดพเดฏเตเดชเตเดชเต‹เดดเตเด‚ เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฃเต.

เดŽเดตเดฟเดŸเต†เดฏเต‹, เดŸเตเดฐเดพเดตเดฟเดธเต-เดธเดฟเด เดชเต‹เดฒเต†, เด•เต‹เดกเดฟเดจเตเดฑเต†เดฏเตเด‚ เด•เดพเดทเดฟเด‚เด—เดฟเดจเตเดฑเต†เดฏเตเด‚ เดฐเดฃเตเดŸเต เดตเดฐเดฟเด•เตพ เด•เตเดฑเตเดฑเดฎเดฑเตเดฑ เดฐเต€เดคเดฟเดฏเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต; เดŽเดตเดฟเดŸเต†เดฏเต‹, AppVeyor เดชเต‹เดฒเต†, เดจเดฟเด™เตเด™เตพ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เดณเดฟเตฝ เดซเต‹เตพเดกเตผ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต; เดŽเดจเตเดจเดพเตฝ เดŽเดตเดฟเดŸเต†เดฏเต†เด™เตเด•เดฟเดฒเตเด‚ เดจเดฟเด™เตเด™เตพ เด…เดฆเตเดตเดฟเดคเต€เดฏ เด•เต€เด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด•เดพเดทเต† เดšเต†เดฏเตเดค เดถเด•เดฒเด‚ เดคเดฟเดฐเตเดคเตเดคเดฟเดฏเต†เดดเตเดคเดพเดจเตเดณเตเดณ เด…เดตเดธเดฐเด‚ เดจเตฝเด•เตเดจเตเดจเดคเดฟเดจเต เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเต† เดฌเต‹เดงเตเดฏเดชเตเดชเต†เดŸเตเดคเตเดคเดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดตเต‡เดฃเด‚. เด…เดคเดฟเดจเดพเตฝ, เดฎเตเด•เดณเดฟเตฝ เดšเตผเดšเตเดš เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเดฟเดฒเตเดฒเดพเดคเตเดค เด’เดฐเต เดคเตเดŸเตผเดšเตเดšเดฏเดพเดฏ เดธเด‚เดฏเต‹เดœเดจ เดธเต‡เดตเดจเดคเตเดคเดฟเตฝ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต† เดตเดฟเดถเด•เดฒเดจเด‚ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เตพ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เด™เตเด•เดฟเตฝ, เด†เดฆเตเดฏเด‚ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เดพเดทเต† เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเตฝ เดชเตเดฐเดถเตโ€Œเดจเด™เตเด™เดณเดฟเดฒเตเดฒเต†เดจเตเดจเต เด‰เดฑเดชเตเดชเดพเด•เตเด•เตเด•.

เดจเดฟเด™เตเด™เดณเตเดŸเต† เดถเตเดฐเดฆเตเดงเดฏเตเด•เตเด•เต เดจเดจเตเดฆเดฟ. เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดžเด™เตเด™เตพเด•เตเด•เต เดŽเดดเตเดคเดพเตป เดฎเดŸเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดฟเดฒเตเดฒ เดชเดฟเดจเตเดคเตเดฃ. เดžเด™เตเด™เตพ เด‰เดชเดฆเต‡เดถเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดธเดนเดพเดฏเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚.

PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŸเตเดฐเดพเดตเดฟเดธเต CI, Buddy, AppVeyor เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† เด•เดฎเตเดฎเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต†เดฏเตเด‚ เดตเดฟเดถเด•เดฒเดจเด‚

เด‡เด‚เด—เตเดฒเต€เดทเต เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเดจเตเดจ เดชเตเดฐเต‡เด•เตเดทเด•เดฐเตเดฎเดพเดฏเดฟ เดˆ เดฒเต‡เด–เดจเด‚ เดชเด™เตเด•เดฟเดŸเดพเตป เดจเดฟเด™เตเด™เตพ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เด™เตเด•เดฟเตฝ, เดตเดฟเดตเตผเดคเตเดคเดจ เดฒเดฟเด™เตเด•เต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•: Maxim Zvyagintsev. PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŸเตเดฐเดพเดตเดฟเดธเต CI, Buddy, AppVeyor เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† เด•เดฎเตเดฎเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต†เดฏเตเด‚ เดตเดฟเดถเด•เดฒเดจเด‚.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•