Falanqaynta ballanqaadyada iyo soo jiidashada codsiyada Travis CI, Buddy iyo AppVeyor iyadoo la adeegsanayo PVS-Studio

Falanqaynta ballanqaadyada iyo soo jiidashada codsiyada Travis CI, Buddy iyo AppVeyor iyadoo la adeegsanayo PVS-Studio
Falanqeeyaha PVS-Studio ee luqadaha C iyo C++ ee Linux iyo macOS, laga bilaabo nooca 7.04, ikhtiyaar tijaabo ayaa u muuqday si loo hubiyo liiska faylalka la cayimay. Isticmaalka qaabka cusub, waxaad u habayn kartaa falanqeeyayaasha si aad u hubiso ballanqaadyada oo aad u jiido codsiyada. Maqaalkani wuxuu kuu sheegi doonaa sida loo dejiyo hubinta liiska faylasha la beddelay ee mashruuca GitHub ee nidaamyada caanka ah ee CI (is-dhexgalka joogtada ah) sida Travis CI, Buddy iyo AppVeyor.

Habka hubinta liiska faylka

PVS-Studio waa qalab lagu garto khaladaadka iyo dayacanka iman kara ee koodhka isha ee barnaamijyada ku qoran C, C++, C # iyo Java. Wuxuu ku shaqeeyaa nidaamyada 64-bit ee Windows, Linux iyo macOS.

Nooca PVS-Studio 7.04 ee Linux iyo macOS, qaab lagu hubinayo liiska faylalka isha ayaa soo muuqday. Tani waxay u shaqeysaa mashaariicda nidaamkooda dhismuhu kuu ogolaanayaa inaad abuurto fayl soo ururin_commands.json. Waxa loo baahan yahay falanqeeyaha inuu soo saaro macluumaadka ku saabsan ururinta faylasha la cayimay. Haddii nidaamkaaga dhismuhu aanu taageerin abuurista faylka compile_commands.json, waxaad isku dayi kartaa inaad abuurto faylkan adoo isticmaalaya utility Bear.

Sidoo kale, qaabka hubinta liiska faylka waxaa la isticmaali karaa iyada oo ay weheliso raadraaca raadraaca soo-saareyaasha (pvs-studio-analyzer trace). Si tan loo sameeyo, waxaad u baahan doontaa inaad marka hore sameyso dhismo dhammaystiran oo mashruuca ah oo aad la socoto si uu falanqeeyuhu u ururiyo macluumaad dhammaystiran oo ku saabsan cabbirrada la isku duba ridey ee dhammaan faylasha la hubiyay.

Si kastaba ha noqotee, doorashadani waxay leedahay dib u dhac weyn - waxaad u baahan doontaa inaad sameyso raad dhis buuxa oo mashruuca oo dhan mar kasta oo aad maamusho, taas oo lafteeda ka soo horjeeda fikradda ah in si dhakhso ah loo hubiyo ballan-qaadka. Ama, haddii aad kaydiso natiijada raadraaca lafteeda, socodsiinta soo socota ee falanqeeyuhu waxay noqon kartaa mid aan dhammaystirnayn haddii qaab dhismeedka ku-tiirsanaanta faylasha isha isbeddelo ka dib raadadka (tusaale, #include cusub ayaa lagu daraa mid ka mid ah faylasha isha).

Sidaa darteed, kuma talineyno isticmaalka habka hubinta liiska feylka oo leh galka raadraaca si aad u hubiso samaynta ama jiid codsiyada. Haddii aad samayn karto dhismo kordhin markaad hubinayso ballan, tixgeli inaad isticmaasho qaabka falanqayn dheeraad ah.

Liiska faylasha isha ee falanqaynta waxaa lagu kaydiyaa faylka qoraalka waxaana loo gudbiyaa falanqeeyayaasha iyadoo la adeegsanayo cabbirka -S:

pvs-studio-analyzer analyze ... -f build/compile_commands.json -S check-list.txt

Faylkaani wuxuu qeexayaa dariiqooyin qaraabo ah ama sax ah oo loo maro faylasha, iyo fayl kasta oo cusub waa inuu ku jiraa khad cusub. Waa la aqbali karaa in aan la cayimin oo keliya magacyada faylka falanqaynta, laakiin sidoo kale qoraallo kala duwan. Falanqeeyaha ayaa arki doona in kani aanu ahayn fayl oo uu iska indhatiro khadka. Tani waxay faa'iido u yeelan kartaa faallo ka bixinta haddii faylasha lagu qeexay gacanta. Si kastaba ha ahaatee, inta badan liiska faylasha ayaa la soo saari doonaa inta lagu jiro falanqaynta CI, tusaale ahaan, kuwani waxay noqon karaan faylal ka yimid codsi go'aan ama jiid.

Hadda, adigoo isticmaalaya qaabkan, waxaad si dhakhso ah u hubin kartaa kood cusub ka hor inta uusan gelin laanta horumarinta ee ugu weyn. Si loo hubiyo in nidaamka sawirku ka jawaabo digniinaha falanqeeyayaasha, utility rog-beddele calanka lagu daray --tilmaan- digniino:

plog-converter ... --indicate-warnings ... -o /path/to/report.tasks ...

Calankan, beddeliyuhu wuxuu soo celin doonaa koodka aan eber ahayn haddii ay jiraan digniino ku jira warbixinta falanqaynta. Adigoo isticmaalaya summada soo celinta, waxaad xannibi kartaa gogol-xaadhaad, samee, ama jiid codsi, iyo warbixinta falanqeeyaha ayaa la soo bandhigi karaa, la wadaagi karaa, ama lagu diri karaa iimayl.

Ogow. Marka ugu horeysa ee aad bilowdo falanqaynta liiska faylasha, mashruuca oo dhan waa la falanqeyn doonaa, sababtoo ah Falanqeeyaha wuxuu u baahan yahay inuu soo saaro fayl ku tiirsanaanta faylalka ilaha mashruuca ee faylalka madaxa. Tani waa sifo lagu falanqeynayo faylasha C iyo C++ Mustaqbalka, faylka ku-tiirsanaanta waa la kaydin karaa waxaana si toos ah u cusbooneysiin doona falanqeeyaha. Faa'iidada hubinta waxay gashaa marka la isticmaalayo habka hubinta liiska faylka marka loo eego isticmaalka habka falanqaynta kordhinta waa inaad kaliya u baahan tahay inaad kaydiso faylkaas oo aadan u baahnayn faylasha shayga.

Mabaadi'da guud ee falanqaynta codsiga jiidista

Falanqaynta mashruuca oo dhan waxay qaadataa wakhti badan, markaa waxay macno samaynaysaa in la hubiyo qayb gaar ah oo keliya. Dhibaatadu waxay tahay inaad u baahan tahay inaad kala soocdo faylasha cusub iyo inta kale ee faylasha mashruuca.

Bal aynu tusaale u soo qaadano geed goglan oo leh laba laamood.

Falanqaynta ballanqaadyada iyo soo jiidashada codsiyada Travis CI, Buddy iyo AppVeyor iyadoo la adeegsanayo PVS-Studio

Aynu qiyaasno in go'aankaas A1 ka kooban tiro aad u badan oo kood ah oo mar hore la hubiyay. Wax yar ka hor ayaanu laan ka samaynay ballan-qaadkii A1 oo bedelay qaar ka mid ah faylasha.

Waxaad, dabcan, dareentay taas ka dib A1 laba kale oo kale ayaa dhacay, laakiin kuwani waxay sidoo kale ahaayeen isku-darka laamaha kale, sababtoo ah ma ballanqaadno Master. Haddana waxaa la gaaray waqtigii dib u habeyn diyaar. Taasi waa sababta codsi jiidis ah oo ku saabsan midaynta u soo baxay B3 ΠΈ A3.

Dabcan, way suurtagal noqon lahayd in la hubiyo dhammaan natiijada isku-darkooda, laakiin tani waxay noqon doontaa waqti aad u badan oo aan cudurdaar lahayn, maadaama dhowr faylal oo keliya la beddelay. Sidaa darteed, waxaa aad u fiican in la falanqeeyo kaliya kuwa la beddelay.

Si arrintan loo sameeyo, waxaan helnaa farqiga u dhexeeya laamaha, isagoo ku jira madaxa laanta kaas oo aan rabno inaan ku biirno sayid:

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

$MERGE_BASE Waxaan si faahfaahsan u eegi doonaa gadaal. Xaqiiqdu waxay tahay in adeeg kasta oo CI uusan bixinaynin macluumaadka lagama maarmaanka ah ee ku saabsan kaydka xogta ee isku-dhafka, markaa mar kasta waa inaad la timaadaa habab cusub oo aad ku heli karto xogtan. Tan waxaa si faahfaahsan loogu sharxi doonaa hoos mid kasta oo ka mid ah adeegyada shabakadda ee lagu sharraxay.

Markaa, waxaan helnay farqiga u dhexeeya laamaha, ama halkii, liiska magacyada faylka la beddelay. Hadda waxaan u baahanahay inaan siino faylka .pvs-pr.liiska (wax soo saarka sare ayaan u wareejinay) falanqaynta:

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

Falanqaynta ka dib, waxaan u baahanahay inaan u bedelno faylka log (PVS-Studio.log) qaab sahlan oo loo akhriyi karo:

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

Amarkani wuxuu taxayaa khaladaadka ku jira stderr (soo saarida fariinta qaladka caadiga ah).

Kaliya hadda waxaan u baahanahay inaan kaliya muujin khaladaadka, laakiin sidoo kale waxaan u sheegnaa adeegeena kulanka iyo tijaabinta jiritaanka dhibaatooyinka. Ujeedadaas awgeed, calan ayaa lagu daray beddeliyaha -W (--tilmaan- digniino). Haddii ay jirto ugu yaraan hal digniin falanqeeye, koodhka soo celinta utility rog-beddele waxay isu beddeli doontaa 2, taas oo iyaduna ku wargelin doonta adeegga CI ee ku saabsan jiritaanka khaladaadka suurtagalka ah ee faylasha codsiga jiidista.

Travis CI

Qaabeynta waxaa loo sameeyay sidii fayl ahaan .travis.yml. Si ku habboon, waxaan kugula talinayaa inaad wax walba geliso qoraal bash gaar ah oo leh hawlo looga yeeri doono faylka .travis.yml (bash script_name.sh function_name).

Waxaan ku dari doonaa koodka lagama maarmaanka ah qoraalka bash, habkan waxaan ku heli doonaa shaqeyn dheeraad ah. Qaybta rakibi aan qorno sidan soo socota:

install:
  - bash .travis.sh travis_install

Haddii aad hayso wax tilmaamo ah, waxaad u wareejin kartaa qoraalka, ka saara jilayaasha.

Aan furno faylka .travis.sh oo ku dar goobta falanqaynta shaqada 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 
}

Hadda aan ku darno qaybta script socodsii falanqaynta:

script:
  - bash .travis.sh travis_script

Iyo qoraalka 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
}

Xeerkani wuxuu u baahan yahay in la maamulo ka dib marka la dhiso mashruuca, tusaale ahaan, haddii aad dhisatay CMake:

travis_script() {
  CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
  cmake $CMAKE_ARGS CMakeLists.txt
  make -j8
}

Waxay noqon doontaa sidatan:

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
}

Waxay u badan tahay inaad horeba u dareentay doorsoomayaasha deegaanka $TRAVIS_PULL_REQUEST ΠΈ $TRAVIS_BRANCH. Travis CI waxay si madax banaan ugu dhawaaqdaa:

  • $TRAVIS_PULL_REQUEST kaydiyaa lambarka codsiga jiid ama been ah, haddii ay tani tahay laan caadi ah;
  • $TRAVIS_REPO_SLUG kaydiyaa magaca kaydka mashruuca.

Algorithm ee shaqadan:

Falanqaynta ballanqaadyada iyo soo jiidashada codsiyada Travis CI, Buddy iyo AppVeyor iyadoo la adeegsanayo PVS-Studio
Travis CI waxay ka jawaabtaa koodka soo celinta, markaa joogitaanka digniinaha waxay u sheegi doontaa adeega inay calaamadeeyaan gafka inay ku jiraan khaladaad.

Haddaba aan si qoto dheer u eegno line-ka koodka:

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

Xaqiiqdu waxay tahay in Travis CI ay si toos ah ugu biirto laamaha iyadoo la falanqeynayo codsiga jiidista:

Falanqaynta ballanqaadyada iyo soo jiidashada codsiyada Travis CI, Buddy iyo AppVeyor iyadoo la adeegsanayo PVS-Studio
Sidaa darteed waanu taxliilinaynaa A4iyo ma B3->A3. Sababtan awgeed, waxaan u baahanahay inaan ku xisaabino faraqa u dhexeeya A3, kaas oo si sax ah ugu sarreeya laanta ka asal ahaan.

Waxa hadhay hal tafaasiil muhiim ah - kaydinta ku tiirsanaanta faylalka madaxa ee cutubyada turjumaada la soo ururiyey (*.c, *.cc, *.cpp, iwm.). Falanqeeyuhu wuxuu xisaabiyaa ku-tiirsanaantan marka ugu horraysa lagu bilaabo habka hubinta liiska faylalka ka dibna wuxuu ku kaydiyaa .PVS-Studio tusaha. Travis CI wuxuu kuu ogolaanayaa inaad kaydiso galka, markaa waxaanu kaydin doonaa xogta hagaha .PVS-Studio/:

cache:
  directories:
    - .PVS-Studio/

Koodhkan wuxuu u baahan yahay in lagu daro faylka .travis.yml. Hagahani waxa uu kaydiyaa xogo kala duwan oo la ururiyay kadib falanqaynta, taas oo si weyn u dadajin doonta socodsiinta xiga ee falanqaynta liiska faylka ama falanqaynta kordhinta. Haddii tan aan la samayn, markaa falanqeeyuhu wuxuu si dhab ah u falanqeynayaa dhammaan faylasha mar kasta.

Buddy

Sida Travis CI, Buddy waxay bixisaa awooda si toos ah loo dhiso oo loo tijaabiyo mashaariicda lagu kaydiyay GitHub. Si ka duwan Travis CI, waxaa lagu habeeyay interface-ka shabakadda (taageerada bash waa la heli karaa), markaa looma baahna in lagu kaydiyo faylasha qaabeynta mashruuca.

Ugu horreyntii, waxaan u baahannahay inaan ku darno ficil cusub khadka kulanka:

Falanqaynta ballanqaadyada iyo soo jiidashada codsiyada Travis CI, Buddy iyo AppVeyor iyadoo la adeegsanayo PVS-Studio
Aynu tilmaanno isku-dubaridihii loo isticmaalay dhisidda mashruuca. U fiirso weelka xidhidhka ee lagu rakibay falkan. Tusaale ahaan, waxaa jira weel gaar ah oo loogu talagalay GCC:

Falanqaynta ballanqaadyada iyo soo jiidashada codsiyada Travis CI, Buddy iyo AppVeyor iyadoo la adeegsanayo PVS-Studio
Hadda aan rakibno PVS-Studio iyo adeegyada lagama maarmaanka ah:

Falanqaynta ballanqaadyada iyo soo jiidashada codsiyada Travis CI, Buddy iyo AppVeyor iyadoo la adeegsanayo PVS-Studio
Aan ku darno sadarradan soo socda tifaftiraha:

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

Hadda aan tagno Run tab (astaanta koowaad) oo aan ku darno koodka soo socda goobta tafatiraha u dhigma:

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

Haddii aad akhrido qaybta Travs-CI, markaa koodhkani waa horeba kuu yaqaan, si kastaba ha ahaatee, hadda waxaa jira marxalad cusub:

Falanqaynta ballanqaadyada iyo soo jiidashada codsiyada Travis CI, Buddy iyo AppVeyor iyadoo la adeegsanayo PVS-Studio
Xaqiiqdu waxay tahay, hadda ma falanqeyno natiijada isku darka, laakiin MADAXA laanta ka soo jiidashada codsiga:

Falanqaynta ballanqaadyada iyo soo jiidashada codsiyada Travis CI, Buddy iyo AppVeyor iyadoo la adeegsanayo PVS-Studio
Markaa waxaan ku jirnaa ballan shuruudeed B3 waxaana loo baahan yahay in aan farqiga ka helno 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

Si loo go'aamiyo A3 Aynu isticmaalno GitHub API:

https://api.github.com/repos/${USERNAME}/${REPO}/pulls/${PULL_REQUEST_ID}

Waxaan isticmaalnay doorsoomayaasha soo socda ee Buddy uu bixiyo:

  • $BUDDY_EXECUTION_PULL_REQEUST_NO - jiid lambarka codsiga;
  • $BUDDY_REPO_SLUG - isku darka magaca isticmaalaha iyo kaydka (tusaale max/tijaabo).

Hadda aynu kaydinno isbeddellada annagoo adeegsanayna badhanka hoose oo aynu awoodno falanqaynta codsiga jiidista:

Falanqaynta ballanqaadyada iyo soo jiidashada codsiyada Travis CI, Buddy iyo AppVeyor iyadoo la adeegsanayo PVS-Studio
Si ka duwan Travis CI, uma baahnid inaan sheegno .pvs-studio kaydinta, maadaama Buddy si otomaatig ah u kaydinayso dhammaan faylasha bilawga xiga. Sidaa darteed, waxa ugu dambeeya ee hadhay waa in la kaydiyo galitaanka iyo erayga sirta ah ee PVS-Studio ee Buddy. Kadib badbaadinta isbeddellada, waxa dib naloogu celin doonaa Pipeline. Waxaan u baahanahay inaan u gudubno sameynta doorsoomayaasha oo aan ku darno galitaanka iyo furaha PVS-Studio:

Falanqaynta ballanqaadyada iyo soo jiidashada codsiyada Travis CI, Buddy iyo AppVeyor iyadoo la adeegsanayo PVS-Studio
Taas ka dib, muuqaalka codsi jiidis cusub ama ballanqaad ayaa kicin doona dib u eegista. Haddii gafku ka kooban yahay khaladaad, Buddy ayaa tan ku tilmaami doona bogga codsiga jiidista.

AppVeyor

Dejinta AppVeyor waxay la mid tahay Buddy, maadaama wax walba ay ku dhacaan interface interface oo aan loo baahnayn in lagu daro faylka * .yml kaydka mashruuca.

Aan tagno Settings tab ee dulmarka mashruuca:

Falanqaynta ballanqaadyada iyo soo jiidashada codsiyada Travis CI, Buddy iyo AppVeyor iyadoo la adeegsanayo PVS-Studio
Aan hoos u rogno boggan oo aan awoodno kaydinta kaydinta si loo ururiyo codsiyada jiidista:

Falanqaynta ballanqaadyada iyo soo jiidashada codsiyada Travis CI, Buddy iyo AppVeyor iyadoo la adeegsanayo PVS-Studio
Hadda aan tagno tab deegaanka, halkaas oo aan ku qeexno sawirka isu-ururinta iyo doorsoomayaasha deegaanka ee lagama maarmaanka ah:

Falanqaynta ballanqaadyada iyo soo jiidashada codsiyada Travis CI, Buddy iyo AppVeyor iyadoo la adeegsanayo PVS-Studio
Haddii aad akhriday qaybihii hore, aad ayaad u taqaan labadan doorsoome - PVS_KEY ΠΈ PVS_USERNAME. Haddii kale, aan ku xasuusiyo inay lagama maarmaan u yihiin xaqiijinta shatiga falanqeeyaha PVS-Studio. Waxaan mar kale ku arki doonnaa qoraallada Bash mustaqbalka.

Isla bogga hoose waxaan ku tusinaa galka kaydinta:

Falanqaynta ballanqaadyada iyo soo jiidashada codsiyada Travis CI, Buddy iyo AppVeyor iyadoo la adeegsanayo PVS-Studio
Haddii aynaan tan samayn, waxaanu falanqeyn doonaa mashruuca oo dhan halkii laga heli lahaa dhowr faylal, laakiin waxaan ka heli doonaa wax soo saarka faylasha la cayimay. Sidaa darteed, waa muhiim inaad geliso magaca buugga saxda ah.

Hadda waa waqtigii qoraalka la tijaabin lahaa. Fur tab imtixaanada oo dooro Script:

Falanqaynta ballanqaadyada iyo soo jiidashada codsiyada Travis CI, Buddy iyo AppVeyor iyadoo la adeegsanayo PVS-Studio
Waxaad u baahan tahay inaad ku dhejiso summada soo socota foomkan:

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

Aynu fiiro gaar ah u yeelano qaybta soo socota ee koodka:

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

Hawsha gaarka ah ee qiimaha amarka pwd ee doorsoome kaas oo kaydiya qiimahan caadiga ah wuxuu u muuqdaa mid qariib ah jaleecada hore, si kastaba ha ahaatee, wax walba hadda waan sharxi doonaa.

Intii aan dejinayay falanqaynta gudaha AppVeyor, waxaan la kulmay habdhaqan aad u yaab badan oo falanqeeyaha ah. Dhinaca kale, wax walba si sax ah ayey u shaqeeyeen, laakiin falanqayntu ma bilaaban. Waqti badan ayaan ku qaatay inaan ogaano inaan ku jirno /home/appveyor/projects/testcalc/ directory, iyo falanqeeyuhu wuxuu hubaa inaan ku jirno /opt/appveyor/build-agent/. Kadib waxaan gartay in doorsoomaha $PWD uu been sheegayo. Sababtan awgeed, waxaan gacanta ku cusbooneysiiyay qiimaheeda ka hor intaanan bilaabin falanqaynta.

Kadibna wax walba waa sidii hore:

Falanqaynta ballanqaadyada iyo soo jiidashada codsiyada Travis CI, Buddy iyo AppVeyor iyadoo la adeegsanayo PVS-Studio
Hadda ka fiirso jajabkan soo socda:

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"`

Halkaa waxa aynu ku helaynaa faraqa u dhexeeya laamaha codsiga jiidista lagu dhawaaqo. Si tan loo sameeyo waxaan u baahanahay doorsoomayaasha deegaanka:

  • $APPVEYOR_PULL_REQUEST_NUMBER β€” jiid lambarka codsiga;
  • $APPVEYOR_REPO_NAME - magaca isticmaalaha iyo goobta mashruuca.

gunaanad

Dabcan, ma aynaan tixgelin dhammaan adeegyada isdhexgalka joogtada ah ee suurtagalka ah, si kastaba ha ahaatee, dhammaantood waxay leeyihiin waxyaabo gaar ah oo isku mid ah midba midka kale. Marka laga reebo kaydinta, adeeg kastaa wuxuu sameeyaa "baaskiil" u gaar ah, markaa wax walbaa mar walba way ka duwan yihiin.

Meel, sida Travis-CI, dhowr xariiq oo kood ah iyo kaydintu waxay u shaqeeyaan si aan cillad lahayn; meel, sida AppVeyor, kaliya waxaad u baahan tahay inaad ku qeexdo galka goobaha; laakiin meel aad u baahan tahay inaad abuurto furayaal gaar ah oo isku day inaad ku qanciso nidaamka inuu ku siiyo fursad aad ku qorto jajabka la kaydiyay. Sidaa darteed, haddii aad rabto inaad dejiso falanqaynta codsiyada jiidista ee adeega isdhexgalka joogtada ah ee aan kor lagu soo hadal qaadin, ka dib marka hore hubi inaadan dhibaato kala kulmi doonin kaydinta.

Waad ku mahadsan tahay dareenkaaga. Haddii ay wax shaqayn waayaan, xor u noqo inaad wax noogu soo qorto taageero. Waanu kula talin doonaa oo caawin doonaa.

Falanqaynta ballanqaadyada iyo soo jiidashada codsiyada Travis CI, Buddy iyo AppVeyor iyadoo la adeegsanayo PVS-Studio

Haddii aad rabto inaad maqaalkan la wadaagto dhagaystayaasha ku hadla Ingiriisiga, fadlan isticmaal xidhiidhka tarjumaadda: Maxim Zvyagintsev. Falanqaynta ballanqaadyada iyo soo jiidashada codsiyada Travis CI, Buddy iyo AppVeyor iyadoo la adeegsanayo PVS-Studio.

Source: www.habr.com

Add a comment