เปเบเบเบปเบงเบงเบดเปเบเบฒเบฐ PVS-Studio เบชเปเบฒเบฅเบฑเบเบเบฒเบชเบฒ C เปเบฅเบฐ C ++ เปเบ Linux เปเบฅเบฐ macOS, เปเบฅเบตเปเบกเบเบปเปเบเบเบฒเบเบฎเบธเปเบ 7.04, เบเบปเบงเปเบฅเบทเบญเบเบเบฒเบเบเบปเบเบชเบญเบเปเบเปเบเบฒเบเบปเบเบเบถเปเบเปเบเบทเปเบญเบเบงเบเปเบเบดเปเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบญเบเปเบเบฅเปเบเบตเปเบฅเบฐเบเบธเปเบงเป. เบเบฒเบโเบเปเบฒโเปเบเปโเบฎเบนเบโเปเบเบโเปเบซเบกเปโ, เบเปเบฒเบโเบชเบฒโเบกเบฒเบโเบเปเบฒโเบเบปเบโเบเปเบฒโเปเบเบทเปเบญเบโเบงเบดโเปเบเบฒเบฐโเปเบเบทเปเบญโเบเบงเบโเบเบฒโเปเบเบดเปเบ commits เปเบฅเบฐโเบเบถเบโเบเปเบฒโเบฎเปเบญเบโเบชเบฐโเบซเบกเบฑเบโ. เบเบปเบเบเบงเบฒเบกเบเบตเปเบเบฐเบเบญเบเบเปเบฒเบเบเปเบฝเบงเบเบฑเบเบงเบดเบเบตเบเบฑเปเบเบเปเบฒเบเบฒเบเบเบงเบเบชเบญเบเปเบเบฅเปเบเบตเปเบกเบตเบเบฒเบเบเปเบฝเบเปเบเบเบเบญเบเปเบเบเบเบฒเบ GitHub เปเบเบฅเบฐเบเบปเบ CI (Continuous Integration) เบเบตเปเบเบดเบเบปเบกเปเบเบฑเปเบ Travis CI, Buddy เปเบฅเบฐ AppVeyor.
เบฎเบนเบเปเบเบเบเบฒเบเบเบงเบเบชเบญเบเบฅเบฒเบเบเบฒเบเปเบเบฅเป
เปเบเปเบงเบตเบเบฑเปเบ PVS-Studio 7.04 เบชเปเบฒเบฅเบฑเบ Linux เปเบฅเบฐ macOS, เบฎเบนเบเปเบเบเบเบฒเบเบเบงเบเบชเบญเบเบฅเบฒเบเบเบฒเบเปเบเบฅเปเบเบปเปเบเบชเบฐเบเบฑเบเปเบเปเบเบฐเบเบปเบเบเบถเปเบ. เบเบตเปเปเบฎเบฑเบเบงเบฝเบเบชเปเบฒเบฅเบฑเบเปเบเบเบเบฒเบเบเบตเปเบฅเบฐเบเบปเบเบเบฒเบเบเปเปเบชเปเบฒเบเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเบฒเบเบชเปเบฒเบเปเบเบฅเป
เบเบญเบเบเบฒเบเบเบตเป, เบฎเบนเบเปเบเบเบเบฒเบเบเบงเบเบชเบญเบเบฅเบฒเบเบเบฒเบเปเบเบฅเปเบชเบฒเบกเบฒเบเบเบทเบเบเปเบฒเปเบเปเบฎเปเบงเบกเบเบฑเบเบเบฑเบเบเบฑเบเบเบถเบเบเบฒเบเบเบดเบเบเบฒเบก strace เบเบญเบเบเบฒเบเปเบเบตเบเบเบปเบง compiler (pvs-studio-analyzer trace). เปเบเบทเปเบญเปเบฎเบฑเบเบชเบดเปเบเบเบตเป, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบเปเบฒเปเบเบตเบเบเบฒเบเบชเปเบฒเบเปเบเบเบเบฒเบเบขเปเบฒเบเปเบเบฑเบกเบเบตเปเปเบฅเบฐเบเบดเบเบเบฒเบกเบกเบฑเบเปเบเบทเปเบญเปเบซเปเบเบนเปเบงเบดเปเบเบฒเบฐเปเบเบฑเบเบเปเบฒเบเปเปเบกเบนเบเบเบปเบเบเปเบงเบเบชเบปเบกเบเบนเบเบเปเบฝเบงเบเบฑเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเบฅเบงเบเบฅเบงเบกเบเบญเบเปเบเบฅเปเบเบฑเบเบซเบกเบปเบเบเบตเปเบเบทเบเบเบงเบเบชเบญเบ.
เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เบเบฒเบเปเบฅเบทเบญเบเบเบตเปเบกเบตเบเปเปเบเบปเบเบเปเบญเบเบเบตเปเบชเปเบฒเบเบฑเบ - เบเปเบฒเบเบเปเปเบเบฐเบเปเบญเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบดเบเบเบฒเบกเบเบฒเบเบเปเปเบชเปเบฒเบเบเบฑเบเบซเบกเบปเบเบเบญเบเปเบเบเบเบฒเบเบเบฑเบเบซเบกเบปเบเบเบธเบเบเบฑเปเบเบเบตเปเบเปเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบ, เปเบเบดเปเบเปเบเบเบปเบงเบเบญเบเบกเบฑเบเปเบญเบเบเบปเบเบเบฑเบเบเปเบฒเบกเบเบฑเบเบเบงเบฒเบกเบเบดเบเบเบญเบเบเบฒเบเบเบงเบเบชเบญเบเปเบง. เบซเบผเบท, เบเปเบฒเบเปเบฒเบ cache เบเบปเบ trace เบเบปเบงเบกเบฑเบเปเบญเบ, เบเบฒเบเปเบฅเปเบเบเปเปเปเบเบเบญเบเบเบฒเบเบงเบดเปเบเบฒเบฐเบญเบฒเบเบเบฐเบเปเปเบเบปเบเบเปเบงเบเบชเบปเบกเบเบนเบเบเปเบฒเปเบเบเบชเปเบฒเบเบเบฒเบเปเบเบดเปเบเบเบฒเบญเบฒเปเบชเบเบญเบเปเบเบฅเปเปเบซเบผเปเบเบกเบตเบเบฒเบเบเปเบฝเบเปเบเบเบซเบผเบฑเบเบเบฒเบเบเบฒเบเบเบดเบเบเบฒเบก (เบเบปเบงเบขเปเบฒเบ, #include เปเบซเบกเปเบเบทเบเปเบเบตเปเบกเปเบชเปเบซเบเบถเปเบเปเบเปเบเบฅเปเปเบซเบผเปเบ).
เบเบฑเปเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเบเปเปเปเบเบฐเบเปเบฒเปเบซเปเปเบเปเปเบซเบกเบเบเบฒเบเบเบงเบเบชเบญเบเบฅเบฒเบเบเบฒเบเปเบเบฅเปเบเบตเปเบกเบตเบเบฑเบเบเบถเบเบเบฒเบเบเบดเบเบเบฒเบกเปเบเบทเปเบญเบเบงเบเปเบเบดเปเบเบเปเบฒเบฎเปเบญเบเบเปเบซเบผเบทเบเบถเบเบเปเบฒเบฎเปเบญเบเบเป. เปเบโเบเปโเบฅเบฐโเบเบตโเบเบตเปโเบเปเบฒเบโเบชเบฒโเบกเบฒเบโเปเบฎเบฑเบโเปเบเป incremental build เปเบโเปเบงโเบฅเบฒโเบเบตเปโเบเบฒเบโเบเบงเบโเบชเบญเบโเบเปเบฒโเบซเบกเบฑเปเบโเบชเบฑเบโเบเบฒโ, เบเบดโเบเบฒโเบฅเบฐโเบเบฒโเบเบฒเบโเบเปเบฒโเปเบเปโเบฎเบนเบโเปเบเบโเบเบฒเบโ
เบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบญเบเปเบเบฅเปเปเบซเบผเปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบงเบดเปเบเบฒเบฐเปเบกเปเบเบเบทเบเบเบฑเบเบเบถเบเปเบงเปเปเบเปเบเบฅเปเบเปเปเบเบงเบฒเบกเปเบฅเบฐเบเบทเบเบชเบปเปเบเปเบเบซเบฒเบเบนเปเบงเบดเปเบเบฒเบฐเปเบเบเปเบเปเบเบฒเบฅเบฒเบกเบดเปเบเบต -S:
pvs-studio-analyzer analyze ... -f build/compile_commands.json -S check-list.txt
เปเบเบฅเปเบเบตเปเบฅเบฐเบเบธเปเบชเบฑเปเบเบเบฒเบเบเบตเปเบเปเบฝเบงเบเปเบญเบ เบซเบผเบทเบขเปเบฒเบเปเบเปเบเบดเบเปเบเบซเบฒเปเบเบฅเป, เปเบฅเบฐเปเบเปเบฅเบฐเปเบเบฅเปเปเปเปเบเบฐเบเปเบญเบเบขเบนเปเปเบเปเบเบงเปเปเป. เบกเบฑเบเปเบเบฑเบเบเบตเปเบเบญเบกเบฎเบฑเบเบเบตเปเบเบฐเบฅเบฐเบเบธเบเปเปเบเบฝเบเปเบเปเบเบทเปเปเบเบฅเปเบชเปเบฒเบฅเบฑเบเบเบฒเบเบงเบดเปเบเบฒเบฐ, เปเบเปเบเบฑเบเบเปเปเบเบงเบฒเบกเบเปเบฒเบเป. เบเบฑเบเบงเบดเปเบเบฒเบฐเบเบฐเปเบซเบฑเบเบงเปเบฒเบเบตเปเบเปเปเปเบกเปเบเปเบเบฅเปเปเบฅเบฐเบเบฐเบเปเปเบชเบปเบเปเบเบชเบฒเบ. เบเบตเปเบชเบฒเบกเบฒเบเปเบเบฑเบเบเบฐเปเบซเบเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบฐเปเบเบเบเบงเบฒเบกเบเบดเบเปเบซเบฑเบเบเปเบฒเปเบเบฅเปเบเบทเบเบฅเบฐเบเบธเบเปเบงเบเบเบปเบเปเบญเบ. เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เปเบฅเบทเปเบญเบเปเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบญเบเปเบเบฅเปเบเบฐเบเบทเบเบชเปเบฒเบเบเบทเปเบเปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบงเบดเปเบเบฒเบฐเปเบ CI, เบชเปเบฒเบฅเบฑเบเบเบปเบงเบขเปเบฒเบ, เปเบซเบผเบปเปเบฒเบเบตเปเบญเบฒเบเบเบฐเปเบเบฑเบเปเบเบฅเปเบเบตเปเบกเบฒเบเบฒเบเบเปเบฒเบฎเปเบญเบเบเปเบซเบผเบทเบเบถเบ.
เปเบเบเบฑเบเบเบธเบเบฑเบ, เบเบฒเบเบเปเบฒเปเบเปเบฎเบนเบเปเบเบเบเบตเป, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเบงเบเบชเบญเบเบฅเบฐเบซเบฑเบเปเบซเบกเปเบขเปเบฒเบเปเบงเบงเบฒเบเปเบญเบเบเบตเปเบกเบฑเบเบเบฐเปเบเบปเปเบฒเปเบเปเบเบชเบฒเบเบฒเบเบฒเบเบเบฑเบเบเบฐเบเบฒเบเบปเปเบเบเป. เปเบเบทเปเบญเบฎเบฑเบเบเบฐเบเบฑเบเบงเปเบฒเบฅเบฐเบเบปเบเบเบฒเบเบชเบฐเปเบเบเบเบญเบเบชเบฐเบซเบเบญเบเบเปเปเบเบฒเบเปเบเบทเบญเบเบเบญเบเบเบฒเบเบงเบดเปเบเบฒเบฐ, เบเบปเบเบเบฐเปเบซเบเบ เบเบปเบงเปเบเบเบชเบฑเบเบเบฒเบ เปเบเบตเปเบกเบเบธเบเปเบฅเปเบง -- เบเบตเปเบเบญเบ-เปเบเบทเบญเบ:
plog-converter ... --indicate-warnings ... -o /path/to/report.tasks ...
เบเปเบงเบเบเบธเบเบเบตเป, เบเบปเบงเปเบเบเบชเบฑเบเบเบฒเบเบเบฐเบชเบปเปเบเบเบทเบเบฅเบฐเบซเบฑเบเบเบตเปเบเปเปเปเบกเปเบเบชเบนเบเบเปเบฒเบกเบตเบเปเบฒเปเบเบทเบญเบเปเบเบเบปเบเบฅเบฒเบเบเบฒเบเบเบฒเบเบงเบดเปเบเบฒเบฐ. เบเบฒเบเบเปเบฒเปเบเปเบฅเบฐเบซเบฑเบเบเบฒเบเบชเบปเปเบเบเบทเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเบฅเบฑเบญเบเบเบฒเบเบฎเปเบญเบเบเป precommit, commit, เบซเบผเบทเบเบถเบ, เปเบฅเบฐเบเบปเบเบฅเบฒเบเบเบฒเบเบเบฒเบเบงเบดเปเบเบฒเบฐเบเบตเปเบชเปเบฒเบเบเบถเปเบเบชเบฒเบกเบฒเบเบชเบฐเปเบเบ, เปเบเปเบเบเบฑเบ, เบซเบผเบทเบชเบปเปเบเบเบฒเบเบญเบตเปเบกเบฅเป.
เบซเบกเบฒเบโเปเบซเบโ. เปเบเปเบงเบฅเบฒเบเบตเปเบเปเบฒเบเบเปเบฒเบญเบดเบเปเบฅเบตเปเบกเบเบปเปเบเบเบฒเบเบงเบดเปเบเบฒเบฐเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบญเบเปเบเบฅเป, เปเบเบเบเบฒเบเบเบฑเบเบซเบกเบปเบเบเบฐเบเบทเบเบงเบดเปเบเบฒเบฐ, เปเบเบฒเบฐเบงเปเบฒ เบเบฒเบเบงเบดเปเบเบฒเบฐเบเปเบญเบเบชเปเบฒเบเปเบเบฅเปเบเบตเปเบเบถเปเบเบเบฑเบเปเบเบฅเปเปเบซเบผเปเบเปเบเบเบเบฒเบเบขเบนเปเปเบเปเบเบฅเป header. เบเบตเปเปเบกเปเบเบเบธเบเบชเบปเบกเบเบฑเบเบเบญเบเบเบฒเบเบงเบดเปเบเบฒเบฐเปเบเบฅเป C เปเบฅเบฐ C ++. เปเบเบญเบฐเบเบฒเบเบปเบ, เปเบเบฅเป dependency เบชเบฒเบกเบฒเบเบเบทเบเปเบเบฑเบเปเบงเปเปเบเบเบฒเบเบเบงเบฒเบกเบเปเบฒเปเบฅเบฐเบกเบฑเบเบเบฐเบเบทเบเบเบฑเบเบเบธเบเปเบเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบเปเบเบเปเบเบทเปเบญเบเบงเบดเปเบเบฒเบฐ. เบเบฐเปเบซเบเบเบเบญเบเบเบฒเบเบเบงเบเบชเบญเบ commits เปเบเปเบงเบฅเบฒเบเบตเปเบเปเบฒเปเบเปเบฎเบนเบเปเบเบเบเบฒเบเบเบงเบเบชเบญเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเปเบเบฅเปเปเบเปเบฅเบเบฐเบเบฒเบเบเปเบฒเปเบเปเบฎเบนเบเปเบเบเบเบฒเบเบงเบดเปเบเบฒเบฐ incremental เปเบกเปเบเบงเปเบฒเบเปเบฒเบเบเบฝเบเปเบเปเบเปเบญเบเบเบฒเบ cache เปเบเบฅเปเบเบฑเปเบเปเบฅเบฐเบเปเปเปเบกเปเบเปเบเบฅเปเบงเบฑเบเบเบธ.
เบซเบผเบฑเบเบเบฒเบเบเบปเปเบงเปเบเบเบญเบเบเบฒเบเบงเบดเปเบเบฒเบฐเบเบฒเบเบฎเปเบญเบเบเปเบเบถเบ
เบเบฒเบเบงเบดเปเบเบฒเบฐเปเบเบเบเบฒเบเบเบฑเบเบซเบกเบปเบเปเบเปเปเบงเบฅเบฒเบซเบผเบฒเบ, เบชเบฐเบเบฑเปเบเบกเบฑเบเปเบฎเบฑเบเปเบซเปเบเบงเบฒเบกเบฎเบนเปเบชเบถเบเบเบตเปเบเบฐเบเบงเบเบชเบญเบเบเบฝเบเปเบเปเบเบฒเบเบชเปเบงเบเบเบญเบเบกเบฑเบ. เบเบฑเบเบซเบฒเปเบกเปเบเบงเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเปเบเบเปเบเบฅเปเปเบซเบกเปเบเบฒเบเบชเปเบงเบเบเบตเปเปเบซเบผเบทเบญเบเบญเบเปเบเบฅเปเปเบเบเบเบฒเบ.
เบเปเปเบซเปเปเบเบดเปเบเบเบปเบงเบขเปเบฒเบเบเบญเบเบเบปเปเบเปเบกเปเบเบตเปเบกเบตเบชเบญเบเบชเบฒเบเบฒ:
เบเปโเปเบซเปโเบเบถเบโเบเบฒเบโเปเบเบดเบโเบเบณโเปเบฑเปเบโเบชเบฑเบเบเบฒโเบเบฑเปเบ A1 เบเบฐเบเบญเบเบกเบตเบเปเบฒเบเบงเบเบฅเบฐเบซเบฑเบเบเบฐเบซเบเบฒเบเปเบซเบเปเบเปเบชเบปเบกเบเบงเบเบเบตเปเปเบเปเบฎเบฑเบเบเบฒเบเบเบปเบเบชเบญเบเปเบฅเปเบง. เบเปเบญเบโเปเปเบฒโเบเบฑเปเบโเปเปเบญเบโเปเบถเปเบโเบเบงเบโเปเบฎเบปเบฒโเปเบเปโเบชเปเบฒเบโเบชเบฒเบเบฒโเบเบฒเบโเบเบณโเปเบฑเปเบโเบชเบฑเบเบเบฒ A1 เปเบฅเบฐเบเปเบฝเบเบเบฒเบเปเบเบฅเป.
เบเปเบฒเบ, เปเบเปเบเบญเบ, เบชเบฑเบเปเบเบเปเบซเบฑเบเบงเปเบฒเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ A1 เบชเบญเบเบเปเบฒเบซเบกเบฑเปเบเบชเบฑเบเบเบฒเปเบเบตเปเบกเปเบเบตเบกเปเบเปเปเบเบตเบเบเบถเปเบ, เปเบเปเปเบซเบผเบปเปเบฒเบเบตเปเปเบกเปเบเบเบฒเบเบฅเบงเบกเบเบปเบงเบเบญเบเบชเบฒเบเบฒเบญเบทเปเบเป, เปเบเบฒเบฐเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเปเบซเบกเบฑเปเบเบชเบฑเบเบเบฒ. เบเบปเปเบเบชเบฐเบเบฑเบ. เปเบฅเบฐเบเบฝเบงเบเบตเปเปเบเบดเบเปเบงเบฅเบฒเปเบฅเปเบง hotfix เบเปเบญเบก. เบเบฑเปเบเปเบกเปเบเปเบซเบเบเบปเบเบเบตเปเบงเปเบฒเบเปเบฒเบฎเปเบญเบเบเปเบเบถเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบฅเบงเบกเบเบปเบงเปเบเปเบเบฒเบเบปเบเบเบถเปเบ 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
เบเปเบฒเบชเบฑเปเบเบเบตเปเบเบฐเบชเบฐเปเบเบเบเปเปเบเบดเบเบเบฒเบเปเบ
เบเบฝเบเปเบเปเปเบเบเบฑเบเบเบธเบเบฑเบเบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเปเปเบเบฝเบเปเบเปเบชเบฐเปเบเบเบเปเปเบเบดเบเบเบฒเบ, เปเบเปเบเบฑเบเปเบเปเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฐเบเบญเบเปเบฅเบฐเบเบฒเบเบเบปเบเบชเบญเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบฐเบเบปเบเบเบปเบงเบเบญเบเบเบฑเบเบซเบฒ. เบชเปเบฒเบฅเบฑเบเบเบธเบเบเบฐเบชเบปเบเบเบตเป, เบเบธเบเบเบทเบเปเบเบตเปเบกเปเบชเปเบเบปเบงเปเบเบเบชเบฑเบเบเบฒเบ -W (-- เบเบตเปเบเบญเบ-เปเบเบทเบญเบ). เบเปเบฒเบกเบตเบขเปเบฒเบเบซเบเปเบญเบเบซเบเบถเปเบเบเปเบฒเปเบเบทเบญเบเบเบญเบเบเบฒเบเบงเบดเปเบเบฒเบฐ, เบฅเบฐเบซเบฑเบเบเบฑเบเบเบทเบเบเบปเบเบเบฐเปเบซเบเบ เบเบปเบงเปเบเบเบชเบฑเบเบเบฒเบ เบเบฐเบเปเบฝเบเปเบเบฑเบ 2, เปเบเบดเปเบเปเบเบเบฑเปเบเบเบฐเปเบเปเบเปเบซเปเบเปเบฅเบดเบเบฒเบ CI เบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบฐเบเบปเบเบเบปเบงเบเบญเบเบเบงเบฒเบกเบเบดเบเบเบฒเบเบเบตเปเบญเบฒเบเบเบฐเปเบเบตเบเบเบถเปเบเปเบเปเบเบฅเปเบเปเบฒเบฎเปเบญเบเบเปเบเบฒเบเบเบถเบ.
Travis C.I.
เบเบฒเบเบเบฑเปเบเบเปเบฒเปเบกเปเบเปเบฎเบฑเบเปเบเบฑเบเปเบเบฅเป .travis.yml. เปเบเบทเปเบญเบเบงเบฒเบกเบชเบฐเบเบงเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเบฐเบเปเบฒเปเบซเปเบเปเบฒเบเปเบญเบปเบฒเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบเบปเปเบฒเปเบเปเบ script bash เปเบเบเบเปเบฒเบเบซเบฒเบเบเบตเปเบกเบตเบซเบเปเบฒเบเบตเปเบเบฐเบเบทเบเปเบญเบตเปเบเบเบฒเบเปเบเบฅเป. .travis.yml (bash script_name.sh function_name).
เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเบตเปเบกเบฅเบฐเบซเบฑเบเบเบตเปเบเปเบฒเปเบเบฑเบเปเบซเปเบเบฑเบ script เบขเบนเป bash, เบเปเบงเบเบงเบดเบเบตเบเบตเป, เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเปเบฎเบฑเบเบซเบเปเบฒเบเบตเปเปเบเบตเปเบกเปเบเบตเบก. เปเบเบเบฒเบ เบเบฒเบเบเบดเบเบเบฑเปเบ เปเบซเปเบเบฝเบเบเปเปเปเบเบเบตเป:
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 เบเปเบฒเปเบเบตเบเบเบฒเบเบงเบดเปเบเบฒเบฐ:
script:
- bash .travis.sh travis_script
เปเบฅเบฐเปเบ bash 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 CI เบเบฐเบเบฒเบเปเบซเปเปเบเบปเบฒเปเบเบปเปเบฒเปเบเบฑเบเปเบญเบเบฐเบฅเบฒเบ:
- $TRAVIS_PULL_REQUEST เปเบเบฑเบเบฎเบฑเบเบชเบฒเบเปเบฒเบเบงเบเบเบฒเบเบฎเปเบญเบเบเปเบเบถเบเบซเบผเบท เบเบตเปเบเปเปเบเบทเบเบเปเบญเบ, เบเปเบฒเบเบตเปเปเบกเปเบเบชเบฒเบเบฒเบเบปเบเบเบฐเบเบด;
- $TRAVIS_REPO_SLUG เปเบเบฑเบเบฎเบฑเบเบชเบฒเบเบทเปเบเบญเบ repository เปเบเบเบเบฒเบ.
เบชเบนเบเบเบฒเบเบเบดเบเปเบฅเปเบชเปเบฒเบฅเบฑเบเบเบฑเบเบเบฑเบเบเบตเป:
Travis CI เบเบญเบเบเบฑเบเบฅเบฐเบซเบฑเบเบเบฑเบเบเบทเบ, เบเบฑเปเบเบเบฑเปเบเบเบฒเบเบเบฐเบเบปเบเบเบปเบงเบเบญเบเบเปเบฒเปเบเบทเบญเบเบเบฐเบเบญเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเปเบซเปเบซเบกเบฒเบเบเปเบฒเบซเบกเบฑเปเบเบชเบฑเบเบเบฒเบงเปเบฒเบกเบตเบเปเปเบเบดเบเบเบฒเบ.
เบเบญเบเบเบตเปเปเบซเปเปเบฎเบปเบฒเบเบดเบเบฒเบฅเบฐเบเบฒเปเบเบดเปเบเบฅเบฐเบซเบฑเบเปเบชเบฑเปเบเบเบตเปเปเบซเปเบฅเบฐเบญเบฝเบ:
git diff --name-only origin/HEAD > .pvs-pr.list
เบเบงเบฒเบกเบเบดเบเปเบฅเปเบงเปเบกเปเบเบงเปเบฒ Travis CI เบญเบฑเบเบเบฐเปเบเบกเบฑเบเบเบฐเบฅเบงเบกเบชเบฒเบเบฒเปเบเบเบฐเบเบฐเบเบตเปเบเบฒเบเบงเบดเปเบเบฒเบฐเบเบฒเบเบฎเปเบญเบเบเปเบเบถเบ:
เบเบฑเปเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเบงเบดเปเบเบฒเบฐ A4เปเบฅเบฐเบเปเป B3->A3. เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบเบธเบเบเบฐเบชเบปเบกเบเบฑเบเบเบตเป, เบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบเบดเบเปเบฅเปเบเบงเบฒเบกเปเบเบเบเปเบฒเบเบเบฑเบ A3, เบเบถเปเบเปเบเบฑเบเบเบตเปเบเบฑเบเปเบเบเปเบเบดเบเบเบญเบเบชเบฒเบเบฒเบเบฒเบ เบเบปเปเบเบเปเบฒเปเบเบตเบ.
เบกเบตเบฅเบฒเบเบฅเบฐเบญเบฝเบเบเบตเปเบชเปเบฒเบเบฑเบเบญเบฑเบเบซเบเบถเปเบเบเบตเปเบเบฑเบเปเบซเบผเบทเบญ - เบเบฒเบเปเบเบฑเบเบเปเปเบกเบนเบเบเบฒเบเบเบถเปเบเบเบฑเบเบเบญเบเปเบเบฅเป header เปเบเบซเบเปเบงเบเบเบฒเบเบเบฒเบเปเบเบเบตเปเบฅเบงเบเบฅเบงเบก (*.c, *.cc, *.cpp, เปเบฅเบฐเบญเบทเปเบเป). เบเบฒเบเบงเบดเปเบเบฒเบฐเบเบฒเบเบเบดเบเปเบฅเปเบเบฒเบเปเบเบดเปเบเบเบฒเบญเบฒเปเบชเปเบซเบผเบปเปเบฒเบเบตเปเปเบกเบทเปเบญเบกเบฑเบเบเบทเบเปเบเบตเบเบเบปเบงเบเบฑเปเบเบเปเบฒเบญเบดเบเปเบเบฎเบนเบเปเบเบเบเบญเบเบเบฒเบเบเบงเบเบชเบญเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบญเบเปเบเบฅเปเปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบฑเบเบเบถเบเบเบงเบเบกเบฑเบเปเบงเปเปเบเปเบเปเบฅเบเบฐเบเปเบฅเบต .PVS-Studio. Travis CI เบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบ cache เปเบเบเปเบเบต, เบเบฑเปเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเบเบฐเบเบฑเบเบเบถเบเบเปเปเบกเบนเบเปเบเปเบฅเบเบฐเบเปเบฅเบต .PVS-Studio/:
cache:
directories:
- .PVS-Studio/
เบฅเบฐเบซเบฑเบเบเบตเปเบเปเบญเบเปเบเปเบฎเบฑเบเบเบฒเบเปเบเบตเปเบกเปเบชเปเปเบเบฅเป .travis.yml. เปเบเปเบฅเบเบฐเบเปเบฅเบตเบเบตเปเปเบเบฑเบเบฎเบฑเบเบชเบฒเบเปเปเบกเบนเบเบเปเบฒเบเปเบเบตเปเปเบเบฑเบเบเปเบฒเบซเบผเบฑเบเบเบฒเบเบเบฒเบเบงเบดเปเบเบฒเบฐ, เปเบเบดเปเบเบเบฐเบเปเบงเบเปเบเบตเปเบกเบเบงเบฒเบกเปเบงเปเบเบเบฒเบเบงเบดเปเบเบฒเบฐเบฅเบฒเบเบเบทเปเปเบเบฅเปเบซเบผเบทเบเบฒเบเบงเบดเปเบเบฒเบฐเปเบเบตเปเบกเบเบถเปเบเบขเปเบฒเบเบซเบผเบงเบเบซเบผเบฒเบ. เบเปเบฒเบซเบฒเบเบงเปเบฒเบเบตเปเบเปเปเปเบเปเปเบฎเบฑเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบฑเบเบงเบดเปเบเบฒเบฐเบเบปเบงเบเบดเบเบเบฐเบงเบดเปเบเบฒเบฐเปเบเบฅเปเบเบฑเบเบซเบกเบปเบเบเบธเบเบเบฑเปเบ.
Buddy
เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบ Travis CI,
เบเปเบญเบเบญเบทเปเบ เปเบปเบ, เบเบงเบเปเบฎเบปเบฒ เบเบณ เปเบเบฑเบเบเปเบญเบเปเบเบตเปเบกเบเบฒเบเบเบฐ เบเบณ เปเปเป เปเบชเปเบชเบฒเบเบเบฐเบเบญเบ:
เปเบซเปเปเบฎเบปเบฒเบเบตเปเบเบญเบเบเบปเบงเบชเบฑเบเบฅเบงเบกเบเบตเปเบเบทเบเบเปเบฒเปเบเปเปเบเบทเปเบญเบชเปเบฒเบเปเบเบเบเบฒเบ. เบชเบฑเบเปเบเบเปเบซเบฑเบ 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 โ เบเบฒเบโเบเบฐโเบชเบปเบกโเบเบญเบโเบเบทเปโเบเบนเปโเปเบเปโเปเบฅเบฐ repository (เบชเปเบฒโเบฅเบฑเบโเบเบปเบงโเบขเปเบฒเบโเบชเบนเบโเบชเบธเบ / เบเบฒเบโเบเบปเบโเบชเบญเบโ)โ.
เบเบญเบเบเบตเปเปเบซเปเบเบงเบเปเบฎเบปเบฒเบเบฑเบเบเบถเบเบเบฒเบเบเปเบฝเบเปเบเบเปเบเบเปเบเปเบเบธเปเบกเบเปเบฒเบเบฅเบธเปเบกเบเบตเปเปเบฅเบฐเปเบเบตเบเปเบเปเบเบฒเบเบงเบดเปเบเบฒเบฐเบเปเบฒเบฎเปเบญเบเบเปเบเบถเบ:
เบเปเปเปเบซเบกเบทเบญเบเบเบฑเบ Travis CI, เบเบงเบเปเบฎเบปเบฒเบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบเบฅเบฐเบเบธ .pvs-studio เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบงเบฒเบกเบเปเบฒ, เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒ Buddy เบญเบฑเบเบเบฐเปเบเบกเบฑเบ cache เปเบเบฅเปเบเบฑเบเบซเบกเบปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบตเบเบเบปเบงเบเปเปเปเบ. เบเบฑเปเบเบเบฑเปเบ, เบชเบดเปเบเบชเบธเบเบเปเบฒเบเบเบตเปเปเบซเบฅเบทเบญเปเบงเปเปเบกเปเบเปเบเบทเปเบญเบเบฑเบเบเบถเบเบเบฒเบเปเบเบปเปเบฒเบชเบนเปเบฅเบฐเบเบปเบเปเบฅเบฐเบฅเบฐเบซเบฑเบเบเปเบฒเบเบชเปเบฒเบฅเบฑเบ PVS-Studio เปเบ Buddy. เบซเบผเบฑเบเบเบฒเบเบเบฑเบเบเบถเบเบเบฒเบเบเปเบฝเบเปเบเบ, เบเบงเบเปเบฎเบปเบฒเบเบฐเบเบทเบเบเปเบฒเบเบฑเบเบเบทเบเปเบเบเปเป. เบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบเปเบฒเบงเปเบเบชเบนเปเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบปเบงเปเบเปเบฅเบฐเปเบเบตเปเบกเบเบฒเบเปเบเบปเปเบฒเบชเบนเปเบฅเบฐเบเบปเบเปเบฅเบฐเบฅเบฐเบซเบฑเบเบชเปเบฒเบฅเบฑเบ PVS-Studio:
เบซเบผเบฑเบเบเบฒเบเบเบตเป, เบฎเบนเบเบฅเบฑเบเบชเบฐเบเบฐเบเบญเบเบเปเบฒเบฎเปเบญเบเบเปเบเบถเบเปเบซเบกเปเบซเบผเบทเบเปเบฒเบซเบกเบฑเปเบเบชเบฑเบเบเบฒเบเบฐเปเบฎเบฑเบเปเบซเปเปเบเบตเบเบเบฒเบเบเบปเบเบเบงเบเบเบทเบ. เบเปเบฒเบเปเบฒเบซเบกเบฑเปเบเบชเบฑเบเบเบฒเบกเบตเบเปเปเบเบดเบเบเบฒเบ, Buddy เบเบฐเบเบตเปเบเบญเบเบเบตเปเบขเบนเปเปเบเบซเบเปเบฒเบเบฒเบเบฎเปเบญเบเบเปเบเบฒเบเบเบถเบ.
AppVeyor
เบเบฒเบเบเบฑเปเบเบเปเบฒ AppVeyor เปเบกเปเบเบเปเบฒเบเบเบทเบเบฑเบเบเบฑเบ Buddy, เบเบฑเบเบเบฑเปเบเปเบเปเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบเบตเบเบเบทเปเบเปเบเบเบฒเบเปเบเปเบเบญเบเบเบญเบเปเบงเบฑเบเปเบฅเบฐเบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเบตเปเบกเปเบเบฅเป *.yml เปเบเบปเปเบฒเปเบเปเบเบเปเบญเบเปเบเบฑเบเบเปเปเบกเบนเบเปเบเบเบเบฒเบ.
เปเบซเปเปเบเบเบตเปเปเบเบเบเบฒเบเบเบฑเปเบเบเปเบฒเปเบเบเบฒเบเบฅเบงเบกเบเบญเบเปเบเบเบเบฒเบ:
เปเบซเปเปเบฅเบทเปเบญเบเบฅเบปเบเบซเบเปเบฒเบเบตเปเปเบฅเบฐเปเบเบตเบเปเบเปเบเบฒเบเบเบฐเบซเบเบฑเบ cache เบชเปเบฒเบฅเบฑเบเบเบฒเบเบฅเบงเบเบฅเบงเบกเบเปเบฒเบฎเปเบญเบเบเปเบเบถเบ:
เบเบญเบเบเบตเปเปเบซเปเปเบเบเบตเปเปเบเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก, เบเปเบญเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบฅเบฐเบเบธเบฎเบนเบเบเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฐเบเบญเบเปเบฅเบฐเบเบปเบงเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบตเปเบเปเบฒเปเบเบฑเบ:
เบเปเบฒเบเปเบฒเบเปเบเปเบญเปเบฒเบเบเบฒเบเบเปเบญเบ, เบเปเบฒเบเบเบฐเบเบธเปเบเปเบเบตเบเบเบฑเบเบชเบญเบเบเบปเบงเปเบเบเบตเป โ PVS_KEY ะธ PVS_USERNAME. เบเปเบฒเบเปเป, เปเบซเปเบเปเบญเบเปเบเบทเบญเบเปเบเบปเปเบฒเบงเปเบฒเบเบงเบเปเบเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเบงเบเบชเบญเบเปเบเบญเบฐเบเบธเบเบฒเบเบเบญเบเปเบเบทเปเบญเบเบงเบดเปเบเบฒเบฐ PVS-Studio. เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบซเบฑเบเบเบงเบเบกเบฑเบเบญเบตเบเบเบฑเปเบเปเบเบชเบฐเบเบฃเบดเบ Bash เปเบเบญเบฐเบเบฒเบเบปเบ.
เปเบเบซเบเปเบฒเบเบฝเบงเบเบฑเบเบเปเบฒเบเบฅเบธเปเบกเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบตเปเบเบญเบเปเบเบเปเบเบตเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบฑเบเบฎเบฑเบเบชเบฒเปเบงเป:
เบเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเปเปเบฎเบฑเบเปเบเบงเบเบตเป, เบเบงเบเปเบฎเบปเบฒเบเบฐเบงเบดเปเบเบฒเบฐเปเบเบเบเบฒเบเบเบฑเบเบซเบกเบปเบเปเบเบเบเบตเปเบเบฐเปเบเบฑเบเบชเบญเบเปเบเบฅเป, เปเบเปเบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเปเบฎเบฑเบเบเบปเบเบเบฐเบฅเบดเบเบเบฒเบเปเบเบฅเปเบเบตเปเบเปเบฒเบเบปเบ. เบเบฑเปเบเบเบฑเปเบ, เบกเบฑเบเปเบเบฑเบเบชเบดเปเบเบชเปเบฒเบเบฑเบเบเบตเปเบเบฐเปเบชเปเบเบทเปเปเบเปเบฅเบเบฐเบเปเบฅเบตเบเบตเปเบเบทเบเบเปเบญเบ.
เปเบเบเบฑเบเบเบธเบเบฑเบเบกเบฑเบเปเบเบดเบเปเบงเบฅเบฒเบชเปเบฒเบฅเบฑเบ script เบเบตเปเบเบฐเบเบปเบเบชเบญเบ. เปเบเบตเบเปเบเบเบเบปเบเบชเบญเบ เปเบฅเบฐเปเบฅเบทเบญเบ 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
เบเบฒเบเบกเบญเบเบซเบกเบฒเบเบชเบฐเปเบเบฒเบฐเบเบญเบเบเปเบฒเบเบญเบเบเปเบฒเบชเบฑเปเบ pwd เปเบซเปเบเบฑเบเบเบปเบงเปเบเบเบตเปเบเบงเบเปเบเบฑเบเบฎเบฑเบเบชเบฒเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบเบเบตเปเปเบเบดเปเบเบเบทเบงเปเบฒเปเบเบเบขเบนเป glance เบเปเบฒเบญเบดเบ, เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเบญเบฐเบเบดเบเบฒเบเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบเบเบฑเบเบเบธเบเบฑเบ.
เปเบเบเบฐเบเบฐเบเบตเปเบเบฑเปเบเปเบเบทเปเบญเบเบงเบดเปเบเบฒเบฐเปเบ AppVeyor, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบปเบเบเบฑเบเบเบถเบเบเบดเบเปเบฒเบเบตเปเปเบเบเบเบฐเบซเบฅเบฒเบเบเบตเปเบชเบธเบเบเบญเบเบเบฑเบเบงเบดเปเบเบฒเบฐ. เปเบเบเปเบฒเบเบซเบเบถเปเบ, เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบฎเบฑเบเบงเบฝเบเบขเปเบฒเบเบเบทเบเบเปเบญเบ, เปเบเปเบเบฒเบเบงเบดเปเบเบฒเบฐเบเปเปเปเบเปเปเบฅเบตเปเบกเบเบปเปเบ. เบเปเบญเบเปเบเปเปเบงเบฅเบฒเบซเบผเบฒเบเบเบตเปเบชเบฑเบเปเบเบเปเบซเบฑเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบขเบนเปเปเบ /home/appveyor/projects/testcalc/ directory, เปเบฅเบฐเบเบฑเบเบงเบดเปเบเบฒเบฐเปเบเปเปเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบขเบนเปเปเบ /opt/appveyor/build-agent/. เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเบฎเบนเปเบงเปเบฒเบเบปเบงเปเบ $PWD เปเบกเปเบเบเบญเบเปเบฅเบฑเบเบเปเบญเบ. เบชเปเบฒเบฅเบฑเบเปเบซเบเบเบปเบเบเบตเป, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบฑเบเบเบธเบเบกเบนเบเบเปเบฒเบเบญเบเบกเบฑเบเบเปเบงเบเบเบปเบเปเบญเบเบเปเบญเบเบเบตเปเบเบฐเปเบฅเบตเปเบกเบเบฒเบเบงเบดเปเบเบฒเบฐ.
เปเบฅเบฐโเบซเบผเบฑเบโเบเบฒเบโเบเบฑเปเบโเบเบธเบโเบชเบดเปเบโเบเบธเบโเบขเปเบฒเบโเบเบทโเบเปเบญเบโเบเบตเปโเบเบฐโ:
เบเบญเบเบเบตเปเบเบดเบเบฒเบฅเบฐเบเบฒเบเบดเปเบเบชเปเบงเบเบเปเปเปเบเบเบตเป:
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 - เบเบทเปเบเบนเปเปเบเป เปเบฅเบฐเบเปเบญเบเปเบเบฑเบเบเปเปเบกเบนเบเปเบเบเบเบฒเบ.
เบชเบฐเบซเบฅเบธเบ
เปเบเปเบเบญเบ, เบเบงเบเปเบฎเบปเบฒเบเบฑเบเบเปเปเปเบเปเบเบดเบเบฒเบฅเบฐเบเบฒเบเบฑเบเบซเบกเบปเบเบเบญเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบฐเบชเบปเบกเบเบฐเบชเบฒเบเบขเปเบฒเบเบเปเปเปเบเบทเปเบญเบเบเบตเปเปเบเบฑเบเปเบเปเบเป, เปเบเบงเปเบเบเปเปเบเบฒเบก, เบเบงเบเปเบเบปเบฒเบเบฑเบเบซเบกเบปเบเบกเบตเบชเบฐเปเบเบฒเบฐเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบตเปเบเปเบฒเบเบเบทเบเบฑเบเบเบตเปเบชเบธเบเปเบเบดเปเบเบเบฑเบเปเบฅเบฐเบเบฑเบ. เบกเบตเบเปเปเบเบปเบเปเบงเบฑเปเบเบเบญเบ caching, เปเบเปเบฅเบฐเบเปเบฅเบดเบเบฒเบเปเบฎเบฑเบเปเบซเป "เบฅเบปเบเบเบตเบ" เบเบญเบเบเบปเบเปเบญเบ, เบชเบฐเบเบฑเปเบเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบกเปเบเปเบเบเบเปเบฒเบเบเบฑเบเบชเบฐเปเบซเบกเบต.
เบเบฒเบเบเปเบญเบ, เปเบเบฑเปเบเปเบ Travis-CI, เบชเบญเบเปเบชเบฑเปเบเบเบญเบเบฅเบฐเบซเบฑเบเปเบฅเบฐเบเบฒเบเบเบงเบฒเบกเบเปเบฒเปเบฎเบฑเบเบงเบฝเบ flawlessly; เบเบฒเบเบเปเบญเบ, เปเบเบฑเปเบเปเบ AppVeyor, เบเปเบฒเบเบเบฝเบเปเบเปเบเปเบญเบเบเบฒเบเบฅเบฐเบเบธเปเบเบเปเบเบตเปเบเบเบฒเบเบเบฑเปเบเบเปเบฒ; เปเบเปเบเบฒเบเบเปเบญเบเบเบตเปเบเปเบฒเบเบเปเบญเบเบเบฒเบเบชเปเบฒเบเบเบฐเปเบเบเบตเปเปเบเบฑเบเปเบญเบเบฐเบฅเบฑเบเปเบฅเบฐเบเบฐเบเบฒเบเบฒเบกเบเบฑเบเบเบงเบเบฅเบฐเบเบปเบเปเบเบทเปเบญเปเบซเปเปเบเบปเปเบฒเบกเบตเปเบญเบเบฒเบเบเบตเปเบเบฐเบเบฝเบเบเบฑเบเบเบดเปเบเบชเปเบงเบเบเบตเปเปเบเบฑเบเปเบงเปเปเบเบเบฒเบเบเบงเบฒเบกเบเปเบฒ. เบเบฑเปเบเบเบฑเปเบ, เบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฒเบเบงเบดเปเบเบฒเบฐเบเบฒเบเบฎเปเบญเบเบเปเบเบฒเบเบเบถเบเปเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบฐเบชเบปเบกเบเบฐเบชเบฒเบเบขเปเบฒเบเบเปเปเปเบเบทเปเบญเบเบเบตเปเบเปเปเปเบเปเบชเบปเบเบเบฐเบเบฒเบเปเบฒเบเปเบเบดเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบญเบดเบเปเบซเปเปเบเปเปเบเบงเปเบฒเบเปเบฒเบเบเบฐเบเปเปเบกเบตเบเบฑเบเบซเบฒเบเบฑเบเบเบฒเบเบเบงเบฒเบกเบเปเบฒ.
เบเบญเบเปเบเบชเปเบฒเบฅเบฑเบเบเบงเบฒเบกเบชเบปเบเปเบเบเบญเบเบเปเบฒเบ. เบเปเบฒโเบซเบฒเบโเบงเปเบฒโเบเบฒเบโเบชเบดเปเบโเบเบฒเบโเบขเปเบฒเบโเบเปเปโเปเบเปโเบญเบญเบโ, เบเบฐโเบฅเบธโเบเบฒโเบเบฝเบโเบซเบฒโเบเบงเบโเปเบฎเบปเบฒโเปเบเปโเบเบตเปโ
เบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเปเบเปเบเบเบฑเบเบเบปเบเบเบงเบฒเบกเบเบตเปเบเบฑเบเบเบนเปเบเบปเบกเบเบตเปเปเบงเบปเปเบฒเบเบฒเบชเบฒเบญเบฑเบเบเบดเบ, เบเบฐเบฅเบธเบเบฒเปเบเปเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฒเบเปเบเบเบฒเบชเบฒ: Maxim Zvyagintsev.
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com