Linux ããã³ macOS äžã® C ããã³ C++ èšèªçšã® PVS-Studio ã¢ãã©ã€ã¶ãŒã§ã¯ãããŒãžã§ã³ 7.04 以éãæå®ããããã¡ã€ã«ã®ãªã¹ãããã§ãã¯ãããã¹ãæ©äŒã衚瀺ãããŸãã æ°ããã¢ãŒãã䜿çšãããšãã³ããããšãã« ãªã¯ãšã¹ãããã§ãã¯ããããã«ã¢ãã©ã€ã¶ãŒãæ§æã§ããŸãã ãã®èšäºã§ã¯ãTravis CIãBuddyãAppVeyor ãªã©ã®äžè¬ç㪠CI (ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³) ã·ã¹ãã 㧠GitHub ãããžã§ã¯ã ãã¡ã€ã« ãªã¹ã ãã§ãã¯ãèšå®ããæ¹æ³ã説æããŸãã
ãã¡ã€ã«ãªã¹ããã§ãã¯ã¢ãŒã
Linux ããã³ macOS çã® PVS-Studio 7.04 ã«ã¯ããœãŒã¹ ãã¡ã€ã«ã®ãªã¹ãã確èªããã¢ãŒãããããŸãã ããã¯ããã«ã ã·ã¹ãã ã§ãã¡ã€ã«ãçæã§ãããããžã§ã¯ãã§æ©èœããŸãã
ãŸãããã¡ã€ã«ã®ãªã¹ãã確èªããã¢ãŒãã¯ãã³ã³ãã€ã©å®è¡ã® strace ãã¬ãŒã¹ (pvs-studio-analyzer ãã¬ãŒã¹) ãšäœµçšã§ããŸãã ãããè¡ãã«ã¯ããŸããããžã§ã¯ãã®å®å šãªãã«ããå®è¡ããããã远跡ããŠããã§ãã¯å¯Ÿè±¡ã®ãã¹ãŠã®ãã¡ã€ã«ã®ã³ã³ãã€ã« ãã©ã¡ãŒã¿ãŒã«é¢ããå®å šãªæ å ±ãã¢ãã©ã€ã¶ãŒãåéããå¿ èŠããããŸãã
ãã ãããã®ãªãã·ã§ã³ã«ã¯é倧ãªæ¬ ç¹ããããŸããèµ·åãããã³ã«ãããžã§ã¯ãå šäœã®å®å šãªãã«ã ãã¬ãŒã¹ãå®è¡ããå¿ èŠããããããèªäœãã¯ã€ã㯠ã³ããã ãã§ãã¯ã®èãæ¹ãšççŸããŸãã ãŸãã¯ããã¬ãŒã¹çµæèªäœããã£ãã·ã¥ããå Žåããã¬ãŒã¹åŸã«ãœãŒã¹ ãã¡ã€ã«ã®äŸåé¢ä¿æ§é ãå€æŽãããå Žå (ããšãã°ããœãŒã¹ ãã¡ã€ã«ã® XNUMX ã€ã«æ°ãã #include ãè¿œå ãããå Žå)ããã®åŸã®ã¢ãã©ã€ã¶ãŒã®èµ·åãäžå®å šã«ãªãå¯èœæ§ããããŸãã
ãããã£ãŠããã¬ãŒã¹ ãã°ã䌎ããã¡ã€ã« ãªã¹ã ãã§ã㯠ã¢ãŒãã䜿çšããŠã³ããããŸãã¯ãã« ãªã¯ãšã¹ãããã§ãã¯ããããšã¯ãå§ãããŸããã ã³ãããããã§ãã¯ãããšãã«å¢åãã«ããå®è¡ã§ããå Žåã¯ãã¢ãŒãã®äœ¿çšãæ€èšããŠãã ããã
åæçšã®ãœãŒã¹ ãã¡ã€ã«ã®ãªã¹ãã¯ããã¹ã ãã¡ã€ã«ã«ä¿åããããã©ã¡ãŒã¿ãŒã䜿çšããŠã¢ãã©ã€ã¶ãŒã«æž¡ãããŸãã -S:
pvs-studio-analyzer analyze ... -f build/compile_commands.json -S check-list.txt
ãã®ãã¡ã€ã«ã¯ãã¡ã€ã«ãžã®çžå¯Ÿãã¹ãŸãã¯çµ¶å¯Ÿãã¹ãæå®ããæ°ãããã¡ã€ã«ã¯ããããæ°ããè¡ã«çœ®ãå¿ èŠããããŸãã åæ察象ã®ãã¡ã€ã«åã ãã§ãªããããŸããŸãªããã¹ããæå®ããããšãã§ããŸãã ããŒãµãŒã¯ããããã¡ã€ã«ã§ã¯ãªãããšãèªèãããã®è¡ãç¡èŠããŸãã ããã¯ããã¡ã€ã«ãæåã§æå®ãããŠããå Žåã«ã³ã¡ã³ãããã®ã«åœ¹ç«ã¡ãŸãã ãã ããã³ãããããã« ãªã¯ãšã¹ãããã®ãã¡ã€ã«ãªã©ããã¡ã€ã«ã®ãªã¹ã㯠CI 解æäžã«çæãããããšããããããŸãã
ãã®ã¢ãŒãã䜿çšãããšãã¡ã€ã³ã®éçºãã©ã³ãã«å ¥ãåã«ãæ°ããã³ãŒãããã°ãããã¹ãã§ããããã«ãªããŸãã æ€èšŒã·ã¹ãã ãã¢ãã©ã€ã¶ãŒã®èŠåã«åå¿ããã«ã¯ããŠãŒãã£ãªã㣠ããã°ã³ã³ããŒã¿ãŒ ãã©ã°ãè¿œå ãããŸãã --èŠåã瀺ã:
plog-converter ... --indicate-warnings ... -o /path/to/report.tasks ...
ãã®ãã©ã°ã䜿çšãããšãã¢ãã©ã€ã¶ãŒ ã¬ããŒãã«èŠåãããå Žåãã³ã³ããŒã¿ãŒã¯ãŒã以å€ã®ã³ãŒããè¿ããŸãã ãªã¿ãŒã³ ã³ãŒãã䜿çšãããšãããªã³ããã ããã¯ãã³ãããããŸãã¯ãã« ãªã¯ãšã¹ãããããã¯ããçæãããã¢ãã©ã€ã¶ãŒ ã¬ããŒããç»é¢ã«è¡šç€ºããããå ±æããããã¡ãŒã«ã§éä¿¡ãããã§ããŸãã
泚èšã åããŠãã¡ã€ã«ã®ãªã¹ãã®åæãéå§ãããšããããžã§ã¯ãå šäœãåæãããŸãã ã¢ãã©ã€ã¶ãŒã¯ãããã㌠ãã¡ã€ã«äžã®ãããžã§ã¯ãã®ãœãŒã¹ ãã¡ã€ã«ã®äŸåé¢ä¿ã®ãã¡ã€ã«ãçæããå¿ èŠããããŸãã ããã¯ãC ããã³ C++ ãã¡ã€ã«ã解æããæ©èœã§ãã å°æ¥çã«ã¯ãäŸåé¢ä¿ãã¡ã€ã«ããã£ãã·ã¥ã§ããããã«ãªããã¢ãã©ã€ã¶ãŒã«ãã£ãŠèªåçã«æŽæ°ãããããã«ãªããŸãã ã€ã³ã¯ãªã¡ã³ã¿ã«è§£æã¢ãŒãã䜿çšããå Žåãããããã¡ã€ã«ãªã¹ã ãã§ã㯠ã¢ãŒãã䜿çšãããšãã«ã³ãããããã§ãã¯ããå©ç¹ã¯ããªããžã§ã¯ã ãã¡ã€ã«ã§ã¯ãªãããã®ãã¡ã€ã«ã®ã¿ããã£ãã·ã¥ããã°ããããšã§ãã
ãã«ãªã¯ãšã¹ãåæã®äžè¬åå
ãããžã§ã¯ãå šäœã®åæã«ã¯æéããããããããããžã§ã¯ãã®äžéšã ãããã§ãã¯ããã®ãåççã§ãã åé¡ã¯ãæ°ãããã¡ã€ã«ãæ®ãã®ãããžã§ã¯ã ãã¡ã€ã«ããåé¢ããå¿ èŠãããããšã§ãã
XNUMX ã€ã®åå²ãããã³ããã ããªãŒã®äŸãèããŠã¿ãŸãããã
ã³ããããããšããŸããã A1 ãã§ã«ãã§ãã¯ãããŠããããªã倧éã®ã³ãŒããå«ãŸããŠããŸãã å°ãåã«ã³ããããããã©ã³ããäœæããŸãã A1 ãããŠããã€ãã®ãã¡ã€ã«ãå€æŽããŸããã
ãã¡ããåŸããæ°ã¥ãããã§ãããã A1 ããã« XNUMX ã€ã®ã³ãããããããŸãããããããã¯ä»ã®ãã©ã³ãã®ããŒãžã§ããããŸããã ãã¹ã¿ãŒã ãããŠä»ããã®æãæ¥ãŸãã ããããã£ãã¯ã¹ æºåãã§ããŠã ãããã£ãŠãããŒãžã®ããã«ãã«ãªã¯ãšã¹ãã衚瀺ãããŸãã B3 О A3.
ãã¡ãããããŒãžã®çµæå šäœã確èªããããšãã§ããŸãããå€æŽããããã¡ã€ã«ã¯æ°åã ãã§ãããããããã¯é·ãããŠäžåœã«ãªããŸãã ãããã£ãŠãå€æŽããããã®ã®ã¿ãåæããæ¹ãå¹ççã§ãã
ãããè¡ãã«ã¯ããã¹ã¿ãŒã«ããŒãžãããã©ã³ãã® HEAD ã«ãããã©ã³ãéã®éããååŸããŸãã
git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
$MERGE_BASE åŸã§è©³ããæ€èšããŸãã å®éã«ã¯ããã¹ãŠã® CI ãµãŒãã¹ãããŒãžã®ããŒã¹ã«é¢ããå¿ èŠãªæ å ±ãæäŸããããã§ã¯ãªããããæ¯åããã®ããŒã¿ãååŸããæ°ããæ¹æ³ãèãåºãå¿ èŠããããŸãã ããã«ã€ããŠã¯ã以äžã§èª¬æãã Web ãµãŒãã¹ããšã«è©³ãã説æããŸãã
ããã§ããã©ã³ãéã®éããã€ãŸãå€æŽããããã¡ã€ã«åã®ãªã¹ããåŸãããŸããã 次ã«ããã¡ã€ã«ãäžããå¿ èŠããããŸã .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 (--èŠåã瀺ãïŒã å°ãªããšã XNUMX ã€ã®ã¢ãã©ã€ã¶ãŒèŠåãããå ŽåããŠãŒãã£ãªãã£ã®ãªã¿ãŒã³ ã³ãŒã ããã°ã³ã³ããŒã¿ãŒ 㯠2 ã«å€æŽããããã« ãªã¯ãšã¹ã ãã¡ã€ã«ã«æœåšçãªãšã©ãŒãããããšã CI ãµãŒãã¹ã«éç¥ãããŸãã
ãã©ãã¹CI
èšå®ã¯ãã¡ã€ã«åœ¢åŒã§è¡ãããŸã .travis.ymlã 䟿å®äžããã¡ã€ã«ããåŒã³åºãããé¢æ°ãå«ãå¥ã® bash ã¹ã¯ãªããã«ãã¹ãŠã眮ãããšããå§ãããŸãã .travis.yml (bash ã¹ã¯ãªããå.sh é¢æ°å).
å¿ èŠãªã³ãŒããã¹ã¯ãªããã«è¿œå ããŸãã bash, ãã®ãããããå€ãã®æ©èœãåŸãããŸãã ã»ã¯ã·ã§ã³å install 次ã®ããã«æžããŸããã:
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:
- 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 ãã« ãªã¯ãšã¹ãçªå·ãä¿åããããŸã㯠falseéåžžã®ãã©ã³ãã®å Žåã
- $TRAVIS_REPO_SLUG ãããžã§ã¯ããªããžããªã®ååãæ ŒçŽããŸãã
ãã®é¢æ°ã®ã¢ã«ãŽãªãºã :
Travis CI ã¯ãªã¿ãŒã³ ã³ãŒãã«å¿çãããããèŠåãååšãããšãµãŒãã¹ã«ã³ãããã«ãã°ã®ãã©ã°ãä»ããããã«æ瀺ãããŸãã
ãã®ã³ãŒãè¡ã詳ããèŠãŠã¿ãŸãããã
git diff --name-only origin/HEAD > .pvs-pr.list
å®éãTravis CI ã¯ãã« ãªã¯ãšã¹ãã®åæäžã«ãã©ã³ããèªåçã«ããŒãžããŸãã
ãããã£ãŠãç§ãã¡ã¯åæããŸã A4ãšããªã B3âA3ã ãã®æ©èœã®ããã次ã®ãã®ãšã®å·®ãèšç®ããå¿
èŠããããŸãã A3ãããã¯ããã®æã®ã¡ããã©äžéšã§ã èµ·æº.
éèŠãªè©³çŽ°ã XNUMX ã€æ®ã£ãŠããŸããããã¯ãã³ã³ãã€ã«ããã翻蚳åäœ (*.cã*.ccã*.cpp ãªã©) ã§ã®ããã㌠ãã¡ã€ã«ã®äŸåé¢ä¿ã®ãã£ãã·ã¥ã§ãã ã¢ãã©ã€ã¶ãŒã¯ããã¡ã€ã«ã®ãªã¹ãããã§ãã¯ããã¢ãŒãã§ã®ååèµ·åæã«ãããã®äŸåé¢ä¿ãèšç®ãããããã .PVS-Studio ãã£ã¬ã¯ããªã«ä¿åããŸãã Travis CI ã§ã¯ãã©ã«ããŒããã£ãã·ã¥ã§ããããããã£ã¬ã¯ã㪠ããŒã¿ãä¿åããŸãã .PVS-ã¹ã¿ãžãª/:
cache:
directories:
- .PVS-Studio/
ãã®ã³ãŒãããã¡ã€ã«ã«è¿œå ããå¿ èŠããããŸã .travis.ymlã ãã®ãã£ã¬ã¯ããªã«ã¯ãåæåŸã«åéãããããŸããŸãªããŒã¿ãä¿åãããŸããããã«ããããã®åŸã®ãã¡ã€ã« ãªã¹ãåæãŸãã¯å¢ååæã®å®è¡ãå€§å¹ ã«é«éåãããŸãã ãããè¡ããªããšãã¢ãã©ã€ã¶ãŒã¯å®éã«æ¯åãã¹ãŠã®ãã¡ã€ã«ãåæããããšã«ãªããŸãã
ããã£
ãã©ãŽã£ã¹ C.I. ã®ããã«ã
ãŸãæåã«ããã«ãã©ã€ã³ã«æ°ããã¢ã¯ã·ã§ã³ãè¿œå ããå¿ èŠããããŸãã
ãããžã§ã¯ãã®ãã«ãã«äœ¿çšãããã³ã³ãã€ã©ãæå®ããŸãã ãã®ã¢ã¯ãã£ããã£ã§ã€ã³ã¹ããŒã«ãããŠãã 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 ã®ã»ã¯ã·ã§ã³ãèªãã ããšãããã°ããã®ã³ãŒãã«ã¯ãã§ã«éŠŽæã¿ããããŸãããããã§ã¯æ°ããã¹ãããããããŸãã
å®éã®ãšãããçŸåšåæããŠããã®ã¯ããŒãžã®çµæã§ã¯ãªãããã« ãªã¯ãšã¹ãã®äœæå
ã®ãã©ã³ãã® 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 ããæäŸããã次ã®å€æ°ã䜿çšããŸããã
- $BUDDY_EXECUTION_PULL_REQEUST_NO - ãã«ãªã¯ãšã¹ãçªå·;
- $BUDDY_REPO_SLUG - ãŠãŒã¶ãŒåãšãªããžããªã®çµã¿åãã (äŸ: max / test)ã
次ã«ãäžã®ãã¿ã³ã䜿çšããŠå€æŽãä¿åãããã« ãªã¯ãšã¹ãåæãæå¹ã«ããŸãããã
Travis CI ãšã¯ç°ãªããæå®ããå¿
èŠã¯ãããŸããã .pvs-studio Buddy ã¯ãã®åŸã®èµ·åã«åããŠãã¹ãŠã®ãã¡ã€ã«ãèªåçã«ãã£ãã·ã¥ããããããã£ãã·ã¥ã«äœ¿çšãããŸãã ãããã£ãŠãæåŸã«æ®ã£ãŠããã®ã¯ãPVS-Studio ã®ãã°ã€ã³åãšãã¹ã¯ãŒãã Buddy ã«ä¿åããããšã§ãã å€æŽãä¿åãããããã€ãã©ã€ã³ã«æ»ããŸãã å€æ°ã®èšå®ã«é²ã¿ãPVS-Studio ã®ãã°ã€ã³ãšããŒãè¿œå ããå¿
èŠããããŸãã
ãã®åŸãæ°ãããã« ãªã¯ãšã¹ããŸãã¯ã³ããããåºçŸãããšãã§ãã¯ãããªã¬ãŒãããŸãã ã³ãããã«ãšã©ãŒãå«ãŸããŠããå ŽåãBuddy ã¯ãã« ãªã¯ãšã¹ã ããŒãžã§ãããææããŸãã
AppVeyor
AppVeyor ã®ã»ããã¢ãã㯠Buddy ãšäŒŒãŠããŸãããã¹ãŠã Web ã€ã³ã¿ãŒãã§ã€ã¹ã§è¡ããããããžã§ã¯ã ãªããžããªã« *.yml ãã¡ã€ã«ãè¿œå ããå¿ èŠããããŸããã
ãããžã§ã¯ãæŠèŠã® [èšå®] ã¿ãã«ç§»åããŸãããã
ãã®ããŒãžãäžã«ã¹ã¯ããŒã«ããŠããã« ãªã¯ãšã¹ããæ§ç¯ããããã®ãã£ãã·ã¥ä¿åãæå¹ã«ããŸãããã
次ã«ããç°å¢ãã¿ãã«ç§»åããŠããã«ãããã€ã¡ãŒãžãšå¿
èŠãªç°å¢å€æ°ãæå®ããŸãã
åã®ã»ã¯ã·ã§ã³ãèªãã ããšãããã°ããããã® XNUMX ã€ã®å€æ°ã«ã€ããŠããç¥ã£ãŠããã§ããã- 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"`
ãã®äžã§ããã« ãªã¯ãšã¹ãã宣èšãããŠãããã©ã³ãéã®å·®ç°ãååŸããŸãã ãã®ããã«ã¯ã次ã®ç°å¢å€æ°ãå¿ èŠã§ãã
- $APPVEYOR_PULL_REQUEST_NUMBER - ãã« ãªã¯ãšã¹ãçªå·ã
- $APPVEYOR_REPO_NAME - ãŠãŒã¶ãŒåãšãããžã§ã¯ã ãªããžããªã
ãŸãšã
ãã¡ãããèãããããã¹ãŠã®ç¶ç¶ççµ±åãµãŒãã¹ãæ€èšããããã§ã¯ãããŸãããããããã¯ãã¹ãŠéåžžã«ãã䌌ãäœæ¥ã®è©³çŽ°ãæã£ãŠããŸãã ãã£ãã·ã¥ãé€ããŠãåãµãŒãã¹ã¯ç¬èªã®ããã€ã¯ããäœæããããããã¹ãŠãåžžã«ç°ãªããŸãã
Travis-CI ã®ãããªå Žæã§ã¯ãæ°è¡ã®ã³ãŒããšãã£ãã·ã¥ãåé¡ãªãåäœããŸãã AppVeyor ã®ããã«ãèšå®ã§ãã©ã«ããŒãæå®ããã ãã§æžã¿ãŸãã ãã ããã©ããã§äžæã®ããŒãäœæãããã£ãã·ã¥ããããã©ã°ã¡ã³ããäžæžãããæ©äŒãã·ã¹ãã ã«äžããããã«ããå¿ èŠããããŸãã ãããã£ãŠãäžèšã§èª¬æãããŠããªãç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ ãµãŒãã¹ã§ãã« ãªã¯ãšã¹ãåæãã»ããã¢ããããå Žåã¯ããŸããã£ãã·ã¥ã«åé¡ãçºçããªãããšã確èªããŠãã ããã
ãæž
èŽããããšãããããŸããã äœãåé¡ã解決ããªãå Žåã¯ããæ°è»œã«äžèšãŸã§ãé£çµ¡ãã ããã
ãã®èšäºãè±èªåã®èªè
ãšå
±æãããå Žåã¯ã翻蚳ãªã³ã¯ãMaxim Zvyagintsevãã䜿çšããŠãã ããã
åºæïŒ habr.com