Kev tshuaj xyuas ntawm kev cog lus thiab rub cov lus thov hauv Travis CI, Buddy thiab AppVeyor siv PVS-Studio

Kev tshuaj xyuas ntawm kev cog lus thiab rub cov lus thov hauv Travis CI, Buddy thiab AppVeyor siv PVS-Studio
Hauv PVS-Studio analyzer rau C thiab C ++ cov lus ntawm Linux thiab macOS, pib ntawm version 7.04, lub sijhawm sim tau tshwm sim los xyuas cov npe ntawm cov ntaub ntawv teev tseg. Siv hom tshiab, koj tuaj yeem teeb tsa lub ntsuas ntsuas los kuaj xyuas kev cog lus thiab rub cov lus thov. Kab lus no yuav qhia koj yuav ua li cas teeb tsa GitHub qhov project file list check in CI (Continuous Integration) systems xws li Travis CI, Buddy thiab AppVeyor.

Daim ntawv teev npe kuaj hom

PVS Studio yog ib qho cuab yeej rau kev txheeb xyuas qhov tsis raug thiab qhov muaj peev xwm ua rau muaj qhov tsis zoo hauv cov cai ntawm cov kev pab cuam sau hauv C, C ++, C # thiab Java. Ua haujlwm ntawm 64-ntsis tshuab ntawm Windows, Linux thiab macOS.

Lub version ntawm PVS-Studio 7.04 rau Linux thiab macOS muaj ib hom kev tshuaj xyuas cov npe ntawm cov ntaub ntawv. Qhov no ua haujlwm rau cov haujlwm uas nws tsim qhov system tso cai rau koj los tsim cov ntaub ntawv compile_commands.json. Nws yog qhov xav tau rau lub ntsuas ntsuas kom rho tawm cov ntaub ntawv hais txog kev muab tso ua ke ntawm cov ntaub ntawv teev tseg. Yog tias koj lub kaw lus tsim tsis txhawb tsim cov ntaub ntawv compile_commands.json, koj tuaj yeem sim tsim cov ntaub ntawv no siv cov khoom siv hluav taws xob. Xyooj.

Tsis tas li ntawd, hom kev tshuaj xyuas cov npe ntawm cov ntaub ntawv tuaj yeem siv ua ke nrog cov kab khiav ntawm kev sib sau ua ke (pvs-studio-analyzer kab). Txhawm rau ua qhov no, koj yuav tsum xub ua ib qho kev tsim ua tiav ntawm qhov project thiab taug qab nws kom tus neeg soj ntsuam sau cov ntaub ntawv tiav txog kev sib sau ua ke ntawm tag nrho cov ntaub ntawv raug kuaj xyuas.

Txawm li cas los xij, qhov kev xaiv no muaj qhov tsis zoo tseem ceeb - koj yuav tsum tau ua ib qho kev tsim kom tiav ntawm tag nrho cov phiaj xwm ntawm txhua qhov kev tshaj tawm, uas nyob rau hauv nws tus kheej contradicts lub tswv yim ntawm kev txiav txim sai. Los yog, yog tias koj cache cov txiaj ntsig ntawm nws tus kheej, tom qab tso tawm ntawm lub ntsuas ntsuas yuav dhau los ua tsis tiav yog tias cov ntaub ntawv hloov pauv hloov tom qab taug qab (piv txwv li, # suav nrog tshiab ntxiv rau ib qho ntawm cov ntaub ntawv hauv qab).

Yog li ntawd, peb tsis pom zoo kom siv cov ntaub ntawv teev npe kuaj hom nrog cov kab cim los xyuas cov lus cog tseg lossis rub cov lus thov. Nyob rau hauv rooj plaub koj tuaj yeem ua ib qho kev tsim ntxiv thaum kuaj xyuas qhov kev cog lus, xav txog kev siv hom kev soj ntsuam ntxiv.

Cov npe ntawm cov ntaub ntawv los ntawm kev txheeb xyuas yog khaws cia rau hauv cov ntawv nyeem thiab dhau mus rau tus ntsuas ntsuas siv qhov ntsuas -S:

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

Cov ntaub ntawv no qhia txog cov txheeb ze lossis cov kev tsis raug rau cov ntaub ntawv, thiab txhua cov ntaub ntawv tshiab yuav tsum nyob rau ntawm kab tshiab. Nws tso cai rau qhia tsis tau tsuas yog cov npe ntawm cov ntaub ntawv rau kev tsom xam, tab sis kuj muaj ntau yam ntawv. Tus parser yuav pom tias qhov no tsis yog cov ntaub ntawv thiab yuav tsis quav ntsej cov kab. Qhov no tuaj yeem pab tau rau kev tawm tswv yim yog tias cov ntaub ntawv tau teev tseg manually. Txawm li cas los xij, feem ntau cov npe ntawm cov ntaub ntawv yuav raug tsim tawm thaum lub sij hawm CI parsing, piv txwv li cov ntaub ntawv los ntawm kev cog lus lossis kev thov rub.

Tam sim no, siv hom no, koj tuaj yeem kuaj cov cai tshiab sai sai ua ntej nws nkag mus rau hauv lub ntsiab kev loj hlob. Txhawm rau kom cov ntaub ntawv pov thawj kom hnov ​​​​mob rau cov lus ceeb toom ntsuas, cov khoom siv hluav taws xob Plog converter chij ntxiv --indicate-warnings:

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

Nrog rau tus chij no, lub converter yuav rov qab tsis yog xoom code yog tias muaj lus ceeb toom nyob rau hauv cov ntaub ntawv ntsuam xyuas. Siv tus lej xa rov qab, koj tuaj yeem thaiv qhov sib txuas ua ntej, cog lus lossis rub daim ntawv thov, thiab tso saib cov ntaub ntawv txheeb xyuas tsim tawm ntawm lub vijtsam, qhia nws lossis xa los ntawm kev xa ntawv.

Nco tseg. Thawj zaug koj pib txheeb xyuas cov npe ntawm cov ntaub ntawv, tag nrho qhov project yuav raug tshuaj xyuas, vim tus analyzer yuav tsum tau tsim ib cov ntaub ntawv ntawm dependencies ntawm qhov project qhov chaw cov ntaub ntawv ntawm cov ntaub ntawv header. Qhov no yog ib tug feature ntawm parsing C thiab C ++ cov ntaub ntawv. Nyob rau hauv lub neej yav tom ntej, cov ntaub ntawv dependency tuaj yeem raug cached thiab nws yuav raug hloov kho los ntawm tus ntsuas ntsuas. Qhov kom zoo dua ntawm kev kuaj xyuas ua haujlwm thaum siv cov ntawv teev npe kos hom siv ntau hom kev sib cais yog tias tsuas yog cov ntaub ntawv yuav tsum tau cached, tsis yog cov ntaub ntawv khoom.

General hauv paus ntsiab lus ntawm rub thov tsom xam

Kev tsom xam ntawm tag nrho qhov project yuav siv sij hawm ntau, yog li nws ua rau kev txiav txim siab tsuas yog qee qhov ntawm nws. Qhov teeb meem yog tias koj yuav tsum cais cov ntaub ntawv tshiab los ntawm tus so ntawm cov ntaub ntawv qhov project.

Xav txog ib qho piv txwv ntawm ib tsob ntoo cog nrog ob ceg:

Kev tshuaj xyuas ntawm kev cog lus thiab rub cov lus thov hauv Travis CI, Buddy thiab AppVeyor siv PVS-Studio

Cia peb ua piv txwv tias qhov kev cog lus A1 muaj cov lej loj loj uas twb tau kuaj xyuas lawm. Ib me ntsis dhau los peb tau ua ib ceg ntawm kev cog lus A1 thiab hloov qee cov ntaub ntawv.

Tau kawg, koj pom tias tom qab A1 muaj ob qho kev cog lus ntxiv, tab sis cov no kuj yog kev sib koom ua ke ntawm lwm ceg, vim peb tsis tau cog lus hauv tswv. Thiab tam sim no lub sij hawm tau los txog thaum kho kub npaj. Yog li ntawd, ib qho kev thov rub tau tshwm sim rau kev sib koom ua ke B3 ΠΈ A3.

Tau kawg, nws yuav tuaj yeem tshawb xyuas tag nrho cov txiaj ntsig ntawm lawv cov kev sib koom ua ke, tab sis qhov no yuav ntev dhau lawm thiab tsis ncaj ncees, vim tsuas yog qee cov ntaub ntawv tau hloov pauv. Yog li ntawd, nws yog qhov zoo dua los txheeb xyuas qhov hloov pauv nkaus xwb.

Txhawm rau ua qhov no, peb tau txais qhov sib txawv ntawm cov ceg ntoo, nyob hauv HEAD ntawm ceg uas peb xav sib koom ua ke rau hauv tus tswv:

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

$MERGE_BASE peb yuav txiav txim siab hauv kev nthuav dav tom qab. Qhov tseeb yog tias tsis yog txhua qhov kev pabcuam CI muab cov ntaub ntawv tsim nyog txog lub hauv paus rau kev sib koom ua ke, yog li txhua zaus koj yuav tsum tuaj nrog txoj hauv kev tshiab kom tau txais cov ntaub ntawv no. Qhov no yuav piav qhia hauv qab no hauv txhua qhov kev pabcuam hauv lub vev xaib tau piav qhia.

Yog li, peb tau txais qhov sib txawv ntawm cov ceg ntoo, lossis qhov zoo, cov npe ntawm cov ntaub ntawv npe uas tau hloov pauv. Tam sim no peb yuav tsum muab cov ntaub ntawv .pvs-pr.list (peb redirected cov zis saum toj no rau nws) rau tus analyzer:

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

Tom qab kev tsom xam, peb yuav tsum hloov cov ntaub ntawv teev tseg (PVS-Studio.log) rau hauv hom ntawv nyeem tau:

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

Cov lus txib no yuav sau cov yuam kev hauv stderr (tus qauv yuam kev tso zis ntws).

Tsuas yog ntawm no peb xav tau tsis yog tsuas yog tso saib qhov yuam kev, tab sis kuj qhia peb cov kev pabcuam rau kev sib dhos thiab kuaj txog qhov muaj teeb meem. Rau qhov no, ib tug chij tau ntxiv rau lub converter -W (--indicate-warnings). Yog tias muaj tsawg kawg yog ib qho kev ntsuas ntsuas ceeb toom, rov qab cov lej ntawm cov khoom siv hluav taws xob Plog converter yuav hloov mus rau 2, uas nyob rau hauv lem yuav ceeb toom rau CI cov kev pab cuam uas muaj peev xwm ua yuam kev nyob rau hauv lub rub daim ntawv thov.

Travis IB

Cov kev teeb tsa yog ua nyob rau hauv daim ntawv ntawm cov ntaub ntawv .travis.yml. Txhawm rau kom yooj yim, kuv qhia koj kom muab txhua yam tso rau hauv ib daim ntawv bash cais nrog cov haujlwm uas yuav raug hu los ntawm cov ntaub ntawv .travis.yml (bash scriptname.sh function_name).

Peb yuav ntxiv cov cai tsim nyog rau tsab ntawv rau bash, yog li peb tau txais kev ua haujlwm ntau dua. Hauv seem nruab wb sau li no:

install:
  - bash .travis.sh travis_install

Yog tias koj muaj cov lus qhia, koj tuaj yeem txav lawv mus rau tsab ntawv los ntawm kev tshem cov hyphens.

Cia peb qhib cov ntaub ntawv .travis.sh thiab ntxiv cov teeb tsa analyzer rau kev ua haujlwm 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 
}

Tam sim no cia peb ntxiv rau ntu tsab ntawv khiav tsom xam:

script:
  - bash .travis.sh travis_script

Thiab nyob rau hauv bash tsab ntawv:

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
}

Cov cai no yuav tsum tau khiav tom qab qhov project tsim, piv txwv li, yog tias koj muaj CMake tsim:

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

Nws yuav zoo li no:

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
}

Tej zaum koj twb pom cov kev hloov pauv ib puag ncig. $TRAVIS_PULL_REQUEST ΠΈ $TRAVIS_BRANCH. Travis CI tshaj tawm lawv ntawm nws tus kheej:

  • $TRAVIS_PULL_REQUEST khaws tus lej thov rub, lossis cuavyog tias nws yog ib ceg ntoo;
  • $TRAVIS_REPO_SLUG khaws cov npe ntawm qhov project repository.

Lub algorithm ntawm no muaj nuj nqi:

Kev tshuaj xyuas ntawm kev cog lus thiab rub cov lus thov hauv Travis CI, Buddy thiab AppVeyor siv PVS-Studio
Travis CI teb rau cov lej xa rov qab, yog li qhov muaj cov lus ceeb toom yuav qhia cov kev pabcuam kom chij qhov kev cog lus ua buggy.

Cia peb saib ze dua ntawm kab ntawm kab lus no:

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

Qhov tseeb yog tias Travis CI cia li sib koom ua ke cov ceg ntoo thaum lub sij hawm tsom xam ntawm kev thov rub:

Kev tshuaj xyuas ntawm kev cog lus thiab rub cov lus thov hauv Travis CI, Buddy thiab AppVeyor siv PVS-Studio
Yog li ntawd, peb tsom xam A4thiab tsis B3 -> A3. Vim qhov no feature, peb yuav tsum xam qhov txawv ntawm A3, uas tsuas yog sab saum toj ntawm ceg los ntawm keeb kwm.

Ib qho tseem ceeb nthuav dav tseem nyob - caching lub dependencies ntawm header cov ntaub ntawv ntawm compiled translation units (*.c, *.cc, *.cpp, thiab lwm yam). Tus kws tshuaj ntsuam xyuas suav cov kev cia siab ntawm thawj zaug pib hauv hom kev tshuaj xyuas cov npe ntawm cov ntaub ntawv thiab tom qab ntawd txuag lawv hauv .PVS-Studio directory. Travis CI tso cai rau koj mus cache folders, yog li peb yuav khaws cov ntaub ntawv teev npe .PVS-Studio/:

cache:
  directories:
    - .PVS-Studio/

Cov cai no yuav tsum tau muab ntxiv rau hauv cov ntaub ntawv .travis.yml. Cov ntawv teev npe no khaws ntau cov ntaub ntawv khaws tseg tom qab kev tshuaj xyuas, uas yuav ua kom nrawm nrawm ntawm cov ntawv teev npe tshuaj ntsuam xyuas lossis kev txheeb xyuas ntxiv. Yog tias qhov no tsis ua tiav, tus kws tshuaj ntsuam xyuas yuav txheeb xyuas tag nrho cov ntaub ntawv txhua lub sijhawm.

Buddy

Zoo li Travis C.I. Buddy muab lub peev xwm los tsim thiab sim cov haujlwm uas tau khaws cia ntawm GitHub. Tsis zoo li Travis CI, nws tau teeb tsa hauv lub vev xaib interface (kev txhawb nqa bash muaj), yog li tsis tas yuav khaws cov ntaub ntawv teeb tsa hauv qhov project.

Ua ntej ntawm tag nrho cov, peb yuav tsum tau ntxiv ib qho kev txiav txim tshiab rau txoj kab tsim:

Kev tshuaj xyuas ntawm kev cog lus thiab rub cov lus thov hauv Travis CI, Buddy thiab AppVeyor siv PVS-Studio
Qhia meej lub compiler uas tau siv los tsim qhov project. Daim ntawv ceeb toom lub thawv docker uas tau teeb tsa hauv qhov haujlwm no. Piv txwv li, muaj ib lub thawv tshwj xeeb rau GCC:

Kev tshuaj xyuas ntawm kev cog lus thiab rub cov lus thov hauv Travis CI, Buddy thiab AppVeyor siv PVS-Studio
Tam sim no cia peb nruab PVS-Studio thiab cov khoom siv tsim nyog:

Kev tshuaj xyuas ntawm kev cog lus thiab rub cov lus thov hauv Travis CI, Buddy thiab AppVeyor siv PVS-Studio
Ntxiv cov kab hauv qab no rau tus editor:

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

Tam sim no cia peb mus rau Khiav tab (thawj lub cim) thiab ntxiv cov lej hauv qab no rau cov ntawv sau ua ke:

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

Yog tias koj tau nyeem ntu ntawm Travs-CI, ces cov cai no twb paub rau koj, txawm li cas los xij, tam sim no muaj cov kauj ruam tshiab:

Kev tshuaj xyuas ntawm kev cog lus thiab rub cov lus thov hauv Travis CI, Buddy thiab AppVeyor siv PVS-Studio
Qhov tseeb yog tias tam sim no peb tsis tau txheeb xyuas qhov tshwm sim ntawm kev sib koom ua ke, tab sis HEAD ntawm ceg ntawm qhov kev thov rub tawm:

Kev tshuaj xyuas ntawm kev cog lus thiab rub cov lus thov hauv Travis CI, Buddy thiab AppVeyor siv PVS-Studio
Yog li peb nyob hauv ib qho kev cog lus B3 thiab peb yuav tsum tau txais qhov txawv ntawm 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

Rau kev txiav txim A3 Cia peb siv GitHub API:

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

Peb siv cov kev hloov pauv hauv qab no muab los ntawm Buddy:

  • $BUDDY_EXECUTION_PULL_REQEUST_NO - rub tus lej thov;
  • $BUDDY_REPO_SLUG - kev sib xyaw ntawm username thiab repository (piv txwv li max / test).

Tam sim no cia peb khaws cov kev hloov pauv uas siv lub pob hauv qab no, thiab pab rub cov lus thov tsom xam:

Kev tshuaj xyuas ntawm kev cog lus thiab rub cov lus thov hauv Travis CI, Buddy thiab AppVeyor siv PVS-Studio
Tsis zoo li Travis CI, peb tsis tas yuav qhia .pvs-studio rau caching, txij li Buddy cia li caches tag nrho cov ntaub ntawv rau tom ntej launches. Yog li ntawd, qhov kawg ntawm sab laug yog khaws tus ID nkag mus thiab lo lus zais rau PVS-Studio hauv Buddy. Tom qab txuag cov kev hloov pauv, peb yuav rov qab mus rau Cov Kav Dej. Peb yuav tsum mus rau qhov chaw sib txawv thiab ntxiv tus ID nkag mus thiab tus yuam sij rau PVS-Studio:

Kev tshuaj xyuas ntawm kev cog lus thiab rub cov lus thov hauv Travis CI, Buddy thiab AppVeyor siv PVS-Studio
Tom qab ntawd, qhov tshwm sim ntawm qhov kev thov rub tawm tshiab lossis cog lus yuav ua rau daim tshev. Yog tias qhov kev cog lus muaj qhov yuam kev, Buddy yuav taw tes rau ntawm nplooj ntawv thov rub.

AppVeyor

Teeb tsa AppVeyor zoo ib yam li Buddy, txij li txhua yam tshwm sim hauv lub vev xaib interface thiab tsis tas yuav ntxiv cov ntaub ntawv *.yml rau qhov project repository.

Cia peb mus rau qhov chaw tab nyob rau hauv qhov project txheej txheem cej luam:

Kev tshuaj xyuas ntawm kev cog lus thiab rub cov lus thov hauv Travis CI, Buddy thiab AppVeyor siv PVS-Studio
Cia peb nqes mus rau nplooj ntawv no thiab pab kom txuag tau cache rau kev thov rub lub tsev:

Kev tshuaj xyuas ntawm kev cog lus thiab rub cov lus thov hauv Travis CI, Buddy thiab AppVeyor siv PVS-Studio
Tam sim no cia peb mus rau Environment tab, qhov twg peb qhia cov duab los tsim thiab tsim ib puag ncig hloov pauv:

Kev tshuaj xyuas ntawm kev cog lus thiab rub cov lus thov hauv Travis CI, Buddy thiab AppVeyor siv PVS-Studio
Yog tias koj tau nyeem cov tshooj dhau los, koj paub zoo txog ob qhov kev hloov pauv no βˆ’ PVS_KEY ΠΈ PVS_USERNAME. Yog tias tsis yog, cia kuv ceeb toom rau koj tias lawv yuav tsum tau kuaj xyuas daim ntawv tso cai ntawm PVS-Studio analyzer. Yav tom ntej, peb yuav ntsib lawv dua hauv Bash scripts.

Nyob rau tib nplooj ntawv hauv qab no, qhia lub nplaub tshev rau caching:

Kev tshuaj xyuas ntawm kev cog lus thiab rub cov lus thov hauv Travis CI, Buddy thiab AppVeyor siv PVS-Studio
Yog tias peb tsis ua qhov no, peb yuav txheeb xyuas tag nrho qhov project tsis yog ob peb cov ntaub ntawv, tab sis peb yuav tau txais cov zis raws li cov ntaub ntawv teev tseg. Yog li ntawd, nws yog ib qho tseem ceeb kom nkag mus rau lub npe ntawm cov ntaub ntawv raug.

Tam sim no nws yog lub sijhawm rau cov ntawv xeem. Qhib cov Tests tab thiab xaiv Script:

Kev tshuaj xyuas ntawm kev cog lus thiab rub cov lus thov hauv Travis CI, Buddy thiab AppVeyor siv PVS-Studio
Muab cov lej hauv qab no tso rau hauv daim ntawv no:

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

Cia peb saib cov hauv qab no ntawm cov cai:

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

Lub luag haujlwm tshwj xeeb ntawm tus nqi ntawm pwd hais kom ua rau qhov sib txawv uas yuav tsum khaws cov nqi no zoo li coj txawv txawv thaum xub thawj siab ib muag, txawm li cas los xij, kuv yuav piav qhia txhua yam hauv ib pliag.

Thaum teeb tsa lub ntsuas ntsuas hauv AppVeyor, Kuv tau ntsib tus cwj pwm coj txawv txawv ntawm tus ntsuas ntsuas. Ntawm qhov tod tes, txhua yam ua haujlwm raug, tab sis kev txheeb xyuas tsis tau pib. Kuv siv sijhawm ntau pom tias peb nyob hauv /home/appveyor/projects/testcalc/ directory, thiab cov analyzer paub tseeb tias peb nyob hauv /opt/appveyor/build-agent/. Tom qab ntawd kuv pom tau hais tias qhov hloov pauv $PWD yog qhov dag me ntsis. Vim li no, kuv manually kho nws tus nqi ua ntej pib qhov kev tshuaj ntsuam.

Thiab tom qab ntawd txhua yam, zoo li ua ntej:

Kev tshuaj xyuas ntawm kev cog lus thiab rub cov lus thov hauv Travis CI, Buddy thiab AppVeyor siv PVS-Studio
Tam sim no xav txog cov nram qab no snippet:

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

Hauv nws, peb tau txais qhov sib txawv ntawm cov ceg ntoo uas qhov kev thov rub tau tshaj tawm. Rau qhov no peb xav tau cov hauv qab no variables ib puag ncig:

  • $APPVEYOR_PULL_REQUEST_NUMBER - rub tus lej thov;
  • $APPVEYOR_REPO_NAME - username thiab project repository.

xaus

Tau kawg, peb tsis tau txiav txim siab tag nrho cov kev pabcuam txuas mus ntxiv, txawm li cas los xij, lawv txhua tus muaj cov haujlwm tshwj xeeb zoo sib xws. Nrog rau kev zam ntawm caching, txhua qhov kev pabcuam ua rau nws tus kheej "tsheb tuam", yog li txhua yam yog ib txwm txawv.

Qee qhov, zoo li hauv Travis-CI, ob peb kab ntawm cov lej thiab caching ua haujlwm tsis zoo; nyob qhov twg, ib yam li hauv AppVeyor, koj tsuas yog yuav tsum tau qhia cov ntawv tais ceev tseg hauv qhov chaw; tab sis qee qhov koj xav tau los tsim cov yuam sij tshwj xeeb thiab sim ua kom lub kaw lus muab sijhawm rau koj los sau cov ntaub ntawv cached. Yog li ntawd, yog tias koj xav teeb tsa rub thov kev txheeb xyuas ntawm qhov kev pabcuam txuas ntxiv uas tsis tau tham saum toj no, ua ntej kom paub tseeb tias koj yuav tsis muaj teeb meem nrog caching.

Ua tsaug rau koj mloog. Yog tias muaj qee yam tsis ua haujlwm, thov koj xav sau ntawv rau peb ntawm txhawb nqa. Peb yuav qhia thiab pab.

Kev tshuaj xyuas ntawm kev cog lus thiab rub cov lus thov hauv Travis CI, Buddy thiab AppVeyor siv PVS-Studio

Yog tias koj xav qhia cov kab lus no nrog cov neeg hais lus Askiv, thov siv qhov txuas txhais lus: Maxim Zvyagintsev. Kev tshuaj xyuas ntawm kev cog lus thiab rub cov lus thov hauv Travis CI, Buddy thiab AppVeyor siv PVS-Studio.

Tau qhov twg los: www.hab.com

Ntxiv ib saib