GitLab سے محبت کرتے ہیں اور کیڑے سے نفرت کرتے ہیں؟ اپنے سورس کوڈ کے معیار کو بہتر بنانا چاہتے ہیں؟ پھر آپ صحیح جگہ پر آئے ہیں۔ آج ہم آپ کو بتائیں گے کہ انضمام کی درخواستوں کو چیک کرنے کے لیے PVS-Studio C# تجزیہ کار کو کیسے ترتیب دیا جائے۔ ایک تنگاوالا موڈ ہے اور ہر ایک کو پڑھنا خوش ہے۔
ویسے، ہم نے PVS-Studio 7.08 جاری کیا، جس میں ہم نے بہت ساری چیزیں کیں۔
- لینکس اور میکوس کے لیے C# تجزیہ کار؛
- رائڈر کے لیے پلگ ان؛
- نئی فائل لسٹ چیکنگ موڈ۔
فائل لسٹ چیکنگ موڈ
پہلے، کچھ فائلوں کو چیک کرنے کے لیے، تجزیہ کار کو فائلوں کی فہرست کے ساتھ .xml پاس کرنا ضروری تھا۔ لیکن چونکہ یہ بہت آسان نہیں ہے، ہم نے .txt کو منتقل کرنے کی صلاحیت شامل کی ہے، جو زندگی کو بہت آسان بناتی ہے۔
مخصوص فائلوں کو چیک کرنے کے لیے، آپ کو پرچم کی وضاحت کرنی ہوگی۔ --source فائلز (-f) اور فائلوں کی فہرست کے ساتھ .txt منتقل کریں۔ ایسا لگتا ہے:
pvs-studio-dotnet -t path/to/solution.sln -f fileList.txt -o project.json
اگر آپ کمٹ چیکنگ یا پل کی درخواستیں ترتیب دینے میں دلچسپی رکھتے ہیں، تو آپ اس موڈ کا استعمال کرتے ہوئے بھی ایسا کر سکتے ہیں۔ فرق تجزیہ کرنے کے لیے فائلوں کی فہرست حاصل کرنے میں ہوگا اور اس کا انحصار اس بات پر ہوگا کہ آپ کون سے سسٹم استعمال کررہے ہیں۔
انضمام کی درخواست کو چیک کرنے کا اصول
چیک کا بنیادی جوہر اس بات کو یقینی بنانا ہے کہ انضمام کے دوران تجزیہ کار کے ذریعہ پائے جانے والے مسائل اس میں نہیں آتے ہیں۔ ماسٹر شاخ ہم ہر بار پورے پروجیکٹ کا تجزیہ نہیں کرنا چاہتے۔ مزید برآں، شاخوں کو ضم کرتے وقت، ہمارے پاس تبدیل شدہ فائلوں کی فہرست ہوتی ہے۔ لہذا، میں انضمام کی درخواست کی جانچ کو شامل کرنے کا مشورہ دیتا ہوں۔
جامد تجزیہ کار کو لاگو کرنے سے پہلے انضمام کی درخواست کی طرح نظر آتی ہے:
یعنی وہ تمام خرابیاں جو برانچ میں تھیں۔ تبدیلیاں، ماسٹر برانچ میں چلے جائیں گے۔ چونکہ ہم یہ نہیں چاہتے ہیں، ہم تجزیہ شامل کرتے ہیں، اور اب خاکہ اس طرح لگتا ہے:
تجزیہ کرنا تبدیلیاں 2 اور، اگر کوئی غلطیاں نہیں ہیں، تو ہم انضمام کی درخواست کو قبول کرتے ہیں، ورنہ ہم اسے مسترد کر دیتے ہیں۔
ویسے، اگر آپ C/C++ کے لیے کمٹ اور پل کی درخواستوں کا تجزیہ کرنے میں دلچسپی رکھتے ہیں، تو آپ اس کے بارے میں پڑھ سکتے ہیں۔
GitLab
اس سے پہلے کہ آپ انضمام کی درخواستوں کا تجزیہ شروع کریں، آپ کو اپنے پروجیکٹ کو رجسٹر کرنے اور اپ لوڈ کرنے کی ضرورت ہے۔ اگر آپ نہیں جانتے کہ یہ کیسے کریں، تو میں تجویز کرتا ہوں۔
نوٹ. ذیل میں بیان کردہ ماحول کو ترتیب دینے کا طریقہ ممکنہ طریقوں میں سے ایک ہے۔ مقصد تجزیہ کرنے اور تجزیہ کار کو شروع کرنے کے لیے ضروری ماحول کو ترتیب دینے کے لیے اقدامات دکھانا ہے۔ شاید آپ کے معاملے میں ماحول کی تیاری کے مراحل (ذخیروں کو شامل کرنا، تجزیہ کار انسٹال کرنا) اور تجزیہ کو الگ کرنا زیادہ بہتر ہوگا: مثال کے طور پر، ضروری ماحول کے ساتھ Docker امیجز کی تیاری اور ان کا استعمال، یا کوئی اور طریقہ۔
بہتر طور پر سمجھنے کے لیے کہ اب کیا ہوگا، میں مندرجہ ذیل خاکہ کو دیکھنے کا مشورہ دیتا ہوں:
تجزیہ کار کو کام کرنے کے لیے .NET Core SDK 3 کی ضرورت ہوتی ہے، اس لیے تجزیہ کار کو انسٹال کرنے سے پہلے آپ کو مائیکروسافٹ ریپوزٹریز کو شامل کرنے کی ضرورت ہے جہاں سے تجزیہ کار کے لیے درکار انحصار انسٹال کیے جائیں گے۔ مختلف لینکس کی تقسیم کے لیے مائیکروسافٹ کے ذخیرے شامل کرنا
پیکیج مینیجر کے ذریعے PVS-Studio انسٹال کرنے کے لیے، آپ کو PVS-Studio ریپوزٹریز کو بھی شامل کرنے کی ضرورت ہوگی۔ مختلف ڈسٹری بیوشنز کے لیے ذخیروں کو شامل کرنا مزید تفصیل میں بیان کیا گیا ہے۔
تجزیہ کار کو کام کرنے کے لیے لائسنس کلید کی ضرورت ہوتی ہے۔ آپ پر آزمائشی لائسنس حاصل کر سکتے ہیں۔
نوٹ. براہ کرم نوٹ کریں کہ بیان کردہ طریقہ کار کے لیے (انضمام کی درخواستوں کا تجزیہ) ایک انٹرپرائز لائسنس کی ضرورت ہے۔ لہذا، اگر آپ اس طرز عمل کو آزمانا چاہتے ہیں، تو "پیغام" فیلڈ میں یہ بتانا نہ بھولیں کہ آپ کو انٹرپرائز لائسنس کی ضرورت ہے۔
اگر انضمام کی درخواست ہوتی ہے، تو ہمیں صرف تبدیل شدہ فائلوں کی فہرست کا تجزیہ کرنے کی ضرورت ہے، ورنہ ہم تمام فائلوں کا تجزیہ کرتے ہیں۔ تجزیہ کے بعد، ہمیں لاگز کو اس فارمیٹ میں تبدیل کرنے کی ضرورت ہے جس کی ہمیں ضرورت ہے۔
اب، کام کا الگورتھم آپ کی آنکھوں کے سامنے رکھتے ہوئے، آپ اسکرپٹ لکھنے کی طرف بڑھ سکتے ہیں۔ ایسا کرنے کے لیے، آپ کو فائل کو تبدیل کرنے کی ضرورت ہے۔ gitlab-ci.yml یا، اگر یہ موجود نہیں ہے، تو اسے بنائیں۔ اسے بنانے کے لیے، آپ کو اپنے پروجیکٹ کے نام -> پر کلک کرنے کی ضرورت ہے۔ CI/CD سیٹ اپ کریں۔.
اب ہم اسکرپٹ لکھنے کے لیے تیار ہیں۔ آئیے پہلے کوڈ لکھیں جو تجزیہ کار کو انسٹال کرے گا اور لائسنس درج کرے گا:
before_script:
- apt-get update && apt-get -y install wget gnupg
- apt-get -y install git
- wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
- dpkg -i packages-microsoft-prod.deb
- apt-get update
- apt-get install apt-transport-https
- apt-get update
- 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-dotnet
- pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
- dotnet restore "$CI_PROJECT_DIR"/Test/Test.sln
چونکہ دیگر تمام اسکرپٹ سے پہلے انسٹالیشن اور ایکٹیویشن ہونا ضروری ہے، اس لیے ہم ایک خاص لیبل استعمال کرتے ہیں۔ پہلے_اسکرپٹ. میں اس ٹکڑے کی تھوڑی سی وضاحت کرتا ہوں۔
تجزیہ کار انسٹال کرنے کی تیاری:
- wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
- dpkg -i packages-microsoft-prod.deb
- apt-get update
- apt-get install apt-transport-https
- apt-get update
PVS-Studio ذخیروں اور تجزیہ کار کو شامل کرنا:
- 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-dotnet
لائسنس ایکٹیویشن:
- pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
$PVS_NAME - صارف نام۔
$PVS_KEY - مصنوعہ کلید.
پراجیکٹ انحصار کی وصولی جہاں $CI_PROJECT_DIR - پروجیکٹ ڈائرکٹری کا مکمل راستہ:
- dotnet restore "$CI_PROJECT_DIR"/Path/To/Solution.sln
درست تجزیے کے لیے، پروجیکٹ کو کامیابی کے ساتھ بنایا جانا چاہیے، اور اس کے انحصار کو بحال کیا جانا چاہیے (مثال کے طور پر، ضروری NuGet پیکجز کو ڈاؤن لوڈ کرنا چاہیے)۔
آپ کلک کر کے لائسنس کی معلومات پر مشتمل ماحولیاتی متغیرات سیٹ کر سکتے ہیں۔ مقرر، اور بعد میں CI/CD.
کھلنے والی ونڈو میں، آئٹم تلاش کریں۔ متغیرات، دائیں طرف کے بٹن پر کلک کریں۔ توسیع اور متغیرات شامل کریں۔ نتیجہ اس طرح نظر آنا چاہئے:
اب آپ تجزیہ کی طرف بڑھ سکتے ہیں۔ پہلے، آئیے مکمل تجزیہ کے لیے ایک اسکرپٹ شامل کریں۔ جھنڈے کو -t ہم پرچم کے حل کے راستے کو منتقل کرتے ہیں -o فائل کا راستہ لکھیں جس میں تجزیہ کے نتائج لکھے جائیں گے۔ ہم واپسی کوڈ میں بھی دلچسپی رکھتے ہیں۔ اس صورت میں، ہم آپریشن کو روکنے میں دلچسپی رکھتے ہیں جب ریٹرن کوڈ میں یہ معلومات موجود ہوں کہ تجزیہ کے دوران انتباہات جاری کیے گئے تھے۔ یہ ٹکڑا ایسا لگتا ہے:
job:
script:
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -o
PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
ریٹرن کوڈز بٹ ماسک کے اصول پر کام کرتے ہیں۔ مثال کے طور پر، اگر تجزیہ کے نتیجے میں انتباہات جاری کیے گئے تھے، تو واپسی کوڈ 8 کے برابر ہوگا۔ اگر لائسنس ایک ماہ کے اندر ختم ہوجاتا ہے، تو واپسی کوڈ 4 کے برابر ہوگا۔ اگر تجزیہ کے دوران غلطیوں کا پتہ چلا، اور لائسنس کی میعاد ایک ماہ کے اندر ختم ہو جاتی ہے، کوڈ کی واپسی، دونوں قدریں لکھی جائیں گی: نمبرز کو ایک ساتھ شامل کریں اور حتمی واپسی کوڈ حاصل کریں - 8+4=12۔ اس طرح، متعلقہ بٹس کو چیک کر کے، تجزیہ کے دوران مختلف ریاستوں کے بارے میں معلومات حاصل کی جا سکتی ہیں۔ ریٹرن کوڈز کو دستاویز کے "pvs-studio-dotnet (Linux/macOS) ریٹرن کوڈز" سیکشن میں مزید تفصیل سے بیان کیا گیا ہے۔
اس صورت میں، ہم تمام واپسی کوڈز میں دلچسپی رکھتے ہیں جہاں 8 ظاہر ہوتا ہے۔
- exit_code=$((($exit_code & 8)/8))
ہمیں 1 موصول ہوگا جب واپسی کوڈ میں اس نمبر کا تھوڑا سا حصہ ہوگا جس میں ہماری دلچسپی ہے، بصورت دیگر ہمیں 0 موصول ہوگا۔
یہ انضمام کی درخواست کے تجزیہ کو شامل کرنے کا وقت ہے۔ اس سے پہلے کہ ہم ایسا کریں، آئیے اسکرپٹ کے لیے ایک جگہ تیار کریں۔ ہمیں اس پر عمل درآمد کرنے کی ضرورت ہے جب انضمام کی درخواست ہوتی ہے۔ ایسا لگتا ہے:
merge:
script:
only:
- merge_requests
آئیے اسکرپٹ ہی کی طرف چلتے ہیں۔ مجھے اس حقیقت کا سامنا کرنا پڑا کہ ورچوئل مشین کے بارے میں کچھ نہیں معلوم اصل / ماسٹر. تو آئیے اس کی تھوڑی مدد کریں:
- git fetch origin
اب ہم شاخوں کے درمیان فرق حاصل کرتے ہیں اور نتیجہ کو محفوظ کرتے ہیں۔ TXT فائل:
- git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
Где $CI_COMMIT_SHA - آخری کمٹ کی ہیش۔
اگلا، ہم پرچم کا استعمال کرتے ہوئے فائلوں کی فہرست کا تجزیہ شروع کرتے ہیں -f. ہم پہلے موصول ہونے والی .txt فائل کو اس میں منتقل کرتے ہیں۔ ٹھیک ہے، مکمل تجزیہ کے ساتھ مشابہت کے ساتھ، ہم واپسی کوڈز کو دیکھتے ہیں:
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
انضمام کی درخواست کو چیک کرنے کے لیے مکمل اسکرپٹ اس طرح نظر آئے گا:
merge:
script:
- git fetch origin
- git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
only:
- merge_requests
تمام اسکرپٹس پر کارروائی کے بعد لاگ کنورژن شامل کرنا باقی ہے۔ ہم لیبل استعمال کرتے ہیں۔ after_script اور افادیت پلگ کنورٹر:
after_script:
- plog-converter -t html -o eLog ./PVS-Studio.json
افادیت۔
ویسے، اگر آپ IDE سے مقامی طور پر .json رپورٹس کے ساتھ آسانی سے کام کرنا چاہتے ہیں، تو میں تجویز کرتا ہوں کہ ہماری
سہولت کے لیے، یہ یہاں ہے۔ gitlab-ci.yml مکمل میں:
image: debian
before_script:
- apt-get update && apt-get -y install wget gnupg
- apt-get -y install git
- wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
- dpkg -i packages-microsoft-prod.deb
- apt-get update
- apt-get install apt-transport-https
- apt-get update
- 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-dotnet
- pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
- dotnet restore "$CI_PROJECT_DIR"/Test/Test.sln
merge:
script:
- git fetch origin
- git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
only:
- merge_requests
job:
script:
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -o
PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
after_script:
- plog-converter -t html -o eLog ./PVS-Studio.json
ایک بار جب آپ فائل میں سب کچھ شامل کر لیں تو، پر کلک کریں۔ تبدیلیوں کا عہد کریں۔. یہ دیکھنے کے لیے کہ سب کچھ درست ہے، پر جائیں۔ CI / CD -> پائپ لائنز -> چل رہا ہے. ایک ورچوئل مشین ونڈو کھلے گی، جس کے آخر میں درج ذیل ہونا چاہیے:
دیکھا کام کامیاب ہو گیا۔ - کامیابی، سب کچھ ٹھیک ہے. اب آپ جانچ سکتے ہیں کہ آپ نے کیا کیا ہے۔
کام کی مثالیں۔
کام کی مثال کے لیے، آئیے ایک سادہ پروجیکٹ بناتے ہیں (میں ماسٹر) جس میں کئی فائلیں ہوں گی۔ اس کے بعد، دوسری برانچ میں ہم صرف ایک فائل کو تبدیل کریں گے اور انضمام کی درخواست کرنے کی کوشش کریں گے۔
آئیے دو صورتوں پر غور کریں: جب ترمیم شدہ فائل میں کوئی خرابی ہے اور کب نہیں ہے۔ سب سے پہلے، غلطی کے ساتھ ایک مثال۔
ہم کہتے ہیں کہ ماسٹر برانچ میں ایک فائل ہے۔ Program.cs، جس میں غلطیاں نہیں ہیں، لیکن ایک اور برانچ میں ڈویلپر نے غلط کوڈ شامل کیا ہے اور انضمام کی درخواست کرنا چاہتا ہے۔ اس نے کس قسم کی غلطی کی یہ اتنا اہم نہیں ہے، اہم بات یہ ہے کہ یہ موجود ہے۔ مثال کے طور پر، آپریٹر بھول گیا پھینک (جی ہاں،
void MyAwesomeMethod(String name)
{
if (name == null)
new ArgumentNullException(....);
// do something
....
}
آئیے ایک غلطی کے ساتھ ایک مثال کا تجزیہ کرنے کا نتیجہ دیکھتے ہیں۔ یہ بھی یقینی بنانے کے لیے کہ صرف ایک فائل کو پارس کیا گیا تھا، میں نے جھنڈا شامل کیا۔ -r pvs-studio-dotnet لانچ لائن پر:
ہم دیکھتے ہیں کہ تجزیہ کار کو ایک خامی ملی اور اس نے شاخوں کو ضم کرنے کی اجازت نہیں دی۔
آئیے بغیر کسی غلطی کے مثال کو چیک کریں۔ کوڈ کو درست کرنا:
void MyAwesomeMethod(String name)
{
if (name == null)
throw new ArgumentNullException(....);
// do something
....
}
ضم کرنے کی درخواست کے تجزیہ کے نتائج:
جیسا کہ ہم دیکھ سکتے ہیں، کوئی غلطیاں نہیں پائی گئیں، اور ٹاسک پر عمل درآمد کامیاب رہا، جسے ہم چیک کرنا چاہتے تھے۔
حاصل يہ ہوا
شاخوں کو ضم کرنے سے پہلے خراب کوڈ کو ختم کرنا بہت آسان اور خوشگوار ہے۔ لہذا اگر آپ CI/CD استعمال کر رہے ہیں تو چیک کرنے کے لیے جامد تجزیہ کار کو سرایت کرنے کی کوشش کریں۔ اس کے علاوہ، یہ بہت آسان ہے.
آپ کی توجہ کے لئے آپ کا شکریہ.
اگر آپ انگریزی بولنے والے سامعین کے ساتھ اس مضمون کا اشتراک کرنا چاہتے ہیں، تو براہ کرم ترجمہ کا لنک استعمال کریں: نیکولے میرونوف۔
ماخذ: www.habr.com