Linux ۽ macOS تي C ۽ C++ ٻولين لاءِ PVS-Studio analyzer ۾، ورجن 7.04 کان شروع ٿي، مخصوص فائلن جي لسٽ چيڪ ڪرڻ لاءِ هڪ ٽيسٽ آپشن ظاهر ٿيو آهي. نئين موڊ کي استعمال ڪندي، توهان تجزيي کي ترتيب ڏيڻ جي جانچ ڪرڻ ۽ درخواستن کي ڇڪڻ لاء ترتيب ڏئي سگهو ٿا. اهو آرٽيڪل توهان کي ٻڌائيندو ته GitHub پروجيڪٽ جي تبديل ٿيل فائلن جي لسٽ کي ڪيئن سيٽ ڪيو وڃي جيئن مشهور سي آءِ (مسلسل انٽيگريشن) سسٽم ۾ ٽريس سي آءِ ، بڊي ۽ ايپ ويور.
فائل لسٽ چيڪنگ موڊ
نسخي ۾ PVS-Studio 7.04 Linux ۽ macOS لاءِ، ماخذ فائلن جي لسٽ چيڪ ڪرڻ لاءِ هڪ موڊ ظاهر ٿيو آهي. اهو ڪم انهن منصوبن لاءِ آهي جن جي تعميراتي نظام توهان کي اجازت ڏئي ٿي هڪ فائل ٺاهي
انهي سان گڏ، فائل لسٽ چيڪنگ موڊ گڏ ڪري سگهجي ٿو استعمال ڪري سگهجي ٿو اسٽريٽ ٽريڪ لاگ سان گڏ ڪمپيلر لانچز (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++ فائلن جو تجزيو ڪرڻ جي هڪ خاصيت آهي. مستقبل ۾، انحصار فائل کي محفوظ ڪري سگهجي ٿو ۽ اهو خودڪار طريقي سان تجزيه ڪندڙ طرفان اپڊيٽ ڪيو ويندو. ڪمٽ چيڪ ڪرڻ جو فائدو جڏهن فائل لسٽ چيڪنگ موڊ استعمال ڪرڻ بجاءِ واڌارو پارسنگ موڊ استعمال ڪرڻ جي بجاءِ اهو آهي ته توهان کي صرف انهي فائل کي ڪيش ڪرڻ جي ضرورت آهي ۽ اعتراض فائلن کي نه.
پل جي درخواست جي تجزيو جا عام اصول
پوري پروجيڪٽ جو تجزيو ڪرڻ ۾ تمام گهڻو وقت لڳندو آهي، ان ڪري ان جي صرف هڪ خاص حصي کي جانچڻ جو احساس ٿيندو آهي. مسئلو اهو آهي ته توهان کي نئين فائلن کي الڳ ڪرڻ جي ضرورت آهي باقي پروجيڪٽ فائلن کان.
اچو ته ٻن شاخن سان وابسته وڻ جو هڪ مثال ڏسو:
اچو ته ان عزم جو تصور ڪريون 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 پروجيڪٽ جي مخزن جو نالو ذخيرو ڪري ٿو.
هن فنڪشن لاء الگورتھم:
ٽريس سي آءِ واپسي ڪوڊز جو جواب ڏئي ٿو، تنهن ڪري ڊيڄاريندڙن جي موجودگي سروس کي ٻڌائي ٿي ته واعدو کي نشانو بڻايو وڃي جيئن غلطين تي مشتمل هجي.
هاڻي اچو ته ڪوڊ جي هن لائن تي هڪ ويجهي نظر رکون:
git diff --name-only origin/HEAD > .pvs-pr.list
حقيقت اها آهي ته Travis CI خودڪار طريقي سان شاخن کي ضم ڪري ٿو جڏهن هڪ پل جي درخواست جو تجزيو ڪندي:
تنهن ڪري اسان تجزيو ڪريون ٿا A4۽ نه B3->A3. ھن خصوصيت جي ڪري، اسان کي فرق سان حساب ڪرڻ جي ضرورت آھي A3، جيڪو بلڪل شاخ جي چوٽي کان آهي بڻ.
هتي هڪ اهم تفصيل باقي آهي - هيڊر فائلن جي انحصار کي ڪيش ڪرڻ مرتب ڪيل ترجمي جي يونٽن تي (*.c، *.cc، *.cpp، وغيره). تجزيي ڪندڙ انهن انحصارن کي ڳڻائي ٿو جڏهن اهو پهريون ڀيرو فائلن جي لسٽ چيڪ ڪرڻ جي موڊ ۾ شروع ڪيو ويو آهي ۽ پوءِ انهن کي .PVS-Studio ڊاريڪٽري ۾ محفوظ ڪري ٿو. Travis CI توهان کي فولڊر کي ڪيش ڪرڻ جي اجازت ڏئي ٿي، تنهنڪري اسان ڊاريڪٽري ڊيٽا کي محفوظ ڪنداسين .PVS-اسٽوڊيو/:
cache:
directories:
- .PVS-Studio/
هن ڪوڊ کي فائل ۾ شامل ڪرڻ جي ضرورت آهي .travis.yml. هي ڊاريڪٽري تجزيي کان پوءِ گڏ ڪيل مختلف ڊيٽا کي ذخيرو ڪري ٿي، جيڪا فائل لسٽ جي تجزيي يا واڌ ويجهه واري تجزيي جي ايندڙ رن کي تيز ڪندي. جيڪڏهن اهو نه ڪيو ويو آهي، پوء تجزيه ڪندڙ اصل ۾ هر وقت سڀني فائلن جو تجزيو ڪندو.
وڏو
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
ھاڻي اچو ته رن ٽيب ڏانھن وڃو (پهرين آئڪن) ۽ ھيٺ ڏنل ڪوڊ کي لاڳاپيل ايڊيٽر فيلڊ ۾ شامل ڪريو:
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 جي برعڪس، اسان کي وضاحت ڪرڻ جي ضرورت ناهي پي وي ايس اسٽوڊيو ڪيشنگ لاءِ، ڇو ته Buddy خودڪار طريقي سان سڀني فائلن کي ايندڙ لانچن لاءِ ڪيش ڪري ٿو. تنهن ڪري، آخري شيء ڇڏي ويو آهي لاگ ان ۽ پاسورڊ محفوظ ڪرڻ لاءِ PVS-Studio in Buddy. تبديلين کي محفوظ ڪرڻ کان پوء، اسان کي پائپ لائن ڏانھن واپس ورتو ويندو. اسان کي اڳتي وڌڻو پوندو متغيرن کي ترتيب ڏيڻ ۽ PVS-Studio لاءِ لاگ ان ۽ ڪيچ شامل ڪرڻ:
ان کان پوء، هڪ نئين پل جي درخواست يا ڪمٽ جي ظاهر ٿيڻ جو جائزو وٺندو. جيڪڏهن هڪ ڪمٽ ۾ غلطيون آهن، دوست هن کي ڇڪڻ جي درخواست واري صفحي تي ظاهر ڪندو.
AppVeyor
AppVeyor سيٽ اپ ڪرڻ Buddy وانگر آهي، ڇاڪاڻ ته سڀ ڪجهه ويب انٽرفيس ۾ ٿئي ٿو ۽ پروجيڪٽ جي مخزن ۾ *.yml فائل شامل ڪرڻ جي ڪا ضرورت ناهي.
اچو ته وڃو سيٽنگون ٽيب ۾ پروجيڪٽ جو جائزو:
اچو ته ھيٺ لھي وڃو ھن صفحي کي ۽ فعال ڪريو ڪيش بچائڻ لاءِ پل جي درخواستون گڏ ڪرڻ لاءِ:
ھاڻي اچو ته ماحولياتي ٽئب ڏانھن وڃو، جتي اسان اسمبلي لاءِ تصوير ۽ ضروري ماحوليات جي وضاحت ڪريون ٿا:
جيڪڏهن توهان پوئين ڀاڱا پڙهيا آهن، ته توهان انهن ٻن متغيرن کان تمام گهڻو واقف آهيو - PVS_KEY и PVS_USERNAME. جيڪڏهن نه، مون کي توهان کي ياد ڏياريو ته اهي PVS-اسٽوڊيو تجزيه ڪندڙ جي لائسنس جي تصديق ڪرڻ لاء ضروري آهن. اسان انهن کي مستقبل ۾ بش اسڪرپٽ ۾ ٻيهر ڏسندا.
هيٺ ڏنل ساڳئي صفحي تي اسان ڪيشنگ لاء فولڊر کي اشارو ڪريون ٿا:
جيڪڏهن اسان ائين نه ڪندا آهيون، اسان هڪ ٻه فائلن جي بدران سڄي پروجيڪٽ جو تجزيو ڪنداسين، پر اسان کي مخصوص فائلن مان آئوٽ حاصل ڪنداسين. تنهن ڪري، اهو ضروري آهي ته صحيح ڊاريڪٽري جو نالو داخل ڪريو.
ھاڻي اھو وقت آھي اسڪرپٽ کي جانچڻ لاءِ. ٽيسٽ ٽيب کوليو ۽ اسڪرپٽ چونڊيو:
توھان کي ھيٺ ڏنل ڪوڊ کي ھن فارم ۾ پيسٽ ڪرڻو پوندو.
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.
جو ذريعو: www.habr.com