Automatické testování coding style pro změněné soubory Mozektevidi.net - Mozektevidi.net.
before_script:
- if [ ! -d "vendor/php-parallel-lint" ]; then composer create-project --prefer-dist --no-interaction jakub-onderka/php-parallel-lint vendor/php-parallel-lint; fi
- php vendor/php-parallel-lint/parallel-lint.php -e php --exclude vendor .
První řádek mi nainstaluje paraller lint, dalším řádkem se pak spustí rychlá kontrola, zda v souboru není parse error.
script:
- composer global require "squizlabs/php_codesniffer=*"
- touch app/cache/cs.sh
- git remote add upstream git@github.com:mzk/foo.git
- php app/run-cs.php
- chmod +x app/cache/cs.sh
- app/cache/cs.sh
git fetch origin +refs/pull/272/merge:
) A my potřebuje větve master + stable, abychom věděli jaké soubory jsou změněné.run-cs.php
<?php
exec('git diff --name-only master', $changedAllFilesMaster); //změněné soubory oproti větvi master
exec('git diff --name-only upstream/stable', $changedAllFilesStable); //změněné soubory oproti větvi stable
//less changed files => probable pull request master / stable
if (count($changedAllFilesMaster) < count($changedAllFilesStable)) {
$changedAllFiles = $changedAllFilesMaster;
} else {
$changedAllFiles = $changedAllFilesStable;
}
print_r($changedAllFiles);
//ne všechny soubory chci kontrolovat. Ty které mají v commit message `--no-check` se nekontrolují + ty co jsou v souboru `.csignore`
$filteredFiles = [];
foreach ($changedAllFiles as $file) {
$file = trim($file);
exec('git log --oneline -n 1 -- ' . $file, $output);
if (isset($output[0])) {
$output = $output[0];
} else {
$output = ''; //new file = output empty array.
}
$fileNames = [];
if (file_exists(__DIR__ . '/.csignore')) {
$fileNames = explode("\n", file_get_contents(__DIR__ . '/.csignore'));
}
if (!strpos($output, '--no-check') && strpos($file, '.php') && file_exists($file)) {
$filteredFiles[] = $file;
}
$filteredFiles = array_diff($filteredFiles, $fileNames);
}
print_r($filteredFiles);
$str = '#!/usr/bin/env bash' . "\n";
if ($filteredFiles) {
$str .= '~/.composer/vendor/bin/phpcs --standard=ruleset.xml --extensions=php --warning-severity=0 --encoding=utf-8 --tab-width=4 -sp';
foreach ($filteredFiles as $file) {
$str .= ' ' . $file;
}
}
file_put_contents(__DIR__ . '/../app/cache/cs.sh', $str);
chmod(__DIR__ . '/../app/cache/cs.sh', 777);
Pokud ještě nemáte napsané testy pro coding style, určitě si je napište.
Ušetříte si zbytečné komentování pull requestů, kde bude plno zbytečných zpráv typu cs, fix cs, remove whitespace, add new line...
Tyto testy se dají pouštět i na localhostu ještě před posláním pull requestu.
Nám se toto v praxi hodně osvědčilo. Pull requesty, které opravovali coding style měli i 5 tisíc změněných řádků. A než na to někdo kouknul a dal merge, tak byly konflikty. Navíc se to nikomu nechce opravovat ani dělat review.
Tímto prostě musí, jakmile soubor změní. A to je fajn "buzerace" :).
Pamatuj na to, že tvůj příspěvek o tobě něco vypovídá. O tom, jak jsi inteligentní, jak se chováš a kolik ti je let. Tak se podle toho chovej ;-)
Kometáře s neověřenou IP adresou čekají na ruční schválení. Pokud se některý kometář nezobrazí ihned, čeká na schválení, neposílejte komentář znova.