Pular para o conteúdo

ADR-0016 · Versão única para todo o monorepo

Status: aceito (23/10/2026) — entregue na versão 2.2.0.

Cada package.json tinha uma versão própria, e quase nenhuma mudava: o web estava em 0.0.0, a API em 0.0.1, vários pacotes em 0.0.0, enquanto o CHANGELOG.md registrava 2.0.1 e o package.json da raiz, 1.1.0. Não dava para dizer qual versão estava em produção nem a qual entrada do changelog ela correspondia. Os pacotes do workspace não são publicados no npm; só existem dentro deste repositório.

  1. Uma versão para tudo (lockstep): raiz, apps/*, packages/* e config/* usam o mesmo número, que é a versão da plataforma.
  2. SemVer a partir da mensagem de commit: major para !/BREAKING CHANGE, minor para feat/chore, patch para fix, docs, refactor, style.
  3. scripts/sync-versions.mjs propaga a versão da raiz para todos os workspaces; pnpm release:bump-version incrementa, sincroniza, faz o commit chore(release): X.Y.Z e cria a tag vX.Y.Z.
  4. pnpm versions:check falha se algum workspace divergir — pensado para o CI.
  5. Cada versão tem uma página no Changelog da documentação, com o ganho de cada mudança, além da entrada no CHANGELOG.md.
  • Versões independentes com Changesets. Faz sentido para pacotes publicados no npm; aqui só adicionaria cerimônia, porque os pacotes são consumidos sempre na versão do próprio repositório (workspace:*).
  • ➕ A versão em produção identifica exatamente o código de todos os apps.
  • ➕ Uma entrada de changelog por release, sem combinar versões de pacotes.
  • ➖ Pacotes que não mudaram também sobem de versão; para o uso interno, isso não tem custo.
Desenvolvido e documentado por
Nós Tecnologia · Desenvolvimento Criativo