Skip to content
Latchkey

O Que É um Monorepo?

Um monorepo é um único repositório que abriga muitos projetos ou serviços juntos, compartilhando um histórico e um único lugar para coordenar mudanças.

Um monorepo coloca múltiplos projetos, bibliotecas e serviços em um repositório em vez de espalhá-los por muitos. Ele facilita mudanças transversais e o compartilhamento de código, mas também exige um ferramental mais inteligente, especialmente no CI, para que uma mudança em um canto não reconstrua tudo.

O que é um monorepo

Em um monorepo, vários projetos distintos vivem sob um repositório, frequentemente em diretórios separados. Eles compartilham um histórico de commits, um conjunto de branches e um lugar para issues e reviews. As empresas adotam monorepos para tornar o compartilhamento de código e as mudanças atômicas entre projetos diretos.

Benefícios e desafios

A vantagem é o versionamento unificado, a refatoração fácil através de fronteiras e o ferramental compartilhado. O desafio é a escala: o repositório cresce muito, e um CI ingênuo construiria e testaria tudo a cada mudança. Monorepos eficazes dependem de um ferramental que entenda as fronteiras dos projetos.

Construindo apenas o que mudou

A técnica-chave de CI é detectar quais arquivos mudaram e rodar apenas os projetos afetados. Filtros de caminho limitam um workflow a um diretório para que mudanças não relacionadas não o disparem.

Path-filtered workflow trigger
on:
  push:
    paths:
      - "services/api/**"

Monorepos em CI/CD

Sem cuidado, os pipelines de monorepo se tornam lentos e caros à medida que cada commit se espalha por todos os projetos. Filtros de caminho, detecção de mudanças e cache de build mantêm as execuções proporcionais ao que realmente mudou. Runners gerenciados que escalam a concorrência ajudam aqui, já que um monorepo pode disparar muitos jobs independentes de uma vez.

Dicas de CI para monorepo

  • Use filtros de caminho para que workflows rodem apenas para os projetos afetados.
  • Faça cache de builds e dependências para evitar trabalho redundante.
  • Paralelize jobs de projetos independentes para feedback mais rápido.
  • Mantenha o histórico raso no CI para acelerar checkouts de um repositório grande.

Principais conclusões

  • Um monorepo abriga muitos projetos em um repositório e histórico.
  • Ele facilita o compartilhamento e a refatoração, mas exige um ferramental de CI inteligente.
  • Filtros de caminho e cache mantêm os pipelines proporcionais às mudanças.

Guias relacionados