Nyocha nke nkwa na dọta arịrịọ na Travis CI, Buddy na AppVeyor na-eji PVS-Studio

Nyocha nke nkwa na dọta arịrịọ na Travis CI, Buddy na AppVeyor na-eji PVS-Studio
Na PVS-Studio analyzer maka asụsụ C na C ++ na Linux na MacOS, malite na ụdị 7.04, apụtala nhọrọ nnwale iji lelee ndepụta nke faịlụ akọwapụtara. N'iji ụdị ọhụrụ ahụ, ị ​​nwere ike hazie onye nyocha ka ọ lelee ime ma dọpụta arịrịọ. Edemede a ga-agwa gị otu esi ahazi ịlele ndepụta faịlụ gbanwere nke ọrụ GitHub na sistemụ CI (Continuous Integration) na-ewu ewu dị ka Travis CI, Buddy na AppVeyor.

Ụdị ndetu faịlụ

PVS-.lọ nka bụ ngwá ọrụ e ji achọpụta njehie na adịghị ike dị na koodu isi mmalite nke mmemme e dere na C, C++, C # na Java. Na-arụ ọrụ na sistemụ 64-bit na Windows, Linux na macOS.

Na ụdị PVS-Studio 7.04 maka Linux na macOS, ọnọdụ maka ịlele ndepụta faịlụ isi mmalite apụtala. Nke a na-arụ ọrụ maka oru ngo nke usoro ihe owuwu na-enye gị ohere ịmepụta faịlụ nchịkọta_iwu.json. Ọ dị mkpa ka onye nyocha wepụta ozi gbasara mkpokọta faịlụ akọwapụtara. Ọ bụrụ na usoro ihe owuwu gị anaghị akwado ịmepụta faịlụ compile_commands.json, ị nwere ike ịnwa ịmepụta faịlụ dị otú ahụ site na iji ngwa. bear.

Ọzọkwa, enwere ike iji ọnọdụ nlele ndepụta faịlụ yana yana trace trace log of compiler launches (pvs-studio-analyzer trace). Iji mee nke a, ị ga-ebu ụzọ rụọ ọrụ ahụ zuru oke ma soro ya ka onye nyocha wee nakọta ozi zuru oke gbasara ihe nchịkọta nke faịlụ niile a na-enyocha.

Otú ọ dị, nhọrọ a nwere nnukwu ndọghachi azụ - ị ga-achọ ịrụ ọrụ zuru oke nke ọrụ ahụ oge ọ bụla ị na-eme ya, nke n'onwe ya na-emegide echiche nke ịlele ngwa ngwa. Ma ọ bụ, ọ bụrụ na ị na-echekwa nsonaazụ ọchụchọ ahụ n'onwe ya, ọsọ nke onye nyocha na-esote nwere ike ezughị oke ma ọ bụrụ na usoro ndabere nke faịlụ isi mmalite gbanwere mgbe akara ahụ gasịrị (dịka ọmụmaatụ, agbakwunyere #include ọhụrụ na otu faịlụ isi mmalite).

Yabụ, anyị anaghị akwado iji ọnọdụ nlele ndepụta faịlụ yana ndekọ ndekọ iji lelee ime ma ọ bụ dọpụta arịrịọ. Ọ bụrụ na ị nwere ike ịme ihe nrụpụta agbakwunyere mgbe ị na-elele ntinye aka, tụlee iji ọnọdụ ahụ mmụba nyocha.

A na-echekwa ndepụta faịlụ isi iyi maka nyocha na faịlụ ederede wee nyefee onye nyocha site na iji paramita -S:

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

Faịlụ a na-akọwapụta ndị ikwu ma ọ bụ ụzọ zuru oke na faịlụ, na faịlụ ọhụrụ ọ bụla ga-adịrịrị n'ahịrị ọhụrụ. A na-anakwere ịkọwapụta ọ bụghị naanị aha faịlụ maka nyocha, kamakwa ederede dị iche iche. Onye nyocha ahụ ga-ahụ na nke a abụghị faịlụ ma ọ ga-eleghara ahịrị ahụ anya. Nke a nwere ike ịba uru maka ịza ajụjụ ma ọ bụrụ na ejiri aka kọwaa faịlụ. Agbanyeghị, ọtụtụ mgbe a ga-ewepụta ndepụta faịlụ n'oge nyocha na CI, dịka ọmụmaatụ, ndị a nwere ike ịbụ faịlụ sitere na ntinye aka ma ọ bụ dọpụta arịrịọ.

Ugbu a, iji ọnọdụ a, ị nwere ike ịlele koodu ọhụrụ ngwa ngwa tupu ọ banye na ngalaba mmepe isi. Iji hụ na usoro nyocha na-anabata ịdọ aka ná ntị analyzer, ọrụ ahụ plog-ngbanwe ọkọlọtọ agbakwunyere --egosi-ịdọ aka na ntị:

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

Site na ọkọlọtọ a, onye ntụgharị ga-eweghachi koodu na-abụghị efu ma ọ bụrụ na enwere ịdọ aka ná ntị na akụkọ nyocha. Iji koodu nloghachi, ị nwere ike igbochi nko precommit, mee, ma ọ bụ dọpụta arịrịọ, yana enwere ike igosipụta, kesaa ma ọ bụ zipu site na email.

Rịba ama. Mgbe mbụ ị malitere nyochaa ndepụta faịlụ, a ga-enyocha ọrụ ahụ dum, n'ihi na onye nyocha kwesịrị ịmepụta faịlụ nke ndabere nke faịlụ isi mmalite nke ọrụ na faịlụ nkụnye eji isi mee. Nke a bụ akụkụ nke nyocha faịlụ C na C++. N'ọdịnihu, faịlụ ndabere nwere ike ịchekwa ma onye nyocha ga-emelite ya na-akpaghị aka. Uru nke ịlele na-eme mgbe ị na-eji ọnọdụ nlele ndepụta faịlụ karịa iji ọnọdụ nyocha agbakwunyere bụ na naanị ị ga-echekwa faịlụ ahụ ọ bụghị faịlụ ihe.

Ụkpụrụ izugbe nke nyocha arịrịọ ịdọrọ

Nyochaa ọrụ ahụ dum na-ewe oge buru ibu, ya mere ọ bụ ihe ezi uche dị na ya ịlele naanị akụkụ ụfọdụ n'ime ya. Nsogbu bụ na ịkwesịrị ikewapụ faịlụ ọhụrụ na faịlụ ndị ọzọ nke ọrụ ahụ.

Ka anyị leba anya n'ihe atụ nke osisi na-eme nke nwere alaka abụọ:

Nyocha nke nkwa na dọta arịrịọ na Travis CI, Buddy na AppVeyor na-eji PVS-Studio

Ka anyị were echiche nke ahụ A1 nwere koodu buru ibu nke anwalelarị. N'oge gara aga, anyị mere alaka ụlọ ọrụ si nkwa A1 wee gbanwee ụfọdụ faịlụ.

Ị, n'ezie, chọpụtara na mgbe A1 Ememe abụọ ọzọ mere, mana ndị a bụkwa njikọ nke alaka ndị ọzọ, n'ihi na anyị anaghị etinye aka na ya nwe-. Ma ugbu a, oge eruola mgbe hotfix njikere. Ya mere arịrịọ ịdọrọ maka njikọta pụtara B3 и A3.

N'ezie, ọ ga-ekwe omume ịlele nsonaazụ niile nke njikọ ha, ma nke a ga-ewe oge na-ezighị ezi, ebe ọ bụ na ọ bụ naanị faịlụ ole na ole gbanwere. Ya mere, ọ ka mma iji nyochaa naanị ndị gbanwere.

Iji mee nke a, anyị na-enweta ihe dị iche n'etiti alaka, na-na isi nke alaka nke anyị chọrọ ijikọ na nna ukwu:

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

$MERGE_BASE anyị ga-eleba ya anya n'ụzọ zuru ezu ma emechaa. Nke bụ eziokwu bụ na ọ bụghị ọrụ CI ọ bụla na-enye ozi dị mkpa gbasara nchekwa data maka ijikọ, yabụ oge ọ bụla ị ga-ewepụta ụzọ ọhụrụ iji nweta data a. A ga-akọwa nke a n'ụzọ zuru ezu n'okpuru na nke ọ bụla n'ime ọrụ weebụ akọwara.

Ya mere, anyị nwetara ọdịiche dị n'etiti alaka, ma ọ bụ kama, ndepụta aha faịlụ ndị gbanwere. Ugbu a, anyị kwesịrị ịnye faịlụ ahụ .pvs-pr.ndepụta (anyị bugharịrị nsonaazụ dị n'elu gaa na ya) na onye nyocha:

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

Mgbe nyochachara, anyị kwesịrị ịgbanwe faịlụ ndekọ (PVS-Studio.log) ka ọ bụrụ usoro dị mfe ọgụgụ:

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

Iwu a ga-edepụta mperi na Onyedika (mmepụta ozi njehie ọkọlọtọ).

Naanị ugbu a, anyị kwesịrị ọ bụghị naanị igosipụta njehie, kamakwa gwa ọrụ anyị maka mgbakọ na nnwale banyere ọnụnọ nsogbu. Maka ebumnuche a, etinyere ọkọlọtọ na onye ntụgharị -W (--egosi-ịdọ aka na ntị). Ọ bụrụ na enwere opekata mpe otu ịdọ aka ná ntị nyocha, koodu nkwụghachi ọrụ plog-ngbanwe ga-agbanwe na 2, nke n'aka nke ya ga-agwa ndị ọrụ CI banyere ọnụnọ nke njehie nwere ike ime na faịlụ arịrịọ ịdọrọ.

Travis C.I.

A na-eme nhazi ahụ dị ka faịlụ .travis.yml. Maka ịdị mma, ana m adụ gị ọdụ ka ị tinye ihe niile n'ime edemede bash dị iche nke nwere ọrụ a ga-akpọ na faịlụ ahụ. .travis.yml (bash script_name.sh function_name).

Anyị ga-agbakwunye koodu dị mkpa na edemede na bash, otú a anyị ga-esi nwetakwuo ọrụ. Na ngalaba tinye ka anyị dee ihe ndị a:

install:
  - bash .travis.sh travis_install

Ọ bụrụ na ị nwere ntuziaka ọ bụla, ị nwere ike ịnyefe ha n'ime edemede ahụ, wepụ hyphens.

Ka anyị mepee faịlụ ahụ .travis.sh ma tinye ntọala nyocha na ọrụ ahụ 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 
}

Ugbu a, ka anyị tinye na ngalaba script mee nyocha:

script:
  - bash .travis.sh travis_script

Na n'ime edemede 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
}

Ekwesịrị ịme koodu a ka emechara ọrụ ahụ, dịka ọmụmaatụ, ọ bụrụ na ị nwere ụlọ na CMake:

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

Ọ ga-adị ka nke a:

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
}

Eleghị anya ị hụlarị mgbanwe gburugburu ebe obibi ndị a $TRAVIS_PULL_REQUEST и $TRAVIS_BRANCH. Travis CI na-ekwupụta ha n'onwe ha:

  • $TRAVIS_PULL_REQUEST na-echekwa nọmba arịrịọ dọkpụrụ ma ọ bụ ụgha, ọ bụrụ na nke a bụ alaka ụlọ ọrụ mgbe niile;
  • $TRAVIS_REPO_SLUG na-echekwa aha ebe nchekwa ọrụ.

Algọridim maka ọrụ a:

Nyocha nke nkwa na dọta arịrịọ na Travis CI, Buddy na AppVeyor na-eji PVS-Studio
Travis CI na-azaghachi koodu nloghachi, yabụ ọnụnọ ịdọ aka ná ntị ga-agwa ndị ọrụ ka ha akara n'omume ahụ dị ka njehie nwere.

Ugbu a, ka anyị lebakwuo anya na ahịrị koodu a:

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

Nke bụ eziokwu bụ na Travis CI na-ejikọta alaka na-akpaghị aka mgbe ọ na-enyocha arịrịọ ịdọrọ:

Nyocha nke nkwa na dọta arịrịọ na Travis CI, Buddy na AppVeyor na-eji PVS-Studio
Ya mere, anyị na-enyocha A4ma ọ bụghị B3->A3. N'ihi njirimara a, anyị kwesịrị iji gbakọọ ọdịiche ahụ AN3, nke bụ kpọmkwem n'elu alaka si mbido.

Enwere otu nkọwa dị mkpa fọdụrụ - ịchekwa ndabere nke faịlụ nkụnye eji isi mee na nkeji ntụgharị ekpokọtara (*.c, *.cc, *.cpp, wdg.). Onye nyocha na-agbakọ ndabere ndị a mgbe mbụ ewepụtara ya n'ụdị ịlele ndepụta faịlụ wee chekwaa ha na ndekọ .PVS-Studio. Travis CI na-enye gị ohere ịchekwa nchekwa nchekwa, yabụ anyị ga-echekwa data ndekọ .PVS-Studio/:

cache:
  directories:
    - .PVS-Studio/

Ekwesịrị itinye koodu a na faịlụ ahụ .travis.yml. Akwụkwọ ndekọ aha a na-echekwa data dị iche iche anakọtara mgbe nyochachara, nke ga-eme ngwa ngwa nyocha ndepụta faịlụ na-esote ma ọ bụ nyocha agbakwunyere. Ọ bụrụ na emeghị nke a, mgbe ahụ onye nyocha ga-enyocha faịlụ niile oge ọ bụla.

Buddy

Dị ka Travis CI, Buddy na-enye ikike iji wuo na nwalee ọrụ echekwara na GitHub ozugbo. N'adịghị ka Travis CI, a na-ahazi ya na ntanetị weebụ (nkwado bash dị), ya mere ọ dịghị mkpa ịchekwa faịlụ nhazi na ọrụ ahụ.

Nke mbụ, anyị kwesịrị itinye ihe ọhụrụ na ahịrị mgbakọ ahụ:

Nyocha nke nkwa na dọta arịrịọ na Travis CI, Buddy na AppVeyor na-eji PVS-Studio
Ka anyị gosi mkpokọta ihe eji arụ ọrụ ahụ. Rịba ama akpa docker arụnyere n'ime ihe a. Dịka ọmụmaatụ, enwere akpa pụrụ iche maka GCC:

Nyocha nke nkwa na dọta arịrịọ na Travis CI, Buddy na AppVeyor na-eji PVS-Studio
Ugbu a, ka anyị wụnye PVS-Studio na ihe ndị dị mkpa:

Nyocha nke nkwa na dọta arịrịọ na Travis CI, Buddy na AppVeyor na-eji PVS-Studio
Ka anyị tinye ahịrị ndị a na onye ndezi:

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

Ugbu a, ka anyị gaa na taabụ Run (akara ngosi mbụ) ma tinye koodu na-esonụ na mpaghara nchịkọta akụkọ kwekọrọ:

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

Ọ bụrụ na ị gụọ ngalaba na Travs-CI, mgbe ahụ koodu a amaralarị gị, mana ugbu a enwere ọkwa ọhụrụ:

Nyocha nke nkwa na dọta arịrịọ na Travis CI, Buddy na AppVeyor na-eji PVS-Studio
Nke bụ eziokwu bụ na ugbu a, anyị na-enyocha ọ bụghị nsonaazụ nke njikọ ahụ, kama isi nke alaka ụlọ ọrụ nke a na-arịọ arịrịọ:

Nyocha nke nkwa na dọta arịrịọ na Travis CI, Buddy na AppVeyor na-eji PVS-Studio
Yabụ na anyị nọ na nkwa nkwekọrịta B3 na anyị kwesịrị inweta ihe dị iche site na 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

Maka ikpebi A3 Ka anyị jiri GitHub API:

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

Anyị jiri mgbanwe ndị a Buddy na-enye:

  • $BUDDY_EXECUTION_PULL_REQEUST_NO - nọmba ekwentị mkpanaaka;
  • $BUDDY_REPO_SLUG - ngwakọta nke aha njirimara na ebe nchekwa (dịka ọmụmaatụ max/ule).

Ugbu a, ka anyị chekwaa mgbanwe ndị ahụ site na iji bọtịnụ dị n'okpuru ma mee ka nyocha nke arịrịọ ịdọrọ:

Nyocha nke nkwa na dọta arịrịọ na Travis CI, Buddy na AppVeyor na-eji PVS-Studio
N'adịghị ka Travis CI, anyị achọghị ịkọwapụta .pvs-studio maka caching, ebe Buddy na-echekwa faịlụ niile na-akpaghị aka maka mbido na-esote. Ya mere, ihe ikpeazụ fọdụrụ bụ ịchekwa nbanye na paswọọdụ maka PVS-Studio na Buddy. Mgbe ịchekwaa mgbanwe ndị a, a ga-eweghachi anyị na Pipeline. Anyị kwesịrị ịga n'ihu n'ịtọpụta mgbanwe na ịgbakwunye nbanye na igodo maka PVS-Studio:

Nyocha nke nkwa na dọta arịrịọ na Travis CI, Buddy na AppVeyor na-eji PVS-Studio
Mgbe nke a gasịrị, ọdịdị nke arịrịọ ịdọrọ ma ọ bụ ime ihe ọhụrụ ga-akpalite nyocha ahụ. Ọ bụrụ na mmejọ nwere mperi, Buddy ga-egosi nke a na ibe ịrịọ arịrịọ.

AppVeyor

Ịtọlite ​​​​AppVeyor yiri Buddy, ebe ọ bụ na ihe niile na-eme na ntanetị weebụ ma ọ dịghị mkpa ịgbakwunye faịlụ * .yml na ebe nchekwa ọrụ.

Ka anyị gaa na taabụ Settings na nchịkọta ọrụ:

Nyocha nke nkwa na dọta arịrịọ na Travis CI, Buddy na AppVeyor na-eji PVS-Studio
Ka anyị pịgharịa n'ibe a wee mee ka nchekwa cache maka ịnakọta arịrịọ ịdọrọ:

Nyocha nke nkwa na dọta arịrịọ na Travis CI, Buddy na AppVeyor na-eji PVS-Studio
Ugbu a, ka anyị gaa na taabụ Environment, ebe anyị na-akọwapụta onyonyo maka mgbakọ na mgbanwe gburugburu ebe dị mkpa:

Nyocha nke nkwa na dọta arịrịọ na Travis CI, Buddy na AppVeyor na-eji PVS-Studio
Ọ bụrụ na ị gụọla akụkụ ndị gara aga, ị maara nke ọma na mgbanwe abụọ a - PVS_KEY и PVS_USERNAME. Ọ bụrụ na ọ bụghị, ka m chetara gị na ha dị mkpa iji nyochaa ikike nke PVS-Studio analyzer. Anyị ga-ahụ ha ọzọ na Bash scripts n'ọdịnihu.

N'otu ibe dị n'okpuru, anyị na-egosi folda maka caching:

Nyocha nke nkwa na dọta arịrịọ na Travis CI, Buddy na AppVeyor na-eji PVS-Studio
Ọ bụrụ na anyị emeghị nke a, anyị ga-enyocha ọrụ ahụ dum kama iji faịlụ abụọ, mana anyị ga-enweta nsonaazụ sitere na faịlụ ndị akọwapụtara. Ya mere, ọ dị mkpa itinye aha ndekọ aha ziri ezi.

Ugbu a ọ bụ oge maka script iji nwalee. Mepee taabụ ule wee họrọ Script:

Nyocha nke nkwa na dọta arịrịọ na Travis CI, Buddy na AppVeyor na-eji PVS-Studio
Ikwesiri mado koodu a n'ụdị a:

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

Ka anyị ṅaa ntị na akụkụ koodu a:

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

Ọrụ a kapịrị ọnụ nke uru nke pwd iwu na mgbanwe nke kwesịrị ịchekwa uru ndabara a dị ka ihe ijuanya na nlele mbụ, agbanyeghị, m ga-akọwa ihe niile ugbu a.

Mgbe m na-edozi onye nyocha na AppVeyor, ahụrụ m omume dị ịtụnanya nke onye nyocha. N'otu aka ahụ, ihe niile na-arụ ọrụ nke ọma, ma nyocha ahụ amaliteghị. Ejiri m oge dị ukwuu na-achọpụta na anyị nọ na / home/appveyor/projects/testcalc/ directory, na onye nyocha nwere obi ike na anyị nọ na /opt/appveyor/build-agent/. Mgbe ahụ achọpụtara m na mgbanwe $PWD na-agha ụgha ntakịrị. N'ihi nke a, ejiri m aka emelite uru ya tupu ịmalite nyocha.

Ma mgbe ahụ ihe niile dị ka ọ dị na mbụ:

Nyocha nke nkwa na dọta arịrịọ na Travis CI, Buddy na AppVeyor na-eji PVS-Studio
Ugbu a tụlee iberibe a:

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

N'ime ya anyị na-enweta ọdịiche dị n'etiti alaka nke a na-ekwupụta arịrịọ ịdọrọ. Iji mee nke a, anyị chọrọ mgbanwe gburugburu ebe obibi:

  • $APPVEYOR_PULL_REQUEST_NUMBER — sere nọmba arịrịọ;
  • $APPVEYOR_REPO_NAME - aha njirimara na ebe nchekwa ọrụ.

nkwubi

N'ezie, anyị atụlebeghị ọrụ ntinye aka na-aga n'ihu na-aga n'ihu, Otú ọ dị, ha niile nwere nkọwa ọrụ yiri nke ahụ maka ibe ha. Ewezuga caching, ọrụ ọ bụla na-eme "ịnyịnya igwe" nke ya, yabụ ihe niile dị iche mgbe niile.

Ebe, dị ka na Travis-CI, ụzọ abụọ nke ahịrị koodu na caching na-arụ ọrụ enweghị ntụpọ; ebe, dị ka na AppVeyor, naanị ị chọrọ ezipụta nchekwa na ntọala; ma ebe ị ga-achọ ịmepụta igodo pụrụ iche ma gbalịa ime ka usoro ahụ kwenye iji nye gị ohere iji degharịa mpempe akwụkwọ echekwara. Ya mere, ọ bụrụ na ịchọrọ ịmepụta nyocha nke arịrịọ ịdọrọ na ọrụ ntinye aka na-aga n'ihu nke a na-ekwughị n'elu, buru ụzọ hụ na ị gaghị enwe nsogbu na caching.

Daalụ maka itinye uche gị. Ọ bụrụ na ihe anaghị arụ ọrụ, nweere onwe gị ịdegara anyị akwụkwọ nkwado. Anyị ga-adụ ọdụ ma nyere aka.

Nyocha nke nkwa na dọta arịrịọ na Travis CI, Buddy na AppVeyor na-eji PVS-Studio

Ọ bụrụ na ịchọrọ ịkọrọ ndị na-ege ntị na-asụ Bekee akụkọ a, biko jiri njikọ ntụgharị asụsụ: Maxim Zvyagintsev. Nyocha nke nkwa na dọta arịrịọ na Travis CI, Buddy na AppVeyor na-eji PVS-Studio.

isi: www.habr.com

Tinye a comment