O CircleCI é uma ferramenta muito simples que está bem configurada como supervisor dos nossos projectos. Mas será que a configuração em si é simples? Isto, claro, depende da complexidade do projeto. No nosso caso (mono repo) acabou por ser mais difícil do que o esperado.
A configuração para Rubi sobre Carris projectos não é complicado, e o documentação descreve com exatidão cada elemento do config.yml. No entanto, eu gostaria de focar nas ferramentas circleci que são usadas para ajudar nós manter o código limpar e garantir boas práticas.
É provável que o RuboCope não precise de introdução, no entanto, para aqueles que não estão familiarizados com ele, é um analisador e formatador de código Ruby estático. Se você já usa rubocop no seu projetobasta adicionar CircleCI ao ficheiro de configuração:
O ESLint é uma ferramenta para identificar e comunicar padrões encontrados no ECMAScript ou no JavaScript para tornar o código mais coerente e evitar erros.
No RSpec, os testes não são apenas scripts que verificam o código da aplicação, são também explicações detalhadas de como a aplicação se deve comportar, expressas em inglês simples:
No caso do RSpec, salvamos o resultado do teste em um catálogo criado anteriormente /tmp/test-results no arquivo rspec.xml e, em seguida, usando o lojatesteresultados armazenamos um determinado catálogo. Agora, o separador Informações dá-nos acesso a informações como o tempo médio de compilação, a hora da última compilação ou a taxa de sucesso. Pode ler mais sobre o separador Informações aqui. Se quisermos armazenar o ficheiro rspec.xml como um "artefacto", temos de adicionar a opção armazenar_artifactos no nosso ficheiro de configuração.
O Brakeman é uma ferramenta de análise estática que verifica Ruby on Rails aplicações para vulnerabilidades de segurança. Por padrão, o Brakeman retornará um código de saída diferente de zero se forem detectados avisos de segurança ou se forem encontrados erros de verificação. Por isso, concentramo-nos apenas nos erros críticos e os avisos foram desactivados.
Se também quisermos armazenar o resultado da verificação da mesma forma que o RSpec, a nossa configuração será semelhante a esta e teremos acesso ao nosso ficheiro no separador Artefactos.
RubyCritic é uma gem que usa gems para análise estática, como Reek, Flay e Flog, para fornecer um relatório sobre a qualidade do seu código. O relatório contém uma classificação A / B / C / D / F, todos os ficheiros do nosso projeto que queremos que sejam analisados e os locais exactos que precisam de ser melhorados, e documentação com cada alerta (ex: DemasiadosMétodos). Esta ferramenta funciona como um consultor no projeto. Com base no relatório recebido, a decisão final sobre se o nosso código precisa efetivamente de ser corrigido depende do programador. Na nossa configuração do circleci, é atribuído um trabalho separado que é responsável pela preparação do relatório e pelo envio de um comentário especial com o resultado no github.
A configuração básica do rubycritic não é diferente das anteriores.
Como padrão, percorremos o pacote com informações sobre qual diretório queremos escanear ./app, em que lugar queremos salvar o resultado -p /tmp/rubycritic (o rubycritic cria automaticamente um diretório no qual armazenaremos nosso relatório), em que formato -f json e a opção -no- browser. Também usamos a gem circleci-coverage_reporterque, após a verificação, coloca um comentário no github no nosso pull request com um link para o relatório e uma classificação percentual dos ficheiros verificados.
Para que a gem acima funcione corretamente em conjunto com circleci, temos de a adicionar ao nosso projeto e gerar duas chaves (uma delas é circleci, a segunda é github).
Instalação standard:
Ficheiro Gemfile gem 'circleci-coverage_reporter'
Rakefile require 'circleci/coverage_reporter/rake_task' if ENV['CIRCLECI']
Secção "definições" do nosso projeto. Depois de selecionar "Create Token", altere o âmbito para "all" e preencha a etiqueta do Token. O token para a API será gerado depois de clicar em
COVERAGE_REPORTER_VCS_TOKEN
Âmbito da chave para o repositório
Depois de gerar as chaves, temos de as adicionar às nossas variáveis de ambiente em Definições: