Analysis committit ac trahere petitiones in Travis CI, Buddy et AppVeyor PVS-Studia utens.

Analysis committit et trahere petitiones in Travis CI, Buddy et AppVeyor PVS-Studia utens.
In PVS-Studio analystoris pro C et C++ linguarum in Linux et macOS, inde a versione 7.04 incipiens, optio probata apparuit indicem certarum imaginum reprimendum. Novo modo utens, analystorem configurare potes ad reprimenda mandata et petitiones collige. Hic articulus indicabit tibi quomodo inspicias indicem tabularum mutatarum imaginum GitHub in tam populari CI (Integratione continua) systemata Travis CI, Buddy et AppVeyor.

File album reprehendo modus

PVS Studio, instrumentum ad errores et vulnerabilitates potentiales cognoscendas in fonte codice programmatum in C, C++, C# et Java scriptum est. Opera in 64 frenum systemata in Fenestra, Linux et macOS.

In versione PVS-Studio 7.04 pro Linux et macOS, modus inveniendi indicem fasciculorum fontium apparuit. Hoc operatur in inceptis quorum ratio aedificandi tibi tabellam generandi permittit compile_commands.json. Opus est analysi ad informationes eliciendas de compilatione imaginum definitorum. Si systema constructum tuum documentum compile_commands.json generare non sustinet, conare generare talem fasciam utilitate utens Ursus.

Item, tabulae indici modus iniectae adhiberi potest una cum graphio vestigiorum stipes compilatoris immissae (pvs-studio-analyzer vestigium). Ad hoc faciendum, necesse est ut prius plenam operis incepti et indagare eam perficias ut analysris notitias integras de parametris compilationum omnium imaginum repressas colligat.

Nihilominus haec optio magnum detrimentum habet - aut opus erit ad plenum faciendum vestigium totius consilii totius temporis, quo curris eam, quae in se contradicit ideae cito inhibitionis committi. Vel, si vestigium ipsum resultat, sequens analystoris currit imperfectum esse potest si dependens structura fontis imaginum post vestigium mutat (exempli gratia, nova #include uni e fontis imagini additur).

Propterea non commendamus utendo indicem electronicarum perscriptio modum cum tigillo vestigio ad reprimendam committit vel petitiones trahere. In casu facere potes incremental constructum cum iniecta committit, considera utendi modum incremental analysis.

Elenchus fontium analysi in analysi servatur in fasciculo textu et ad analystorem parametri utens -S:

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

Hic fasciculus significat semitas relativas vel absolutas ad lima, et quaelibet fasciculus novus in linea nova esse debet. Acceptum est non solum nomina fasciculorum analysin denotare, sed etiam textum variis. Analystor videbit hanc limam non esse et lineam ignorare. Hoc utile esse potest ad explicandum si lima manually specificata sint. Attamen persaepe in analysi in CI analyseos index generabitur, exempli gratia, haec fasciculi ex petitione committi vel trahere possunt.

Nunc, hoc modo utens, celeriter novum codicem reprehendo antequam in ramum principalem evolutionis inveniat. Ut ratio inspiciendi respondeat ad admonitiones analyser, utilitas plog-converter vexillum additae --indicant monita:

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

Cum hoc vexillo, converter codicem non-nullam reddet si monita sunt in fama analystoris. Reditus codice utens, praecommisso hamo, committere, vel trahere petitionem potes, et generatae analysris relatio exponi, communicari vel electronici mitti potest.

Nota. Cum primum indicem tabulariorum examinare incipies, totum consilium enucleabitur, quia analyser oportet generare fasciculum dependentiarum instrumenti fontis imaginum in capite limarum. Haec notatio analysendi C et C++ imagini est. In futurum, file dependentiae condiri possunt et sponte ab analysi renovabitur. Commodum reprimendi facit cum utendi tabulae indicem reprimendi modum in utendi incrementali analysi modo est quod solum opus est ut fasciculus ille fasciculus et non materia lima.

Principia generalia rogationis viverra analysis

Totum consilium analysing multum temporis accipit, unde sensum quandam tantum partem eius cohibere facit. Problema est te novas tabulas a reliquis documentorum documentis separare.

Intueamur exemplum arboris commissi cum duobus ramis;

Analysis committit et trahere petitiones in Travis CI, Buddy et AppVeyor PVS-Studia utens.

Sit commissum cogitet A1 codicem satis magnum continet quod iam probatum est. Paulo ante fecimus ramum a commit A1 et quosdam lima mutavit.

Tu sane animadverti, quod post A1 plura commissa duo facta sunt, sed hae quoque immersiones aliorum ramorum erant, quia nos non committimus dominus. Et nunc tempus est, quando venit? hotfix paratus. Quam ob rem petitio viverra apparuit eive B3 ΠΈ A3.

Utique posset totum eventum eorum merger reprimere, sed hoc nimis tempus edax et iniustum fore, cum paucae tabulae mutatae sint. Ergo efficacius est resolvere nisi mutatos.

Ad hoc efficiendum discrimen inter ramos, cum in PATER rami, ex quo in dominum iungi volumus;

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

$MERGE_BASE postea singillatim videbimus. Re vera non omne CI servitium necessarias informationes praebet de datorum ad bus, ut quotiescumque novis modis ascendendi ad hanc datam obtinendam. Hoc infra in singulis descriptis servitiis singillatim describetur.

Discrimen igitur inter ramos obtinuit, vel potius indicem nominum fasciculorum mutatorum. Nunc opus est tabellam dare .pvs-pr.list (redirected output above to it) ad analysrem:

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

Post analysim, necesse est tabellam stipendii (PVS-Studio.log) in formam legere facilem convertere:

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

Hoc mandatum enumerare errores in stderr (Verbum erroris nuntius output).

Tantum nunc opus est ut errores non solum ostendant, sed etiam ministerium nostrum ad contionem informent ac de praesentibus quaestionibus experiantur. Quam ob rem vexillum convertenti addita est -W (--indicant monita). Si admonitio analyser saltem una sit, utilitas reditus codicem plog-converter ad II mutabit, qui rursus ministerium CI de praesentia errorum potentialium certiorem faciet in lima petendi trahere.

Cogito Ergo C.

Configuratio facta est ut lima .travis.yml. Commodum enim te suadeo ut omnia in singularem scripturam cum functionibus quae a tabella vocentur inicias .travis.yml (vercundus script_name.sh function_name).

Addemus necessarium codicem ad scriptor at vercundushoc modo plus muneris consequemur. In sectione install quae sequuntur scribamus:

install:
  - bash .travis.sh travis_install

Si quid haberes instructiones, eas in scripturam transferre potes, hyphens removendo.

Aperire tabella .travis.sh et adde analyser ad munus occasum 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 
}

Nunc ad sectionem addamus script currere analysis:

script:
  - bash .travis.sh travis_script

Et in scriptione vernacula:

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
}

Hoc signum debet currere post project aedificium, exempli gratia, si super CMake aedificares:

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

Eveniet sic:

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
}

Tu probabiliter iam animadvertit haec environment variables $TRAVIS_PULL_REQUEST ΠΈ $TRAVIS_BRANCH. Travis CI independenter declarat;

  • $TRAVIS_PULL_REQUEST addit viverra petitionem numero vel falsum,si id ramus est;
  • $TRAVIS_REPO_SLUG nomen reponit repositorium reponit.

Algorithmus ad hoc munus;

Analysis committit et trahere petitiones in Travis CI, Buddy et AppVeyor PVS-Studia utens.
Respondet Travis CI codicibus reddere, monitis praesentia sic indicabo obsequium notare committo ut errores continentes.

Nunc propius inspiciamus hanc codicis lineam:

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

Re vera est quod Travis CI ramos automatice immiscet dum petitionem trahere analyzing;

Analysis committit et trahere petitiones in Travis CI, Buddy et AppVeyor PVS-Studia utens.
Ideo nos analyse A4et non B3->A3. Propter hanc plumam differentiam cum . computare oportet А3qui nimirum cacumen rami a originem,.

Una res magni momenti supersunt - caching clientelas fasciculorum capitis in translatione unitates digesta (*.c, *.cc, *.cpp, etc.). Analystor has clientelas computat cum primum in modum reprimendi indicem fasciculorum immittitur et tunc salvat eas in .PVS-Studio presul. Travis CI te permittit ut folders cella, sic indicem datam servabimus .PVS-Studio/:

cache:
  directories:
    - .PVS-Studio/

Hoc signum tabellae adiciendum est .travis.yml. Hoc directorium varias notitias post analysin collectas reponit, quae signanter accelerare subsequentem analysin documenti vel analysin incrementalem derivare vult. Si hoc non fit, actu analystor omnes tabulas omni tempore resolvet.

Buddy

Sicut Travis CI, Buddy facultatem praebet automatice aedificandi et experiendi in GitHub reposita. Dissimile Travis CI, configuratur in interfaciei interreti (bash adminiculo praesto est), ideo nihil opus est ut limas configurationes in incepto reponat.

Imprimis novam actionem in ecclesiam versus addere oportet;

Analysis committit et trahere petitiones in Travis CI, Buddy et AppVeyor PVS-Studia utens.
Indicamus compilator qui usus est ad opus faciendum. Animadverte phialam receptaculum quod in hac actione instituitur. Exempli gratia, est specialis continens GCC;

Analysis committit et trahere petitiones in Travis CI, Buddy et AppVeyor PVS-Studia utens.
Nunc instituamus PVS-Studium et utilitates necessarias;

Analysis committit et trahere petitiones in Travis CI, Buddy et AppVeyor PVS-Studia utens.
Ad editorem sequentes lineas addamus:

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

Nunc eamus ad Tab (primam iconem) et codicem sequentem adde ad editori respondenti agrum:

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

Si sectionem in Travs-CI legeris, hoc signum iam tibi familiare est, nunc nova scena est;

Analysis committit et trahere petitiones in Travis CI, Buddy et AppVeyor PVS-Studia utens.
Ita est, quod nunc resolvimus non exitum mergae, sed PATER rami, unde viverra petitio fit;

Analysis committit et trahere petitiones in Travis CI, Buddy et AppVeyor PVS-Studia utens.
Ita sumus in conditione committi B3 et necesse est ut a differentia 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

ad determinandum A3 Utamur GitHub API:

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

Sequenti variabilius usus est quae Buddy praebet:

  • $BUDDY_EXECUTION_PULL_REQEUST_NO - trahere petitionem numerus;
  • $BUDDY_REPO_SLUG - coniunctio username et repositio (exempli gratia max/test).

Nunc salvemus mutationes infra pyga utentes et analysin rogationis viverra da:

Analysis committit et trahere petitiones in Travis CI, Buddy et AppVeyor PVS-Studia utens.
Dissimilis Travis CI, non opus est ut specificare .pvs-studio pro caching, cum Buddy automatice omnia fascicula ad immissionem subsequentium recondat. Itaque ultimum reliquum est login et tesseram servare in PVS-Studii in Buddy. Post mutationes, salvis Pipeline reducti erimus. Necesse est nos movere ad variabiles variabiles constituere et addendo rationem et clavem pro PVS-Studio:

Analysis committit et trahere petitiones in Travis CI, Buddy et AppVeyor PVS-Studia utens.
Post hoc, speciem novae petitionis trahendi vel felis recognitionis committendae erit. Si errores commissi contineat, Buddy hoc in pagina trahere petitionis indicabit.

AppVeyor

Constitutio AppVeyor Buddy similis est, quia omnia in interfaciei interreti ratione fiunt et nihil opus est *.yml fasciculum addere in repositorium project.

Eamus ad Occasus tab in prospectu propositi:

Analysis committit et trahere petitiones in Travis CI, Buddy et AppVeyor PVS-Studia utens.
Librum deprimamus hanc paginam et fac cache salutaria ad petitiones colligendas:

Analysis committit et trahere petitiones in Travis CI, Buddy et AppVeyor PVS-Studia utens.
Nunc eamus ad Tab Environment, ubi imaginem conventus exprimimus ac variabilium necessariorum ambitus:

Analysis committit et trahere petitiones in Travis CI, Buddy et AppVeyor PVS-Studia utens.
Si superiores partes legeris, cum his duabus variabilibus es valde nota PVS_KEY ΠΈ PVS_USERNAME. Sin minus, moneam te necesse esse ut licentia PVS-Studii analystoris reprimatur. Iterum in Bash scriptoribus in futuro videbimus.

In eadem pagina infra indicamus folder pro caching:

Analysis committit et trahere petitiones in Travis CI, Buddy et AppVeyor PVS-Studia utens.
Si hoc non fecerimus, totum consilium loco duorum tabulariorum resolvemus, sed e certis fasciculis output consequemur. Ideo refert rectam directorium nomen inire.

Nunc tempus est scriptionem probare. Aperi Probat tab et eligere Scriptor:

Analysis committit et trahere petitiones in Travis CI, Buddy et AppVeyor PVS-Studia utens.
Opus est codice sequenti in hanc formam crustulum:

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

Sequens partem codicis operam dabimus:

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

Definitio potius assignationis valoris praecepti pwd variabilis, quae hunc valorem default reponat, prima specie mirum videtur, tamen omnia nunc exponam.

Cum analysrem in AppVeyor constituerem, mores maxime mirabiles analystoris offendit. Ex altera parte, omnia recte operata sunt, sed analysis non initium fecit. Multum temporis exegi animadvertens nos esse in directorio /home/appveyor/projectorum/testcalc/, et certus est analystor nos in /opt/appveyor/aedificare-agente/. Tunc intellexi $PWD variabile paulum iacere. Hac de causa, valorem manuale renovavi antequam ab analysi incipio.

Et tunc omnia sunt sicut prius;

Analysis committit et trahere petitiones in Travis CI, Buddy et AppVeyor PVS-Studia utens.
Nunc sequens fragmentum considera;

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

In eo habetur differentia inter ramos super quos petitio traho declaratur. Ad hoc faciendum opus est variabiles ambitus sequentes:

  • $ APPVEYOR_PULL_REQUEST_NUMBER - numerus petitionem viverra;
  • $ APPVEYOR_REPO_NAME - nomen usoris et repositorium project.

conclusio,

Utique non consideravimus omnes possibilis integrationis continuae operas, tamen omnes speciales inter se similes operativae habent. Exceptis caching, unumquodque officium suum "bicyclum" facit, ita omnia semper diversa sunt.

Alicubi, sicut in Travis-CI, duo lineae codicis et opera emendate caching; alicubi, sicut in AppVeyor, vos iustus postulo ut folder in uncinis specificare; alicubi autem necesse est ut claves unicas creandi et rationem persuadere conetur tibi facultatem rescribere fragmentum conditivorum. Si igitur vis analysin trahere petitionum continuam integrationem quae supra non tractata est, primum fac ut problemata cum caching non habebis.

Tibi gratias ago pro attente. Si aliquid non elaborat, libenter nobis scribe auxilium. monebimus et adiuvabimus.

Analysis committit et trahere petitiones in Travis CI, Buddy et AppVeyor PVS-Studia utens.

Si vis communicare hunc articulum cum auditorio Anglico loquentem, quaeso utere vinculo translationis: Maxim Zvyagintsev. Analysis committit et trahere petitiones in Travis CI, Buddy et AppVeyor PVS-Studia utens..

Source: www.habr.com