Ka nānā ʻana o nā hana a huki i nā noi ma Travis CI, Buddy a me AppVeyor me ka hoʻohana ʻana iā PVS-Studio

Ka nānā ʻana o nā hana a huki i nā noi ma Travis CI, Buddy a me AppVeyor me ka hoʻohana ʻana iā PVS-Studio
I ka PVS-Studio analyzer no nā ʻōlelo C a me C ++ ma Linux a me macOS, e hoʻomaka ana mai ka mana 7.04, ua ʻike ʻia kahi koho hoʻāʻo e nānā i ka papa inoa o nā faila i kuhikuhi ʻia. Ke hoʻohana nei i ke ʻano hou, hiki iā ʻoe ke hoʻonohonoho i ka mea ananala e nānā i nā hana a huki i nā noi. E haʻi kēia ʻatikala iā ʻoe pehea e hoʻonohonoho ai i ka nānā ʻana i ka papa inoa o nā faila i hoʻololi ʻia o kahi papahana GitHub i nā ʻōnaehana CI (Continuous Integration) kaulana e like me Travis CI, Buddy a me AppVeyor.

Ke ʻano nānā papa inoa waihona

ʻO PVS-Studio he mea hana no ka ʻike ʻana i nā hewa a me nā nāwaliwali i ke kumu kumu o nā papahana i kākau ʻia ma C, C++, C# a me Java. Hana ma nā ʻōnaehana 64-bit ma Windows, Linux a me macOS.

I ka mana PVS-Studio 7.04 no Linux a me macOS, ua ʻike ʻia kahi ʻano no ka nānā ʻana i ka papa inoa o nā faila kumu. Hana kēia no nā papahana nona ka ʻōnaehana kūkulu e hiki ai iā ʻoe ke hana i kahi faila compile_commands.json. Pono ka mea anaana e unuhi i ka ʻike e pili ana i ka hui ʻana o nā faila i kuhikuhi ʻia. Inā ʻaʻole kākoʻo kāu ʻōnaehana kūkulu i ka hoʻokumu ʻana i ka faila compile_commands.json, hiki iā ʻoe ke hoʻāʻo e hana i ia faila me ka hoʻohana ʻana i ka pono. Bear.

Eia kekahi, hiki ke hoʻohana pū ʻia ke ʻano loiloi papa inoa waihona me ka strace trace log o ka hoʻokuʻu ʻana o ka mea hoʻopili (pvs-studio-analyzer trace). No ka hana ʻana i kēia, pono ʻoe e hana mua i kahi kūkulu piha o ka papahana a hahai iā ia i ʻohi ai ka mea nāna e hōʻiliʻili i ka ʻike piha e pili ana i nā ʻāpana compilation o nā faila a pau e nānā ʻia.

Eia nō naʻe, he drawback koʻikoʻi kēia koho - pono ʻoe e hana i kahi hana piha piha o ka papahana holoʻokoʻa i kēlā me kēia manawa āu e holo ai, ʻo ia ka mea e kūʻē i ka manaʻo o ka nānā wikiwiki ʻana i kahi hana. A i ʻole, inā ʻoe e hūnā i ka hopena o ka trace ponoʻī, ʻaʻole i hoʻopau ʻia nā holo hope o ka mea kānana inā hoʻololi ke ʻano hilinaʻi o nā faila kumu ma hope o ka trace (no ka laʻana, hoʻohui ʻia kahi #include hou i kekahi o nā faila kumu).

No laila, ʻaʻole mākou e paipai i ka hoʻohana ʻana i ke ʻano loiloi papa inoa faila me ka trace log e nānā i nā commits a huki i nā noi. Inā hiki iā ʻoe ke hana i kahi kūkulu hoʻonui i ka wā e nānā ai i kahi commit, e noʻonoʻo e hoʻohana i ke ʻano hoʻomāhuahua ʻana.

Mālama ʻia ka papa inoa o nā waihona kumu no ka nānā ʻana i kahi faila kikokikona a hāʻawi ʻia i ka mea hoʻoponopono me ka hoʻohana ʻana i ke ʻano -S:

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

Hōʻike kēia faila i nā ala pili a pili pono paha i nā faila, a pono kēlā me kēia faila hou ma kahi laina hou. ʻAe ʻia ka wehewehe ʻana ʻaʻole wale i nā inoa faila no ka nānā ʻana, akā i nā kikokikona like ʻole. E ʻike ka mea hoʻoponopono ʻaʻole kēia he faila a e haʻalele i ka laina. Hiki ke hoʻohana ʻia kēia no ka ʻōlelo ʻana inā hoʻonohonoho lima ʻia nā faila. Eia nō naʻe, e hana pinepine ʻia kahi papa inoa o nā faila i ka wā o ka nānā ʻana ma CI, no ka laʻana, hiki i kēia mau faila mai kahi noi commit a huki paha.

I kēia manawa, me ka hoʻohana ʻana i kēia ʻano, hiki iā ʻoe ke nānā wikiwiki i ke code hou ma mua o ke komo ʻana i ka lālā hoʻomohala nui. E hōʻoia i ka pane ʻana o ka ʻōnaehana scanning i nā ʻōlelo aʻoaʻo analyer, ʻo ka pono mea hoʻololi-palapala hoʻohui ʻia ka hae --indicat-warnings:

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

Me kēia hae, e hoʻihoʻi ka mea hoʻololi i ka helu helu ʻole inā loaʻa nā ʻōlelo aʻo i loko o ka hōʻike loiloi. Ke hoʻohana nei i ke code hoʻihoʻi, hiki iā ʻoe ke ālai i kahi hook precommit, commit, a i ʻole huki noi, a hiki ke hōʻike ʻia, kaʻana like, a i hoʻouna ʻia ma ka leka uila ka hōʻike analyer i hana ʻia.

Nānā. Ke hoʻomaka mua ʻoe e nānā i kahi papa inoa o nā faila, e nānā ʻia ka papahana holoʻokoʻa, no ka mea pono ka mea anaana e hoopuka i ka waihona o na mea hilinai o na waihona kumu papahana ma na waihona poo. He hiʻohiʻona kēia o ka nānā ʻana i nā faila C a me C++. I ka wā e hiki mai ana, hiki ke hoʻopaʻa ʻia ka waihona hilinaʻi a hoʻonui ʻia e ka mea ananala. ʻO ka maikaʻi o ka nānā ʻana i ka wā e hoʻohana ai i ke ʻano loiloi papa inoa faila ma mua o ka hoʻohana ʻana i ke ʻano loiloi incremental ʻo ia wale nō ka mea e pono ai ʻoe e hūnā i kēlā faila a ʻaʻole nā ​​faila mea.

Nā loina maʻamau o ka ʻimi noiʻi huki

ʻO ka nānā ʻana i ka papahana holoʻokoʻa e lōʻihi ka manawa, no laila he mea kūpono ke nānā i kahi ʻāpana wale nō. ʻO ka pilikia, pono ʻoe e hoʻokaʻawale i nā faila hou mai ke koena o nā faila papahana.

E nānā kākou i kahi laʻana o kahi lāʻau commit me nā lālā ʻelua:

Ka nānā ʻana o nā hana a huki i nā noi ma Travis CI, Buddy a me AppVeyor me ka hoʻohana ʻana iā PVS-Studio

E noʻonoʻo kākou i kēlā hana A1 loaʻa i kahi helu helu nui i hoʻāʻo ʻia. Ma mua iki ua hana mākou i lālā mai ka commit A1 a hoʻololi i kekahi mau faila.

Ua ʻike ʻoe ma hope A1 ʻelua mau hana hou i hana ʻia, akā he hui pū kēia o nā lālā ʻē aʻe, no ka mea, ʻaʻole mākou e hoʻohiki haku. A i kēia manawa ua hiki mai ka manawa hotfix mākaukau. ʻO ia ke kumu i puka mai ai kahi noi huki no ka hui ʻana B3 и A3.

ʻOiaʻiʻo, hiki ke nānā i ka hopena holoʻokoʻa o kā lākou hui ʻana, akā ʻoi aku ka nui o ka manawa a me ke kūpono ʻole, no ka mea he liʻiliʻi nā faila i hoʻololi ʻia. No laila, ʻoi aku ka maikaʻi o ka nānā ʻana i nā mea i hoʻololi ʻia.

No ka hana ʻana i kēia, loaʻa iā mākou ka ʻokoʻa ma waena o nā lālā, aia ma ke poʻo o ka lālā a mākou e makemake ai e hoʻohui i haku:

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

$MERGE_BASE e nana pono kakou mahope. ʻO ka ʻoiaʻiʻo, ʻaʻole kēlā me kēia lawelawe CI e hāʻawi i ka ʻike kūpono e pili ana i ka waihona no ka hoʻohui ʻana, no laila i kēlā me kēia manawa pono ʻoe e hele mai me nā ala hou e loaʻa ai kēia ʻikepili. E wehewehe ʻia kēia ma lalo o kēlā me kēia lawelawe pūnaewele i wehewehe ʻia.

No laila, loaʻa iā mākou ka ʻokoʻa ma waena o nā lālā, a i ʻole, kahi papa inoa o nā faila i hoʻololi ʻia. I kēia manawa pono mākou e hāʻawi i ka faila .pvs-pr.list (ua hoʻihoʻi mākou i ka hopena ma luna aʻe) i ka mea hoʻoponopono:

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

Ma hope o ka nānā ʻana, pono mākou e hoʻololi i ka faila log (PVS-Studio.log) i kahi ʻano maʻalahi e heluhelu:

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

E papa inoa kēia kauoha i nā hewa i loko stderr (puka memo hewa maʻamau).

I kēia manawa pono mākou e hōʻike i nā hewa wale nō, akā e hoʻomaopopo pū i kā mākou lawelawe no ka hui ʻana a me ka hoʻāʻo ʻana e pili ana i nā pilikia. No kēia kumu, ua hoʻohui ʻia kahi hae i ka mea hoʻololi -W (--indicat-warnings). Inā loaʻa ma ka liʻiliʻi hoʻokahi ʻōlelo aʻoaʻo analyer, ʻo ke code hoʻihoʻi pono mea hoʻololi-palapala e hoʻololi i ka 2, ʻo ia hoʻi, e hoʻomaopopo i ka lawelawe CI e pili ana i ka hiki ʻana o nā hewa kūpono i nā faila noi huki.

ʻO Travis CI

Hana ʻia ka hoʻonohonoho ma ke ʻano he faila .travis.yml. No ka maʻalahi, ke aʻo aku nei au iā ʻoe e hoʻokomo i nā mea āpau i kahi palapala bash ʻokoʻa me nā hana e kāhea ʻia mai ka faila .travis.yml (bash script_name.sh function_name).

E hoʻohui mākou i ke code pono i ka palapala ma ke kī, ma kēia ala e loaʻa ai iā mākou nā hana hou aku. Ma ka pauku e hoʻohui e kakau kakou i keia:

install:
  - bash .travis.sh travis_install

Inā loaʻa iā ʻoe nā ʻōlelo aʻoaʻo, hiki iā ʻoe ke hoʻololi iā lākou i loko o ka palapala, e wehe i nā hyphens.

E wehe kākou i ka faila .travis.sh a hoʻohui i ka hoʻonohonoho ʻanakala i ka hana 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 
}

I kēia manawa e hoʻohui i ka ʻāpana kōmi'ōkuhi e holo ana i ka noonoo ana:

script:
  - bash .travis.sh travis_script

A ma ka palapala 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
}

Pono e holo kēia code ma hope o ke kūkulu ʻana i ka papahana, no ka laʻana, inā ua kūkulu ʻoe ma CMake:

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

E like me kēia:

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
}

Ua ʻike mua paha ʻoe i kēia mau ʻano hoʻololi kaiapuni $TRAVIS_PULL_REQUEST и $TRAVIS_BRANCH. Hoʻolaha kūʻokoʻa ʻo Travis CI iā lākou:

  • $TRAVIS_PULL_REQUEST mālama i ka helu noi huki a i ʻole wahahee, ina he lala mau keia;
  • $TRAVIS_REPO_SLUG mālama i ka inoa o ka waihona papahana.

ʻO ka algorithm no kēia hana:

Ka nānā ʻana o nā hana a huki i nā noi ma Travis CI, Buddy a me AppVeyor me ka hoʻohana ʻana iā PVS-Studio
Pane ʻo Travis CI i nā code hoʻihoʻi, no laila e haʻi ka hele ʻana o nā ʻōlelo aʻo i ka lawelawe e hōʻailona i ka hana i loaʻa nā hewa.

I kēia manawa, e nānā pono kākou i kēia laina code:

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

ʻO ka ʻoiaʻiʻo ʻo Travis CI e hui pū i nā lālā i ka wā e nānā ana i kahi noi huki:

Ka nānā ʻana o nā hana a huki i nā noi ma Travis CI, Buddy a me AppVeyor me ka hoʻohana ʻana iā PVS-Studio
No laila mākou e kālailai A4,ʻaʻole B3->A3. Ma muli o kēia hiʻohiʻona, pono mākou e helu i ka ʻokoʻa me A3, ʻo ia ka luna o ka lālā mai nā kumu.

Aia hoʻokahi kikoʻī koʻikoʻi i koe - ke kāʻei ʻana i nā hilinaʻi o nā faila poʻomanaʻo ma nā ʻāpana unuhi i hui ʻia (*.c, *.cc, *.cpp, etc.). E helu ana ka mea anaana i keia mau hilinai i ka wa i hoomaka mua ia ai ma ke ano o ka nana ana i ka papa inoa o na waihona a laila e hoola ia lakou ma ka papa kuhikuhi .PVS-Studio. ʻAe ʻo Travis CI iā ʻoe e hūnā i nā faila, no laila e mālama mākou i ka ʻikepili papa kuhikuhi .PVS-Studio/:

cache:
  directories:
    - .PVS-Studio/

Pono e hoʻohui ʻia kēia code i ka faila .travis.yml. Mālama kēia papa kuhikuhi i nā ʻikepili like ʻole i hōʻiliʻili ʻia ma hope o ka hoʻopaʻa ʻana, ka mea e hoʻolalelale i nā holo hope o ka nānā ʻana i ka papa inoa o nā faila a i ʻole ka hoʻonui ʻana. Inā ʻaʻole i hana ʻia kēia, a laila e loiloi maoli ka mea anana i nā faila āpau i kēlā me kēia manawa.

Buddy

E like me Travis CI, Buddy hāʻawi i ka hiki ke kūkulu a hoʻāʻo i nā papahana i mālama ʻia ma GitHub. ʻAʻole like me Travis CI, ua hoʻonohonoho ʻia ma ka ʻaoʻao pūnaewele (loaʻa ke kākoʻo bash), no laila ʻaʻohe pono e mālama i nā faila hoʻonohonoho i ka papahana.

ʻO ka mea mua, pono mākou e hoʻohui i kahi hana hou i ka laina hui:

Ka nānā ʻana o nā hana a huki i nā noi ma Travis CI, Buddy a me AppVeyor me ka hoʻohana ʻana iā PVS-Studio
E hōʻike i ka mea hoʻopili i hoʻohana ʻia e kūkulu i ka papahana. E nānā i ka pahu docker i hoʻokomo ʻia i kēia hana. No ka laʻana, aia kahi pahu kūikawā no GCC:

Ka nānā ʻana o nā hana a huki i nā noi ma Travis CI, Buddy a me AppVeyor me ka hoʻohana ʻana iā PVS-Studio
I kēia manawa e hoʻokomo i ka PVS-Studio a me nā pono pono:

Ka nānā ʻana o nā hana a huki i nā noi ma Travis CI, Buddy a me AppVeyor me ka hoʻohana ʻana iā PVS-Studio
E hoʻohui i kēia mau laina i ka mea hoʻoponopono:

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

I kēia manawa, e hele kāua i ka ʻaoʻao Run (ikona mua) a hoʻohui i kēia code i ke kahua hoʻoponopono pili.

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

Inā heluhelu ʻoe i ka ʻāpana ma Travs-CI, a laila ua kamaʻāina kēia code iā ʻoe, akā naʻe, aia kahi pae hou:

Ka nānā ʻana o nā hana a huki i nā noi ma Travis CI, Buddy a me AppVeyor me ka hoʻohana ʻana iā PVS-Studio
ʻO ka mea ʻoiaʻiʻo, ʻaʻole mākou e loiloi i ka hopena o ka hui ʻana, akā ʻo ka HEAD o ka lālā kahi i hana ʻia ai ka noi huki:

Ka nānā ʻana o nā hana a huki i nā noi ma Travis CI, Buddy a me AppVeyor me ka hoʻohana ʻana iā PVS-Studio
No laila, aia mākou i loko o kahi hana kūlana B3 a pono mākou e loaʻa ka ʻokoʻa mai 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

E hoʻoholo ai A3 E hoʻohana kākou i ka API GitHub:

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

Ua hoʻohana mākou i nā ʻano like ʻole i hāʻawi ʻia e Buddy:

  • $BUDDY_EXECUTION_PULL_REQEUST_NO — huki helu noi;
  • $BUDDY_REPO_SLUG - kahi hui o ka inoa inoa a me ka waihona (no ka laʻana max/test).

I kēia manawa e mālama i nā hoʻololi e hoʻohana ana i ke pihi ma lalo a hiki i ka nānā ʻana i ka noi huki:

Ka nānā ʻana o nā hana a huki i nā noi ma Travis CI, Buddy a me AppVeyor me ka hoʻohana ʻana iā PVS-Studio
ʻAʻole like me Travis CI, ʻaʻole pono mākou e wehewehe .pvs-studio no ka hoʻopaʻa ʻana, no ka mea, e hūnā ʻo Buddy i nā faila a pau no ka hoʻokuʻu ʻana. No laila, ʻo ka mea hope i koe e mālama i ka inoa inoa a me ka ʻōlelo huna no PVS-Studio ma Buddy. Ma hope o ka mālama ʻana i nā loli, e hoʻihoʻi ʻia mākou i Pipeline. Pono mākou e neʻe i ka hoʻonohonoho ʻana i nā mea hoʻololi a hoʻohui i kahi login a me ke kī no PVS-Studio:

Ka nānā ʻana o nā hana a huki i nā noi ma Travis CI, Buddy a me AppVeyor me ka hoʻohana ʻana iā PVS-Studio
Ma hope o kēia, ʻo ke ʻano o kahi noi huki hou a i ʻole commit e hoʻomaka i ka loiloi. Inā loaʻa nā hewa i kahi hana, e hōʻike ʻo Buddy i kēia ma ka ʻaoʻao noi huki.

AppVeyor

ʻO ka hoʻonohonoho ʻana iā AppVeyor ua like ia me Buddy, no ka mea, ke hana nei nā mea a pau ma ka pūnaewele pūnaewele a ʻaʻohe pono e hoʻohui i kahi faila *.yml i ka waihona papahana.

E hele kāua i ka ʻaoʻao Settings i ka ʻike nui o ka papahana:

Ka nānā ʻana o nā hana a huki i nā noi ma Travis CI, Buddy a me AppVeyor me ka hoʻohana ʻana iā PVS-Studio
E kaomi i lalo i kēia ʻaoʻao a hiki ke mālama i ka cache no ka ʻohi ʻana i nā noi huki:

Ka nānā ʻana o nā hana a huki i nā noi ma Travis CI, Buddy a me AppVeyor me ka hoʻohana ʻana iā PVS-Studio
I kēia manawa, e hele kāua i ka ʻaoʻao Environment, kahi a mākou e kuhikuhi ai i ke kiʻi no ka hui ʻana a me nā ʻano hoʻololi kaiapuni e pono ai:

Ka nānā ʻana o nā hana a huki i nā noi ma Travis CI, Buddy a me AppVeyor me ka hoʻohana ʻana iā PVS-Studio
Inā ua heluhelu ʻoe i nā pauku i hala, ua kamaʻāina loa ʻoe i kēia mau ʻano ʻelua − PVS_KEY и PVS_USERNAME. Inā ʻaʻole, e hoʻomanaʻo wau iā ʻoe he pono lākou e hōʻoia i ka laikini o ka PVS-Studio analyzer. E ʻike hou mākou iā lākou ma nā palapala Bash i ka wā e hiki mai ana.

Ma ka ʻaoʻao hoʻokahi ma lalo nei mākou e hōʻike i ka waihona no ka caching:

Ka nānā ʻana o nā hana a huki i nā noi ma Travis CI, Buddy a me AppVeyor me ka hoʻohana ʻana iā PVS-Studio
Inā ʻaʻole mākou e hana i kēia, e nānā mākou i ka papahana holoʻokoʻa ma mua o nā faila ʻelua, akā e loaʻa iā mākou ka hopena mai nā faila i kuhikuhi ʻia. No laila, pono e hoʻokomo i ka inoa papa kuhikuhi pololei.

ʻO ka manawa kēia e hoʻāʻo ai ka palapala. E wehe i ka pā hōʻike a koho i ka Script:

Ka nānā ʻana o nā hana a huki i nā noi ma Travis CI, Buddy a me AppVeyor me ka hoʻohana ʻana iā PVS-Studio
Pono ʻoe e hoʻopili i kēia code i loko o kēia palapala:

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

E nānā kākou i kēia ʻāpana o ke code:

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

ʻO ka hāʻawi kikoʻī ʻana o ka waiwai o ke kauoha pwd i kahi ʻano e mālama ai i kēia waiwai paʻamau he mea ʻē i ka nānā mua ʻana, akā, e wehewehe wau i nā mea āpau i kēia manawa.

ʻOiai e hoʻonohonoho ana i ka mea anaana ma AppVeyor, ua ʻike au i kahi ʻano ʻano ʻano ʻē aʻe o ka mea kānana. Ma kekahiʻaoʻao, ua hana pololei nā mea a pau, akā,ʻaʻole i hoʻomaka ka nānāʻana. Ua lōʻihi koʻu manawa e ʻike ai aia mākou i loko o ka /home/appveyor/projects/testcalc/ directory, a ua maopopo ka mea anaana aia mākou i /opt/appveyor/build-agent/. A laila, ʻike wau he wahaheʻe iki ka helu $PWD. No kēia kumu, ua hoʻoponopono lima wau i kona waiwai ma mua o ka hoʻomaka ʻana i ka nānā ʻana.

A laila ua like nā mea a pau ma mua:

Ka nānā ʻana o nā hana a huki i nā noi ma Travis CI, Buddy a me AppVeyor me ka hoʻohana ʻana iā PVS-Studio
I kēia manawa e noʻonoʻo i kēia ʻāpana:

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

I loko o laila mākou e loaʻa ai ka ʻokoʻa ma waena o nā lālā kahi i haʻi ʻia ai ka noi huki. No ka hana ʻana i kēia, pono mākou i nā ʻano hoʻololi kaiapuni:

  • $APPVEYOR_PULL_REQUEST_NUMBER — huki helu noi;
  • $APPVEYOR_REPO_NAME - inoa mea hoʻohana a me ka waihona papahana.

hopena

ʻOiaʻiʻo, ʻaʻole mākou i noʻonoʻo i nā lawelawe hoʻohui hoʻomau hiki ke hoʻomau ʻia, akā naʻe, loaʻa iā lākou āpau nā kikoʻī hana like loa i kekahi. Me ka ʻokoʻa o ka caching, hana kēlā me kēia lawelawe i kāna "paikikala", no laila ʻokoʻa nā mea āpau.

Ma kekahi wahi, e like me Travis-CI, ʻelua mau laina o ka code a me ka caching e hana flawlessly; ma kahi, e like me AppVeyor, pono ʻoe e kuhikuhi i ka waihona i nā hoʻonohonoho; akā ma kahi e pono ai ʻoe e hana i nā kī kūikawā a hoʻāʻo e hōʻoia i ka ʻōnaehana e hāʻawi iā ʻoe i ka manawa e kākau ai i ka ʻāpana huna. No laila, inā makemake ʻoe e hoʻonohonoho i ka loiloi o nā noi huki ma kahi lawelawe hoʻohui hoʻomau ʻaʻole i kūkākūkā ʻia ma luna, a laila e hōʻoia mua ʻaʻole ʻoe e loaʻa nā pilikia me ka caching.

Mahalo no kou noonoo. Inā maikaʻi ʻole kekahi mea, e ʻoluʻolu e kākau iā mākou ma kākoʻo. E aʻo a kōkua mākou.

Ka nānā ʻana o nā hana a huki i nā noi ma Travis CI, Buddy a me AppVeyor me ka hoʻohana ʻana iā PVS-Studio

Inā makemake ʻoe e kaʻana like i kēia ʻatikala me kahi anaina ʻōlelo Pelekania, e ʻoluʻolu e hoʻohana i ka loulou unuhi: Maxim Zvyagintsev. Ka nānā ʻana o nā hana a huki i nā noi ma Travis CI, Buddy a me AppVeyor me ka hoʻohana ʻana iā PVS-Studio.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka