د PVS-Studio په کارولو سره په Travis CI، Buddy او AppVeyor کې د ژمنو او پلولو غوښتنو تحلیل

د PVS-Studio په کارولو سره په Travis CI، Buddy او AppVeyor کې د ژمنو او پلولو غوښتنو تحلیل
د 7.04 نسخه څخه پیل کول، په لینکس او MacOS کې د C او C++ ژبو لپاره د PVS-Studio شنونکي د ټاکل شوي فایلونو لیست چک کولو لپاره د ازموینې اختیار لري. د نوي حالت په کارولو سره ، تاسو کولی شئ تحلیل کونکی تنظیم کړئ ترڅو ژمنې چیک کړئ او غوښتنې راوباسئ. دا مقاله به تاسو ته وښیې چې څنګه په مشهور CI (دوامداره ادغام) سیسټمونو کې د ګیټ هب پروژې فایل لیست چیک تنظیم کړئ لکه ټریوس CI ، بډي او اپ ویور.

د فایل لیست چک حالت

PVS- سټوډیو په C، C++، C# او Java کې لیکل شوي پروګرامونو د سرچینې کوډ کې د غلطیو او احتمالي زیانونو موندلو لپاره یوه وسیله ده. په وینډوز، لینکس او macOS کې په 64-bit سیسټمونو کار کوي.

د لینکس او macOS لپاره د PVS-Studio 7.04 نسخه د سرچینې فایلونو لیست چک کولو لپاره یو حالت لري. دا د هغو پروژو لپاره کار کوي چې د جوړولو سیسټم تاسو ته اجازه درکوي فایل تولید کړئ compile_commands.json. دا د تحلیل کونکي لپاره اړین دی چې د ټاکل شوي فایلونو تالیف په اړه معلومات راوباسي. که ستاسو د جوړونې سیسټم د compile_commands.json فایل رامینځته کولو ملاتړ نه کوي ، تاسو کولی شئ د یوټیلیټ په کارولو سره د ورته فایل رامینځته کولو هڅه وکړئ Bear.

همچنان ، د فایلونو لیست چیک کولو حالت د کمپیلر رنونو سټریس ټریس (pvs-studio-analyzer ټریس) سره یوځای کارول کیدی شي. د دې کولو لپاره، تاسو به لومړی د پروژې بشپړ جوړښت ترسره کولو ته اړتیا ولرئ او دا تعقیب کړئ ترڅو تحلیل کونکی د چک شوي ټولو فایلونو د تالیف پیرامیټونو په اړه بشپړ معلومات راټول کړي.

په هرصورت، دا اختیار د پام وړ نیمګړتیا لري - تاسو به اړتیا ولرئ په هر لانچ کې د ټولې پروژې بشپړ ساختماني ټریس ترسره کړئ، کوم چې پخپله د ګړندي ژمنې چک نظر سره مخالفت کوي. یا، که تاسو د تعقیب پایله پخپله کیش کړئ ، د تحلیل کونکي وروستي لانچونه ممکن نیمګړتیا ته وګرځي که چیرې د سرچینې فایل انحصار جوړښت د تعقیب وروسته بدل شي (د مثال په توګه ، د سرچینې فایلونو څخه یوه ته نوی # شامل شوی اضافه شوی).

له همدې امله ، موږ وړاندیز نه کوو چې د ټریس لاګ سره د فایل لیست چیک حالت وکاروئ ترڅو د ژمنو چک کولو یا غوښتنې غوښتنه وکړئ. په هغه حالت کې چې تاسو کولی شئ د ژمنې چک کولو په وخت کې زیاتیدونکي جوړونه ترسره کړئ، د حالت کارولو ته پام وکړئ زیاتیدونکی تحلیل.

د تحلیل لپاره د سرچینې فایلونو لیست د متن فایل کې خوندي شوی او د پیرامیټر په کارولو سره تحلیل کونکي ته لیږدول کیږي -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++ فایلونو د پارس کولو ځانګړتیا ده. په راتلونکي کې ، د انحصار فایل زیرمه کیدی شي او دا به د تحلیل کونکي لخوا په اوتومات ډول تازه شي. د کمیټ چیک کولو ګټه د فایل لیست چیک حالت کارولو په وخت کې د زیاتیدونکي پارسینګ حالت په کارولو سره دا ده چې یوازې هغه فایل ته اړتیا لري چې کیچ شي ، نه د اعتراض فایلونه.

د پلټ غوښتنې تحلیل عمومي اصول

د ټولې پروژې تحلیل ډیر وخت نیسي، نو دا د دې معنی لري چې یوازې د هغې ځینې برخې وګورئ. ستونزه دا ده چې تاسو اړتیا لرئ نوي فایلونه د پروژې پاتې فایلونو څخه جلا کړئ.

د ژمنې ونې مثال په پام کې ونیسئ چې دوه څانګې لري:

د PVS-Studio په کارولو سره په Travis CI، Buddy او AppVeyor کې د ژمنو او پلولو غوښتنو تحلیل

راځئ چې د ژمنې فرض کړو A1 په کافي اندازه لوی مقدار کوډ لري چې دمخه چیک شوی. یو څه دمخه موږ د ژمنې څخه یوه څانګه جوړه کړه A1 او ځینې فایلونه بدل کړل.

البته، تاسو دا وروسته ولیدل A1 دوه نورې ژمنې وې، مګر دا د نورو څانګو ادغام هم وو، ځکه چې موږ ژمن نه یو د بادار. او اوس هغه وخت راغلی چې کله ګرافکس چمتو له همدې امله، د انضمام لپاره د وتلو غوښتنه ښکاره شوه B3 и A3.

البته، دا به ممکنه وي چې د دوی د یوځای کولو ټوله پایله وګورئ، مګر دا به خورا اوږد او غیر عادلانه وي، ځکه چې یوازې یو څو فایلونه بدل شوي. له همدې امله، دا خورا اغیزمنه ده چې یوازې بدل شوي تحلیلونه تحلیل کړئ.

د دې کولو لپاره، موږ د څانګو ترمنځ توپیر ترلاسه کوو، د هغه څانګې په سر کې چې موږ غواړو په ماسټر کې ضمیمه کړو:

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

$MERGE_BASE موږ به وروسته په تفصیل سره غور وکړو. حقیقت دا دی چې د CI هر خدمت د ادغام لپاره د بیس په اړه اړین معلومات نه وړاندې کوي، نو هرکله چې تاسو باید د دې معلوماتو ترلاسه کولو لپاره نوي لارو سره راشي. دا به لاندې په هر ویب خدماتو کې تشریح شي.

نو، موږ د څانګو ترمنځ توپیر ترلاسه کړ، یا بلکه، د فایل نومونو لیست چې بدل شوي. اوس موږ باید فایل ورکړو .pvs-pr.list (موږ پورته محصول دې ته لیږلی) تحلیل کونکي ته:

pvs-studio-analyzer analyze -j8 
                            -o PVS-Studio.log 
                            -S .pvs-pr.list

د تحلیل وروسته، موږ اړتیا لرو چې د لاګ فایل (PVS-Studio.log) د لوستلو وړ بڼه کې بدل کړو:

plog-converter -t errorfile PVS-Studio.log --cerr -w

دا کمانډ به په کې غلطۍ لیست کړي سټډر (معیاري تېروتنه محصول جریان).

یوازې دلته موږ نه یوازې د غلطیو ښودلو ته اړتیا لرو ، بلکه د ستونزو شتون په اړه د مجلس او ازموینې لپاره زموږ خدمت ته هم خبر کړو. د دې لپاره، یو بیرغ په کنورټر کې اضافه شوی -W (--اندېښنه-خبرداری). که چیرې لږ تر لږه یو تحلیلونکی خبرداری شتون ولري، د کارونې بیرته راستنیدو کوډ پلګ کنورټر به 2 ته بدل شي، چې په پایله کې به د CI خدمت ته خبر ورکړي چې د پل غوښتنې فایلونو کې احتمالي تېروتنې شتون لري.

Travis CI

ترتیب د فایل په بڼه جوړ شوی دی .travis.yml. د اسانتیا لپاره، زه تاسو ته مشوره درکوم چې هر څه په جلا بش سکریپټ کې د افعالونو سره وساتئ چې د فایل څخه به ویل کیږي .travis.yml (bash scriptname.sh function_name).

موږ به اړین کوډ په سکریپټ کې اضافه کړو بش، نو موږ نور فعالیت ترلاسه کوو. په برخه کې لګول راځئ چې لاندې لیکو:

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

او په باش سکریپټ کې:

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 د پروژې ذخیره نوم ذخیره کوي.

د دې فعالیت الګوریتم:

د PVS-Studio په کارولو سره په Travis CI، Buddy او AppVeyor کې د ژمنو او پلولو غوښتنو تحلیل
ټریوس CI د بیرته راستنیدو کوډونو ته ځواب ورکوي ، نو د اخطارونو شتون به خدمت ته ووایی چې ژمنې د بګی په توګه بیرغ وکړي.

راځئ چې د کوډ دې کرښې ته نږدې وګورو:

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

حقیقت دا دی چې Travis CI په اتوماتيک ډول د پلې غوښتنې تحلیل په جریان کې څانګې سره یوځای کوي:

د PVS-Studio په کارولو سره په Travis CI، Buddy او AppVeyor کې د ژمنو او پلولو غوښتنو تحلیل
له همدې امله، موږ تحلیل کوو A4او نه B3->A3. د دې ځانګړتیا له امله، موږ اړتیا لرو چې توپیر محاسبه کړو اککسوم، کوم چې یوازې د څانګې پورتنۍ برخه ده اصلي.

یو مهم توضیحات پاتې دي - د ژباړې په ترتیب شوي واحدونو کې د سرلیک فایلونو انحصار ساتل (*.c, *.cc, *.cpp, etc.). تحلیل کونکی دا انحصارونه په لومړي پیل کې د فایلونو لیست چیک کولو حالت کې محاسبه کوي او بیا یې په .PVS-Studio لارښود کې خوندي کوي. Travis CI تاسو ته اجازه درکوي فولډرې کیچ کړئ، نو موږ به د لارښود ډاټا خوندي کړو .PVS-Studio/:

cache:
  directories:
    - .PVS-Studio/

دا کوډ باید په فایل کې اضافه شي .travis.yml. دا ډایرکټر د تحلیل وروسته راټول شوي مختلف معلومات ذخیره کوي، کوم چې به د فایل لیست تحلیل یا زیاتیدونکي تحلیل وروسته د پام وړ چټک کړي. که دا نه وي ترسره شوی، نو بیا شنونکی به په حقیقت کې هر وخت ټولې فایلونه تحلیل کړي.

بوډا

لکه ټریوس سي.آی. بوډا په اتوماتيک ډول د پروژې جوړولو او ازموینې وړتیا چمتو کوي چې په GitHub کې زیرمه شوي. د Travis CI برعکس، دا په ویب انٹرفیس کې ترتیب شوی (د بش ملاتړ شتون لري)، نو په پروژه کې د ترتیب کولو فایلونو ذخیره کولو ته اړتیا نشته.

له هرڅه دمخه ، موږ اړتیا لرو د جوړونې لاین ته نوی عمل اضافه کړو:

د PVS-Studio په کارولو سره په Travis CI، Buddy او AppVeyor کې د ژمنو او پلولو غوښتنو تحلیل
هغه کمپیلر مشخص کړئ چې د پروژې جوړولو لپاره کارول شوی و. د ډاکر کانټینر ته پام وکړئ چې پدې فعالیت کې نصب شوی. د مثال په توګه، د GCC لپاره یو ځانګړی کانټینر شتون لري:

د PVS-Studio په کارولو سره په Travis CI، Buddy او AppVeyor کې د ژمنو او پلولو غوښتنو تحلیل
اوس راځئ چې PVS-Studio او اړین اسانتیاوې نصب کړو:

د PVS-Studio په کارولو سره په Travis CI، Buddy او AppVeyor کې د ژمنو او پلولو غوښتنو تحلیل
مدیر ته لاندې کرښې اضافه کړئ:

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 برخه لوستلې وي، نو دا کوډ لا دمخه تاسو ته پیژندل شوی، په هرصورت، اوس یو نوی ګام دی:

د PVS-Studio په کارولو سره په Travis CI، Buddy او AppVeyor کې د ژمنو او پلولو غوښتنو تحلیل
حقیقت دا دی چې اوس موږ د ادغام پایله نه تحلیل کوو ، مګر د څانګې مشر چې له هغې څخه د پلولو غوښتنه کیږي:

د PVS-Studio په کارولو سره په Travis CI، Buddy او AppVeyor کې د ژمنو او پلولو غوښتنو تحلیل
نو موږ په مشروط ژمن یو 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 - د غوښتنې شمیره؛
  • $BUDDY_REPO_SLUG - د کارن نوم او ذخیره کولو ترکیب (د مثال په توګه اعظمي / ازموینه).

اوس راځئ چې د لاندې تڼۍ په کارولو سره بدلونونه خوندي کړو، او د پلې غوښتنې تحلیل فعال کړئ:

د PVS-Studio په کارولو سره په Travis CI، Buddy او AppVeyor کې د ژمنو او پلولو غوښتنو تحلیل
د Travis CI برعکس، موږ اړتیا نلرو چې مشخص کړو .pvs-studio د کیچ کولو لپاره ، ځکه چې بډي په اتوماتيک ډول د راتلونکو لانچونو لپاره ټولې فایلونه زیرمه کوي. له همدې امله، وروستی شی پاتې دی چې په بډی کې د PVS-Studio لپاره د ننوتلو او پټنوم خوندي کول دي. د بدلونونو خوندي کولو وروسته، موږ به بیرته پایپ لاین ته ورسیږو. موږ اړتیا لرو د متغیرونو تنظیم کولو ته لاړ شو او د PVS-Studio لپاره ننوتل او کیلي اضافه کړو:

د PVS-Studio په کارولو سره په Travis CI، Buddy او AppVeyor کې د ژمنو او پلولو غوښتنو تحلیل
له هغې وروسته ، د نوي پل غوښتنې یا ژمنې څرګندیدل به چیک پیل کړي. که یو ژمنې تېروتنې ولري، نو بډی به یې د پلې غوښتنې پاڼې کې په ګوته کړي.

AppVeyor

د AppVeyor تنظیم کول د Buddy سره ورته دي، ځکه چې هرڅه په ویب انٹرفیس کې پیښیږي او د پروژې ذخیره کې د *.yml فایل اضافه کولو ته اړتیا نشته.

راځئ چې د پروژې عمومي لید کې د ترتیباتو ټب ته لاړ شو:

د PVS-Studio په کارولو سره په Travis CI، Buddy او AppVeyor کې د ژمنو او پلولو غوښتنو تحلیل
راځئ چې دا پاڼه ښکته کړو او د پلولو غوښتنو جوړولو لپاره د کیچ خوندي کول فعال کړو:

د PVS-Studio په کارولو سره په Travis CI، Buddy او AppVeyor کې د ژمنو او پلولو غوښتنو تحلیل
اوس راځئ چې د چاپیریال ټب ته لاړ شو، چیرې چې موږ د جوړولو لپاره انځور او د چاپیریال اړین تغیرات مشخص کوو:

د PVS-Studio په کارولو سره په Travis CI، Buddy او AppVeyor کې د ژمنو او پلولو غوښتنو تحلیل
که تاسو پخوانۍ برخې لوستلې وي، تاسو د دې دوه متغیرونو سره ډیر آشنا یاست - PVS_KEY и PVS_USERNAME. که نه، نو اجازه راکړئ تاسو ته یادونه وکړم چې دوی د PVS-Studio شنونکي جواز چک کولو لپاره اړین دي. په راتلونکي کې، موږ به د باش سکریپټونو کې دوی سره بیا ووینو.

په لاندې پاڼه کې، د کیچ کولو لپاره فولډر مشخص کړئ:

د PVS-Studio په کارولو سره په Travis CI، Buddy او AppVeyor کې د ژمنو او پلولو غوښتنو تحلیل
که موږ دا کار ونه کړو، نو موږ به د یو څو فایلونو پر ځای ټوله پروژه تحلیل کړو، مګر موږ به د ټاکل شوي فایلونو پراساس محصول ترلاسه کړو. نو ځکه، دا مهمه ده چې د سم لارښود نوم داخل کړئ.

اوس د سکریپټ ازموینې لپاره وخت دی. د ازموینې ټب خلاص کړئ او سکریپټ غوره کړئ:

د PVS-Studio په کارولو سره په Travis CI، Buddy او AppVeyor کې د ژمنو او پلولو غوښتنو تحلیل
په دې فورمه کې لاندې کوډ پیسټ کړئ:

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 متغیر یو څه دروغ دی. د دې دلیل لپاره ، ما د تحلیل پیل کولو دمخه د دې ارزښت په لاسي ډول تازه کړ.

او بیا هرڅه، لکه څنګه چې مخکې:

د PVS-Studio په کارولو سره په Travis CI، Buddy او AppVeyor کې د ژمنو او پلولو غوښتنو تحلیل
اوس لاندې لنډیز ته پام وکړئ:

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 کې، تاسو اړتیا لرئ چې په ترتیباتو کې فولډر مشخص کړئ؛ مګر په کوم ځای کې تاسو اړتیا لرئ ځانګړي کیلي رامینځته کړئ او هڅه وکړئ سیسټم قانع کړئ ترڅو تاسو ته فرصت درکړي چې د زیرمه شوي ټوټې له سره لیکلو لپاره. له همدې امله ، که تاسو غواړئ په دوامداره ادغام خدمت کې د پلې غوښتنې تحلیل تنظیم کړئ چې پورته یې بحث نه دی شوی ، نو لومړی ډاډ ترلاسه کړئ چې تاسو به د کیچ کولو سره ستونزې ونلرئ.

له پاملرنې څخه مو مننه. که یو څه کار ونکړي، نو په وړیا توګه موږ ته د لیکلو احساس وکړئ ملاتړ. موږ به مشوره او مرسته وکړو.

د PVS-Studio په کارولو سره په Travis CI، Buddy او AppVeyor کې د ژمنو او پلولو غوښتنو تحلیل

که تاسو غواړئ دا مقاله د انګلیسي ژبو لیدونکو سره شریکه کړئ ، نو مهرباني وکړئ د ژباړې لینک وکاروئ: ماکسیم زویاګینتسیف. د PVS-Studio په کارولو سره په Travis CI، Buddy او AppVeyor کې د ژمنو او پلولو غوښتنو تحلیل.

سرچینه: www.habr.com

Add a comment