Onínọmbà ti awọn adehun ati fa awọn ibeere ni Travis CI, Buddy ati AppVeyor ni lilo PVS-Studio

Onínọmbà ti awọn adehun ati fa awọn ibeere ni Travis CI, Buddy ati AppVeyor ni lilo PVS-Studio
Ninu oluyanju PVS-Studio fun awọn ede C ati C ++ lori Lainos ati macOS, ti o bẹrẹ lati ẹya 7.04, aṣayan idanwo kan ti han lati ṣayẹwo atokọ ti awọn faili ti o pato. Lilo ipo tuntun, o le tunto olutupalẹ lati ṣayẹwo awọn adehun ati fa awọn ibeere. Nkan yii yoo sọ fun ọ bi o ṣe le ṣeto iṣayẹwo atokọ ti awọn faili ti o yipada ti iṣẹ akanṣe GitHub ni iru awọn eto CI olokiki (Ijọpọ Ilọsiwaju) bii Travis CI, Buddy ati AppVeyor.

Ipo iṣayẹwo akojọ faili

PVS-Studio jẹ ọpa fun idanimọ awọn aṣiṣe ati awọn ailagbara ti o pọju ninu koodu orisun ti awọn eto ti a kọ sinu C, C ++, C # ati Java. Ṣiṣẹ lori awọn eto 64-bit lori Windows, Lainos ati macOS.

Ninu ẹya PVS-Studio 7.04 fun Lainos ati macOS, ipo kan fun ṣiṣe ayẹwo atokọ ti awọn faili orisun ti han. Eyi n ṣiṣẹ fun awọn iṣẹ akanṣe ti eto kikọ gba ọ laaye lati ṣe ina faili kan compile_commands.json. O nilo fun olutupalẹ lati yọ alaye jade nipa akojọpọ awọn faili ti a sọ. Ti eto kikọ rẹ ko ba ṣe atilẹyin ṣiṣẹda faili compile_commands.json, o le gbiyanju lati ṣe agbekalẹ iru faili kan nipa lilo ohun elo Bear.

Paapaa, ipo iṣayẹwo atokọ faili le ṣee lo papọ pẹlu iwe itọpa strace ti awọn ifilọlẹ alakojọ (pvs-studio-analyzer trace). Lati ṣe eyi, iwọ yoo nilo lati kọkọ ni kikun iṣẹ akanṣe ki o tọpa rẹ ki olutupalẹ gba alaye pipe nipa awọn aye akojọpọ ti gbogbo awọn faili ti n ṣayẹwo.

Bibẹẹkọ, aṣayan yii ni apadabọ pataki - iwọ yoo nilo lati ṣe itọpa kikọ ni kikun ti gbogbo iṣẹ akanṣe ni gbogbo igba ti o ba ṣiṣẹ, eyiti funrararẹ tako imọran ti ṣayẹwo ni iyara kan. Tabi, ti o ba kaṣe abajade itọpa funrararẹ, awọn ṣiṣe atẹle ti olutupalẹ le jẹ pe ti eto igbẹkẹle ti awọn faili orisun ba yipada lẹhin itọpa naa (fun apẹẹrẹ, #include tuntun ti ṣafikun si ọkan ninu awọn faili orisun).

Nitorinaa, a ko ṣeduro lilo ipo ayẹwo atokọ faili pẹlu akọọlẹ itọpa lati ṣayẹwo awọn adehun tabi fa awọn ibeere. Ni ọran ti o le ṣe itumọ ti afikun nigbati o ba ṣayẹwo ifaramọ kan, ronu nipa lilo ipo naa afikun onínọmbà.

Atokọ awọn faili orisun fun itupalẹ ti wa ni fipamọ sinu faili ọrọ ati ki o kọja si oluyanju nipa lilo paramita naa -S:

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

Faili yii ṣe alaye ojulumo tabi awọn ọna pipe si awọn faili, ati pe faili tuntun kọọkan gbọdọ wa lori laini tuntun. O jẹ itẹwọgba lati pato kii ṣe awọn orukọ faili nikan fun itupalẹ, ṣugbọn ọpọlọpọ ọrọ tun. Oluyanju yoo rii pe eyi kii ṣe faili ati pe yoo foju laini naa. Eyi le wulo fun asọye ti awọn faili ba jẹ pato pẹlu ọwọ. Bibẹẹkọ, nigbagbogbo atokọ ti awọn faili yoo ṣe ipilẹṣẹ lakoko itupalẹ ni CI, fun apẹẹrẹ, iwọnyi le jẹ awọn faili lati ifaramo tabi fa ibeere.

Bayi, ni lilo ipo yii, o le yara ṣayẹwo koodu tuntun ṣaaju ki o to wọle si ẹka idagbasoke akọkọ. Lati rii daju wipe awọn Antivirus eto idahun si analyzer ikilo, awọn IwUlO plog-iyipada flag kun --tọkasi-ikilo:

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

Pẹlu asia yii, oluyipada yoo da koodu ti kii ṣe odo pada ti awọn ikilọ ba wa ninu ijabọ atunnkanka. Lilo koodu ipadabọ, o le dènà kio precommit kan, ṣe, tabi fa ibeere, ati ijabọ atunnkanka ti ipilẹṣẹ le ṣe afihan, pin, tabi firanṣẹ nipasẹ imeeli.

Akiyesi. Nigbati o ba kọkọ bẹrẹ itupalẹ atokọ ti awọn faili, gbogbo iṣẹ akanṣe yoo ṣe itupalẹ, nitori oluyẹwo nilo lati ṣe agbekalẹ faili kan ti awọn igbẹkẹle ti awọn faili orisun ise agbese lori awọn faili akọsori. Eyi jẹ ẹya ti itupalẹ awọn faili C ati C ++. Ni ọjọ iwaju, faili igbẹkẹle le jẹ cache ati pe yoo ṣe imudojuiwọn laifọwọyi nipasẹ olutupalẹ. Anfani ti ṣiṣe ayẹwo nigba lilo ipo iṣayẹwo atokọ faili lori lilo ipo itupalẹ afikun ni pe o nilo lati kaṣe faili yẹn nikan kii ṣe awọn faili ohun.

Gbogbogbo agbekale ti fa ìbéèrè onínọmbà

Ṣiṣayẹwo gbogbo iṣẹ akanṣe gba akoko pupọ, nitorinaa o jẹ oye lati ṣayẹwo apakan kan nikan. Iṣoro naa ni pe o nilo lati ya awọn faili tuntun kuro lati iyoku awọn faili iṣẹ akanṣe.

Jẹ ki a wo apẹẹrẹ ti igi ti o ni awọn ẹka meji:

Onínọmbà ti awọn adehun ati fa awọn ibeere ni Travis CI, Buddy ati AppVeyor ni lilo PVS-Studio

Jẹ ki a fojuinu ifọkansi yẹn A1 ni kan iṣẹtọ tobi iye koodu ti a ti ni idanwo tẹlẹ. Diẹ diẹ sẹyin a ṣe ẹka kan lati ifaramọ A1 o si yipada diẹ ninu awọn faili.

Iwọ, dajudaju, ṣe akiyesi pe lẹhin A1 Awọn iṣe meji miiran tun ṣẹlẹ, ṣugbọn iwọnyi tun jẹ idapọ ti awọn ẹka miiran, nitori a ko ṣe titunto si. Ati nisisiyi akoko ti de nigbati hotfix setan. Ti o ni idi kan fa ìbéèrè fun awọn àkópọ han B3 и A3.

Nitoribẹẹ, yoo ṣee ṣe lati ṣayẹwo gbogbo abajade ti iṣọpọ wọn, ṣugbọn eyi yoo gba akoko pupọ ati aibikita, nitori pe awọn faili diẹ ti yipada. Nitorinaa, o munadoko diẹ sii lati ṣe itupalẹ awọn ti o yipada nikan.

Lati ṣe eyi, a gba iyatọ laarin awọn ẹka, ti o wa ni ori ti eka ti a fẹ lati dapọ si oluwa:

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

$MERGE_BASE a yoo wo ni kikun nigbamii. Otitọ ni pe kii ṣe gbogbo iṣẹ CI pese alaye pataki nipa ibi ipamọ data fun sisọpọ, nitorinaa ni gbogbo igba ti o ni lati wa awọn ọna tuntun lati gba data yii. Eyi yoo ṣe apejuwe ni awọn alaye ni isalẹ ni ọkọọkan awọn iṣẹ wẹẹbu ti ṣapejuwe.

Nitorinaa, a ni iyatọ laarin awọn ẹka, tabi dipo, atokọ ti awọn orukọ faili ti o yipada. Bayi a nilo lati fun faili naa .pvs-pr.akojọ (a darí àbájáde lókè sí i) sí olùtúpalẹ̀:

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

Lẹhin itupalẹ, a nilo lati yi faili log pada (PVS-Studio.log) sinu ọna kika rọrun lati ka:

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

Aṣẹ yii yoo ṣe atokọ awọn aṣiṣe ninu stderr (jade ifiranṣẹ aṣiṣe boṣewa).

Nikan ni bayi a nilo ko ṣe afihan awọn aṣiṣe nikan, ṣugbọn tun sọ fun iṣẹ wa fun apejọ ati idanwo nipa wiwa awọn iṣoro. Fun idi eyi, asia kan ti wa ni afikun si oluyipada -W (--tọkasi-ikilo). Ti o ba wa ni o kere ju ikilọ oluyanju kan, koodu ipadabọ ohun elo plog-iyipada yoo yipada si 2, eyiti yoo sọ fun iṣẹ CI nipa wiwa awọn aṣiṣe ti o pọju ninu awọn faili ibeere fa.

Travis C.I.

Iṣeto ni a ṣe bi faili kan .travis.yml. Fun irọrun, Mo gba ọ ni imọran lati fi ohun gbogbo sinu iwe afọwọkọ bash lọtọ pẹlu awọn iṣẹ ti yoo pe lati faili naa .travis.yml (bash script_name.sh function_name).

A yoo ṣafikun koodu pataki si iwe afọwọkọ ni Basi, ni ọna yii a yoo gba iṣẹ-ṣiṣe diẹ sii. Ni apakan fi sori ẹrọ jẹ ki a kọ nkan wọnyi:

install:
  - bash .travis.sh travis_install

Ti o ba ni awọn ilana eyikeyi, o le gbe wọn sinu iwe afọwọkọ, yọ awọn hyphen kuro.

Jẹ ki a ṣii faili naa .travis.sh ki o si fi eto itupale kun si iṣẹ naa 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 
}

Bayi jẹ ki a fi si apakan akosile ṣiṣe itupalẹ:

script:
  - bash .travis.sh travis_script

Ati ninu iwe afọwọkọ 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
}

Koodu yii nilo lati ṣiṣẹ lẹhin kikọ iṣẹ akanṣe, fun apẹẹrẹ, ti o ba ni kikọ lori CMake:

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

Yoo jade bi eleyi:

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
}

O ti ṣe akiyesi tẹlẹ awọn oniyipada ayika $TRAVIS_PULL_REQUEST и $TRAVIS_BRANCH. Travis CI sọ wọn ni ominira:

  • $TRAVIS_PULL_REQUEST tọjú awọn fa ìbéèrè nọmba tabi èké, ti eyi ba jẹ ẹka deede;
  • $ TRAVIS_REPO_SLUG tọjú awọn orukọ ti awọn ibi ipamọ ise agbese.

Algorithm fun iṣẹ yii:

Onínọmbà ti awọn adehun ati fa awọn ibeere ni Travis CI, Buddy ati AppVeyor ni lilo PVS-Studio
Travis CI ṣe idahun si awọn koodu ipadabọ, nitorinaa wiwa awọn ikilọ yoo sọ fun iṣẹ naa lati samisi iṣẹ naa bi awọn aṣiṣe ti o ni ninu.

Bayi jẹ ki a ṣe akiyesi diẹ sii ni ila ti koodu yii:

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

Otitọ ni pe Travis CI dapọ awọn ẹka laifọwọyi lakoko ti o ṣe itupalẹ ibeere fa kan:

Onínọmbà ti awọn adehun ati fa awọn ibeere ni Travis CI, Buddy ati AppVeyor ni lilo PVS-Studio
Nitorina a ṣe itupalẹ A4sugbon ko B3->A3. Nitori ẹya yii, a nilo lati ṣe iṣiro iyatọ pẹlu A3, eyi ti o jẹ gbọgán oke ti eka lati Oti.

Alaye pataki kan wa ti o kù - fifipamọ awọn igbẹkẹle ti awọn faili akọsori lori awọn ẹya itumọ akojọpọ (*.c, *.cc, *.cpp, ati bẹbẹ lọ). Oluyanju ṣe iṣiro awọn igbẹkẹle wọnyi nigbati o kọkọ ṣe ifilọlẹ ni ipo ti ṣayẹwo atokọ ti awọn faili ati lẹhinna fi wọn pamọ sinu itọsọna PVS-Studio. Travis CI gba ọ laaye lati kaṣe awọn folda, nitorinaa a yoo fipamọ data liana naa .PVS-Studio/:

cache:
  directories:
    - .PVS-Studio/

Koodu yii nilo lati ṣafikun si faili naa .travis.yml. Liana yii tọju ọpọlọpọ awọn data ti a gba lẹhin itupalẹ, eyiti yoo yara ni pataki awọn ṣiṣe ṣiṣe atẹle ti itupalẹ atokọ faili tabi itupalẹ afikun. Ti eyi ko ba ṣe, lẹhinna oluyẹwo yoo ṣe itupalẹ gbogbo awọn faili ni gbogbo igba.

Buddy

Bii Travis CI, Buddy pese agbara lati kọ laifọwọyi ati idanwo awọn iṣẹ akanṣe ti o fipamọ sori GitHub. Ko dabi Travis CI, o tunto ni wiwo wẹẹbu (atilẹyin bash wa), nitorinaa ko si iwulo lati tọju awọn faili iṣeto ni iṣẹ naa.

Ni akọkọ, a nilo lati ṣafikun iṣe tuntun si laini apejọ:

Onínọmbà ti awọn adehun ati fa awọn ibeere ni Travis CI, Buddy ati AppVeyor ni lilo PVS-Studio
Jẹ ki a ṣe afihan olupilẹṣẹ ti a lo lati kọ iṣẹ naa. Ṣe akiyesi apoti docker ti o ti fi sii ni iṣẹ yii. Fun apẹẹrẹ, apoti pataki kan wa fun GCC:

Onínọmbà ti awọn adehun ati fa awọn ibeere ni Travis CI, Buddy ati AppVeyor ni lilo PVS-Studio
Bayi jẹ ki a fi PVS-Studio sori ẹrọ ati awọn ohun elo pataki:

Onínọmbà ti awọn adehun ati fa awọn ibeere ni Travis CI, Buddy ati AppVeyor ni lilo PVS-Studio
Jẹ ki a ṣafikun awọn ila wọnyi si olootu:

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

Bayi jẹ ki a lọ si Ṣiṣe taabu (aami akọkọ) ki o ṣafikun koodu atẹle si aaye olootu ti o baamu:

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

Ti o ba ka apakan lori Travs-CI, lẹhinna koodu yii ti mọ ọ tẹlẹ, sibẹsibẹ, ni bayi ipele tuntun wa:

Onínọmbà ti awọn adehun ati fa awọn ibeere ni Travis CI, Buddy ati AppVeyor ni lilo PVS-Studio
Otitọ ni pe ni bayi a ṣe itupalẹ kii ṣe abajade ti iṣọpọ, ṣugbọn ORI ti ẹka lati eyiti o ti ṣe ibeere fa:

Onínọmbà ti awọn adehun ati fa awọn ibeere ni Travis CI, Buddy ati AppVeyor ni lilo PVS-Studio
Nitorinaa a wa ni adehun ni àídájú B3 ati pe a nilo lati gba iyatọ lati 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

Fun ipinnu A3 Jẹ ki a lo GitHub API:

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

A lo awọn oniyipada wọnyi ti Buddy pese:

  • $BUDDY_EXECUTION_PULL_REQEUST_NO - fa nọmba ìbéèrè;
  • $BUDDY_REPO_SLUG - apapo orukọ olumulo ati ibi ipamọ (fun apẹẹrẹ max/idanwo).

Bayi jẹ ki a fi awọn ayipada pamọ nipa lilo bọtini isalẹ ki o mu itupalẹ ibeere fa:

Onínọmbà ti awọn adehun ati fa awọn ibeere ni Travis CI, Buddy ati AppVeyor ni lilo PVS-Studio
Ko dabi Travis CI, a ko nilo lati pato .pvs-isise fun caching, niwon Buddy laifọwọyi caches gbogbo awọn faili fun ọwọ awọn ifilọlẹ. Nitorinaa, ohun ikẹhin ti o kù ni lati ṣafipamọ iwọle ati ọrọ igbaniwọle fun PVS-Studio ni Buddy. Lẹhin fifipamọ awọn ayipada, a yoo mu wa pada si Pipeline. A nilo lati tẹsiwaju lati ṣeto awọn oniyipada ati fifi iwọle ati bọtini kun fun PVS-Studio:

Onínọmbà ti awọn adehun ati fa awọn ibeere ni Travis CI, Buddy ati AppVeyor ni lilo PVS-Studio
Lẹhin eyi, ifarahan ti ibeere fifa tuntun tabi ifaramọ yoo fa atunyẹwo naa. Ti adehun kan ba ni awọn aṣiṣe ninu, Ọrẹ yoo tọka si eyi lori oju-iwe ibeere fa.

AppVeyor

Ṣiṣeto AppVeyor jẹ iru si Buddy, nitori ohun gbogbo n ṣẹlẹ ni wiwo wẹẹbu ati pe ko si iwulo lati ṣafikun faili * .yml kan si ibi ipamọ iṣẹ akanṣe naa.

Jẹ ki a lọ si Eto taabu ni Akopọ ise agbese:

Onínọmbà ti awọn adehun ati fa awọn ibeere ni Travis CI, Buddy ati AppVeyor ni lilo PVS-Studio
Jẹ ki a yi lọ si isalẹ oju-iwe yii ki o mu fifipamọ kaṣe ṣiṣẹ fun gbigba awọn ibeere fa:

Onínọmbà ti awọn adehun ati fa awọn ibeere ni Travis CI, Buddy ati AppVeyor ni lilo PVS-Studio
Bayi jẹ ki a lọ si taabu Ayika, nibiti a ti ṣalaye aworan fun apejọ ati awọn oniyipada ayika pataki:

Onínọmbà ti awọn adehun ati fa awọn ibeere ni Travis CI, Buddy ati AppVeyor ni lilo PVS-Studio
Ti o ba ti ka awọn apakan ti tẹlẹ, o mọ pupọ pẹlu awọn oniyipada meji wọnyi - PVS_KEY и PVS_USERNAME. Ti kii ba ṣe bẹ, jẹ ki n leti pe wọn ṣe pataki lati jẹrisi iwe-aṣẹ ti olutupalẹ PVS-Studio. A yoo rii wọn lẹẹkansi ni awọn iwe afọwọkọ Bash ni ọjọ iwaju.

Ni oju-iwe kanna ni isalẹ a tọka folda fun caching:

Onínọmbà ti awọn adehun ati fa awọn ibeere ni Travis CI, Buddy ati AppVeyor ni lilo PVS-Studio
Ti a ko ba ṣe eyi, a yoo ṣe itupalẹ gbogbo iṣẹ akanṣe dipo awọn faili meji, ṣugbọn a yoo gba abajade lati awọn faili ti a ti sọ tẹlẹ. Nitorina, o jẹ pataki lati tẹ awọn ti o tọ liana orukọ.

Bayi o to akoko fun iwe afọwọkọ lati ṣe idanwo. Ṣii taabu Awọn idanwo ki o yan Akosile:

Onínọmbà ti awọn adehun ati fa awọn ibeere ni Travis CI, Buddy ati AppVeyor ni lilo PVS-Studio
O nilo lati lẹẹ koodu atẹle yii sinu fọọmu yii:

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

Jẹ ki a san ifojusi si apakan atẹle ti koodu naa:

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

Iṣẹ iyansilẹ pato ti iye ti aṣẹ pwd si oniyipada ti o yẹ ki o tọju iye aiyipada yii dabi ajeji ni wiwo akọkọ, sibẹsibẹ, Emi yoo ṣalaye ohun gbogbo ni bayi.

Lakoko ti o ṣeto atunnkanka ni AppVeyor, Mo pade ihuwasi ajeji pupọ ti olutupalẹ. Ni apa kan, ohun gbogbo ṣiṣẹ ni deede, ṣugbọn itupalẹ ko bẹrẹ. Mo lo akoko pupọ lati ṣe akiyesi pe a wa ninu / ile / appveyor / awọn iṣẹ akanṣe / testcalc / liana, ati pe olutupalẹ jẹ daju pe a wa ni / ijade / appveyor / kọ-aṣoju /. Lẹhinna Mo rii pe oniyipada $PWD n parọ diẹ. Fun idi eyi, Mo ṣe imudojuiwọn iye rẹ pẹlu ọwọ ṣaaju ki o to bẹrẹ itupalẹ naa.

Ati lẹhinna ohun gbogbo jẹ bi iṣaaju:

Onínọmbà ti awọn adehun ati fa awọn ibeere ni Travis CI, Buddy ati AppVeyor ni lilo PVS-Studio
Bayi ro nkan wọnyi:

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

Ninu rẹ a gba iyatọ laarin awọn ẹka lori eyiti a ti kede ibeere fa. Lati ṣe eyi a nilo awọn oniyipada ayika wọnyi:

  • $APPVEYOR_PULL_REQUEST_NUMBER — fa nọmba ìbéèrè;
  • $APPVEYOR_REPO_NAME - orukọ olumulo ati ibi ipamọ iṣẹ akanṣe.

ipari

Nitoribẹẹ, a ko gbero gbogbo awọn iṣẹ iṣọpọ lemọlemọfún ti o ṣeeṣe, sibẹsibẹ, gbogbo wọn ni awọn pato iṣẹ ṣiṣe ti o jọra pupọ si ara wọn. Ayafi ti caching, iṣẹ kọọkan ṣe “keke” tirẹ, nitorinaa ohun gbogbo yatọ nigbagbogbo.

Ibikan, bi ni Travis-CI, a tọkọtaya ti ila ti koodu ati caching ṣiṣẹ flawlessly; ibikan, bi ni AppVeyor, o kan nilo lati pato awọn folda ninu awọn eto; ṣugbọn nibikan o nilo lati ṣẹda awọn bọtini alailẹgbẹ ati gbiyanju lati parowa fun eto naa lati fun ọ ni aye lati kọ ajẹkù ti a fi pamọ. Nitorinaa, ti o ba fẹ ṣeto igbekale ti awọn ibeere fifa lori iṣẹ iṣọpọ igbagbogbo ti a ko jiroro loke, lẹhinna rii daju pe iwọ kii yoo ni awọn iṣoro pẹlu caching.

Mo dupe fun ifetisile re. Ti nkan ko ba ṣiṣẹ, lero ọfẹ lati kọ si wa ni atilẹyin. A yoo ni imọran ati iranlọwọ.

Onínọmbà ti awọn adehun ati fa awọn ibeere ni Travis CI, Buddy ati AppVeyor ni lilo PVS-Studio

Ti o ba fẹ pin nkan yii pẹlu awọn olugbo ti o sọ Gẹẹsi, jọwọ lo ọna asopọ itumọ: Maxim Zvyagintsev. Onínọmbà ti awọn adehun ati fa awọn ibeere ni Travis CI, Buddy ati AppVeyor ni lilo PVS-Studio.

orisun: www.habr.com

Fi ọrọìwòye kun