Integração Contínua (CI)#
A Integração Contínua (CI) é um aspeto essencial do desenvolvimento de software que envolve integrar alterações e testá-las automaticamente. A CI permite-nos manter código de alta qualidade, detetando problemas atempada e frequentemente ao longo do processo de desenvolvimento. Na Ultralytics, utilizamos vários testes de CI para garantir a qualidade e a integridade da nossa base de código.
Ações de CI#
Aqui fica uma breve descrição das nossas ações de CI:
- CI: Este é o nosso principal teste de CI, que envolve a execução de testes unitários, verificações de linting e, por vezes, testes mais abrangentes, dependendo do repositório.
- Implementação com Docker: Este teste verifica a implementação do projeto utilizando Docker, para garantir que o Dockerfile e os scripts relacionados funcionam corretamente.
- Ligações quebradas: Este teste analisa a base de código em busca de ligações quebradas ou inativas nos nossos ficheiros Markdown ou HTML.
- CodeQL: O CodeQL é uma ferramenta do GitHub que realiza uma análise semântica do nosso código, ajudando a encontrar potenciais vulnerabilidades de segurança e a manter código de alta qualidade.
- Publicação no PyPI: Este teste verifica se o projeto pode ser empacotado e publicado no PyPI sem erros.
Resultados da CI#
A tabela abaixo mostra o estado destes testes de CI nos nossos principais repositórios:
| Repositório | CI | Implementação com Docker | Ligações quebradas | CodeQL | Publicação no PyPI e da documentação |
|---|---|---|---|---|---|
| yolov3 | |||||
| yolov5 | |||||
| ultralytics | |||||
| sdk | |||||
| yolo-ios-app | |||||
| yolo-flutter-app | |||||
| thop | |||||
| actions | |||||
| mkdocs | |||||
| docs | |||||
| handbook | |||||
| stars | |||||
| CLIP |
Cada distintivo mostra o estado da última execução do teste de CI correspondente no ramo main do respetivo repositório. Se um teste falhar, o distintivo mostrará o estado "a falhar"; se passar, mostrará o estado "aprovado".
Se reparares que um teste está a falhar, seria uma grande ajuda se o reportasses através de um issue no GitHub do respetivo repositório.
Lembra-te de que um teste de CI bem-sucedido não significa que tudo esteja perfeito. Recomenda-se sempre rever manualmente o código antes de implementar ou integrar alterações.
Cobertura de código#
A cobertura de código é uma métrica que representa a percentagem da tua base de código executada durante a execução dos testes. Fornece informações sobre o grau de cobertura do teu código pelos testes e pode ser crucial para identificar partes da aplicação que não foram testadas. Uma percentagem elevada de cobertura de código está frequentemente associada a uma menor probabilidade de erros. No entanto, é essencial compreender que a cobertura de código não garante a ausência de defeitos. Indica apenas quais as partes do código que foram executadas pelos testes.
Integração com o codecov.io#
Na Ultralytics, integrámos os nossos repositórios com o codecov.io, uma plataforma online popular para medir e visualizar a cobertura de código. O Codecov fornece informações detalhadas, comparações de cobertura entre commits e sobreposições visuais diretamente no teu código, indicando quais as linhas abrangidas.
Ao integrar o Codecov, pretendemos manter e melhorar a qualidade do nosso código, concentrando-nos nas áreas que podem ser propensas a erros ou necessitar de mais testes.
Resultados da cobertura#
Para obter rapidamente uma visão geral do estado da cobertura de código dos nossos repositórios, incluímos distintivos do Codecov e pré-visualizações sunburst para cada projeto monitorizado. O círculo mais interior de cada sunburst representa o projeto inteiro; afastando-nos do centro, seguem-se as pastas e, por fim, um único ficheiro. O tamanho e a cor de cada fatia representam, respetivamente, o número de instruções e a cobertura. Para obter todos os detalhes, visita a organização Ultralytics no Codecov.
| Repositório | Cobertura de código | Sunburst |
|---|---|---|
| actions | ||
| ultralytics | ||
| inference | ||
| yolo-flutter-app | ||
| yolo-ios-app | ||
| llm | ||
| profile | ||
| template | ||
| template-rust | ||
| replicate |
Perguntas frequentes#
A Integração Contínua (CI) na Ultralytics envolve a integração e o teste automáticos de alterações de código para garantir padrões de alta qualidade. A nossa configuração de CI inclui a execução de testes unitários, verificações de linting e testes abrangentes. Além disso, realizamos a implementação com Docker, verificações de ligações quebradas, análise CodeQL para detetar vulnerabilidades de segurança e publicação no PyPI para empacotar e distribuir o nosso software.
A Ultralytics utiliza uma ação de CI específica para verificar ligações quebradas nos nossos ficheiros Markdown e HTML. Isto ajuda a manter a integridade da nossa documentação, analisando e identificando ligações inativas ou quebradas e garantindo que os utilizadores têm sempre acesso a recursos corretos e ativos.
A análise CodeQL é crucial para a Ultralytics, pois realiza uma análise semântica do código para encontrar potenciais vulnerabilidades de segurança e manter padrões de alta qualidade. Com o CodeQL, podemos identificar e mitigar proativamente os riscos no nosso código, ajudando-nos a fornecer soluções de software robustas e seguras.
A Ultralytics utiliza o Docker para validar a implementação dos nossos projetos através de uma ação de CI dedicada. Este processo garante que o nosso Dockerfile e os scripts associados funcionam corretamente, permitindo ambientes de implementação consistentes e reproduzíveis, essenciais para soluções de IA escaláveis e fiáveis.
A publicação automatizada no PyPI garante que os nossos projetos podem ser empacotados e publicados sem erros. Este passo é essencial para distribuir os pacotes Python da Ultralytics, permitindo aos utilizadores instalar e utilizar facilmente as nossas ferramentas através do Python Package Index (PyPI).
A Ultralytics mede a cobertura de código através da integração com o Codecov, fornecendo informações sobre a proporção da base de código executada durante os testes. Uma cobertura de código elevada pode indicar código bem testado, ajudando a revelar áreas não testadas que podem ser propensas a erros. As métricas detalhadas de cobertura de código podem ser consultadas através dos distintivos apresentados nos nossos principais repositórios ou diretamente no Codecov.