Skip to content

Arquitetura da Pipeline

Objetivo

O objetivo principal desta pipeline é automatizar as requisições para a API do Portal Nacional de Contratações Públicas (PNCP), a manipulação dos dados coletados, as requisições para a API de dados das empresas envolvidas, e a automação dos testes. A pipeline foi projetada para executar uma série de etapas que garantem a coleta eficiente dos dados, o tratamento de erros, e o processamento dessas informações de forma organizada e manipulável. Além disso, a pipeline incorpora práticas de CI/CD para assegurar a qualidade do código e a automação do deploy da documentação.

Estrutura da Pipeline

1. Coleta de Dados do PNCP

A coleta dos dados do PNCP é realizada por meio de uma série de workflows, configurados para serem acionados mensalmente por uma escala cron. Devido à limitação de tempo de execução do GitHub Actions (máximo de 6 horas por workflow), a coleta foi dividida por anos para otimizar o processo e evitar interrupções.

Workflows:

  • 1contratos21_22.yml: Coleta dados referentes aos contratos dos anos de 2021 e 2022.
  • 2contratos22_23.yml: Coleta dados referentes aos contratos de 2022 a 2023.
  • 3contratos23_24_1.yml: Primeira parte da coleta dos dados de 2023 a 2024.
  • 4contratos23_24_2.yml: Segunda parte da coleta dos dados de 2023 a 2024.
  • 5contratos24_25.yml: Coleta dados referentes aos contratos de 2024 a 2025.
  • 6contratos25_26.yml: Coleta dados referentes aos contratos de 2025 a 2026.

2. Tratamento de Erros na Coleta

Após a conclusão dos workflows de coleta, um workflow adicional é acionado para tratar possíveis erros ocorridos durante as requisições à API do PNCP. Os erros são registrados em um arquivo de log e novas tentativas de requisição são feitas para corrigir os problemas.

Workflow:

  • 7contratos_erro.yml: Reprocessa as requisições que retornaram erro, e ao final, abre uma issue automática no GitHub para notificar os colaboradores sobre a necessidade de revisão do arquivo atualizado.

3. Revisão e Atualização do Arquivo Principal

Após a revisão do arquivo de erro pelos colaboradores, o próximo workflow é acionado manualmente para atualizar o arquivo principal com os dados corrigidos.

Workflow:

  • 8atualizar_principal.yml: Atualiza o arquivo principal com os dados coletados e corrigidos.

4. Processamento de Dados de Empresas

Com o arquivo principal atualizado, um novo workflow é acionado para filtrar os dados e gerar um arquivo mais simples e manipulável.

Workflow:

  • 9empresa.yml: Filtra os dados e gera um arquivo consolidado das empresas envolvidas nos contratos.

5. Requisição de Dados Complementares

Para enriquecer o conjunto de dados, um workflow adicional faz requisições a uma API aberta para obter informações detalhadas sobre as empresas envolvidas.

Workflow:

  • 10cnpj.yml: Faz requisições para obter dados adicionais das empresas utilizando o CNPJ.

6. Ordenação e Consolidação dos Dados

O último passo do processo dos dados é a ordenação dos dados coletados e sua consolidação em um arquivo final.

Workflow:

  • 11ordenacao.yml: Ordena e consolida todas as informações coletadas em um único arquivo.

Workflows de Suporte

Além dos workflows principais para coleta e processamento dos dados, a pipeline inclui workflows adicionais para garantir a qualidade do código e o deploy da documentação.

1. Linter e Testes Automatizados

Sempre que há um pull request, dois workflows são acionados para verificar a qualidade do código e executar testes automatizados.

Workflows:

  • linter.yml: Executa verificações estáticas de qualidade de código.
  • pipeline.yml: Executa testes automatizados para garantir o funcionamento correto do código.

2. Deploy da Documentação

Sempre que há uma mudança nos arquivos da documentação que estão na pasta docs, o workflow de deploy é acionado para atualizar a documentação do projeto hospedada no GitHub Pages.

Workflow:

  • ci.yml: Faz o deploy automático da página de documentação no GitHub Pages.

Considerações Finais

Todos os workflows podem ser acionados manualmente, permitindo maior flexibilidade e controle pelos colaboradores do projeto. Essa arquitetura permite uma automação robusta, eficiente e monitorada, garantindo que os dados do PNCP sejam coletados, tratados e disponibilizados de forma correta e em tempo hábil.

A pipeline está estruturada para lidar com as limitações impostas pela API do PNCP e pelo GitHub Actions, garantindo a integridade e a qualidade dos dados ao longo de todo o processo.