Back-End

24 nov, 2015

O que você deve fazer antes publicar código PHP em seu repositório Git de produção

Publicidade

Toda vez que você fizer commit em um novo código em um repositório Git, há uma grande chance de que o código tenha problemas que não foram detectados com o seu lote habitual de testes.

Leia este artigo para aprender a integrar o PHP Code Sniffer ao seu projeto de commit no Git para inspecionar seu código PHP automaticamente e impedir que o código com problemas seja comitado.

Introdução

Eu imagino que você já está usando Git como sistema de controle de versão para projetos PHP.

É verdade que às vezes cometemos erros de ortografia ao digitar um código, o que pode causar um aviso ou um erro fatal. Normalmente esses erros seriam detectados com testes, mas nem todos são detectados pelo lote de testes que realizamos.

Fazer push em um código que tem erros para um servidor de produção pode causar sérios problemas. Mesmo comitando o mesmo código para o seu repositório Git pode resultar em registros git inconsistentes – por exemplo, quando um commit foi feito apenas para corrigir erros de digitação.

Como evitar código comitado com problemas?

Neste artigo proponho usar, por exemplo, a ferramenta PHP CodeSniffer para inspecionar nosso código e mostrar avisos, erros ou usos de função obsoleta antes de confirmar as alterações para repositório git. Dessa forma, as boas práticas de programação se tornam mais fáceis de seguir.

Configuração de um repositório Git para usar PHP Code Sniffer

Para configurar o PHP Code Sniffer, você precisa do PEAR e do pacote PHP CodeSniffer.

Instalar o Gerenciador de Pacotes PEAR

Verifique se PEAR está instalado em seu sistema executando pear version em seu terminal. Se o comando falhar, você precisa instalar o PEAR em seu sistema.

Em distros baseadas em Unix/Linux

$ wget http://pear.php.net/go-pear.phar  
$ php go-pear.phar

No Mac OS X

$ wget http://pear.php.net/go-pear.phar
$ php -d detect_unicode=0 go-pear.phar

ou

$ curl -O http://pear.php.net/go-pear.phar 
$ php -d detect_unicode=0 go-pear.phar

Instale o PHP Code Sniffer

Use PEAR para instalar o pacote PHP_CodeSniffer, que será utilizado para executar testes em nosso código PHP e verificar erros e padrões de código.

$ pear install PHP_CodeSniffer

Integrar o PHP Code Sniffer com Git

Vamos configurar o repositório Git para executar o PHP Code sniffer em cada git commit. Mude para o diretório do projeto PHP e crie um arquivo de “pre-commit” em .git/hooks

$ cd /path/to/project
$ vi .git/hooks/pre-commit

Copie o script abaixo e salve o arquivo.

#!/bin/sh

PROJECT=`php -r "echo dirname(dirname(dirname(realpath('$0'))));"`
STAGED_FILES_CMD=`git diff --cached --name-only --diff-filter=ACMR HEAD | grep \\\\.php`

# Determine if a file list is passed
if [ "$#" -eq 1 ]
then
    oIFS=$IFS
    IFS='
    '
    SFILES="$1"
    IFS=$oIFS
fi
SFILES=${SFILES:-$STAGED_FILES_CMD}

echo "Checking PHP Lint..."
for FILE in $SFILES
do
    php -l -d display_errors=0 $PROJECT/$FILE
    if [ $? != 0 ]
    then
        echo "Fix the error before commit."
        exit 1
    fi
    FILES="$FILES $PROJECT/$FILE"
done

if [ "$FILES" != "" ]
then
    echo "Running Code Sniffer..."
    ./vendor/bin/phpcs --standard=PSR1 --encoding=utf-8 -n -p $FILES
    if [ $? != 0 ]
    then
        echo "Fix the error before commit."
        exit 1
    fi
fi

exit $?

É muito importante tornar o script de pré-commit em executável para que ele possa ser executado antes de realmente fazer o commit dos arquivos.

$ chmod +x .git/hooks/pre-commit

Conclusão

Usar PHP Code Sniffer para verificar as nossas mudanças de código PHP antes de fazer o commit em um repositório Git é fácil, uma vez que você descobrir como criar um arquivo de pré-commit. O mesmo processo pode ser usado para adicionar outros controles de código utilizando outras ferramentas.

***

Suresh Kumar faz parte do time de colunistas internacionais do iMasters. A tradução do artigo é feita pela redação iMasters, com autorização do autor, e você pode acompanhar o artigo em inglês no link: http://www.phpclasses.org/blog/post/301-What-You-Should-Do-Before-Pushing-PHP-Code-to-your-Production-GIT-Repository.html