Ukuhlaziywa kokuzibophezela nokudonsa izicelo kuTravis CI, Buddy kanye ne-AppVeyor usebenzisa i-PVS-Studio

Ukuhlaziywa kokuzibophezela nokudonsa izicelo kuTravis CI, Buddy kanye ne-AppVeyor usebenzisa i-PVS-Studio
Kumhlaziyi we-PVS-Studio wezilimi ze-C no-C++ ku-Linux naku-macOS, kusukela kunguqulo 7.04, kuvele inketho yokuhlola ukuhlola uhlu lwamafayela ashiwo. Usebenzisa imodi entsha, ungamisa isihlaziyi ukuze uhlole ukuzibophezela nokudonsa izicelo. Lesi sihloko sizokutshela ukuthi ungamisa kanjani ukuhlola uhlu lwamafayela ashintshiwe wephrojekthi ye-GitHub ezinhlelweni ezidumile ze-CI (Continuous Integration) njengeTravis CI, Buddy ne-AppVeyor.

Imodi yokuhlola uhlu lwefayela

I-PVS-Studio iyithuluzi lokuhlonza amaphutha kanye nokuba sengozini okungaba khona kukhodi yomthombo yezinhlelo ezibhalwe ngo-C, C++, C# kanye ne-Java. Isebenza ezinhlelweni ezingama-64-bit kuWindows, Linux kanye ne-macOS.

Enguqulweni ye-PVS-Studio 7.04 ye-Linux ne-macOS, kuvele imodi yokuhlola uhlu lwamafayela omthombo. Lokhu kusebenzela amaphrojekthi uhlelo lwawo lokwakha olukuvumela ukuthi ukhiqize ifayela compile_commands.json. Kudingeka ukuze umhlaziyi akhiphe ulwazi mayelana nokuhlanganiswa kwamafayela ashiwo. Uma isistimu yakho yokwakha ingakusekeli ukukhiqiza ifayela le-compile_commands.json, ungazama ukukhiqiza ifayela elinjalo usebenzisa insiza. Bear.

Futhi, imodi yokuhlola uhlu lwamafayela ingasetshenziswa kanye nelogi ye-strace trace yokuqaliswa komhlanganisi (ukulandelela kwe-pvs-studio-analyzer). Ukuze wenze lokhu, uzodinga ukuthi uqale wenze ukwakhiwa okugcwele kwephrojekthi bese uyilandelela ukuze umhlaziyi aqoqe ulwazi oluphelele mayelana nemingcele yokuhlanganiswa kwawo wonke amafayela ahlolwayo.

Kodwa-ke, le nketho ine-drawback ephawulekayo - uzodinga ukwenza umkhondo ophelele wokwakha yonke iphrojekthi njalo uma uyiqhuba, yona ngokwayo ephikisana nombono wokuhlola ngokushesha isibopho. Noma, uma ugcina umphumela wokulandelela ngokwawo, ukuqalisa okulandelayo komhlaziyi kungase kungapheleli uma isakhiwo sokuncika samafayela omthombo sishintsha ngemva kokulandelela (ngokwesibonelo, i-#include entsha yengezwe kwelinye lamafayela omthombo).

Ngakho-ke, asincomi ukusebenzisa imodi yokuhlola uhlu lwamafayela ngelogi yokulandela ukuze uhlole ukwenza noma ukudonsa izicelo. Uma kwenzeka ungenza ukwakha okukhuphukayo lapho uhlola ukuzibophezela, cabanga ukusebenzisa imodi ukuhlaziywa okwandayo.

Uhlu lwamafayela omthombo wokuhlaziya lulondolozwa efayeleni lombhalo futhi ludluliselwe kumhlaziyi kusetshenziswa ipharamitha -S:

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

Leli fayela licacisa izindlela ezihlobene noma eziphelele eziya kumafayela, futhi ifayela ngalinye elisha kufanele libe semugqeni omusha. Kwamukelekile ukucacisa hhayi amagama wefayela kuphela ukuze ahlaziywe, kodwa nombhalo ohlukahlukene. Umhlaziyi uzobona ukuthi leli akulona ifayela futhi uzoziba umugqa. Lokhu kungaba usizo ekubekeni amazwana uma amafayela ecaciswa mathupha. Kodwa-ke, ngokuvamile uhlu lwamafayela luzokhiqizwa ngesikhathi sokuhlaziywa ku-CI, isibonelo, lawa kungaba amafayela asuka kusibopho noma isicelo sokudonsa.

Manje, usebenzisa le modi, ungabheka ngokushesha ikhodi entsha ngaphambi kokuthi ingene egatsheni elikhulu lokuthuthukisa. Ukuqinisekisa ukuthi isistimu yokuskena iphendula izexwayiso zokuhlaziya, insiza isiguquli sepulagi ifulegi lengeziwe --bonisa-izixwayiso:

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

Ngaleli fulegi, isiguquli sizobuyisela ikhodi okungelona uziro uma kukhona izexwayiso embikweni wokuhlaziya. Usebenzisa ikhodi yokubuyisela, ungavimba ihhuku lokuzibophezela kusengaphambili, uzinikele, noma udonse isicelo, futhi umbiko womhlaziyi okhiqiziwe ungaboniswa, kwabelwane ngawo, noma uthunyelwe nge-imeyili.

Qaphela. Uma uqala ukuhlaziya uhlu lwamafayela, yonke iphrojekthi izohlaziywa, ngoba i-analyzer idinga ukukhiqiza ifayela lokuncika lamafayela omthombo wephrojekthi kumafayela enhlokweni. Lesi isici sokuhlaziya amafayela C no-C++. Ngokuzayo, ifayela lokuncika lingagcinwa futhi lizobuyekezwa ngokuzenzakalelayo ngumhlaziyi. Inzuzo yokuhlola ukuzibophezela lapho usebenzisa imodi yokuhlola uhlu lwamafayela usebenzisa imodi yokuhlaziya ekhuphukayo ukuthi udinga kuphela ukufihla lelo fayela hhayi amafayela ento.

Izimiso ezijwayelekile zokuhlaziywa kwesicelo sokudonsa

Ukuhlaziya yonke iphrojekthi kuthatha isikhathi esiningi, ngakho-ke kunengqondo ukuhlola ingxenye ethile kuphela yayo. Inkinga ukuthi udinga ukuhlukanisa amafayela amasha kuwo wonke amanye amafayela ephrojekthi.

Ake sibheke isibonelo sesihlahla sokuzibophezela esinamagatsha amabili:

Ukuhlaziywa kokuzibophezela nokudonsa izicelo kuTravis CI, Buddy kanye ne-AppVeyor usebenzisa i-PVS-Studio

Ake sikucabange lokho kuzibophezela A1 iqukethe inani elikhulu impela lekhodi esivele ihloliwe. Kancane kancane senze igatsha kusuka ekuzibophezeleni A1 futhi yashintsha amanye amafayela.

Wena, kunjalo, ukuqaphelile lokho ngemva A1 ezinye izibophezelo ezimbili zenzeke, kodwa lokhu bekuphinde kube ukuhlanganiswa kwamanye amagatsha, ngoba asizibophezeli kukho master. Futhi manje isikhathi sesifikile lapho hotfix ngomumo. Yingakho kuvele isicelo sokudonsa sokuhlanganiswa B3 ΠΈ A3.

Yiqiniso, kungenzeka ukuhlola wonke umphumela wokuhlanganiswa kwawo, kodwa lokhu kuzodla isikhathi esiningi futhi kungabi nabulungisa, njengoba amafayela ambalwa kuphela ashintshiwe. Ngakho-ke, kuphumelela kakhulu ukuhlaziya kuphela eziguquliwe.

Ukwenza lokhu, sithola umehluko phakathi kwamagatsha, ekubeni ENHLOKO yegatsha esifuna ukulihlanganisa libe yinkosi:

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

$MERGE_BASE sizoyibheka ngokuningiliziwe kamuva. Iqiniso liwukuthi akuzona zonke izinsizakalo ze-CI ezihlinzeka ngolwazi oludingekayo mayelana nedathabhesi yokuhlanganisa, ngakho-ke isikhathi ngasinye kufanele uqhamuke nezindlela ezintsha zokuthola le datha. Lokhu kuzochazwa ngokuningiliziwe ngezansi kusevisi ngayinye yewebhu echaziwe.

Ngakho, sithole umehluko phakathi kwamagatsha, noma kunalokho, uhlu lwamagama amafayela ashintshiwe. Manje sidinga ukunikeza ifayela .pvs-pr.list (siqondise kabusha okukhiphayo ngenhla kuyo) kumhlaziyi:

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

Ngemva kokuhlaziya, sidinga ukuguqula ifayela lokungena (PVS-Studio.log) libe ifomethi efundeka kalula:

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

Lo myalo uzofaka uhlu lwamaphutha ku stderr (umlayezo wephutha ojwayelekile).

Kuphela manje kudingeka singabonisi amaphutha kuphela, kodwa futhi sazise insizakalo yethu yokuhlangana nokuhlola mayelana nokuba khona kwezinkinga. Ngale njongo, ifulege lengezwe kusiguquli -W (--bonisa-izixwayiso). Uma kukhona okungenani isexwayiso sokuhlaziya esisodwa, ikhodi yokubuyisela insiza isiguquli sepulagi izoshintsha ibe ngu-2, yona ezokwazisa isevisi ye-CI mayelana nokuba khona kwamaphutha okungenzeka kumafayela esicelo sokudonsa.

I-Travis CI

Ukucushwa kwenziwa njengefayela .travis.yml. Ukuze kube lula, ngikweluleka ukuthi ufake yonke into kusikripthi se-bash esihlukile esinemisebenzi ezobizwa ngefayela .travis.yml (bash script_name.sh function_name).

Sizongeza ikhodi edingekayo kusikripthi kokuthi bash, ngale ndlela sizothola ukusebenza okwengeziwe. Esigabeni Faka masibhale okulandelayo:

install:
  - bash .travis.sh travis_install

Uma ubuneziqondiso, ungazidlulisela kusikripthi, ukhiphe amakhonco.

Asivule ifayela .travis.sh bese wengeza isethingi yokuhlaziya kumsebenzi 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 
}

Manje ake sengeze esigabeni iskripthi sebenzisa ukuhlaziywa:

script:
  - bash .travis.sh travis_script

Futhi kusikripthi 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 khodi idinga ukuqaliswa ngemva kokwakha iphrojekthi, isibonelo, uma unokwakha ku-CMake:

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

Kuzovela kanje:

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
}

Cishe usuziqaphelile lezi zinhlobonhlobo zemvelo $TRAVIS_PULL_REQUEST ΠΈ $TRAVIS_BRANCH. UTravis CI uzimemezela ngokuzimela:

  • $TRAVIS_PULL_REQUEST igcina inombolo yesicelo sokudonsa noma bamanga, uma lokhu kuyigatsha elivamile;
  • $TRAVIS_REPO_SLUG igcina igama lenqolobane yephrojekthi.

I-algorithm yalo msebenzi:

Ukuhlaziywa kokuzibophezela nokudonsa izicelo kuTravis CI, Buddy kanye ne-AppVeyor usebenzisa i-PVS-Studio
I-Travis CI iphendula ukubuyisela amakhodi, ngakho ukuba khona kwezixwayiso kuzotshela isevisi ukuthi imake isibopho njengokuqukethe amaphutha.

Manje ake sibhekisise lo mugqa wekhodi:

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

Iqiniso liwukuthi iTravis CI ihlanganisa amagatsha ngokuzenzakalelayo ngenkathi ihlaziya isicelo sokudonsa:

Ukuhlaziywa kokuzibophezela nokudonsa izicelo kuTravis CI, Buddy kanye ne-AppVeyor usebenzisa i-PVS-Studio
Ngakho-ke siyahlaziya A4kodwa cha B3->A3. Ngenxa yalesi sici, sidinga ukubala umehluko nge I-А3, okuyiyona kanye phezulu kwegatsha kusuka Umsuka.

Kunemininingwane eyodwa ebalulekile esele - ukufaka kunqolobane okuncikile kwamafayela kanhlokweni kumayunithi okuhumusha ahlanganisiwe (*.c, *.cc, *.cpp, njll.). I-analyzer ibala lokhu kuncika lapho iqala ukwethulwa kumodi yokuhlola uhlu lwamafayela bese iwalondoloza ohlwini lwemibhalo lwe-.PVS-Studio. I-Travis CI ikuvumela ukuthi ulondoloze amafolda, ngakho-ke sizogcina idatha yohla lwemibhalo .PVS-Studio/:

cache:
  directories:
    - .PVS-Studio/

Le khodi idinga ukwengezwa kufayela .travis.yml. Lolu hlu lwemibhalo lugcina idatha ehlukahlukene eqoqwe ngemva kokuhlaziywa, okuzosheshisa ngokuphawulekayo ukusebenza okulandelayo kohlaziyo lwamafayela noma ukuhlaziya okungeziwe. Uma lokhu kungenziwanga, khona-ke umhlaziyi uzohlaziya wonke amafayela ngaso sonke isikhathi.

Buddy

NjengoTravis CI, Buddy inikeza amandla okwakha ngokuzenzakalela nokuhlola amaphrojekthi agcinwe ku-GitHub. Ngokungafani ne-Travis CI, ilungiselelwe ku-interface yewebhu (ukusekelwa kwe-bash kuyatholakala), ngakho-ke asikho isidingo sokugcina amafayela wokumisa kuphrojekthi.

Okokuqala, sidinga ukwengeza isenzo esisha kulayini wokuhlanganisa:

Ukuhlaziywa kokuzibophezela nokudonsa izicelo kuTravis CI, Buddy kanye ne-AppVeyor usebenzisa i-PVS-Studio
Ake sikhombise umdidiyeli osetshenziswe ukwakha iphrojekthi. Qaphela isiqukathi sedokhu esifakwe kulesi senzo. Isibonelo, kunesitsha esikhethekile se-GCC:

Ukuhlaziywa kokuzibophezela nokudonsa izicelo kuTravis CI, Buddy kanye ne-AppVeyor usebenzisa i-PVS-Studio
Manje ake sifake i-PVS-Studio kanye nezinsiza ezidingekayo:

Ukuhlaziywa kokuzibophezela nokudonsa izicelo kuTravis CI, Buddy kanye ne-AppVeyor usebenzisa i-PVS-Studio
Ake sengeze imigqa elandelayo kusihleli:

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

Manje ake siye ku-Run ithebhu (isithonjana sokuqala) bese wengeza ikhodi elandelayo kunkambu yomhleli ehambisanayo:

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

Uma ufunda isigaba ku-Travs-CI, khona-ke le khodi isivele uyayazi, nokho, manje sekunesigaba esisha:

Ukuhlaziywa kokuzibophezela nokudonsa izicelo kuTravis CI, Buddy kanye ne-AppVeyor usebenzisa i-PVS-Studio
Iqiniso liwukuthi manje asihlaziyi umphumela wokuhlanganisa, kodwa INHLOKO yegatsha lapho isicelo sokudonsa senziwa khona:

Ukuhlaziywa kokuzibophezela nokudonsa izicelo kuTravis CI, Buddy kanye ne-AppVeyor usebenzisa i-PVS-Studio
Ngakho-ke sisekuzibophezeleni okunemibandela B3 futhi sidinga ukuthola umehluko kuwo 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

Ukunquma A3 Masisebenzise i-GitHub API:

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

Sisebenzise okuguquguqukayo okulandelayo okuhlinzekwa nguBuddy:

  • $BUDDY_EXECUTION_PULL_REQEUST_NO - inombolo yesicelo sokudonsa;
  • $BUDDY_REPO_SLUG β€” inhlanganisela yegama lomsebenzisi nenqolobane (isibonelo max/test).

Manje ake silondoloze izinguquko sisebenzisa inkinobho engezansi futhi sivumele ukuhlaziywa kwesicelo sokudonsa:

Ukuhlaziywa kokuzibophezela nokudonsa izicelo kuTravis CI, Buddy kanye ne-AppVeyor usebenzisa i-PVS-Studio
Ngokungafani ne-Travis CI, asikho isidingo sokucacisa .pvs-studio ukuze kugcinwe kunqolobane, njengoba uBuddy egcina ngokuzenzakalelayo wonke amafayela ukuze aqalise ngokulandelayo. Ngakho-ke, into yokugcina esele ukugcina ukungena nephasiwedi ye-PVS-Studio ku-Buddy. Ngemva kokulondoloza izinguquko, sizobuyiselwa ku-Pipeline. Sidinga ukuqhubekela phambili ekusetheni okuguquguqukayo futhi sengeze ukungena nokhiye we-PVS-Studio:

Ukuhlaziywa kokuzibophezela nokudonsa izicelo kuTravis CI, Buddy kanye ne-AppVeyor usebenzisa i-PVS-Studio
Ngemuva kwalokhu, ukubonakala kwesicelo esisha sokudonsa noma ukuzibophezela kuzocupha ukubuyekezwa. Uma isivumelwano siqukethe amaphutha, uBuddy uzokukhombisa lokhu ekhasini lesicelo sokudonsa.

I-AppVeyor

Ukusetha i-AppVeyor kuyefana ne-Buddy, njengoba yonke into yenzeka kusixhumi esibonakalayo sewebhu futhi asikho isidingo sokwengeza ifayela *.yml endaweni yokugcina iphrojekthi.

Ake siye kuthebhu ethi Izilungiselelo ekubukezweni kwephrojekthi:

Ukuhlaziywa kokuzibophezela nokudonsa izicelo kuTravis CI, Buddy kanye ne-AppVeyor usebenzisa i-PVS-Studio
Ake siphonse phansi leli khasi futhi sivumele ukulondolozwa kwenqolobane ukuze siqoqe izicelo zokudonsa:

Ukuhlaziywa kokuzibophezela nokudonsa izicelo kuTravis CI, Buddy kanye ne-AppVeyor usebenzisa i-PVS-Studio
Manje ake siye kuthebhu ye-Environment, lapho sicacisa khona isithombe sokuhlanganisa kanye nokuguquguquka kwemvelo okudingekayo:

Ukuhlaziywa kokuzibophezela nokudonsa izicelo kuTravis CI, Buddy kanye ne-AppVeyor usebenzisa i-PVS-Studio
Uma ufunde izigaba ezedlule, ujwayelene kakhulu nalezi ziguquguquko ezimbili - PVS_KEY ΠΈ PVS_USERNAME. Uma kungenjalo, ake ngikukhumbuze ukuthi bayadingeka ukuze kuqinisekiswe ilayisensi ye-PVS-Studio analyzer. Sizobabona futhi emibhalweni ye-Bash esikhathini esizayo.

Ekhasini elifanayo elingezansi sibonisa ifolda yokugcina isikhashana:

Ukuhlaziywa kokuzibophezela nokudonsa izicelo kuTravis CI, Buddy kanye ne-AppVeyor usebenzisa i-PVS-Studio
Uma singakwenzi lokhu, sizohlaziya yonke iphrojekthi esikhundleni samafayela ambalwa, kodwa sizothola okukhiphayo kumafayela ashiwo. Ngakho-ke, kubalulekile ukufaka igama lomkhombandlela elilungile.

Manje sekuyisikhathi sokuba iskripthi sihlolwe. Vula ithebhu yezivivinyo bese ukhetha Iskripthi:

Ukuhlaziywa kokuzibophezela nokudonsa izicelo kuTravis CI, Buddy kanye ne-AppVeyor usebenzisa i-PVS-Studio
Udinga ukunamathisela ikhodi elandelayo kuleli 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

Ake sinake ingxenye elandelayo yekhodi:

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

Ukunikezwa okuqondile kwenani lomyalo we-pwd kokuguquguqukayo okufanele kugcine leli nani elizenzakalelayo kubonakala kuxakile lapho uthi nhlΓ‘, nokho-ke, ngizochaza yonke into manje.

Ngenkathi ngimisa i-analyzer ku-AppVeyor, ngihlangabezane nokuziphatha okuxakile kwe-analyzer. Ngakolunye uhlangothi, konke kwasebenza kahle, kodwa ukuhlaziya akuzange kuqale. Ngichithe isikhathi esiningi ngiqaphela ukuthi siku /home/appveyor/projects/testcalc/ directory, futhi umhlaziyi uqinisekile ukuthi siku/opt/appveyor/build-agent/. Ngabe sengibona ukuthi i-$PWD variable yayiqamba amanga kancane. Ngalesi sizathu, ngibuyekeze ngokuzenzela inani laso ngaphambi kokuqala ukuhlaziya.

Bese konke kuba njengakuqala:

Ukuhlaziywa kokuzibophezela nokudonsa izicelo kuTravis CI, Buddy kanye ne-AppVeyor usebenzisa i-PVS-Studio
Manje cabangela lesi siqeshana esilandelayo:

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 sithola umehluko phakathi kwamagatsha okumenyezelwa phezu kwawo isicelo sokudonsa. Ukuze senze lokhu sidinga okuguquguqukayo kwemvelo okulandelayo:

  • $APPVEYOR_PULL_REQUEST_NUMBER β€” inombolo yesicelo sokudonsa;
  • $APPVEYOR_REPO_NAME - igama lomsebenzisi nenqolobane yephrojekthi.

isiphetho

Yebo, asikacabangi zonke izinsiza zokuhlanganisa ezingase zibe khona, nokho, zonke zinokucaciswa kokusebenza okufana kakhulu komunye nomunye. Ngaphandle kwe-caching, isevisi ngayinye yenza "ibhayisikili" layo, ngakho yonke into ihlale ihlukile.

Endaweni ethile, njengaku-Travis-CI, imigqa embalwa yekhodi ne-caching isebenza ngokungenasici; endaweni ethile, njengaku-AppVeyor, udinga nje ukucacisa ifolda kuzilungiselelo; kodwa endaweni ethile udinga ukudala okhiye abahlukile bese uzama ukukholisa isistimu ukuthi ikunikeze ithuba lokubhala phezu kwesiqephu esigciniwe. Ngakho-ke, uma ufuna ukusetha ukuhlaziya kwezicelo zokudonsa kusevisi yokuhlanganisa eqhubekayo engazange kuxoxwe ngayo ngenhla, qala uqiniseke ukuthi ngeke ube nezinkinga nge-caching.

Ngiyabonga ukulalela kwenu. Uma okuthile kungasebenzi, zizwe ukhululekile ukusibhalela ku ukwesekwa. Sizokweluleka futhi sisize.

Ukuhlaziywa kokuzibophezela nokudonsa izicelo kuTravis CI, Buddy kanye ne-AppVeyor usebenzisa i-PVS-Studio

Uma ufuna ukwabelana ngalesi sihloko nezithameli ezikhuluma isiNgisi, sicela usebenzise isixhumanisi sokuhumusha: UMaxim Zvyagintsev. Ukuhlaziywa kokuzibophezela nokudonsa izicelo kuTravis CI, Buddy kanye ne-AppVeyor usebenzisa i-PVS-Studio.

Source: www.habr.com

Engeza amazwana