Famakafakana ny fanoloran-tena sy ny fangatahana fangatahana ao amin'ny Travis CI, Buddy ary AppVeyor mampiasa PVS-Studio

Famakafakana ny fanoloran-tena sy ny fangatahana fangatahana ao amin'ny Travis CI, Buddy ary AppVeyor mampiasa PVS-Studio
Ao amin'ny mpandinika PVS-Studio ho an'ny fiteny C sy C ++ amin'ny Linux sy macOS, manomboka amin'ny version 7.04, dia nisy fotoana fitsapana niseho mba hanamarinana ny lisitry ny rakitra voatondro. Amin'ny fampiasana ny maody vaovao, azonao atao ny manitsy ny mpanadihady mba hanamarinana ny fangatahana sy ny fangatahana. Ity lahatsoratra ity dia hampiseho anao ny fomba fametrahana lisitry ny lisitry ny tetikasa GitHub amin'ny rafitra CI (Continuous Integration) malaza toa an'i Travis CI, Buddy ary AppVeyor.

Fomba fisavana lisitry ny rakitra

PVS Studio dia fitaovana hamantarana ny lesoka sy ny mety ho vulnerability ao amin'ny kaody loharanon'ny programa voasoratra amin'ny C, C++, C# ary Java. Miasa amin'ny rafitra 64-bit amin'ny Windows, Linux ary macOS.

Ny dikan'ny PVS-Studio 7.04 ho an'ny Linux sy macOS dia manana fomba fanamarinana ny lisitry ny rakitra loharano. Ity dia miasa ho an'ny tetikasa izay manana rafitra fananganana mamela anao hamorona rakitra compile_commands.json. Ilaina ho an'ny mpandinika ny maka vaovao momba ny fanangonana ireo rakitra voatondro. Raha toa ka tsy manohana ny famoronana rakitra compile_commands.json ny rafitra fananganana anao dia azonao atao ny manandrana mamorona rakitra toy izany amin'ny fampiasana ny utility Bear.

Ary koa, ny fomba fanamarinana ny lisitry ny rakitra dia azo ampiasaina miaraka amin'ny strace trace amin'ny compiler run (pvs-studio-analyzer trace). Mba hanaovana izany dia mila manatontosa fananganana feno amin'ny tetikasa ianao ary manara-maso azy io mba hanangonan'ny mpandinika ny fampahalalana feno momba ny mari-pamantarana fanangonana ny rakitra rehetra voamarika.

Na izany aza, ity safidy ity dia manana lesoka lehibe - na mila manao dingana feno amin'ny tetikasa manontolo ianao isaky ny fanombohana, izay mifanohitra amin'ny hevitry ny fanamarinana haingana. Na, raha mitahiry ny valin'ny trace ianao, dia mety hivadika ho tsy feno ny fandefasana manaraka ny mpandinika raha miova ny firafitry ny fiankinan'ny rakitra loharano aorian'ny fanarahana (ohatra, misy #include vaovao ampiana amin'ny iray amin'ireo rakitra loharano).

Noho izany, tsy manoro hevitra ny fampiasana ny fomba fisavana lisitry ny rakitra miaraka amin'ny diarin'ny trace hanamarina ny commits na ny fisintonana fangatahana. Raha toa ianao ka afaka manao fananganana incremental rehefa manamarina ny fanoloran-tena, dia diniho ny fampiasana ny fomba fanadihadiana incremental.

Ny lisitry ny rakitra loharano ho an'ny famakafakana dia voatahiry ao anaty rakitra lahatsoratra ary alefa any amin'ny mpanadihady amin'ny fampiasana ny parameter -S:

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

Ity rakitra ity dia mamaritra ny lalana havanana na tanteraka mankany amin'ny rakitra, ary ny rakitra vaovao tsirairay dia tokony ho eo amin'ny tsipika vaovao. Azo atao ny mamaritra tsy ny anaran'ny rakitra ho an'ny fanadihadiana, fa ny lahatsoratra isan-karazany koa. Ny parser dia hahita fa tsy rakitra ity ary tsy hiraharaha ny tsipika. Ity dia mety ilaina amin'ny fanehoan-kevitra raha toa ka voatondro amin'ny tanana ny rakitra. Na izany aza, matetika ny lisitr'ireo rakitra dia hatsangana mandritra ny famandrihana CI, ohatra ny rakitra avy amin'ny commit na fangatahana fisintonana.

Amin'izao fotoana izao, amin'ny fampiasana an'io fomba io, azonao atao ny manandrana haingana ny code vaovao alohan'ny hidirany ao amin'ny sampana fampandrosoana lehibe. Mba hahafahan'ny rafitra fanamarinana mamaly ny fampitandremana analyzer, ny utility plog-converter saina nampiana --manondro-fampitandremana:

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

Miaraka amin'ity saina ity, ny mpanova dia hamerina fehezan-dalΓ na tsy aotra raha misy fampitandremana ao amin'ny tatitry ny mpanadihady. Amin'ny fampiasana ny kaody fiverenana, azonao atao ny manakana ny fihodirana mialoha, manao na misintona fangatahana, ary asehoy eo amin'ny efijery ny tatitra momba ny analyse, mizara izany na mandefa azy amin'ny mailaka.

Fanamarihana. Ny fotoana voalohany hanombohanao mandinika ny lisitry ny rakitra, ny tetikasa manontolo dia hodinihina, satria ny mpandinika dia mila mamorona rakitra miankina amin'ny rakitra loharanon'ny tetikasa amin'ny rakitra lohapejy. Ity dia singa iray amin'ny fanaparitahana rakitra C sy C ++. Amin'ny ho avy, ny rakitra fiankinan-doha dia azo atao cache ary havaozin'ny mpanadihady ho azy. Ny tombony amin'ny fanaraha-maso ny commits rehefa mampiasa ny fomba fisavana fichier amin'ny alΓ lan'ny fampiasana ny fomba fanaparitahana incremental dia io rakitra io ihany no tokony ho voatahiry, fa tsy ny rakitra zavatra.

Fitsipika ankapobeny amin'ny famakafakana fangatahana fisintonana

Mitaky fotoana be ny famakafakana ny tetikasa manontolo, noho izany dia misy dikany ny manamarina ny ampahany amin'izy io ihany. Ny olana dia mila manasaraka ireo rakitra vaovao amin'ny rakitra tetikasa hafa ianao.

Diniho ny ohatra iray amin'ny hazo commit misy sampana roa:

Famakafakana ny fanoloran-tena sy ny fangatahana fangatahana ao amin'ny Travis CI, Buddy ary AppVeyor mampiasa PVS-Studio

Aoka hatao hoe ny fanoloran-tena A1 misy kaody be dia be izay efa voamarika. Talohan'izay dia nanao sampana avy amin'ny commit izahay A1 ary nanova rakitra sasany.

Mazava ho azy fa voamarikao izany taorian’izay A1 nisy commit roa hafa, fa ireo koa dia fitambaran'ny sampana hafa, satria tsy manolo-tena amin'ny tompony. Ary tonga izao ny fotoana hotfix vonona. Noho izany, nisy fangatahana misintona ho an'ny fampitambatra B3 ΠΈ A3.

Mazava ho azy fa azo atao ny manamarina ny vokatra iray manontolo amin'ny fampifangaroana azy ireo, saingy ho lava loatra izany ary tsy mitombina, satria rakitra vitsivitsy no niova. Noho izany dia tsara kokoa ny mamakafaka ireo niova.

Mba hanaovana izany, dia mahazo ny fahasamihafana misy eo amin'ny sampana isika, ao amin'ny HEAD amin'ny sampana izay tiantsika hitambatra ho master:

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

$MERGE_BASE hodinihintsika amin’ny antsipiriany any aoriana. Ny zava-misy dia tsy ny serivisy CI rehetra no manome ny fampahalalana ilaina momba ny fototra ho an'ny fampivondronana, ka isaky ny tsy maintsy mamorona fomba vaovao hahazoana an'io data io ianao. Izany dia holazaina etsy ambany amin'ny tsirairay amin'ireo serivisy tranonkala voalaza.

Noho izany, nahazo ny fahasamihafana misy eo amin'ireo sampana, na ny marimarina kokoa, ny lisitry ny anaran'ny rakitra izay niova. Ankehitriny dia mila manome ny rakitra .pvs-pr.list (naverinay ny vokatra etsy ambony) mankany amin'ny mpandinika:

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

Aorian'ny famakafakana dia mila manova ny rakitra log (PVS-Studio.log) ho endrika azo vakina isika:

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

Ity baiko ity dia mitanisa ireo lesoka ao stderr (standard error output stream).

Eto ihany isika dia tsy mila mampiseho fahadisoana fotsiny, fa koa mampahafantatra ny serivisy ho an'ny fivoriambe sy ny fitsapana momba ny fisian'ny olana. Mba hanaovana izany, dia nisy saina nampiana ny mpanova -W (--manondro-fampitandremana). Raha misy fampitandremana mpandinika iray farafahakeliny, ny kaody miverina amin'ny utility plog-converter dia hiova ho 2, izay indray dia hampahafantatra ny serivisy CI fa misy ny mety ho lesoka amin'ny fichier fangatahana.

Travis C.I.

Ny fanamafisana dia atao amin'ny endrika rakitra .travis.yml. Ho fanamorana, manoro hevitra anao aho hametraka ny zava-drehetra amin'ny script bash misaraka miaraka amin'ireo fiasa izay hantsoina avy amin'ny rakitra .travis.yml (bash scriptname.sh function_name).

Hanampy ny code ilaina amin'ny script on bash, ka mahazo fampiasa bebe kokoa izahay. Ao amin'ny fizarana hametraka andao hanoratra izao manaraka izao:

install:
  - bash .travis.sh travis_install

Raha manana torolalana ianao dia azonao atao ny mamindra azy ireo amin'ny script amin'ny alΓ lan'ny fanesorana ireo tsipika.

Andao hanokatra ny rakitra .travis.sh ary ampio ny setup analyzer amin'ny asa 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 
}

Andeha isika hanampy amin'ny fizarana teny mihazakazaka analyse:

script:
  - bash .travis.sh travis_script

Ary amin'ny script 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
}

Ity kaody ity dia tsy maintsy atao aorian'ny fananganana ny tetikasa, ohatra, raha manana fananganana CMake ianao:

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

Ho toy izao izany:

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
}

Efa voamarikao angamba ireo fari-piainan'ny tontolo iainana voatondro. $TRAVIS_PULL_REQUEST ΠΈ $TRAVIS_BRANCH. Travis CI dia manambara azy ireo samirery:

  • $TRAVIS_PULL_REQUEST mitahiry ny laharana fangatahana fisintonana, na disoraha sampana mahazatra izany;
  • $TRAVIS_REPO_SLUG mitahiry ny anaran'ny fitehirizana tetikasa.

Ny algorithm amin'ity asa ity:

Famakafakana ny fanoloran-tena sy ny fangatahana fangatahana ao amin'ny Travis CI, Buddy ary AppVeyor mampiasa PVS-Studio
Travis CI dia mamaly ny fiverenana kaody, noho izany ny fisian'ny fampitandremana dia hilaza amin'ny serivisy hanamarina ny commit ho buggy.

Andeha hojerentsika akaiky ity andalana code ity:

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

Ny zava-misy dia ny Travis CI dia manambatra ny sampana ho azy mandritra ny famakafakana ny fangatahana fisintonana:

Famakafakana ny fanoloran-tena sy ny fangatahana fangatahana ao amin'ny Travis CI, Buddy ary AppVeyor mampiasa PVS-Studio
Noho izany dia mandinika isika A4, fa tsy B3->A3. Noho io endri-javatra io, dia mila kajy ny fahasamihafana avy amin'ny А3, izay tampon'ny sampana fotsiny avy niaviany.

Tsipiriany manan-danja iray sisa - fitehirizana ny fiankinan'ny fisie lohapejy amin'ireo singa fandikan-teny natambatra (*.c, *.cc, *.cpp, sns.). Ny mpandinika dia manisa ireo fiankinana ireo amin'ny fanombohana voalohany amin'ny fomba fanamarinana ny lisitry ny rakitra ary avy eo dia mitahiry azy ireo ao amin'ny lahatahiry .PVS-Studio. Ny Travis CI dia mamela anao hanao cache lahatahiry, noho izany dia hotehirizinay ny angona lahatahiry .PVS-Studio/:

cache:
  directories:
    - .PVS-Studio/

Ity kaody ity dia mila ampiana amin'ny rakitra .travis.yml. Ity lahatahiry ity dia mitahiry angon-drakitra isan-karazany voangona taorian'ny famakafakana, izay hanafaingana be ny fandehan'ny famakafakana ny lisitry ny rakitra na ny famakafakana fanampiny. Raha tsy vita izany, dia tena hamakafaka ny rakitra rehetra ny analyse isaky ny mandeha.

Buddy

Tahaka an'i Travis C.I., Buddy manome fahafahana hanorina sy hizaha tetik'asa izay voatahiry ao amin'ny GitHub. Tsy toa an'i Travis CI, dia namboarina ao amin'ny interface Internet izy io (misy ny fanohanana bash), noho izany dia tsy ilaina ny mitahiry rakitra fanamafisana ao amin'ny tetikasa.

Voalohany indrindra, mila manampy hetsika vaovao amin'ny tsipika fananganana isika:

Famakafakana ny fanoloran-tena sy ny fangatahana fangatahana ao amin'ny Travis CI, Buddy ary AppVeyor mampiasa PVS-Studio
Lazao ny compiler izay nampiasaina hanamboarana ny tetikasa. Mariho ny kaontenera docker napetraka amin'ity hetsika ity. Ohatra, misy container manokana ho an'ny GCC:

Famakafakana ny fanoloran-tena sy ny fangatahana fangatahana ao amin'ny Travis CI, Buddy ary AppVeyor mampiasa PVS-Studio
Andeha isika hametraka PVS-Studio sy ny fitaovana ilaina:

Famakafakana ny fanoloran-tena sy ny fangatahana fangatahana ao amin'ny Travis CI, Buddy ary AppVeyor mampiasa PVS-Studio
Ampio amin'ny tonian-dahatsoratra ireto andalana manaraka ireto:

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

Andeha isika handeha amin'ny tabilao Run (ilay kisary voalohany) ary ampio ity kaody manaraka ity amin'ny sahan'ny mpanonta mifanaraka aminy:

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

Raha namaky ny fizarana ao amin'ny Travs-CI ianao dia efa mahazatra anao ity kaody ity, saingy misy dingana vaovao izao:

Famakafakana ny fanoloran-tena sy ny fangatahana fangatahana ao amin'ny Travis CI, Buddy ary AppVeyor mampiasa PVS-Studio
Ny zava-misy dia izao isika tsy mandinika ny vokatry ny merge, fa ny LOHAN'ny sampana izay nanaovana ny fangatahana fisintonana:

Famakafakana ny fanoloran-tena sy ny fangatahana fangatahana ao amin'ny Travis CI, Buddy ary AppVeyor mampiasa PVS-Studio
Noho izany dia ao anatin'ny fanekena misy fepetra isika B3 ary mila maka ny fahasamihafana isika 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

To mamaritra A3 Andao hampiasa ny GitHub API:

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

Nampiasa ireto variable ireto nomen'i Buddy izahay:

  • $BUDDY_EXECUTION_PULL_REQEUST_NO - laharana fangatahana misintona;
  • $BUDDY_REPO_SLUG - fitambarana solon'anarana sy tahiry (ohatra max / test).

Andeha hotehirizina amin'ny alalan'ny bokotra etsy ambany ny fanovana, ary avelao ny famakafakana ny fangatahana:

Famakafakana ny fanoloran-tena sy ny fangatahana fangatahana ao amin'ny Travis CI, Buddy ary AppVeyor mampiasa PVS-Studio
Tsy toa an'i Travis CI, tsy mila mamaritra isika .pvs-studio ho an'ny caching, satria i Buddy dia mitahiry ho azy ny rakitra rehetra ho an'ny fandefasana manaraka. Noho izany, ny zavatra farany tavela dia ny mitahiry ny fidirana sy ny tenimiafina ho an'ny PVS-Studio ao amin'ny Buddy. Aorian'ny fitehirizana ny fanovana dia hiverina amin'ny Pipeline isika. Mila mandeha amin'ny fametrahana variables isika ary ampio ny fidirana sy ny fanalahidy ho an'ny PVS-Studio:

Famakafakana ny fanoloran-tena sy ny fangatahana fangatahana ao amin'ny Travis CI, Buddy ary AppVeyor mampiasa PVS-Studio
Aorian'izay, ny fisehon'ny fangatahana fisintonana na fanolorana vaovao dia hiteraka fisavana. Raha misy hadisoana ny commit, dia hanondro izany i Buddy amin'ny pejy fangatahana fisarihana.

AppVeyor

Ny fametrahana ny AppVeyor dia mitovy amin'ny Buddy, satria ny zava-drehetra dia mitranga ao amin'ny interface Internet ary tsy ilaina ny manampy rakitra *.yml ao amin'ny tahiry tetikasa.

Andeha ho any amin'ny tabilao Settings ao amin'ny topimaso ny tetikasa:

Famakafakana ny fanoloran-tena sy ny fangatahana fangatahana ao amin'ny Travis CI, Buddy ary AppVeyor mampiasa PVS-Studio
Andeha hodinihintsika midina ity pejy ity ary avelao ny fitahirizana cache ho an'ny fananganana fangatahana fisintonana:

Famakafakana ny fanoloran-tena sy ny fangatahana fangatahana ao amin'ny Travis CI, Buddy ary AppVeyor mampiasa PVS-Studio
Andeha isika ho any amin'ny tabilao Environment, izay mamaritra ny sary hatsangana sy ny fari-piainana ilaina:

Famakafakana ny fanoloran-tena sy ny fangatahana fangatahana ao amin'ny Travis CI, Buddy ary AppVeyor mampiasa PVS-Studio
Raha efa namaky ny fizarana teo aloha ianao, dia fantatrao tsara ireo fari-piainana roa ireo βˆ’ PVS_KEY ΠΈ PVS_USERNAME. Raha tsy izany, avelao aho hampahatsiahy anao fa ilaina ny manamarina ny fahazoan-dΓ lana amin'ny mpandinika PVS-Studio. Amin'ny hoavy, hihaona amin'izy ireo indray isika amin'ny script Bash.

Ao amin'ny pejy iray etsy ambany ihany, mariho ny lahatahiry ho an'ny caching:

Famakafakana ny fanoloran-tena sy ny fangatahana fangatahana ao amin'ny Travis CI, Buddy ary AppVeyor mampiasa PVS-Studio
Raha tsy manao izany isika dia handinika ny tetikasa manontolo fa tsy rakitra roa, fa hahazo ny vokatra mifototra amin'ny rakitra voatondro. Noho izany dia zava-dehibe ny mampiditra ny anaran'ny lahatahiry marina.

Fotoana hitsapana ny script izao. Sokafy ny tabilao Tests ary mifidiana Script:

Famakafakana ny fanoloran-tena sy ny fangatahana fangatahana ao amin'ny Travis CI, Buddy ary AppVeyor mampiasa PVS-Studio
Apetaho amin'ity endrika ity ity kaody manaraka ity:

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

Andeha hojerentsika ity ampahany amin'ny code manaraka ity:

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

Ny fanendrena manokana amin'ny sandan'ny baiko pwd amin'ny fari-piainana iray izay tokony hitahiry io sanda default io dia toa hafahafa raha vao jerena, na izany aza, hanazava ny zava-drehetra aho ao anatin'ny fotoana fohy.

Nandritra ny nananganana ny mpandinika tao amin'ny AppVeyor dia nifanena tamin'ny fihetsika hafahafa nataon'ilay mpanadihady aho. Amin'ny lafiny iray, niasa tsara ny zava-drehetra, saingy tsy nanomboka ny fanadihadiana. Nandany fotoana be aho nahatsikaritra fa ao amin'ny lahatahiry /home/appveyor/projects/testcalc/ isika, ary ny mpandinika dia azo antoka fa ao amin'ny /opt/appveyor/build-agent/. Dia tsapako fa somary lainga ny fari-piadidiana $PWD. Noho izany antony izany, nanavao ny sandany aho alohan'ny hanombohan'ny fanadihadiana.

Ary avy eo ny zava-drehetra, toy ny teo aloha:

Famakafakana ny fanoloran-tena sy ny fangatahana fangatahana ao amin'ny Travis CI, Buddy ary AppVeyor mampiasa PVS-Studio
Diniho izao sombintsombiny manaraka izao:

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

Ao anatin'izany no ahazoantsika ny fahasamihafana eo amin'ireo sampana izay nanambarana ny fangatahana fisintonana. Mba hanaovana izany dia mila ireto fari-piainan'ny tontolo iainana manaraka ireto isika:

  • $APPVEYOR_PULL_REQUEST_NUMBER - laharan'ny fangatahana;
  • $APPVEYOR_REPO_NAME - solonanarana sy fitehirizana tetikasa.

famaranana

Mazava ho azy fa tsy nandinika ny serivisy fampidirana mitohy rehetra izahay, na izany aza, samy manana ny fepetra momba ny asa mitovy. Ankoatra ny caching, ny serivisy tsirairay dia manao ny "bisikileta" azy manokana, noho izany dia hafa foana ny zava-drehetra.

Any amin'ny toerana iray, toy ny ao amin'ny Travis-CI, andalana roa amin'ny code sy caching dia miasa tsara; any ho any, toy ny ao amin'ny AppVeyor, mila mamaritra fotsiny ny lahatahiry ao amin'ny toe-javatra; fa any amin'ny toerana iray dia mila mamorona fanalahidy tsy manam-paharoa ianao ary manandrana mandresy lahatra ny rafitra hanome anao fahafahana hanodina ny sombintsombiny cache. Noho izany, raha te-hametraka famakafakana fangatahana fisintonana amin'ny serivisy fampidirana mitohy izay tsy noresahina etsy ambony ianao, dia ataovy izay hahazoana antoka fa tsy hanana olana amin'ny caching ianao.

Misaotra anao noho ny fifantohanao. Raha misy zavatra tsy mandeha dia aza misalasala manoratra aminay amin'ny MANAMPY. Hanoro hevitra sy hanampy izahay.

Famakafakana ny fanoloran-tena sy ny fangatahana fangatahana ao amin'ny Travis CI, Buddy ary AppVeyor mampiasa PVS-Studio

Raha te hizara ity lahatsoratra ity amin'ny mpihaino miteny anglisy ianao dia ampiasao ny rohy fandikana: Maxim Zvyagintsev. Famakafakana ny fanoloran-tena sy ny fangatahana fangatahana ao amin'ny Travis CI, Buddy ary AppVeyor mampiasa PVS-Studio.

Source: www.habr.com

Add a comment