αα
αααα»ααααααα·ααΈαα·ααΆα PVS-Studio αααααΆααααΆααΆ C αα·α C++ αα
ααΎ Linux αα·α macOS αααα
αΆααααααΎαααΈαααα 7.04 αααααΎαααΆααααααα½αααΆαααα
α
ααα‘αΎαααΎααααΈαα·αα·αααααΎααααααΈα―αααΆααααααΆααααααΆααα αααααααΎααααααααΈ α’αααα’αΆα
ααααααα
ααΆααααααααα§ααααααα·ααΆαααΎααααΈαα·αα·αααααΎαααΆααααααααΉααα αα·αααΆαααααΎα α’ααααααααααΉαααααΆααα’αααααΈαααααααα
αααΆααα·αα·αααααΎααααααΈα―αααΆααααααΆαααααΆααααααΌααααααααα GitHub αα
αααα»ααααααααα CI (Continuous Integration) αααααααα·ααααΌα
ααΆ Travis CI, Buddy αα·α AppVeyorα
αααααα·αα·ααααααααΈα―αααΆα
αα
αααα»ααααα PVS-Studio 7.04 αααααΆααααΈαα»α
αα·α macOS αααααααααΆαααα·αα·αααααΎααααααΈα―αααΆααααααααΆαααα
α
ααααα ααΆααααΎαααΆααααααΆαααααααααααααααααααααΆααααα’αα»ααααΆαα±ααα’ααααααααΎαα―αααΆα
ααααα αααααα·αα·ααααααααΈα―αααΆαα’αΆα ααααΌαααΆαααααΎαα½αααααΆααΆαα½α ααΆαααΆαααααΆαααΎαααααΎαααΆααααααα·ααΈα ααααα (pvs-studio-analyzer trace)α ααΎααααΈααααΎααΌα αααααααΌαα’αααααΉαααααΌαα’αα»ααααααΆαααααΆαααΆααααααααααααααα αΎαααΆαααΆαααΆααΎααααΈα±ααα’ααααα·ααΆααααααΌαααααααΆαααααααα’αααΈαααΆαααΆααααααα αααααααα―αααΆαααΆααα’ααααααααα»ααααα½ααα·αα·αααα
αααααΆαααΆαααΆααααααααααΎααααααΆααα»ααα·ααααα·αααΆαααααΆαα - α’αααααΉαααααΌαα’αα»ααααααΆαααααΆαααΆααααααααααααααααΆααααΌαααΆααααααααα’αααααααΎαααΆαααΆ αααααΆαααα»αααΉααααα·αααααΆααααα½ααα·αα·αααααΆαααααααααΆα α·ααααααΆαααΆαααα ααα α¬ααααα·αααΎα’ααααααααΆαα»αααααααααΆαααααααα½αα―α ααΆααααααΆαααααααααΆααααααα’ααααα·ααΆαα’αΆα αα·ααααααα ααααα·αααΎαα ααΆααααααααα’αΆαααααααα―αααΆααααααααααΆααααααΌααααααΆααααΈααΆαααΆαααΆα (α§ααΆα ααα #include ααααΈααααΌαααΆααααααααα α―αααΆααααααααΆαα½α)α
ααΌα
αααα ααΎαβαα·αβααααΆαβα±ααβααααΎβααααβαα·αα·αααβαααααΈβα―αααΆαβααΆαα½αβααΉαβαααααβα ααα»βααΆαβααΎααααΈβαα·αα·αααβααΎαβααΆαβαααααααΉααα α¬βααΆαβααααΎα αααα»αααααΈαααα’αααα’αΆα
αααααΎαααΆααααααααα
ααααα·αα·αααααΎαααΆαααααααααΆα
α·ααα ααΌααα·α
αΆαααΆααααΎαααα
αααααΈα―αααΆαααααααααααΆααααΆααα·ααΆαααααΌαααΆααααααΆαα»ααααα»αα―αααΆαα’ααααα α αΎααααααΌααα α’ααααα·ααΆααααααααΎαααΆαααΆαααααα -S:
pvs-studio-analyzer analyze ... -f build/compile_commands.json -S check-list.txt
α―αααΆαααααααααΆααααααΌααααααΆαααα α¬ααΆα αααΆααα ααΆααα―αααΆα α αΎαα―αααΆαααααΈααΈαα½ααααααΌααααααα·ααα ααΎαααααΆααααααΈα ααΆα’αΆα ααα½αααααΆααααα»αααΆααααααΆαααα·αααααΉααααααααα―αααΆααααααΆααααΆααα·ααΆαααα»ααααααα ααα»ααααααααΆαα’ααααααααααααααααα α’ααααα·ααΆαααΉαααΎαααΆααααα·ααααααΆα―αααΆα α αΎαααΉααα·αα’αΎααΎααΉααααααΆαααααααα ααΆα’αΆα ααΆααααααααααααααΆααααΆααααα ααααα· ααααα·αααΎα―αααΆαααααΌαααΆααααααΆαααααααα αααααΆαααΆαααΆααααα ααΆααΏαααααααΈα―αααΆαααΉαααααΌαααΆααααααΎαααα‘α»αααααα·ααΆααααα»α CI ααΆα§ααΆα ααα ααΆαααααα’αΆα ααΆα―αααΆααααααΆαααααΈααΆαααααΎαα»α α¬ααΆαααααΎα
α₯α‘αΌαααα αααααααΎααααααα α’αααα’αΆα αα·αα·αααααΎαααΌαααααΈααΆααααΆαααΆαααα αα αα»ααααααΆα αΌααα αααα»αααΆααΆα’αα·ααααααα ααααα ααΎααααΈααΆααΆααΆαααααααααααααααααΎααααα ααΉαααΆααααααΆαααααα’ααααα·ααΆα α§αααααααααΎααααΆαα αααααα·ααΈαααααα plog ααΆααααααααααααΆαα· - α ααα’α»ααααα αΆα - ααΆααααααΆα:
plog-converter ... --indicate-warnings ... -o /path/to/report.tasks ...
ααΆαα½αααΉααααααα αααααα·ααΈααααααααΉααααα‘αααααααΌαααααα·ααααααΆααΌααα ααααα·αααΎααΆαααΆααααααΆααα αααα»ααααΆαααΆαααααααα’ααααα·ααΆαα αααααααΎαααααΌααααα‘αα α’αααα’αΆα αααααααΆααααΆαααααΎαα»ααα»α ααΆαααααααααΆα α·ααα α¬ααΆαααααΎ α αΎααααΆαααΆαααα’ααααα·ααΆααααααΆααααααΎαα’αΆα ααααΌαααΆααααα αΆα α ααααααα α¬ααααΎααΆαα’ααΈαααα
α αααΆαα αα αααα’αααα αΆααααααΎααα·ααΆααααααΈα―αααΆα ααααααααΆααααΌαααΉαααααΌαααΆααα·ααΆα ααΈααααα α’ααααα·ααΆαααααΌααααααΎαα―αααΆαααααΆαα’αΆαααααααα―αααΆαααααααααααααα ααΎα―αααΆαααααααΆα αααααΊααΆααααααααααΆααα·ααΆαα―αααΆα C αα·α C++ α αα αααα’ααΆαα α―αααΆαα’αΆαααααα’αΆα ααααΌαααΆααα»ααααα»αααααΆαααααααΆαα α αΎαααΆααΉαααααΌαααΆαααααΎαα αα α»ααααααααΆααααααααααααααααα·αααα’ααααα·ααΆαα α’αααααααααααααααΆααααα½ααα·αα·ααα commits αα αααααααΎαααααα·αα·ααααααααΈα―αααΆα αααααααΎαααααα·ααΆαααααααααΊααΆ α’αααααααΆααααααααΌαααΆαααααΆαααααααΆααα―αααΆααααααα»ααααα αα·ααααα―αααΆαααααα»αααααα
αααααΆαααααΌαα ααααΆααα·ααΆαααααΎααΆα
ααΆααα·ααΆαααααααααΆααααΌαααααΌαααΆααααααααΆα αααΎα ααΌα ααααααΆααα ααα»αααααα»αααΆααααα½ααα·αα·ααααααααααααΆααααΆααααααααΆα αααα αΆααΊααΆα’αααααααΌααααααα―αααΆαααααΈα ααααΈα―αααΆαααααααααααα αααα
ααΌααααα‘ααααΎαα§ααΆα ααααα commit tree αααααΆααααααΈαα
α αΌαααΎααααααααΎαααΆαααααααααΆα α·ααααααα 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 (- α ααα’α»ααααα αΆα - ααΆααααααΆα) ααααα·αααΎααΆαααΆααααααΆαα’ααααα·ααΆααααΆαα αα ααΆαααα½α αααααΌααααα‘ααα§αααααααααΎααααΆαα αααααα·ααΈαααααα plog ααΉαααααΌααα ααα 2 αααααΉαααΌαααααΉααααααααΆαααα CI α’αααΈααααααΆαααααα α»ααααα’αΆα ααΎαααΆααα αααα»αα―αααΆαααααΎααΆαα
Travis CI
ααΆαααααααα ααΆααααααααααααΌαααΆαααααΎα‘αΎαααΆα―αααΆα .travis.yml. ααΎααααΈααΆαααΆααααα½α αααα»αααααΆαα’αααα±ααααΆααα’αααΈααααααααΆααα αααα»αααααααΈα bash ααΆα ααααα‘αααααααΆααα»αααΆααααααΉαααααΌαααΆαα α α ααααΈα―αααΆα .travis.yml (bash script_name.sh function_name).
ααΎαααΉαααααααααΌαα αΆαααΆα ααα ααααααΈααα 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:
- 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. ααα―αααΆαααααααααΆαα»ααα·ααααααααααααααααααααΌαααΆααααααΆααααΈααΆααα·ααΆα αααααΉααααααΎαααααΏαααααΎαααΆαααΆαααααααααΆααααααΆααα·ααΆααααααΈα―αααΆα α¬ααΆααα·ααΆαααααααα ααααα·αααΎααΆαα·αααααΌαααΆαααααΎααααα α’ααααα·ααΆααα·αααΆααΉααα·ααΆαα―αααΆαααΆααα’ααααΆαααααα
αα·ααα
ααΌα
Travis CI
ααΆααααΌαααΎαααααΌααααααααααααααΆαααααΈαα αααααΆααααα‘αΎαα
α
αΌααααα αΆαααΈα’αααα
ααααααααααααΌαααΆαααααΎααΎααααΈααΆααααααααααα ααΌαααααααααΆαααα»αααΊααα docker αααααααΌαααΆαααα‘αΎααα
αααα»ααααααααΆααααα α§ααΆα ααα ααΆααα»ααα·ααααααααΆαα 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
α₯α‘αΌαβααΎαβα αΌαβαα βααΆααβααααΆααβααα (ααΌαβααααΆαβααααΌα) α αΎαβααααααβααΌαβααΆαβαααααβαα βααΆαβαααααα·ααΈβαα·ααααβαααβααααΌαβααααΆα
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 - ααΆααα½ααααα αΌαααααΆαααααααα’αααααααΎααααΆαα αα·αααααΆαα (α§ααΆα ααα α’αα·ααααΆ/ααααα)α
α₯α‘αΌαααα α αΌαααΎααααααΆαα»αααΆαααααΆααααααΌααααααααΎαααΌαα»αααΆαααααα α αΎαααΎαααΆααα·ααΆαααααααΎααΆαα
αα·αααΌα
Travis CI ααΎααα·αα
αΆαααΆα
ααααααΆααααα .pvs-studio αααααΆααααααΆαααααααΆαα α
αΆααααΆααααΈ Buddy αααααΆαα»αα―αααΆαααΆααα’αααααααααααααααααα·αααααΆααααΆαααΎαααααΎαααΆαααΆαααααααααΆααα ααΌα
ααααα αΎα α’αααΈααααα
ααααααα
α»ααααααααΊααααΌααααααΆαα»αααΆαα
αΌα αα·αααΆααααααααΆαααααααΆαα PVS-Studio αα
αααα»α Buddyα αααααΆααααΈαααααΆαα»αααΆαααααΆααααααΌα ααΎαααΉααααααααα
Pipeline αα·αα ααΎαααααΌααααααα
ααΆαααα‘αΎαα’ααα αα·αααααααααΆαα
αΌα αα·ααααααΉααααααΆαα PVS-Studioα
αααααΆααααΈααα ααΆαααα
α
ααααΌαααααΎαααΆαααααΈ α¬ααΆαααααααααΆα
α·αααααΉαααααΎα±ααααΆαααΆααα·αα·αααα‘αΎααα·αα ααααα·αααΎααΆααααααααΉαααααΆαααα α»α Buddy ααΉααααα αΆαααΆαα
ααΎαααααααααΎααΆαα
AppVeyor
ααΆαααα‘αΎα AppVeyor ααΊαααααααα ααΉα Buddy α αΆααααΆααααΈα’αααΈααααααααΆαααΎαα‘αΎααα αααα»αα ααα»α αααααΆαααααααΆα α αΎααα·αα αΆαααΆα αααααααα―αααΆα *.yml αα ααααΆαααααααααααααα
ααααα ααααΆααααΆαααααααα αααα»ααα·αααααΆαααΌαα ααααααααα
α
αΌααααΌαα
α»αααααααααααααα α αΎαααΎαααΆααααααΆαα»αααααΆαααααααΆαααααααΆααααΆααααααΌαααααΎααΆαα
α₯α‘αΌαβααΎαβα
αΌαβαα
βααααΆααβααα·ααααΆα αααβααΎαβαααααΆααβααΌαααΆαβαααααΆααβααΆαβαα½αβααααα»α αα·αβα’αααβααα·ααααΆαβα
αΆαααΆα
αα
ααααα·αααΎα’αααααΆαα’αΆαααααααα»αα α’αααα
αααΆααααΆααααΆααα’αααααΆααααΈαααα β 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 αα α’αααααααα½ααααααΆαα»ααααααααααΆαααΎααααα αΆααααΌα ααΆα ααααααα glance ααααΌααααααΆαααΆαααΆαααα»αααΉαααααααα’αααΈααααααααΆαα₯α‘αΌααααα
αα αααααα‘αΎαα§ααααααα·ααΆααααα»α 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"`
αα αααα»αααΆααΎαααα½αααΆαααΆααα»αααααΆαααΆαααΆααΆαααααααΎααΆαααααΌαααΆααααααΆαα ααΎααααΈααααΎααΌα αααα ααΎαααααΌαααΆαα’αααααα·ααααΆαααΆααααααα
- $APPVEYOR_PULL_REQUEST_NUMBER β ααΆαβαααβααααΎ
- $APPVEYOR_REPO_NAME - αααααα’αααααααΎααααΆαα αα·αααααΆααααααααα
ααα ααααΈααααα·ααααΆα
ααΆααΆααα·αααΆαα ααΎααα·αααΆααα·α αΆαααΆααΎααααΆαααααα½ααααα αΌαααΆαααααααααΆαααααα’αΆα ααΎαααΆαααΆααα’ααααααα αααααΆαααΆαααΆααααα αα½αααΆααΆααα’ααααΆαααααα·ααααα·ααΆαααΆααααΆααααααααααααΆααααΆααα ααααααααΆαα αα·ααα ααα ααΎααααααααααΆαααααααΆαα ααααΆααααααΈαα½αααααααΎα "ααα" ααααΆαααααα½α ααΌα ααααα’αααΈαααααααα»αααααΆα
αα ααααααααΆαα½α ααΌα ααΆαα αααα»α Travis-CI ααΌαααΈαααΈαααααΆαα αα·αααααΆαααααααΆααααααΎαααΆααααααααΆαααα α»αα αα ααααααααΆαα½αααΌα ααΆαα αααα»α AppVeyor α’αααααααΆααααααααΌαααΆααααααΆαααααα αααα»αααΆααααααα ααα»αααααα ααααααααΆαα½α α’αααααααΌααααααΎααααα·ααα α αΎαααααΆααΆααααα α»ααααα αΌααααααααα ααΎααααΈαααααα±ααΆαα±ααα’ααααααααααΆααααΎααααααααααΆααααααΆαα»αα ααΌα ααααα αΎα ααααα·αααΎα’αααα αααααα αααΆααα·ααΆαααααααΎααΆααα ααΎααααΆαααααα½ααααα αΌαααΆαααααααααΆααααααα·αααααΌαααΆααα·ααΆααααΆααΆαααΎααα ααΆααααΌαααααΌαααααΆααααΆα’αααααΉααα·αααΆααααα αΆααΆαα½αααααΆαααααααΆααααα
ααΌαβα’ααα»αβα
ααααβααΆαβααα
α·αααβαα»αααΆααβααααβαααα’αααα ααααα·αααΎααΆαα’αααΈαα½ααα·αααααΎαααΆα ααΌαααααααααα½αααΎααα
ααααα·αααΎα’αααα
ααα
αααααααα’ααααααααααΆαα½ααααααα·αααααααα·ααΆαααΆααΆα’ααααααα ααΌαααααΎαααααααααα Maxim Zvyagintsev α
ααααα: www.habr.com