Não, não é, por dois motivos:
Rapidez
As confirmações devem ser rápidas. Uma confirmação que leva 500 ms., Por exemplo, é muito lenta e incentiva os desenvolvedores a se comprometerem com mais moderação. Como em qualquer projeto maior que um Hello World, você terá dezenas ou centenas de testes, levará muito tempo para executá-los durante a pré-confirmação.
Obviamente, as coisas pioram para projetos maiores, com milhares de testes que são executados por minutos em uma arquitetura distribuída ou semanas ou meses em uma única máquina.
A pior parte é que não há muito que você possa fazer para torná-lo mais rápido. Pequenos projetos Python que possuem, digamos, cem testes de unidade, levam pelo menos um segundo para serem executados em um servidor médio, mas geralmente muito mais tempo. Para um aplicativo C #, a média será de quatro a cinco segundos, devido ao tempo de compilação.
A partir desse ponto, você pode pagar US $ 10.000 extras por um servidor melhor, o que reduzirá o tempo, mas não muito, ou executará testes em vários servidores, o que só tornará as coisas mais lentas.
Ambos pagam bem quando você tem milhares de testes (bem como testes funcionais, de sistema e de integração), permitindo executá-los em questão de minutos em vez de semanas, mas isso não ajudará em projetos de pequena escala.
Em vez disso, o que você pode fazer é:
Incentive os desenvolvedores a executar testes fortemente relacionados ao código modificado localmente antes de realizar uma confirmação. Eles possivelmente não podem executar milhares de testes de unidade, mas podem executar cinco a dez deles.
Certifique-se de que encontrar testes relevantes e executá-los seja realmente fácil (e rápido). O Visual Studio, por exemplo, é capaz de detectar quais testes podem ser afetados por alterações feitas desde a última execução. Outros IDEs / plataformas / idiomas / estruturas podem ter funcionalidade semelhante.
Mantenha o commit o mais rápido possível. A aplicação de regras de estilo é aceitável, porque geralmente é o único lugar para fazê-lo e porque essas verificações são incrivelmente rápidas. Fazer análises estáticas é bom assim que fica rápido, o que raramente é o caso. A execução de testes de unidade não está OK.
Execute testes de unidade no servidor de integração contínua.
Certifique-se de que os desenvolvedores sejam informados automaticamente quando eles quebraram a compilação (ou quando os testes de unidade falharam, o que é praticamente a mesma coisa se você considerar um compilador como uma ferramenta que verifica alguns dos possíveis erros que você pode introduzir no seu código).
Por exemplo, ir a uma página da web para verificar as últimas versões não é uma solução. Eles devem ser informados automaticamente . Mostrar um pop-up ou enviar um SMS são dois exemplos de como eles podem ser informados.
Certifique-se de que os desenvolvedores entendam que não é bom interromper a compilação (ou falhar nos testes de regressão) e que, assim que isso acontecer, a principal prioridade será corrigi-la. Não importa se eles estão trabalhando em um recurso de alta prioridade que seu chefe pediu para enviar amanhã: eles falharam na construção, eles deveriam corrigi-la.
Segurança
O servidor que hospeda o repositório não deve executar código personalizado, como testes de unidade, especialmente por motivos de segurança. Esses motivos já foram explicados no CI runner no mesmo servidor do GitLab?
Se, por outro lado, sua idéia for iniciar um processo no servidor de compilação a partir do gancho de pré-confirmação, ele diminuirá ainda mais a confirmação.