PVS-Studio استعمال ڪندي Travis CI، Buddy ۽ AppVeyor ۾ ڪمنٽس ۽ پل درخواستن جو تجزيو

PVS-Studio استعمال ڪندي Travis CI، Buddy ۽ AppVeyor ۾ ڪمنٽس ۽ پل درخواستن جو تجزيو
Linux ۽ macOS تي C ۽ C++ ٻولين لاءِ PVS-Studio analyzer ۾، ورجن 7.04 کان شروع ٿي، مخصوص فائلن جي لسٽ چيڪ ڪرڻ لاءِ هڪ ٽيسٽ آپشن ظاهر ٿيو آهي. نئين موڊ کي استعمال ڪندي، توهان تجزيي کي ترتيب ڏيڻ جي جانچ ڪرڻ ۽ درخواستن کي ڇڪڻ لاء ترتيب ڏئي سگهو ٿا. اهو آرٽيڪل توهان کي ٻڌائيندو ته GitHub پروجيڪٽ جي تبديل ٿيل فائلن جي لسٽ کي ڪيئن سيٽ ڪيو وڃي جيئن مشهور سي آءِ (مسلسل انٽيگريشن) سسٽم ۾ ٽريس سي آءِ ، بڊي ۽ ايپ ويور.

فائل لسٽ چيڪنگ موڊ

پي وي وي اسٽوڊيو C, C++، C# ۽ Java ۾ لکيل پروگرامن جي سورس ڪوڊ ۾ غلطين ۽ امڪاني نقصانن جي نشاندهي ڪرڻ لاءِ هڪ اوزار آهي. ونڊوز، لينڪس ۽ macOS تي 64-bit سسٽم تي ڪم ڪري ٿو.

نسخي ۾ PVS-Studio 7.04 Linux ۽ macOS لاءِ، ماخذ فائلن جي لسٽ چيڪ ڪرڻ لاءِ هڪ موڊ ظاهر ٿيو آهي. اهو ڪم انهن منصوبن لاءِ آهي جن جي تعميراتي نظام توهان کي اجازت ڏئي ٿي هڪ فائل ٺاهي compile_commands.json. اهو ضروري آهي ته تجزيو ڪندڙ کي مخصوص فائلن جي تاليف بابت معلومات ڪڍڻ لاء. جيڪڏهن توهان جو بلڊ سسٽم compile_commands.json فائل پيدا ڪرڻ جي حمايت نٿو ڪري، توهان ڪوشش ڪري سگهو ٿا اهڙي فائل ٺاهي يوٽيليٽي استعمال ڪندي نه کڻندو.

انهي سان گڏ، فائل لسٽ چيڪنگ موڊ گڏ ڪري سگهجي ٿو استعمال ڪري سگهجي ٿو اسٽريٽ ٽريڪ لاگ سان گڏ ڪمپيلر لانچز (pvs-studio-analyzer trace). هن کي ڪرڻ لاءِ، توهان کي پهرين پروجيڪٽ جي مڪمل تعمير ڪرڻ ۽ ان کي ٽريڪ ڪرڻ جي ضرورت پوندي ته جيئن تجزيه ڪندڙ سڀني فائلن جي تاليف جي ماپن بابت مڪمل معلومات گڏ ڪري.

تنهن هوندي، هن اختيار ۾ هڪ اهم خرابي آهي - توهان کي هر وقت مڪمل منصوبي جي مڪمل تعمير جي سراغ کي انجام ڏيڻ جي ضرورت پوندي جڏهن توهان ان کي هلائيندا آهيو، جيڪو پاڻ ۾ جلدي هڪ عزم کي جانچڻ جي خيال سان تضاد ڪري ٿو. يا، جيڪڏھن توھان ڪيش ڪريو ٽريس نتيجو پاڻ کي، تجزيي جي ايندڙ رنسون نامڪمل ٿي سگھي ٿي جيڪڏھن ماخذ فائلن جي انحصار جي جوڙجڪ ٽريس کان پوء تبديل ٿي وڃي (مثال طور، ھڪڙو نئون # شامل ڪيو ويو آھي ھڪڙي ماخذ فائلن ۾).

تنهن ڪري، اسان سفارش نٿا ڪريون فائل لسٽ چيڪ موڊ کي استعمال ڪرڻ لاءِ ٽريس لاگ سان ڪمٽس چيڪ ڪرڻ يا درخواستن کي ڇڪڻ لاءِ. ان صورت ۾ جڏهن توهان ڪمٽ جي جانچ ڪندي هڪ واڌارو تعمير ڪري سگهو ٿا، موڊ استعمال ڪرڻ تي غور ڪريو وڌندڙ تجزيو.

تجزيي لاءِ ماخذ فائلن جي لسٽ هڪ ٽيڪسٽ فائل ۾ محفوظ ڪئي وئي آهي ۽ پيراميٽر استعمال ڪندي تجزيه نگار ڏانهن منتقل ڪئي وئي آهي. -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 اسان ان کي بعد ۾ تفصيل سان ڏسندا. حقيقت اها آهي ته هر سي آءِ سروس ضم ڪرڻ لاءِ ڊيٽابيس بابت ضروري معلومات مهيا ڪري ٿي، تنهن ڪري هر ڀيري توهان کي هن ڊيٽا کي حاصل ڪرڻ لاءِ نوان طريقا اختيار ڪرڻا پوندا. اهو هيٺ ڏنل تفصيل سان بيان ڪيو ويندو هر بيان ڪيل ويب خدمتن ۾.

تنهن ڪري، اسان شاخن جي وچ ۾ فرق حاصل ڪيو، يا بلڪه، فائل جي نالن جي هڪ فهرست جيڪا تبديل ٿي وئي. هاڻي اسان کي فائل ڏيڻ جي ضرورت آهي 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.yml. سھولت لاءِ، مان توھان کي صلاح ڏيان ٿو ته ھر شيءِ کي الڳ بش اسڪرپٽ ۾ وجھو افعالن سان جيڪي فائل مان سڏيا ويندا .travis.yml (bash script_name.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_PULL_REQUEST پل جي درخواست نمبر کي ذخيرو ڪري ٿو يا ڪوڙي, جيڪڏهن هي هڪ باقاعده شاخ آهي؛
  • $TRAVIS_REPO_SLUG پروجيڪٽ جي مخزن جو نالو ذخيرو ڪري ٿو.

هن فنڪشن لاء الگورتھم:

PVS-Studio استعمال ڪندي Travis CI، Buddy ۽ AppVeyor ۾ ڪمنٽس ۽ پل درخواستن جو تجزيو
ٽريس سي آءِ واپسي ڪوڊز جو جواب ڏئي ٿو، تنهن ڪري ڊيڄاريندڙن جي موجودگي سروس کي ٻڌائي ٿي ته واعدو کي نشانو بڻايو وڃي جيئن غلطين تي مشتمل هجي.

هاڻي اچو ته ڪوڊ جي هن لائن تي هڪ ويجهي نظر رکون:

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

حقيقت اها آهي ته Travis CI خودڪار طريقي سان شاخن کي ضم ڪري ٿو جڏهن هڪ پل جي درخواست جو تجزيو ڪندي:

PVS-Studio استعمال ڪندي Travis CI، Buddy ۽ AppVeyor ۾ ڪمنٽس ۽ پل درخواستن جو تجزيو
تنهن ڪري اسان تجزيو ڪريون ٿا A4۽ نه B3->A3. ھن خصوصيت جي ڪري، اسان کي فرق سان حساب ڪرڻ جي ضرورت آھي A3، جيڪو بلڪل شاخ جي چوٽي کان آهي بڻ.

هتي هڪ اهم تفصيل باقي آهي - هيڊر فائلن جي انحصار کي ڪيش ڪرڻ مرتب ڪيل ترجمي جي يونٽن تي (*.c، *.cc، *.cpp، وغيره). تجزيي ڪندڙ انهن انحصارن کي ڳڻائي ٿو جڏهن اهو پهريون ڀيرو فائلن جي لسٽ چيڪ ڪرڻ جي موڊ ۾ شروع ڪيو ويو آهي ۽ پوءِ انهن کي .PVS-Studio ڊاريڪٽري ۾ محفوظ ڪري ٿو. Travis CI توهان کي فولڊر کي ڪيش ڪرڻ جي اجازت ڏئي ٿي، تنهنڪري اسان ڊاريڪٽري ڊيٽا کي محفوظ ڪنداسين .PVS-اسٽوڊيو/:

cache:
  directories:
    - .PVS-Studio/

هن ڪوڊ کي فائل ۾ شامل ڪرڻ جي ضرورت آهي .travis.yml. هي ڊاريڪٽري تجزيي کان پوءِ گڏ ڪيل مختلف ڊيٽا کي ذخيرو ڪري ٿي، جيڪا فائل لسٽ جي تجزيي يا واڌ ويجهه واري تجزيي جي ايندڙ رن کي تيز ڪندي. جيڪڏهن اهو نه ڪيو ويو آهي، پوء تجزيه ڪندڙ اصل ۾ هر وقت سڀني فائلن جو تجزيو ڪندو.

وڏو

Travis CI وانگر، وڏو 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 مهيا ڪري ٿو:

  • $BUDDY_EXECUTION_PULL_REQEUST_NO - ڇڪڻ جي درخواست نمبر؛
  • $BUDDY_REPO_SLUG - استعمال ڪندڙ جو نالو ۽ مخزن جو مجموعو (مثال طور وڌ ۾ وڌ/ٽيسٽ).

ھاڻي اچو ھيٺ ڏنل بٽڻ کي استعمال ڪندي تبديلين کي بچايو ۽ پل جي درخواست جي تجزيو کي فعال ڪريو:

PVS-Studio استعمال ڪندي Travis CI، Buddy ۽ AppVeyor ۾ ڪمنٽس ۽ پل درخواستن جو تجزيو
Travis CI جي برعڪس، اسان کي وضاحت ڪرڻ جي ضرورت ناهي پي وي ايس اسٽوڊيو ڪيشنگ لاءِ، ڇو ته Buddy خودڪار طريقي سان سڀني فائلن کي ايندڙ لانچن لاءِ ڪيش ڪري ٿو. تنهن ڪري، آخري شيء ڇڏي ويو آهي لاگ ان ۽ پاسورڊ محفوظ ڪرڻ لاءِ PVS-Studio in Buddy. تبديلين کي محفوظ ڪرڻ کان پوء، اسان کي پائپ لائن ڏانھن واپس ورتو ويندو. اسان کي اڳتي وڌڻو پوندو متغيرن کي ترتيب ڏيڻ ۽ 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-اسٽوڊيو تجزيه ڪندڙ جي لائسنس جي تصديق ڪرڻ لاء ضروري آهن. اسان انهن کي مستقبل ۾ بش اسڪرپٽ ۾ ٻيهر ڏسندا.

هيٺ ڏنل ساڳئي صفحي تي اسان ڪيشنگ لاء فولڊر کي اشارو ڪريون ٿا:

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 ۾ ڪمنٽس ۽ پل درخواستن جو تجزيو

جيڪڏهن توهان هن مضمون کي انگريزي ڳالهائيندڙ سامعين سان حصيداري ڪرڻ چاهيو ٿا، مهرباني ڪري ترجمو لنڪ استعمال ڪريو: Maxim Zvyagintsev. PVS-Studio استعمال ڪندي Travis CI، Buddy ۽ AppVeyor ۾ ڪمنٽس ۽ پل درخواستن جو تجزيو.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو