แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒ“แƒ แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ Travis CI-แƒจแƒ˜, Buddy-แƒกแƒ แƒ“แƒ AppVeyor-แƒจแƒ˜ PVS-Studio-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒ“แƒ แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ Travis CI-แƒจแƒ˜, Buddy-แƒกแƒ แƒ“แƒ AppVeyor-แƒจแƒ˜ PVS-Studio-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—
PVS-Studio แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒจแƒ˜ C แƒ“แƒ C++ แƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก Linux-แƒ–แƒ” แƒ“แƒ macOS-แƒ–แƒ”, 7.04 แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒ“แƒแƒœ แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒฃแƒšแƒ˜, แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ แƒขแƒ”แƒกแƒขแƒ˜แƒก แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ˜ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒšแƒแƒ“. แƒแƒฎแƒแƒšแƒ˜ แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒแƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒแƒ— แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜, แƒ แƒแƒ—แƒ แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒแƒก แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒ. แƒ”แƒก แƒกแƒขแƒแƒขแƒ˜แƒ แƒ’แƒ”แƒขแƒงแƒ•แƒ˜แƒ—, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ“แƒแƒแƒงแƒ”แƒœแƒแƒ— GitHub แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒ˜แƒกแƒ”แƒ— แƒžแƒแƒžแƒฃแƒšแƒแƒ แƒฃแƒš CI (แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ˜แƒก) แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ”แƒ‘แƒจแƒ˜, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ Travis CI, Buddy แƒ“แƒ AppVeyor.

แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜

PVS- แƒกแƒขแƒฃแƒ“แƒ˜แƒ แƒแƒ แƒ˜แƒก C, C++, C# แƒ“แƒ Java แƒ”แƒœแƒ”แƒ‘แƒ–แƒ” แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฌแƒงแƒ˜แƒก แƒ™แƒแƒ“แƒ”แƒ‘แƒจแƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒžแƒแƒขแƒ”แƒœแƒชแƒ˜แƒฃแƒ แƒ˜ แƒ“แƒแƒฃแƒชแƒ•แƒ”แƒšแƒแƒ‘แƒ˜แƒก แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒชแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ˜. แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก 64-แƒ‘แƒ˜แƒขแƒ˜แƒแƒœ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ”แƒ‘แƒ–แƒ” Windows-แƒ–แƒ”, Linux-แƒ–แƒ” แƒ“แƒ macOS-แƒ–แƒ”.

Linux-แƒ˜แƒกแƒ แƒ“แƒ macOS-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก PVS-Studio 7.04 แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒจแƒ˜ แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ แƒฌแƒงแƒแƒ แƒ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜. แƒ”แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒ build แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— แƒคแƒแƒ˜แƒšแƒ˜ compile_commands.json. แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒก แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ“แƒ’แƒ”แƒœแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘. แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ build แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ แƒแƒ  แƒฃแƒญแƒ”แƒ แƒก แƒ›แƒฎแƒแƒ แƒก compile_commands.json แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒแƒก, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒกแƒชแƒแƒ“แƒแƒ— แƒแƒกแƒ”แƒ—แƒ˜ แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒ แƒฃแƒขแƒ˜แƒšแƒ˜แƒขแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. Bear.

แƒแƒกแƒ”แƒ•แƒ”, แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒš แƒ˜แƒฅแƒœแƒแƒก แƒจแƒ”แƒ›แƒ“แƒ’แƒ”แƒœแƒ”แƒšแƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒกแƒขแƒ แƒแƒ˜แƒก แƒ™แƒ•แƒแƒšแƒ˜แƒก แƒŸแƒฃแƒ แƒœแƒแƒšแƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“ (pvs-studio-analyzer trace). แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒ—แƒฅแƒ•แƒ”แƒœ แƒฏแƒ”แƒ  แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒแƒกแƒ แƒฃแƒšแƒแƒ— แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒกแƒ แƒฃแƒšแƒ˜ แƒ™แƒแƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ แƒ“แƒ แƒ—แƒ•แƒแƒšแƒงแƒฃแƒ แƒ˜ แƒแƒ“แƒ”แƒ•แƒœแƒแƒ— แƒ›แƒแƒก แƒ˜แƒกแƒ”, แƒ แƒแƒ› แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜ แƒจแƒ”แƒแƒ’แƒ แƒแƒ•แƒแƒก แƒกแƒ แƒฃแƒšแƒ˜ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒงแƒ•แƒ”แƒšแƒ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒ™แƒแƒ›แƒžแƒ˜แƒšแƒแƒชแƒ˜แƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘.

แƒ—แƒฃแƒ›แƒชแƒ, แƒแƒ› แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒก แƒแƒฅแƒ•แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜ แƒœแƒแƒ™แƒšแƒ˜ - แƒ—แƒฅแƒ•แƒ”แƒœ แƒแƒœ แƒ›แƒแƒ’แƒ˜แƒฌแƒ”แƒ•แƒ— แƒจแƒ”แƒแƒกแƒ แƒฃแƒšแƒแƒ— แƒ›แƒ—แƒ”แƒšแƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒกแƒ แƒฃแƒšแƒ˜ แƒ‘แƒ˜แƒšแƒ“แƒแƒชแƒ˜แƒ˜แƒก แƒ™แƒ•แƒแƒšแƒ˜ แƒงแƒแƒ•แƒ”แƒš แƒฏแƒ”แƒ แƒ–แƒ” แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒกแƒแƒก, แƒ แƒแƒช แƒ—แƒแƒ•แƒ˜แƒกแƒ—แƒแƒ•แƒแƒ“ แƒ”แƒฌแƒ˜แƒœแƒแƒแƒฆแƒ›แƒ“แƒ”แƒ’แƒ”แƒ‘แƒ แƒฉแƒแƒ“แƒ”แƒœแƒ˜แƒก แƒกแƒฌแƒ แƒแƒคแƒ˜ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ˜แƒ“แƒ”แƒแƒก. แƒแƒœ, แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœ แƒฅแƒ”แƒจแƒ˜แƒ แƒ”แƒ‘แƒ— แƒ™แƒ•แƒแƒšแƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒก, แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›แƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ˜แƒงแƒแƒก แƒแƒ แƒแƒกแƒ แƒฃแƒšแƒ˜, แƒ—แƒฃ แƒฌแƒงแƒแƒ แƒแƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ แƒ˜แƒชแƒ•แƒšแƒ”แƒ‘แƒ แƒขแƒ แƒแƒกแƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ (แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒแƒฎแƒแƒšแƒ˜ #include แƒ“แƒแƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ แƒ”แƒ แƒ—-แƒ”แƒ แƒ— แƒฌแƒงแƒแƒ แƒแƒก แƒคแƒแƒ˜แƒšแƒก).

แƒแƒฅแƒ”แƒ“แƒแƒœ แƒ’แƒแƒ›แƒแƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ”, แƒฉแƒ•แƒ”แƒœ แƒแƒ  แƒ’แƒ˜แƒ แƒฉแƒ”แƒ•แƒ— แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜ แƒ™แƒ•แƒแƒšแƒ˜แƒก แƒŸแƒฃแƒ แƒœแƒแƒšแƒ˜แƒ—, แƒ แƒแƒ—แƒ แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒแƒ— แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒแƒœ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒ. แƒ˜แƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒซแƒšแƒ”แƒ‘แƒ— แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒแƒก commit-แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒกแƒแƒก, แƒ’แƒแƒœแƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜.

แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฌแƒงแƒแƒ แƒแƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ แƒขแƒ”แƒฅแƒกแƒขแƒฃแƒ  แƒคแƒแƒ˜แƒšแƒจแƒ˜ แƒ“แƒ แƒ’แƒแƒ“แƒแƒ”แƒชแƒ”แƒ›แƒ แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— -S:

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

แƒ”แƒก แƒคแƒแƒ˜แƒšแƒ˜ แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒ˜แƒ— แƒแƒœ แƒแƒ‘แƒกแƒแƒšแƒฃแƒขแƒฃแƒ  แƒ‘แƒ˜แƒšแƒ˜แƒ™แƒ”แƒ‘แƒก แƒ“แƒ แƒงแƒแƒ•แƒ”แƒšแƒ˜ แƒแƒฎแƒแƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒแƒฎแƒแƒš แƒฎแƒแƒ–แƒ–แƒ”. แƒ“แƒแƒกแƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒ แƒแƒ แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜แƒก, แƒแƒ แƒแƒ›แƒ”แƒ“ แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒขแƒ”แƒฅแƒกแƒขแƒ˜แƒก แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜ แƒ“แƒแƒ˜แƒœแƒแƒฎแƒแƒ•แƒก, โ€‹โ€‹แƒ แƒแƒ› แƒ”แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ˜ แƒ“แƒ แƒฃแƒ’แƒฃแƒšแƒ”แƒ‘แƒ”แƒšแƒงแƒแƒคแƒก แƒฎแƒแƒ–แƒก. แƒ”แƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ แƒ˜แƒงแƒแƒก แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ—แƒฃ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒฎแƒ”แƒšแƒ˜แƒ—. แƒ—แƒฃแƒ›แƒชแƒ, แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ แƒฌแƒแƒ แƒ›แƒแƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ CI-แƒจแƒ˜ แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜แƒก แƒ“แƒ แƒแƒก, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ”แƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ˜แƒงแƒแƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜ commit แƒแƒœ pull-แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒ“แƒแƒœ.

แƒแƒฎแƒšแƒ, แƒแƒ› แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒกแƒฌแƒ แƒแƒคแƒแƒ“ แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒแƒ— แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ“แƒ˜, แƒกแƒแƒœแƒแƒ› แƒ˜แƒก แƒ›แƒแƒฎแƒ•แƒ“แƒ”แƒ‘แƒ แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ—แƒแƒ•แƒแƒ  แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒจแƒ˜. แƒ˜แƒ›แƒ˜แƒก แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒกแƒแƒงแƒแƒคแƒแƒ“, แƒ แƒแƒ› แƒกแƒ™แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ แƒžแƒแƒกแƒฃแƒฎแƒแƒ‘แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒก, แƒฃแƒขแƒ˜แƒšแƒ˜แƒขแƒ แƒ‘แƒšแƒแƒ’-แƒ™แƒแƒœแƒ•แƒ”แƒ แƒขแƒแƒ แƒ˜ แƒ“แƒ แƒแƒจแƒ แƒ“แƒแƒ”แƒ›แƒแƒขแƒ -- แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ—-แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ:

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

แƒแƒ› แƒ“แƒ แƒแƒจแƒ˜แƒ—, แƒ™แƒแƒœแƒ•แƒ”แƒ แƒขแƒแƒ แƒ˜ แƒ“แƒแƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒแƒ แƒ-แƒœแƒฃแƒšแƒแƒ•แƒแƒœ แƒ™แƒแƒ“แƒก, แƒ—แƒฃ แƒแƒ แƒ˜แƒก แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒจแƒ˜. แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒ‘แƒšแƒแƒ™แƒแƒ— แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ แƒ˜ แƒฉแƒแƒ แƒ—แƒ•แƒ˜แƒก, แƒฉแƒแƒ“แƒ”แƒœแƒ แƒแƒœ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒ แƒ“แƒ แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜แƒก แƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ, แƒ’แƒแƒ–แƒ˜แƒแƒ แƒ”แƒ‘แƒ แƒแƒœ แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ”แƒšแƒ”แƒฅแƒขแƒ แƒแƒœแƒฃแƒšแƒ˜ แƒคแƒแƒกแƒขแƒ˜แƒ—.

แฒจแƒ”แƒœแƒ˜แƒจแƒ•แƒœแƒ. แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“ แƒ“แƒแƒ˜แƒฌแƒงแƒ”แƒ‘แƒ— แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒก, แƒ›แƒ—แƒ”แƒšแƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒ’แƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒ“แƒ”แƒ‘แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒก แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒกแƒแƒ—แƒแƒฃแƒ แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ–แƒ” แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒฌแƒงแƒแƒ แƒแƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒ. แƒ”แƒก แƒแƒ แƒ˜แƒก C แƒ“แƒ C++ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ. แƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒจแƒ˜, แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒฅแƒ”แƒจแƒ˜แƒ แƒ”แƒ‘แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ“แƒ แƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒ’แƒแƒœแƒแƒฎแƒšแƒ“แƒ”แƒ‘แƒ แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ . commit-แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒก แƒฃแƒžแƒ˜แƒ แƒแƒขแƒ”แƒกแƒแƒ‘แƒ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒแƒก, แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜แƒก แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒกแƒ—แƒแƒœ แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒ˜แƒ— แƒแƒ แƒ˜แƒก แƒ˜แƒก, แƒ แƒแƒ› แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒ› แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒฅแƒ”แƒจแƒ˜แƒ แƒ”แƒ‘แƒ แƒ“แƒ แƒแƒ แƒ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก.

แƒ›แƒแƒ–แƒ˜แƒ“แƒ•แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜แƒก แƒ–แƒแƒ’แƒแƒ“แƒ˜ แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒ”แƒ‘แƒ˜

แƒ›แƒ—แƒ”แƒšแƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒก แƒ“แƒ˜แƒ“แƒ˜ แƒ“แƒ แƒ แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒแƒ–แƒ แƒ˜ แƒแƒฅแƒ•แƒก แƒ›แƒ˜แƒกแƒ˜ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒœแƒแƒฌแƒ˜แƒšแƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒแƒก. แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒ˜แƒก แƒแƒ แƒ˜แƒก, แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ›แƒแƒงแƒแƒ— แƒแƒฎแƒแƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒ“แƒแƒœแƒแƒ แƒฉแƒ”แƒœแƒ˜ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒกแƒ’แƒแƒœ.

แƒ›แƒแƒ“แƒ˜แƒ— แƒจแƒ”แƒ•แƒฎแƒ”แƒ“แƒแƒ— commit แƒฎแƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒก แƒแƒ แƒ˜ แƒขแƒแƒขแƒ˜แƒ—:

แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒ“แƒ แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ Travis CI-แƒจแƒ˜, Buddy-แƒกแƒ แƒ“แƒ AppVeyor-แƒจแƒ˜ PVS-Studio-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒฌแƒแƒ แƒ›แƒแƒ•แƒ˜แƒ“แƒ’แƒ˜แƒœแƒแƒ— แƒ”แƒก แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ A1 แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ“แƒ˜แƒ“ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒ™แƒ•แƒ” แƒ’แƒแƒ›แƒแƒชแƒ“แƒ˜แƒšแƒ˜แƒ. แƒชแƒแƒขแƒ แƒแƒ“แƒ แƒ” แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒ”แƒ— แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ˜แƒขแƒ˜แƒ“แƒแƒœ A1 แƒ“แƒ แƒจแƒ”แƒชแƒ•แƒแƒšแƒ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒคแƒแƒ˜แƒšแƒ˜.

แƒ—แƒฅแƒ•แƒ”แƒœ, แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒจแƒ”แƒœแƒ˜แƒจแƒœแƒ”แƒ— แƒ”แƒก แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ A1 แƒ›แƒแƒฎแƒ“แƒ แƒ™แƒ˜แƒ“แƒ”แƒ• แƒแƒ แƒ˜ โ€‹โ€‹แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒแƒกแƒ”แƒ•แƒ” แƒ˜แƒงแƒ แƒกแƒฎแƒ•แƒ แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ แƒฌแƒงแƒ›แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒฉแƒ•แƒ”แƒœ แƒแƒ  แƒ•แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ— แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒแƒก แƒกแƒแƒ›แƒแƒ’แƒ˜แƒกแƒขแƒ แƒ. แƒแƒฎแƒšแƒ แƒ™แƒ˜ แƒ“แƒแƒ“แƒ’แƒ แƒ“แƒ แƒ, แƒ แƒแƒชแƒ แƒชแƒฎแƒ”แƒšแƒ˜ แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ˜ แƒ›แƒ–แƒแƒ“แƒแƒ. แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ’แƒแƒฉแƒœแƒ“แƒ แƒจแƒ”แƒ แƒฌแƒงแƒ›แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ B3 ะธ A3.

แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒแƒ“แƒ แƒ›แƒแƒ—แƒ˜ แƒจแƒ”แƒ แƒฌแƒงแƒ›แƒ˜แƒก แƒ›แƒ—แƒ”แƒšแƒ˜ แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒจแƒ แƒแƒ›แƒแƒขแƒ”แƒ•แƒแƒ“แƒ˜ แƒ“แƒ แƒ’แƒแƒฃแƒ›แƒแƒ แƒ—แƒšแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒแƒ“แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒคแƒแƒ˜แƒšแƒ˜ แƒจแƒ”แƒ˜แƒชแƒ•แƒแƒšแƒ. แƒแƒ›แƒ˜แƒขแƒแƒ› แƒฃแƒคแƒ แƒ แƒ”แƒคแƒ”แƒฅแƒขแƒฃแƒ แƒ˜แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒšแƒ—แƒ แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜.

แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒแƒก แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก, แƒ˜แƒ› แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ˜แƒก HEAD-แƒจแƒ˜, แƒกแƒแƒ˜แƒ“แƒแƒœแƒแƒช แƒ’แƒ•แƒ˜แƒœแƒ“แƒ แƒจแƒ”แƒ แƒฌแƒงแƒ›แƒ แƒ›แƒแƒกแƒขแƒ”แƒ แƒจแƒ˜:

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 แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒก แƒžแƒแƒขแƒ”แƒœแƒชแƒ˜แƒฃแƒ แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ pull-แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒจแƒ˜.

แƒขแƒ แƒ”แƒ•แƒ˜แƒก CI

แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ แƒฎแƒ“แƒ”แƒ‘แƒ แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒกแƒแƒฎแƒ˜แƒ— .travis.yml. แƒ›แƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒฃแƒšแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ’แƒ˜แƒ แƒฉแƒ”แƒ•แƒ—, แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒฉแƒแƒ“แƒแƒ— แƒชแƒแƒšแƒ™แƒ” bash แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒจแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ’แƒแƒ›แƒแƒ˜แƒซแƒแƒฎแƒ”แƒ‘แƒ แƒคแƒแƒ˜แƒšแƒ˜แƒ“แƒแƒœ .travis.yml (bash script_name.sh แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ_แƒกแƒแƒฎแƒ”แƒšแƒ˜).

แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ— แƒกแƒแƒญแƒ˜แƒ แƒ แƒ™แƒแƒ“แƒก แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒก แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ–แƒ” Bash, แƒแƒ› แƒ’แƒ–แƒ˜แƒ— แƒฉแƒ•แƒ”แƒœ แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒ›แƒ”แƒข แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒแƒก. แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒแƒจแƒ˜ แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒแƒ— แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜:

install:
  - bash .travis.sh travis_install

แƒ—แƒฃ แƒ แƒแƒ˜แƒ›แƒ” แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ แƒ’แƒฅแƒแƒœแƒ“แƒแƒ—, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ“แƒแƒ˜แƒขแƒแƒœแƒแƒ— แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒจแƒ˜, แƒ“แƒ”แƒคแƒ˜แƒกแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒฎแƒกแƒœแƒ˜แƒ—.

แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ•แƒฎแƒกแƒœแƒแƒ— แƒคแƒแƒ˜แƒšแƒ˜ .แƒขแƒ แƒ”แƒ•แƒ˜แƒก.แƒจ แƒ“แƒ แƒ“แƒแƒแƒ›แƒแƒขแƒ”แƒ— แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒก 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 แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒจแƒ˜:

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 แƒ˜แƒœแƒแƒฎแƒแƒ•แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒกแƒแƒชแƒแƒ•แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒก.

แƒแƒ› แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜:

แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒ“แƒ แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ Travis CI-แƒจแƒ˜, Buddy-แƒกแƒ แƒ“แƒ AppVeyor-แƒจแƒ˜ PVS-Studio-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—
Travis CI แƒžแƒแƒกแƒฃแƒฎแƒแƒ‘แƒก แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒ“แƒ”แƒ‘แƒก, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ แƒ”แƒฃแƒ‘แƒœแƒ”แƒ‘แƒ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒก, แƒ›แƒแƒœแƒ˜แƒจแƒœแƒแƒก แƒฉแƒแƒ“แƒ”แƒœแƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒชแƒ•แƒ”แƒšแƒ˜.

แƒแƒฎแƒšแƒ แƒ›แƒแƒ“แƒ˜แƒ— แƒฃแƒคแƒ แƒ แƒแƒฎแƒšแƒแƒก แƒ›แƒ˜แƒ•แƒฎแƒ”แƒ“แƒแƒ— แƒ™แƒแƒ“แƒ˜แƒก แƒแƒ› แƒฎแƒแƒ–แƒก:

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

แƒคแƒแƒฅแƒขแƒ˜แƒ, แƒ แƒแƒ› Travis CI แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒแƒ”แƒ แƒ—แƒ˜แƒแƒœแƒ”แƒ‘แƒก แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ”แƒ‘แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ’แƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒ˜แƒกแƒแƒก:

แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒ“แƒ แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ Travis CI-แƒจแƒ˜, Buddy-แƒกแƒ แƒ“แƒ AppVeyor-แƒจแƒ˜ PVS-Studio-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—
แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ•แƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒ— A4แƒ“แƒ แƒแƒ แƒ B3->A3. แƒแƒ› แƒ›แƒแƒฎแƒแƒกแƒ˜แƒแƒ—แƒ”แƒ‘แƒšแƒ˜แƒก แƒ’แƒแƒ›แƒ, แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ›แƒแƒ•แƒ—แƒ•แƒแƒšแƒแƒ— แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒ A3, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒฌแƒแƒ แƒ”แƒ“ แƒขแƒแƒขแƒ˜แƒก แƒ–แƒ”แƒ“แƒ แƒœแƒแƒฌแƒ˜แƒšแƒ˜แƒ แƒฌแƒแƒ แƒ›แƒแƒจแƒแƒ‘แƒ˜แƒก.

แƒ“แƒแƒ แƒฉแƒ แƒ”แƒ แƒ—แƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜ แƒ“แƒ”แƒขแƒแƒšแƒ˜ - แƒกแƒแƒ—แƒแƒฃแƒ แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒฅแƒ”แƒจแƒ˜แƒ แƒ”แƒ‘แƒ แƒจแƒ”แƒ“แƒ’แƒ”แƒœแƒ˜แƒš แƒ›แƒ—แƒแƒ แƒ’แƒ›แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒ— แƒ”แƒ แƒ—แƒ”แƒฃแƒšแƒ”แƒ‘แƒ–แƒ” (*.c, *.cc, *.cpp แƒ“แƒ แƒ.แƒจ.). แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜ แƒ˜แƒ—แƒ•แƒšแƒ˜แƒก แƒแƒ› แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒก, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ˜แƒก แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ แƒ”แƒŸแƒ˜แƒ›แƒจแƒ˜ แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ˜แƒœแƒแƒฎแƒแƒ•แƒก แƒ›แƒแƒ— .PVS-Studio แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜. Travis CI แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ”แƒ”แƒ‘แƒ˜แƒก แƒฅแƒ”แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก, แƒแƒกแƒ” แƒ แƒแƒ›, แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ•แƒ˜แƒœแƒแƒฎแƒแƒ•แƒ— แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก .PVS-Studio/:

cache:
  directories:
    - .PVS-Studio/

แƒ”แƒก แƒ™แƒแƒ“แƒ˜ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ”แƒ›แƒแƒขแƒแƒก แƒคแƒแƒ˜แƒšแƒก .travis.yml. แƒ”แƒก แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒ แƒ˜แƒœแƒแƒฎแƒแƒ•แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒจแƒ”แƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒฃแƒš แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก, แƒ แƒแƒช แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒœแƒแƒ“ แƒ“แƒแƒแƒฉแƒฅแƒแƒ แƒ”แƒ‘แƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜แƒก แƒแƒœ แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ› แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒแƒก. แƒ—แƒฃ แƒ”แƒก แƒแƒ  แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒฃแƒšแƒ, แƒ›แƒแƒจแƒ˜แƒœ แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜ แƒ แƒ”แƒแƒšแƒฃแƒ แƒแƒ“ แƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒก แƒงแƒ•แƒ”แƒšแƒ แƒคแƒแƒ˜แƒšแƒก แƒงแƒแƒ•แƒ”แƒš แƒฏแƒ”แƒ แƒ–แƒ”.

Buddy

Travis CI-แƒ˜แƒก แƒ›แƒกแƒ’แƒแƒ•แƒกแƒแƒ“, Buddy แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก GitHub-แƒ–แƒ” แƒจแƒ”แƒœแƒแƒฎแƒฃแƒšแƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒแƒก. Travis CI-แƒ˜แƒกแƒ’แƒแƒœ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒ˜แƒ—, แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ•แƒ”แƒ‘ แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒจแƒ˜ (แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒ bash แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ), แƒแƒ›แƒ˜แƒขแƒแƒ› แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒจแƒ˜ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ.

แƒฃแƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ”แƒก แƒงแƒแƒ•แƒšแƒ˜แƒกแƒ, แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ•แƒแƒ›แƒแƒขแƒแƒ— แƒแƒฎแƒแƒšแƒ˜ แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ แƒจแƒ”แƒ™แƒ แƒ”แƒ‘แƒ˜แƒก แƒฎแƒแƒ–แƒก:

แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒ“แƒ แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ Travis CI-แƒจแƒ˜, Buddy-แƒกแƒ แƒ“แƒ AppVeyor-แƒจแƒ˜ PVS-Studio-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—
แƒ›แƒแƒ“แƒ˜แƒ— แƒ›แƒ˜แƒ•แƒฃแƒ—แƒ˜แƒ—แƒแƒ— แƒจแƒ”แƒ›แƒ“แƒ’แƒ”แƒœแƒ”แƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒกแƒแƒ’แƒ”แƒ‘แƒแƒ“. แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒ แƒ›แƒ˜แƒแƒฅแƒชแƒ˜แƒ”แƒ— แƒ“แƒแƒ™แƒ”แƒ แƒ˜แƒก แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ“แƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒแƒ› แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒแƒจแƒ˜. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜ GCC-แƒกแƒ—แƒ•แƒ˜แƒก:

แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒ“แƒ แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ Travis CI-แƒจแƒ˜, Buddy-แƒกแƒ แƒ“แƒ AppVeyor-แƒจแƒ˜ PVS-Studio-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—
แƒแƒฎแƒšแƒ แƒ›แƒแƒ“แƒ˜แƒ— แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒแƒ— PVS-Studio แƒ“แƒ แƒกแƒแƒญแƒ˜แƒ แƒ แƒ™แƒแƒ›แƒฃแƒœแƒแƒšแƒฃแƒ แƒ˜ แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜:

แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒ“แƒ แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ Travis CI-แƒจแƒ˜, Buddy-แƒกแƒ แƒ“แƒ AppVeyor-แƒจแƒ˜ 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-แƒ–แƒ”, แƒ›แƒแƒจแƒ˜แƒœ แƒ”แƒก แƒ™แƒแƒ“แƒ˜ แƒ—แƒฅแƒ•แƒ”แƒœแƒ—แƒ•แƒ˜แƒก แƒฃแƒ™แƒ•แƒ” แƒœแƒแƒชแƒœแƒแƒ‘แƒ˜แƒ, แƒ—แƒฃแƒ›แƒชแƒ, แƒแƒฎแƒšแƒ แƒแƒ แƒ˜แƒก แƒแƒฎแƒแƒšแƒ˜ แƒ”แƒขแƒแƒžแƒ˜:

แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒ“แƒ แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ Travis CI-แƒจแƒ˜, Buddy-แƒกแƒ แƒ“แƒ AppVeyor-แƒจแƒ˜ PVS-Studio-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—
แƒคแƒแƒฅแƒขแƒ˜แƒ, แƒ แƒแƒ› แƒแƒฎแƒšแƒ แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒ— แƒแƒ แƒ แƒจแƒ”แƒ แƒฌแƒงแƒ›แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒก, แƒแƒ แƒแƒ›แƒ”แƒ“ แƒ˜แƒ› แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ˜แƒก HEAD-แƒก, แƒกแƒแƒ˜แƒ“แƒแƒœแƒแƒช แƒ™แƒ”แƒ—แƒ“แƒ”แƒ‘แƒ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ:

แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒ“แƒ แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ Travis CI-แƒจแƒ˜, Buddy-แƒกแƒ แƒ“แƒ AppVeyor-แƒจแƒ˜ PVS-Studio-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—
แƒแƒกแƒ” แƒ แƒแƒ›, แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒ แƒ— แƒžแƒ˜แƒ แƒแƒ‘แƒ˜แƒ— แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒแƒจแƒ˜ 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 - pull แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒ˜;
  • $BUDDY_REPO_SLUG - แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒกแƒ แƒ“แƒ แƒกแƒแƒชแƒแƒ•แƒ˜แƒก แƒ™แƒแƒ›แƒ‘แƒ˜แƒœแƒแƒชแƒ˜แƒ (แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, max/test).

แƒแƒฎแƒšแƒ แƒ›แƒแƒ“แƒ˜แƒ— แƒจแƒ”แƒ•แƒ˜แƒœแƒแƒฎแƒแƒ— แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜ แƒฆแƒ˜แƒšแƒแƒ™แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ แƒฉแƒแƒ•แƒ แƒ—แƒแƒ— แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜:

แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒ“แƒ แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ Travis CI-แƒจแƒ˜, Buddy-แƒกแƒ แƒ“แƒ AppVeyor-แƒจแƒ˜ PVS-Studio-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—
Travis CI-แƒ˜แƒกแƒ’แƒแƒœ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒ˜แƒ—, แƒฉแƒ•แƒ”แƒœ แƒแƒ  แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ“แƒแƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒ”แƒ‘แƒ .pvs-studio แƒฅแƒ”แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ‘แƒแƒ“แƒ˜ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒ˜แƒœแƒแƒฎแƒแƒ•แƒก แƒงแƒ•แƒ”แƒšแƒ แƒคแƒแƒ˜แƒšแƒก แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ› แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ›แƒแƒจแƒแƒกแƒแƒ“แƒแƒ›แƒ”, แƒ‘แƒแƒšแƒ แƒ แƒแƒช แƒ“แƒแƒ แƒฉแƒ แƒแƒ แƒ˜แƒก PVS-Studio-แƒก แƒจแƒ”แƒกแƒ•แƒšแƒ˜แƒกแƒ แƒ“แƒ แƒžแƒแƒ แƒแƒšแƒ˜แƒก แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ Buddy-แƒจแƒ˜. แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ‘แƒ˜แƒ— Pipeline-แƒ–แƒ”. แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒ“แƒ”แƒ— แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒ–แƒ” แƒ“แƒ PVS-Studio-แƒกแƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒกแƒ•แƒšแƒ˜แƒกแƒ แƒ“แƒ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒแƒ–แƒ”:

แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒ“แƒ แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ Travis CI-แƒจแƒ˜, Buddy-แƒกแƒ แƒ“แƒ AppVeyor-แƒจแƒ˜ PVS-Studio-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—
แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒแƒฎแƒแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒแƒœ แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒฉแƒ”แƒœแƒ แƒ’แƒแƒ›แƒแƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒ’แƒแƒœแƒฎแƒ˜แƒšแƒ•แƒแƒก. แƒ—แƒฃ แƒฉแƒแƒ“แƒ”แƒœแƒ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒก, แƒ‘แƒแƒ“แƒ˜ แƒแƒ›แƒแƒก แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ‘แƒก แƒ’แƒแƒงแƒ•แƒแƒœแƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ”.

AppVeyor

AppVeyor-แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ‘แƒแƒ“แƒ˜แƒก แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒฎแƒ“แƒ”แƒ‘แƒ แƒ•แƒ”แƒ‘ แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒจแƒ˜ แƒ“แƒ แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ *.yml แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒกแƒแƒชแƒแƒ•แƒจแƒ˜.

แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒ“แƒ”แƒ— แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒก แƒฉแƒแƒœแƒแƒ แƒ—แƒ–แƒ” แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒ›แƒ˜แƒ›แƒแƒฎแƒ˜แƒšแƒ•แƒแƒจแƒ˜:

แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒ“แƒ แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ Travis CI-แƒจแƒ˜, Buddy-แƒกแƒ แƒ“แƒ AppVeyor-แƒจแƒ˜ PVS-Studio-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—
แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒ“แƒ”แƒ— แƒแƒ› แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒก แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒ“แƒ แƒฉแƒแƒ•แƒ แƒ—แƒแƒ— แƒฅแƒ”แƒจแƒ˜แƒก แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒจแƒ”แƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก:

แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒ“แƒ แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ Travis CI-แƒจแƒ˜, Buddy-แƒกแƒ แƒ“แƒ AppVeyor-แƒจแƒ˜ PVS-Studio-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—
แƒแƒฎแƒšแƒ แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒ“แƒ”แƒ— Environment แƒฉแƒแƒœแƒแƒ แƒ—แƒ–แƒ”, แƒกแƒแƒ“แƒแƒช แƒ•แƒแƒ–แƒฃแƒกแƒขแƒ”แƒ‘แƒ— แƒแƒกแƒแƒ›แƒ‘แƒšแƒ”แƒ˜แƒก แƒกแƒฃแƒ แƒแƒ—แƒก แƒ“แƒ แƒ’แƒแƒ แƒ”แƒ›แƒแƒก แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒ”แƒš แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒก:

แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒ“แƒ แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ Travis CI-แƒจแƒ˜, Buddy-แƒกแƒ แƒ“แƒ AppVeyor-แƒจแƒ˜ PVS-Studio-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—
แƒ—แƒฃ แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒ”แƒ— แƒฌแƒ˜แƒœแƒ แƒกแƒ”แƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜, แƒ—แƒฅแƒ•แƒ”แƒœ แƒ™แƒแƒ แƒ’แƒแƒ“ แƒ˜แƒชแƒœแƒแƒ‘แƒ— แƒแƒ› แƒแƒ  แƒชแƒ•แƒšแƒแƒ“แƒก - PVS_KEY ะธ PVS_USERNAME. แƒ—แƒฃ แƒแƒ แƒ, แƒจแƒ”แƒ’แƒแƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒ—, แƒ แƒแƒ› แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ PVS-Studio แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒšแƒ˜แƒชแƒ”แƒœแƒ–แƒ˜แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒšแƒแƒ“. แƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒจแƒ˜ แƒ›แƒแƒ— แƒ™แƒ•แƒšแƒแƒ• Bash-แƒ˜แƒก แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒจแƒ˜ แƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ•แƒ—.

แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒš แƒ˜แƒ›แƒแƒ•แƒ” แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ” แƒฉแƒ•แƒ”แƒœ แƒแƒฆแƒ•แƒœแƒ˜แƒจแƒœแƒแƒ•แƒ— แƒฅแƒ”แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ”แƒก:

แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒ“แƒ แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ Travis CI-แƒจแƒ˜, Buddy-แƒกแƒ แƒ“แƒ AppVeyor-แƒจแƒ˜ PVS-Studio-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—
แƒ—แƒฃ แƒแƒ›แƒแƒก แƒแƒ  แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ—, แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ•แƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒ— แƒ›แƒ—แƒ”แƒš แƒžแƒ แƒแƒ”แƒฅแƒขแƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ’แƒแƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒก แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ. แƒแƒฅแƒ”แƒ“แƒแƒœ แƒ’แƒแƒ›แƒแƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ”, แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜แƒ แƒจแƒ”แƒ˜แƒงแƒ•แƒแƒœแƒแƒ— แƒกแƒฌแƒแƒ แƒ˜ แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒ แƒกแƒแƒฎแƒ”แƒšแƒ˜.

แƒแƒฎแƒšแƒ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜แƒก แƒ’แƒแƒ›แƒแƒชแƒ“แƒ˜แƒก แƒ“แƒ แƒแƒ. แƒ’แƒแƒฎแƒกแƒ”แƒœแƒ˜แƒ— แƒขแƒ”แƒกแƒขแƒ”แƒ‘แƒ˜แƒก แƒฉแƒแƒœแƒแƒ แƒ—แƒ˜ แƒ“แƒ แƒแƒ˜แƒ แƒฉแƒ˜แƒ”แƒ— แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜:

แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒ“แƒ แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ Travis CI-แƒจแƒ˜, Buddy-แƒกแƒ แƒ“แƒ AppVeyor-แƒจแƒ˜ PVS-Studio-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—
แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒฉแƒแƒกแƒ•แƒแƒ— แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒ™แƒแƒ“แƒ˜ แƒแƒ› แƒคแƒแƒ แƒ›แƒแƒจแƒ˜:

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 แƒชแƒ•แƒšแƒแƒ“แƒ˜ แƒชแƒแƒขแƒแƒ—แƒ˜ แƒ˜แƒขแƒงแƒฃแƒ”แƒ‘แƒแƒ“แƒ. แƒแƒ› แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ˜แƒ—, แƒ›แƒ” แƒฎแƒ”แƒšแƒ˜แƒ— แƒ’แƒแƒœแƒ•แƒแƒแƒฎแƒšแƒ” แƒ›แƒ˜แƒกแƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜แƒก แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒแƒ›แƒ“แƒ”.

แƒ“แƒ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ˜แƒกแƒ”แƒ แƒ แƒแƒ’แƒแƒ แƒช แƒแƒ“แƒ แƒ”:

แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒ“แƒ แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ Travis CI-แƒจแƒ˜, Buddy-แƒกแƒ แƒ“แƒ AppVeyor-แƒจแƒ˜ PVS-Studio-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—
แƒแƒฎแƒšแƒ แƒ’แƒแƒœแƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜:

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"`

แƒ›แƒแƒกแƒจแƒ˜ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒแƒก แƒ˜แƒ› แƒขแƒแƒขแƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ–แƒ”แƒช แƒ’แƒแƒ›แƒแƒชแƒฎแƒแƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ pull แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ. แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒ’แƒแƒ แƒ”แƒ›แƒแƒก แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜:

  • $APPVEYOR_PULL_REQUEST_NUMBER โ€” แƒ’แƒแƒงแƒ•แƒแƒœแƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒ˜;
  • $APPVEYOR_REPO_NAME - แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜ แƒ“แƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒกแƒแƒชแƒแƒ•แƒ˜.

แƒ“แƒแƒกแƒ™แƒ•แƒœแƒ

แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒฉแƒ•แƒ”แƒœ แƒแƒ  แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— แƒงแƒ•แƒ”แƒšแƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜, แƒ—แƒฃแƒ›แƒชแƒ, แƒ›แƒแƒ— แƒงแƒ•แƒ”แƒšแƒแƒก แƒแƒฅแƒ•แƒ— แƒ”แƒ แƒ—แƒ›แƒแƒœแƒ”แƒ—แƒ˜แƒก แƒฃแƒ™แƒ˜แƒ“แƒฃแƒ แƒ”แƒกแƒแƒ“ แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒฃแƒšแƒ˜ แƒกแƒžแƒ”แƒชแƒ˜แƒคแƒ˜แƒ™แƒ. แƒฅแƒ”แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ“แƒ, แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜ แƒแƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒก แƒกแƒแƒ™แƒฃแƒ—แƒแƒ  โ€žแƒ•แƒ”แƒšแƒแƒกแƒ˜แƒžแƒ”แƒ“แƒกโ€œ, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ.

แƒกแƒแƒ“แƒฆแƒแƒช, แƒ แƒแƒ’แƒแƒ แƒช Travis-CI-แƒจแƒ˜, แƒ™แƒแƒ“แƒ˜แƒก แƒ“แƒ แƒฅแƒ”แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒฎแƒแƒ–แƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒฃแƒœแƒแƒ™แƒšแƒแƒ“; แƒกแƒแƒ“แƒฆแƒแƒช, แƒ แƒแƒ’แƒแƒ แƒช AppVeyor-แƒจแƒ˜, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒฃแƒœแƒ“แƒ แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒแƒ— แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ” แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒจแƒ˜; แƒ›แƒแƒ’แƒ แƒแƒ› แƒกแƒแƒ“แƒฆแƒแƒช แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ แƒ˜ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒจแƒ”แƒ”แƒชแƒแƒ“แƒแƒ— แƒ“แƒแƒแƒ แƒฌแƒ›แƒฃแƒœแƒแƒ— แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ, แƒ แƒแƒ› แƒ›แƒแƒ’แƒชแƒ”แƒ— แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ แƒ’แƒแƒ“แƒแƒฌแƒ”แƒ แƒแƒ— แƒฅแƒ”แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜. แƒแƒ›แƒ˜แƒขแƒแƒ›, แƒ—แƒฃ แƒ’แƒกแƒฃแƒ แƒ— แƒ“แƒแƒแƒงแƒ”แƒœแƒแƒ— แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ–แƒ”, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ–แƒ”แƒ›แƒแƒ— แƒแƒ  แƒ˜แƒงแƒ แƒ’แƒแƒœแƒฎแƒ˜แƒšแƒฃแƒšแƒ˜, แƒ›แƒแƒจแƒ˜แƒœ แƒฏแƒ”แƒ  แƒ“แƒแƒ แƒฌแƒ›แƒฃแƒœแƒ“แƒ˜แƒ—, แƒ แƒแƒ› แƒแƒ  แƒจแƒ”แƒ’แƒ”แƒฅแƒ›แƒœแƒ”แƒ‘แƒแƒ— แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒฅแƒ”แƒจแƒ˜แƒ แƒ”แƒ‘แƒแƒกแƒ—แƒแƒœ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒ—.

แฒ’แƒ›แƒแƒ“แƒšแƒแƒ‘แƒ— แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ—แƒฃ แƒ แƒแƒ›แƒ” แƒแƒ  แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒ“แƒ, แƒ›แƒแƒ’แƒ”แƒ แƒ˜แƒ“แƒ”แƒ‘แƒแƒ— แƒ›แƒแƒ’แƒ•แƒฌแƒ”แƒ แƒแƒ— แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ–แƒ” แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ. แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ’แƒ˜แƒฌแƒ”แƒ•แƒ— แƒ แƒฉแƒ”แƒ•แƒแƒก แƒ“แƒ แƒ“แƒแƒ’แƒ”แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ˜แƒ—.

แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒ“แƒ แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ Travis CI-แƒจแƒ˜, Buddy-แƒกแƒ แƒ“แƒ AppVeyor-แƒจแƒ˜ PVS-Studio-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒ—แƒฃ แƒ’แƒกแƒฃแƒ แƒ— แƒ’แƒแƒฃแƒ–แƒ˜แƒแƒ แƒแƒ— แƒ”แƒก แƒกแƒขแƒแƒขแƒ˜แƒ แƒ˜แƒœแƒ’แƒšแƒ˜แƒกแƒฃแƒ แƒ”แƒœแƒแƒ•แƒแƒœ แƒแƒฃแƒ“แƒ˜แƒขแƒแƒ แƒ˜แƒแƒก, แƒ’แƒ—แƒฎแƒแƒ•แƒ—, แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— แƒ—แƒแƒ แƒ’แƒ›แƒแƒœแƒ˜แƒก แƒ‘แƒ›แƒฃแƒšแƒ˜: แƒ›แƒแƒฅแƒกแƒ˜แƒ› แƒ–แƒ•แƒ˜แƒแƒ’แƒ˜แƒœแƒชแƒ”แƒ•แƒ˜. แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒ“แƒ แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ Travis CI-แƒจแƒ˜, Buddy-แƒกแƒ แƒ“แƒ AppVeyor-แƒจแƒ˜ PVS-Studio-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ