Uhlalutyo lokuzibophelela kunye nokutsalwa kwezicelo kwiTravis CI, Buddy kunye neAppVeyor usebenzisa iPVS-Studio

Uhlalutyo lokuzibophelela kunye nokutsalwa kwezicelo kwiTravis CI, Buddy kunye neAppVeyor usebenzisa iPVS-Studio
Ukuqala kwinguqulo 7.04, umhlalutyi wePVS-Studio weC kunye neC ++ kwiilwimi zeLinux kunye neMacOS inokhetho lokuvavanya ukujonga uluhlu lweefayile ezikhankanyiweyo. Usebenzisa imo entsha, unokuqwalasela umhlalutyi ukujonga ukuzibophelela kunye nokutsala izicelo. Eli nqaku liza kukubonisa indlela yokuseta uluhlu lwefayile yeprojekthi yeGitHub kwiinkqubo ezidumileyo zeCI (Uhlanganiso oluqhubekayo) ezifana neTravis CI, Buddy kunye neAppVeyor.

Imowudi yokujonga uluhlu lwefayile

I-PVS-Studio sisixhobo sokubona iimpazamo kunye nobuthathaka obunokubakho kwikhowudi yemvelaphi yeenkqubo ezibhalwe kwi C, C++, C# kunye neJava. Isebenza kwiinkqubo ze-64-bit kwiiWindows, Linux kunye ne-macOS.

Inguqulelo yePVS-Studio 7.04 yeLinux kunye neMacOS inemowudi yokujonga uluhlu lweefayile zomthombo. Oku kusebenza kwiiprojekthi ezinenkqubo yokwakha ekuvumela ukuba wenze ifayile qokelela_imiyalelo.json. Kuyafuneka ukuba umhlalutyi akhuphe ulwazi malunga nokuqulunqwa kweefayile ezichaziweyo. Ukuba inkqubo yakho yokwakha ayikuxhasi ukuvelisa ifayile compile_commands.json, ungazama ukuvelisa loo fayile usebenzisa into eluncedo. zeBhere.

Kwakhona, indlela yokukhangela uluhlu lweefayile zingasetyenziswa kunye ne trace trace ye compiler runs (pvs-studio-analyzer trace). Ukwenza oku, kuya kufuneka uqale uqhube ukwakhiwa okupheleleyo kweprojekthi kwaye uyilandele ukuze umhlalutyi aqokelele ulwazi olupheleleyo malunga neeparitha zokuhlanganiswa kwazo zonke iifayile ezitshekishwayo.

Nangona kunjalo, olu khetho lune-drawback ebalulekileyo - kuya kufuneka wenze umkhondo opheleleyo wokwakha yonke iprojekthi ekusungulweni ngalunye, yona ngokwayo iphikisana nombono wokutshekisha ngokukhawuleza. Okanye, ukuba ugcina i-cache isiphumo sokulandela ngokwaso, ukuqaliswa okulandelayo komhlalutyi kunokujika kungagqibekanga ukuba ifayile yemvelaphi yokuxhomekeka kwesakhiwo siyatshintsha emva kokulandela umkhondo (umzekelo, i-#include entsha yongezwa kwenye yeefayile zomthombo).

Ke ngoko, asicebisi ukusebenzisa imowudi yokukhangela uluhlu lwefayile kunye nelogi yokulandela ukujonga ukwenza okanye ukutsala izicelo. Kwimeko apho unokwenza ulwakhiwo olongezelelekileyo xa ujonga ukuzibophelela, cinga ukusebenzisa imowudi uhlalutyo olongezelelekileyo.

Uluhlu lweefayile zomthombo wokuhlalutya zigcinwa kwifayile yombhalo kwaye idluliselwe kwi-analyzer usebenzisa iparameter -S:

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

Le fayile iqulethe iindlela ezizalanayo okanye ezipheleleyo kwiifayile, kwaye ifayile entsha nganye kufuneka ibe kumgca omtsha. Kuvumelekile ukuba ungakhankanyi kuphela amagama eefayile zokuhlalutya, kodwa kunye neetekisi ezahlukeneyo. Umhlaseli uya kubona ukuba oku akuyofayile kwaye akayi kuwuhoya umgca. Oku kunokuba luncedo ekuphawuleni ukuba iifayile zichazwe ngesandla. Nangona kunjalo, rhoqo uluhlu lweefayile luya kwenziwa ngexesha lokwahlulahlula kweCI, umzekelo iifayile ezivela kwisibophelelo okanye isicelo sokutsalwa.

Ngoku, usebenzisa le mowudi, ungakhawuleza uvavanye ikhowudi entsha phambi kokuba ingene kwisebe eliphambili lophuhliso. Ukuze inkqubo yokuqinisekisa isabele kwizilumkiso zomhlalutyi, usetyenziso iplagi-converter iflegi yongeziwe --bonisa-izilumkiso:

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

Ngale flegi, umguquleli uya kubuyisela ikhowudi engekho zero ukuba kukho izilumkiso kwingxelo yomhlalutyi. Ukusebenzisa ikhowudi yokubuyisela, unokuvala i-hook ye-precommit, ukuzibophelela okanye ukutsala isicelo, kwaye ubonise ingxelo yomhlalutyi owenziweyo kwisikrini, wabelane ngayo okanye uyithumele ngeposi.

Phawula. Ngethuba lokuqala uqala ukuhlalutya uluhlu lweefayile, yonke iprojekthi iya kuhlalutywa, kuba umhlalutyi ufuna ukuvelisa ifayile yokuxhomekeka kwiifayile zomthombo weprojekthi kwiifayile zeheader. Olu luphawu lokwahlulahlula iifayile zeC kunye neC ++. Kwixesha elizayo, ifayile yokuxhomekeka ingagcinwa kwaye iya kuhlaziywa ngokuzenzekelayo ngumhlalutyi. I-advanteji yokujonga ukwenza xa usebenzisa imowudi yokujonga uluhlu lwefayile ngaphezulu kokusebenzisa imowudi yokwahlulahlula okongeziweyo kukuba kuphela loo fayile kufuneka igcinwe, hayi iifayile zento.

Imigaqo ngokubanzi yohlalutyo lwesicelo sokutsalwa

Uhlalutyo lweprojekthi yonke luthatha ixesha elininzi, ngoko kunengqiqo ukujonga inxalenye yayo kuphela. Ingxaki kukuba kufuneka ukwahlule iifayile ezintsha kwezinye iifayile zeprojekthi.

Qwalasela umzekelo womthi wokuzibophelela onamasebe amabini:

Uhlalutyo lokuzibophelela kunye nokutsalwa kwezicelo kwiTravis CI, Buddy kunye neAppVeyor usebenzisa iPVS-Studio

Masenze ngathi ukuzibophelela A1 iqulethe inani elikhulu ngokwaneleyo lekhowudi esele ikhangelwe. Kwangaphambilana senze isebe kwisivumelwano A1 kwaye utshintshe ezinye iifayile.

Ngokuqinisekileyo, uqaphele ukuba emva koko A1 bekukho izinto ezimbini zokuzibophelela, kodwa ezi zikwadityanisiwe kwamanye amasebe, kuba asizibophelelanga inkosi. Kwaye ngoku lifikile ixesha lokuba hotfix ilungile. Ke ngoko, kuye kwavela isicelo sokutsala ukudityaniswa B3 ΠΈ A3.

Ngokuqinisekileyo, kuya kwenzeka ukujonga yonke isiphumo sokudityaniswa kwabo, kodwa oku kuya kuba kude kakhulu kwaye kungafanelekanga, kuba iifayile ezimbalwa zatshintshwa. Ngoko ke, kusebenza ngakumbi ukuhlalutya kuphela ezitshintshileyo.

Ukwenza oku, sifumana umahluko phakathi kwamasebe, ekubeni kwi-INTLOKO yesebe apho sifuna ukudibanisa kwinkosi:

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

$MERGE_BASE siza kuqwalasela ngokweenkcukacha kamva. Inyaniso kukuba akusiyo yonke inkonzo yeCI inikeza ulwazi oluyimfuneko malunga nesiseko sokudibanisa, ngoko ke rhoqo kufuneka ufike ngeendlela ezintsha zokufumana le datha. Oku kuya kuchazwa ngezantsi kwinkonzo nganye yewebhu echazwe.

Ke, sifumene umahluko phakathi kwamasebe, okanye kunoko, uluhlu lwamagama efayile atshintshiweyo. Ngoku kufuneka sinikeze ifayile .pvs-pr.list (sibuyisele imveliso engentla kuyo) kumhlalutyi:

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

Emva kohlalutyo, kufuneka siguqule ifayile yelog (PVS-Studio.log) kwifomathi efundekayo:

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

Lo myalelo uza kudwelisa iimpazamo kwi kwiba (umsinga wesiphumo semposiso eqhelekileyo).

Kuphela apha akufuneki kuphela ukubonisa iimpazamo, kodwa nokwazisa inkonzo yethu kwindibano kunye nokuvavanya malunga nobukho beengxaki. Kule nto, iflegi yongezwa kwisiguquli -W (--bonisa-izilumkiso). Ukuba kukho ubuncinane isilumkiso somhlalutyi omnye, ikhowudi yokubuyisela yoncedo iplagi-converter iya kutshintsha ukuya kwi-2, eya kuthi ikwazise inkonzo yeCI ukuba kukho iimpazamo ezinokuthi zifake iifayile zesicelo sokutsala.

UTravis CI

Uqwalaselo lwenziwe ngendlela yefayile .travis.yml. Ukuze kube lula, ndikucebisa ukuba ubeke yonke into kwiskripthi se-bash esahlukileyo esinemisebenzi eya kubizwa kwifayile .travis.yml (bash scriptname.sh function_name).

Siya kongeza ikhowudi efunekayo kwiskripthi ukutshatyalaliswa, ngoko sifumana ukusebenza okungakumbi. Kwicandelo fakela masibhale oku kulandelayo:

install:
  - bash .travis.sh travis_install

Ukuba ubunayo nayiphi na imiyalelo, unokuyihambisa kwiscript ngokususa iqhagamshela.

Masivule ifayile .travis.sh kwaye wongeza ukuseta uhlalutyi kumsebenzi travis_fake ():

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 
}

Ngoku masongeze kwicandelo elishicilelwe qhuba uhlalutyo:

script:
  - bash .travis.sh travis_script

Kwaye kwiskripthi se-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
}

Le khowudi kufuneka iqhutywe emva kokuba iprojekthi yakhiwe, umzekelo, ukuba unokwakha i-CMake:

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

Kuya kuvela ngolu hlobo:

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
}

Mhlawumbi sele uqaphele iimeko eziguquguqukayo ezikhankanyiweyo. $TRAVIS_PULL_REQUEST ΠΈ $TRAVIS_BRANCH. I-Travis CI izibhengeza ngokwayo:

  • $TRAVIS_PULL_REQUEST igcina inombolo yesicelo sokutsalwa, okanye amangaukuba lisebe eliqhelekileyo;
  • $TRAVIS_REPO_SLUG igcina igama lovimba weprojekthi.

I-algorithm yalo msebenzi:

Uhlalutyo lokuzibophelela kunye nokutsalwa kwezicelo kwiTravis CI, Buddy kunye neAppVeyor usebenzisa iPVS-Studio
I-Travis CI iphendula kwiikhowudi zokubuyisela, ngoko ubukho bezilumkiso buya kuxelela inkonzo ukuba ifake iflegi yokuzibophelela njenge-buggy.

Makhe sijonge ngakumbi kulo mgca wekhowudi:

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

Inyani kukuba iTravis CI idibanisa ngokuzenzekelayo amasebe ngexesha lohlalutyo lwesicelo sokutsala:

Uhlalutyo lokuzibophelela kunye nokutsalwa kwezicelo kwiTravis CI, Buddy kunye neAppVeyor usebenzisa iPVS-Studio
Ngoko ke, sihlalutya A4, kwaye akunjalo B3->A3. Ngenxa yolu phawu, kufuneka sibale umahluko A3, engumphezulu wesebe ukusuka mvelaphi.

Kushiyeke inkcukacha enye ebalulekileyo - igcina ukuxhomekeka kweefayili zeheader kwiiyunithi zoguqulo ezihlanganisiweyo (*.c, *.cc, *.cpp, njl.). Umhlalutyi ubala ezi zixhomekeke kwisiqalo sokuqala kwindlela yokukhangela uluhlu lweefayile kwaye emva koko uzigcine kwi-.PVS-Studio directory. I-Travis CI ikuvumela ukuba ugcine iifolda, ngoko ke siya kugcina idatha yolawulo .PVS-Studio/:

cache:
  directories:
    - .PVS-Studio/

Le khowudi kufuneka yongezwe kwifayile .travis.yml. Olu luhlu lugcina idatha eyahlukeneyo eqokelelwe emva kokuhlalutya, eya kuthi ikhawulezise ngokukhawuleza ukuqhubela phambili koluhlu lweefayile okanye uhlalutyo olongezelelweyo. Ukuba oku akwenziwanga, ngoko umhlalutyi uya kuhlalutya zonke iifayile ngalo lonke ixesha.

Buddy

NjengoTravis C.I., Buddy inikeza ukukwazi ukwakha ngokuzenzekelayo kunye nokuvavanya iiprojekthi ezigcinwe kwi-GitHub. Ngokungafaniyo neTravis CI, iqwalaselwe kwi-interface yewebhu (inkxaso ye-bash iyafumaneka), ngoko akukho mfuneko yokugcina iifayile zoqwalaselo kwiprojekthi.

Okokuqala, kufuneka songeze isenzo esitsha kumgca wokwakha:

Uhlalutyo lokuzibophelela kunye nokutsalwa kwezicelo kwiTravis CI, Buddy kunye neAppVeyor usebenzisa iPVS-Studio
Chaza umqokeleli osetyenzisiweyo ukwakha iprojekthi. Qaphela i-docker container efakwe kulo msebenzi. Umzekelo, kukho isikhongozeli esikhethekileyo se-GCC:

Uhlalutyo lokuzibophelela kunye nokutsalwa kwezicelo kwiTravis CI, Buddy kunye neAppVeyor usebenzisa iPVS-Studio
Ngoku masifake i-PVS-Studio kunye nezinto eziyimfuneko:

Uhlalutyo lokuzibophelela kunye nokutsalwa kwezicelo kwiTravis CI, Buddy kunye neAppVeyor usebenzisa iPVS-Studio
Yongeza le migca ilandelayo kumhleli:

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

Ngoku masiye kwi-Run tab (umfanekiso wokuqala) kwaye wongeze ikhowudi elandelayo kwindawo yomhleli ehambelanayo:

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

Ukuba ulifundile icandelo kwiTravs-CI, ke le khowudi sele iqhelekile kuwe, nangona kunjalo, ngoku kukho inyathelo elitsha:

Uhlalutyo lokuzibophelela kunye nokutsalwa kwezicelo kwiTravis CI, Buddy kunye neAppVeyor usebenzisa iPVS-Studio
Inyani kukuba ngoku asihlalutyi isiphumo sokudityaniswa, kodwa INTLOKO yesebe apho isicelo sokutsalwa senziwa khona:

Uhlalutyo lokuzibophelela kunye nokutsalwa kwezicelo kwiTravis CI, Buddy kunye neAppVeyor usebenzisa iPVS-Studio
Ke sikwisivumelwano esinemiqathango B3 kwaye kufuneka sifumane umahluko 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

Ukufumanisa A3 Masisebenzise iGitHub API:

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

Sisebenzise ezi ziguquguqukayo zilandelayo ezibonelelwe nguBuddy:

  • $BUDDY_EXECUTION_PULL_REQEUST_NO - inombolo yesicelo sokutsala;
  • $BUDDY_REPO_SLUG - indibaniselwano yegama lomsebenzisi kunye nendawo yokugcina (umzekelo max / test).

Ngoku masigcine utshintsho sisebenzisa iqhosha elingezantsi, kwaye sivumele uhlalutyo lwesicelo sokutsala:

Uhlalutyo lokuzibophelela kunye nokutsalwa kwezicelo kwiTravis CI, Buddy kunye neAppVeyor usebenzisa iPVS-Studio
Ngokungafaniyo neTravis CI, akufuneki sichaze .pvs-studio kugcino, kuba iBuddy igcina ngokuzenzekela zonke iifayile zokuqaliswa okulandelayo. Ke ngoko, into yokugqibela eseleyo kukugcina igama lokungena kunye negama lokugqitha lePVS-Studio eBuddy. Emva kokugcina utshintsho, siya kubuyela kwiPipeline. Kufuneka siye ekusetheni izinto eziguquguqukayo kwaye songeze ukungena kunye nesitshixo sePVS-Studio:

Uhlalutyo lokuzibophelela kunye nokutsalwa kwezicelo kwiTravis CI, Buddy kunye neAppVeyor usebenzisa iPVS-Studio
Emva koko, ukubonakala kwesicelo esitsha sokutsalwa okanye ukuzibophelela kuya kubangela itshekhi. Ukuba isiboniso sineempazamo, ke uBuddy uya kuyikhomba kwiphepha lesicelo sokutsalwa.

AppVeyor

Ukuseta i-AppVeyor kuyafana noBuddy, kuba yonke into yenzeka kujongano lwewebhu kwaye akukho mfuneko yokongeza ifayile * .yml kwindawo yokugcina iprojekthi.

Makhe siye kwi Useto thebhu kwisishwankathelo seprojekthi:

Uhlalutyo lokuzibophelela kunye nokutsalwa kwezicelo kwiTravis CI, Buddy kunye neAppVeyor usebenzisa iPVS-Studio
Masikrole ezantsi eli phepha kwaye sivumele ukugcinwa kwe-cache kwizicelo zokutsalwa zokwakha:

Uhlalutyo lokuzibophelela kunye nokutsalwa kwezicelo kwiTravis CI, Buddy kunye neAppVeyor usebenzisa iPVS-Studio
Ngoku masiye kwi-Environment thebhu, apho sichaza umfanekiso wokwakha kunye nezinto eziyimfuneko zokuguquguquka kwendawo:

Uhlalutyo lokuzibophelela kunye nokutsalwa kwezicelo kwiTravis CI, Buddy kunye neAppVeyor usebenzisa iPVS-Studio
Ukuba uwafundile amacandelo angaphambili, uqhelene kakhulu nezi ziguquguqukayo zimbini βˆ’ PVS_KEY ΠΈ PVS_USERNAME. Ukuba akunjalo, makhe ndikukhumbuze ukuba bayimfuneko ukujonga ilayisenisi ye-PVS-Studio analyzer. Kwixesha elizayo, siya kudibana nabo kwakhona kwimibhalo yeBash.

Kwiphepha elinye elingezantsi, khankanya isiqulathi seefayili sogcino:

Uhlalutyo lokuzibophelela kunye nokutsalwa kwezicelo kwiTravis CI, Buddy kunye neAppVeyor usebenzisa iPVS-Studio
Ukuba asikwenzi oku, ngoko siya kuhlalutya yonke iprojekthi endaweni yeefayile ezimbalwa, kodwa siya kufumana umphumo ngokusekelwe kwiifayile ezikhankanyiweyo. Ngoko ke, kubalulekile ukufaka igama lolawulo oluchanekileyo.

Ngoku lixesha lokuba iskripthi sivavanye. Vula ithebhu yoVavanyo kwaye ukhethe iSikripthi:

Uhlalutyo lokuzibophelela kunye nokutsalwa kwezicelo kwiTravis CI, Buddy kunye neAppVeyor usebenzisa iPVS-Studio
Ncamathelisa le khowudi ilandelayo kule fomu:

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

Makhe sijonge le nxalenye ilandelayo yekhowudi:

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

Isabelo esikhethekileyo sexabiso lomyalelo we-pwd kuguquko olufanele ukugcina eli xabiso lingagqibekanga libonakala lingaqhelekanga ekuqaleni, nangona kunjalo, ndiza kucacisa yonke into ngomzuzwana.

Ngelixa ndiseta umhlalutyi kwi-AppVeyor, ndiye ndadibana nokuziphatha okungaqhelekanga komhlalutyi. Ngakolunye uhlangothi, yonke into yayisebenza ngokuchanekileyo, kodwa uhlalutyo aluzange luqale. Ndichithe ixesha elininzi ndiqaphela ukuba sikwikhaya/appveyor/projects/testcalc/directory, kwaye umhlalutyi uqinisekile ukuba sikuyo/opt/appveyor/build-agent/. Emva koko ndaqonda ukuba i-$ PWD eguquguqukayo ibubuxoki. Ngesi sizathu, ndihlaziye ixabiso layo ngesandla ngaphambi kokuba ndiqale uhlalutyo.

Kwaye emva koko yonke into, njengangaphambili:

Uhlalutyo lokuzibophelela kunye nokutsalwa kwezicelo kwiTravis CI, Buddy kunye neAppVeyor usebenzisa iPVS-Studio
Ngoku qwalasela esi siqwengana silandelayo:

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

Kuyo, sifumana umahluko phakathi kwamasebe apho isicelo sokutsalwa sibhengezwa khona. Ukwenza oku, sidinga oku kuguquguquka kwemekobume kulandelayo:

  • $APPVEYOR_PULL_REQUEST_NUMBER - inombolo yesicelo sokutsala;
  • $APPVEYOR_REPO_NAME - igama lomsebenzisi kunye novimba weprojekthi.

isiphelo

Ewe kunjalo, asikhange siqwalasele zonke iinkonzo zohlanganiso eziqhubekayo, nangona kunjalo, zonke zineenkcukacha zomsebenzi ezifanayo. Ngaphandle kwe-caching, inkonzo nganye yenza "ibhayisikili" yayo, ngoko yonke into ihlala ihlukile.

Kwindawo ethile, njengaseTravis-CI, imigca embalwa yekhowudi kunye ne-caching isebenza ngokungenasiphako; kwindawo ethile, njengakwiAppVeyor, kufuneka ukhankanye incwadi eneenkcukacha kwizicwangciso; kodwa kwindawo ethile kufuneka wenze izitshixo ezizodwa kwaye uzame ukukholisa inkqubo ukukunika ithuba lokubhala ngaphezulu iqhekeza elifihliweyo. Ke ngoko, ukuba ufuna ukuseta uhlalutyo lwesicelo sokutsala kwinkonzo yokudibanisa eqhubekayo engakhange ixoxwe ngasentla, ke qiniseka ukuba awuzukuba neengxaki nge-caching.

Enkosi ngosinaka kwakho. Ukuba kukho into engahambi kakuhle, zive ukhululekile ukusibhalela inkxaso. Siza kucebisa kwaye sincede.

Uhlalutyo lokuzibophelela kunye nokutsalwa kwezicelo kwiTravis CI, Buddy kunye neAppVeyor usebenzisa iPVS-Studio

Ukuba ufuna ukwabelana ngeli nqaku kunye nabaphulaphuli abathetha isiNgesi, nceda usebenzise ikhonkco lokuguqulela: UMaxim Zvyagintsev. Uhlalutyo lokuzibophelela kunye nokutsalwa kwezicelo kwiTravis CI, Buddy kunye neAppVeyor usebenzisa iPVS-Studio.

umthombo: www.habr.com

Yongeza izimvo