PVS-Studio แแแแแแแแขแแ แจแ C แแ C++ แแแแแแกแแแแก Linux-แแ แแ macOS-แแ, 7.04 แแแ แกแแแแแ แแแฌแงแแแฃแแ, แแแแแฉแแแ แขแแกแขแแก แแแ แแแแขแ แแแแแแแแฃแแ แคแแแแแแแก แกแแแก แจแแกแแแแฌแแแแแแ. แแฎแแแ แ แแแแแแก แแแแแงแแแแแแ, แแฅแแแ แจแแแแซแแแแ แแแแแแแคแแแฃแ แแ แแ แแแแแแแแขแแ แ, แ แแแ แจแแแแแฌแแแก แแแแแแแฃแแแแแแ แแ แแแแฎแแแแแก แแแแฆแแแ. แแก แกแขแแขแแ แแแขแงแแแ, แแฃ แ แแแแ แฃแแแ แแแแงแแแแ GitHub แแ แแแฅแขแแก แจแแชแแแแแ แคแแแแแแแก แกแแแก แจแแแแฌแแแแ แแกแแ แแแแฃแแแ แฃแ CI (แฃแฌแงแแแขแ แแแขแแแ แแชแแแก) แกแแกแขแแแแแจแ, แ แแแแ แแชแแ Travis CI, Buddy แแ AppVeyor.
แคแแแแแแแก แกแแแก แจแแแแฌแแแแแก แ แแแแแ
Linux-แแกแ แแ macOS-แแกแแแแก PVS-Studio 7.04 แแแ แกแแแจแ แแแแแฉแแแ แฌแงแแ แ แคแแแแแแแก แกแแแก แจแแแแฌแแแแแก แ แแแแแ. แแก แแฃแจแแแแก แแ แแแฅแขแแแแกแแแแก, แ แแแแแแ build แกแแกแขแแแ แกแแจแฃแแแแแแก แแแซแแแแ แจแแฅแแแแ แคแแแแ
แแกแแแ, แคแแแแแแแก แกแแแก แจแแแแฌแแแแแก แ แแแแแ แจแแแซแแแแ แแแแแงแแแแแฃแ แแฅแแแก แจแแแแแแแแแแก แแแจแแแแแก แกแขแ แแแก แแแแแแก แแฃแ แแแแแแ แแ แแแ (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 แฎแแก แแแแแแแแก แแ แ แขแแขแแ:
แฌแแ แแแแแแแแแแ แแก แแแแแแแฃแแแแ 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 แแแกแฃแฎแแแก แแแแ แฃแแแแแก แแแแแแก, แแแแขแแ แแแคแ แแฎแแแแแแแแก แแ แกแแแแแ แแฃแแแแแ แกแแ แแแกแก, แแแแแจแแแก แฉแแแแแ, แ แแแแ แช แจแแชแแแแแก แจแแแชแแแแ.
แแฎแแ แแแแแ แฃแคแ แ แแฎแแแก แแแแฎแแแแ แแแแแก แแ แฎแแแก:
git diff --name-only origin/HEAD > .pvs-pr.list
แคแแฅแขแแ, แ แแ Travis CI แแแขแแแแขแฃแ แแ แแแ แแแแแแแก แคแแแแแแแแก แแแแฎแแแแแก แแแแแแแแแแแแกแแก:
แแแแขแแ แแแแแแแแแแแ A4แแ แแ แ B3->A3. แแ แแแฎแแกแแแแแแแแก แแแแ, แฉแแแ แฃแแแ แแแแแแแแแแแ แแแแกแฎแแแแแแ A3, แ แแแแแแช แกแฌแแ แแ แขแแขแแก แแแแ แแแฌแแแแ แฌแแ แแแจแแแแก.
แแแ แฉแ แแ แแ แแแแจแแแแแแแแแ แแแขแแแ - แกแแแแฃแ แแก แคแแแแแแแก แแแแแแแแแแฃแแแแแแแก แฅแแจแแ แแแ แจแแแแแแแ แแแแ แแแแแแแแแ แแ แแแฃแแแแแ (*.c, *.cc, *.cpp แแ แ.แจ.). แแแแแแแแขแแ แ แแแแแแก แแ แแแแแแแแแแฃแแแแแแก, แ แแแแกแแช แแก แแแ แแแแแ แแแจแแแแฃแแแ แคแแแแแแแก แกแแแก แจแแแแฌแแแแแก แ แแแแแจแ แแ แจแแแแแ แแแแฎแแแก แแแ .PVS-Studio แแแ แแฅแขแแ แแแจแ. Travis CI แแแซแแแแ แกแแฅแแฆแแแแแแแแก แฅแแจแแ แแแแก แกแแจแฃแแแแแแก, แแกแ แ แแ, แฉแแแ แจแแแแแแฎแแแ แแแ แแฅแขแแ แแแจแ แแแแแชแแแแแก .PVS-Studio/:
cache:
directories:
- .PVS-Studio/
แแก แแแแ แฃแแแ แแแแแแขแแก แคแแแแก .travis.yml. แแก แแแ แแฅแขแแ แแ แแแแฎแแแก แแแแแแแแก แจแแแแแ แจแแแ แแแแแฃแ แกแฎแแแแแกแฎแแ แแแแแชแแแแแก, แ แแช แแแแจแแแแแแแแแ แแแแฉแฅแแ แแแก แคแแแแแแแก แกแแแก แแแแแแแแก แแ แแแแแขแแแแแ แแแแแแแแก แจแแแแแแ แแแจแแแแแก. แแฃ แแก แแ แแแแแแแแฃแแ, แแแจแแ แแแแแแแแขแแ แ แ แแแแฃแ แแ แแแแแแแแแแก แงแแแแ แคแแแแก แงแแแแ แฏแแ แแ.
Buddy
Travis CI-แแก แแกแแแแกแแ,
แฃแแแ แแแแแก แงแแแแแกแ, แฉแแแ แฃแแแ แแแแแแแขแแ แแฎแแแ แแแฅแแแแแแ แจแแแ แแแแก แฎแแแก:
แแแแแ แแแแฃแแแแแ แจแแแแแแแแแ, แ แแแแแแช แแแแแแงแแแแก แแ แแแฅแขแแก แแกแแแแแแ. แงแฃแ แแแฆแแแ แแแแฅแชแแแ แแแแแ แแก แแแแขแแแแแ แก, แ แแแแแแช แแแแแกแขแแแแ แแแฃแแแ แแ แแแฅแแแแแแแจแ. แแแแแแแแแ, แแ แกแแแแแก แกแแแชแแแแฃแ แ แแแแขแแแแแ แ 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-แแ, แแแจแแ แแก แแแแ แแฅแแแแแแแก แฃแแแ แแแชแแแแแ, แแฃแแชแ, แแฎแแ แแ แแก แแฎแแแ แแขแแแ:
แคแแฅแขแแ, แ แแ แแฎแแ แฉแแแ แแแแแแแแแแแ แแ แ แจแแ แฌแงแแแก แจแแแแแก, แแ แแแแ แแ แคแแแแแแแก HEAD-แก, แกแแแแแแแช แแแแแแแ แแแแฎแแแแแก แแแแฎแแแแ:
แแกแ แ แแ, แฉแแแ แแแ แ แแแ แแแแ แแแแแแแฃแแแแแจแ 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-แแกแแแ แแแแกแฎแแแแแแแ, แฉแแแ แแ แแแญแแ แแแแ แแแแแแแ แแขแแแ .pvs-studio แฅแแจแแ แแแแกแแแแก, แ แแแแแ แแแแ แแแขแแแแขแฃแ แแ แแแแฎแแแก แงแแแแ แคแแแแก แจแแแแแแ แแแจแแแแแกแแแแก. แแแจแแกแแแแแ, แแแแ แ แแช แแแ แฉแ แแ แแก PVS-Studio-แก แจแแกแแแแกแ แแ แแแ แแแแก แจแแแแฎแแ Buddy-แจแ. แชแแแแแแแแแแก แจแแแแฎแแแก แจแแแแแ, แฉแแแ แแแแแ แฃแแแแแแ Pipeline-แแ. แฉแแแ แฃแแแ แแแแแแแแแ แชแแแแแแแแก แแแงแแแแแแแ แแ PVS-Studio-แกแแแแก แจแแกแแแแกแ แแ แแแกแแฆแแแแก แแแแแขแแแแแ:
แแแแก แจแแแแแ, แแฎแแแ แแแแฎแแแแแก แแ แแแแแแแฃแแแแแก แแแแแฉแแแ แแแแแแฌแแแแก แแแแฎแแแแแก. แแฃ แฉแแแแแ แจแแแชแแแก แจแแชแแแแแแก, แแแแ แแแแก แแแฃแแแแแแก แแแงแแแแแก แแแแฎแแแแแก แแแแ แแแ.
AppVeyor
AppVeyor-แแก แแแงแแแแแ แแแแแก แแกแแแแกแแ, แ แแแแแ แงแแแแแคแแ แ แฎแแแแ แแแ แแแขแแ แคแแแกแจแ แแ แแ แแ แแก แกแแญแแ แ *.yml แคแแแแแก แแแแแขแแแ แแ แแแฅแขแแก แกแแชแแแจแ.
แแแแแ แแแแแแแแแ แแแ แแแแขแ แแแแก แฉแแแแ แแแ แแ แแแฅแขแแก แแแแแฎแแแแแจแ:
แแแแแ แแแแแแแแแ แแ แแแแ แแแก แฅแแแแแ แแ แฉแแแ แแแ แฅแแจแแก แจแแแแฎแแ แแแแฎแแแแแก แจแแแ แแแแแแกแแแแก:
แแฎแแ แแแแแแแแแ Environment แฉแแแแ แแแ, แกแแแแช แแแแฃแกแขแแแ แแกแแแแแแแก แกแฃแ แแแก แแ แแแ แแแแก แแฃแชแแแแแแ แชแแแแแแแก:
แแฃ แฌแแแแแแฎแแ แฌแแแ แกแแฅแชแแแแ, แแฅแแแ แแแ แแแ แแชแแแแ แแ แแ แชแแแแแก - PVS_KEY ะธ PVS_USERNAME. แแฃ แแ แ, แจแแแแฎแกแแแแแ, แ แแ แแกแแแ แแฃแชแแแแแแแแ PVS-Studio แแแแแแแแขแแ แแก แแแชแแแแแแก แจแแกแแแแฌแแแแแแ. แแแแแแแแจแ แแแ แแแแแ Bash-แแก แกแแ แแแขแแแจแ แแแฎแแแแแ.
แฅแแแแแ แแแชแแแฃแ แแแแแ แแแแ แแแ แฉแแแ แแฆแแแแจแแแแ แฅแแจแแ แแแแก แกแแฅแแฆแแแแแก:
แแฃ แแแแก แแ แแแแแแแแแแ, แฉแแแ แแแแแแแแแแแแแ แแแแ แแ แแแฅแขแก แ แแแแแแแแ แคแแแแแก แแแชแแแแ, แแแแ แแ แแแแแแแแแแก แแแแแฆแแแ แแแแแแแแฃแแ แคแแแแแแแแแ. แแฅแแแแ แแแแแแแแแแ แ, แแแแจแแแแแแแแแแ แจแแแงแแแแแ แกแฌแแ แ แแแ แแฅแขแแ แแ แกแแฎแแแ.
แแฎแแ แกแแ แแแขแแก แแแแแชแแแก แแ แแ. แแแฎแกแแแแ แขแแกแขแแแแก แฉแแแแ แแ แแ แแแ แฉแแแ แกแแ แแแขแ:
แแฅแแแ แฃแแแ แฉแแกแแแ แจแแแแแแ แแแแ แแ แคแแ แแแจแ:
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 แชแแแแแ แชแแขแแแ แแขแงแฃแแแแแ. แแ แแแแแแแ, แแ แฎแแแแ แแแแแแแฎแแ แแแกแ แแแแจแแแแแแแ แแแแแแแแก แแแฌแงแแแแแแ.
แแ แงแแแแแคแแ แ แแกแแ แ แแแแ แช แแแ แ:
แแฎแแ แแแแแฎแแแแ แจแแแแแแ แคแ แแแแแแขแ:
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-แจแ, แแฅแแแ แฃแแ แแแแ แฃแแแ แแแฃแแแแแ แกแแฅแแฆแแแแ แแแ แแแแขแ แแแจแ; แแแแ แแ แกแแแฆแแช แแฅแแแ แฃแแแ แจแแฅแแแแ แฃแแแแแแฃแ แ แแแกแแฆแแแแแ แแ แจแแแชแแแแ แแแแ แฌแแฃแแแ แกแแกแขแแแ, แ แแ แแแแชแแ แจแแกแแซแแแแแแแ แแแแแฌแแ แแ แฅแแจแแ แแแฃแแ แคแ แแแแแแขแ. แแแแขแแ, แแฃ แแกแฃแ แ แแแแงแแแแ แแแแฎแแแแแก แแแแแแแ แฃแฌแงแแแขแ แแแขแแแ แแชแแแก แกแแ แแแกแแ, แ แแแแแแช แแแแแ แแ แแงแ แแแแฎแแแฃแแ, แแแจแแ แฏแแ แแแ แฌแแฃแแแแ, แ แแ แแ แจแแแแฅแแแแแแ แแ แแแแแแแแ แฅแแจแแ แแแแกแแแ แแแแแแจแแ แแแแ.
แฒแแแแแแแ แงแฃแ แแแฆแแแแกแแแแก. แแฃ แ แแแ แแ แแแแแแแแ, แแแแแ แแแแแแ แแแแแฌแแ แแ แแแกแแแแ แแแ
แแฃ แแกแฃแ แ แแแฃแแแแ แแ แแก แกแขแแขแแ แแแแแแกแฃแ แแแแแแ แแฃแแแขแแ แแแก, แแแฎแแแ, แแแแแแงแแแแ แแแ แแแแแแก แแแฃแแ: แแแฅแกแแ แแแแแแแแชแแแ.
แฌแงแแ แ: www.habr.com